• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Script mit interaktivem Programm (ecasound)

huby

Member
Hi,

ich bastel grad an einem Script, das das mit Hilfe von kdialog und ecasound sound aufnehmen soll.

Dazu würde ich ecasound gerne im interaktiven modus laufen lassen, um individueller reagieren zu können.
Kdialog fragt dann einfach nach - Pause, Aufnahme fortsetzen, Aufnahme beenden.

Hatte das jetzt mal so versucht:
Code:
if  kdialog --yesno "         Aufnahme starten          " --title "Aufnahme starten" --yes-label "Aufnehmen" --no-label "Abbruch"; then
	eca=`ecasound -c -i alsahw -o "$pfad" &`
	echo "t"|$eca
else
	exit
fi

#kdialog --yesno "         Aufnahme läuft          " --title "Aufnahme läuft" --yes-label "Pause" --no-label "Beenden"

weiter=1
ac="läuft"
yl="Pause"

while  [ $weiter -gt 0 ]
do
	let ungerade=$weiter%2
	if [ $ungerade -eq 1 ]; then
		ac="läuft"
		yl="Pause"
		pa=""
		eca_opt=""
	else
		ac="fortsetzen"
		yl="Aufnahme fortsetzen"
		pa="         ACHTUNG PAUSE\n"
		eca_opt=""
	fi
	if kdialog --yesno "$pa         Aufnahme $ac          " --title "Aufnahme $ac" --yes-label "$yl" --no-label "Aufnahme Beenden"; then
		let weiter=$weiter+1
		echo "t"|$eca
	else
		weiter=0
		echo "s"|$eca
		echo "q"|$eca
	fi
done

funktioniert leider nicht :(

wie sprech ich mit ecasound im interaktiven Modus aus dem Script heraus?

Bin für jeden Tipp dankbar...

huby
 

spoensche

Moderator
Teammitglied
http://www.eca.cx/ecasound/Documentation/programmers_guide/html_ecidoc/eci_doc.html findest du Beispiele zur Steurung per Script.
 
OP
H

huby

Member
Hallo spoensche,

Danke für den Link!
Leider werden hier nur Beispiele für andere Scriptsprachen gezeigt, nicht wie man das in einem bash Script verwenden müßte.
Kannst du mir dazu noch Tipps geben?

Wie könnte man zB den Befehl
Code:
ecasound -c -i alsahw -o testfile.mp3
aus dem Script so starten?
Wie könnte man mehrmals ein "t" für Pause bzw. Aufnahme fortsetzen an ecasound übermitteln, und schließlich mit "s" und "q" beenden?

Bin für jeden Tipp dankbar...

Hab inzwischen auch schon mit screen rumprobiert.
Konnte zwar mit
Code:
screen -dmS eca ecasound -c -i alsahw -o testfile.mp3
ecasound starten und auch mit
Code:
screen -S eca -x
mit dem screen verbinden, aber wie komm ich da scriptgesteuert wieder raus? Kann ja im Script keine Steuerungstaste drücken.
Mit [Strg]+[a]+[d] kann man das screen wieder verlassen.
Hab auch versucht mit
Code:
echo "t"|screen -S eca -x
die entsprechenden Befehle an das screen zu übergeben, was das verlassen mit [Strg]+[a]+[d] umgehen würde, leider auch ohne Erfolg.

Hat noch jemand eine Idee?
 

spoensche

Moderator
Teammitglied
Die Default Key Bindings für Screen findest du in der man Page.Naja also wenn ich das richtig gesehen habe ist es mit der Bash nicht möglich,
 
OP
H

huby

Member
Hallo spoensche,

Danke für Deine Mühe, habs inzwischen ohne den interaktiven Modus gelöst.
Ist etwas umständlicher, aber funktioniert.

So kann ich halt nicht gleich eine mp3 Datei erzeugen sondern muß erst einzelne waves erzeugen, diese dann zu einer zusammnefassen und dann in mp3 umwandeln. Dauert dann nach Beendigung einer 30 min. Aufnahme schon ca. 2 min. bis die mp3 fertig ist.
Damit muß ich wohl fürs erste Leben, aber es funktioniert immerhin.

Viele Dank nochmal

huby
 
OP
H

huby

Member
Ok, so sieht meine Lösungs aus.
Ist zwar keine wirkliche Lösung, da ecasound ja nicht wie im Titel angegeben, im interaktiven Modus verwendet werden kann.
Ist also nur so eine Art Notlösung.
Code:
#überprüfen ob das temporäre Verzeichnis der letzten Aufnahme noch existiert, wenn ja löschen
eca_pfad="/data/$user/.eca_dir"
if  test -a "$eca_pfad"; then
	rm -rf "$eca_pfad"
fi

#temporäres Verzeichnis für die Aufnahmen neu anlegen
mkdir "$eca_pfad"

# Pfad und Dateinahme der endgültigen mp3 Datei
pfad="/data/$user/Musik/mp3/$vers/$jahr/$monat/$dat_nam"

# Aufnahme starten
if  kdialog --yesno "         Aufnahme starten          " --title "Aufnahme starten" --yes-label "Aufnehmen" --no-label "Abbruch"; then
	echo -n ""
	ecasound -q -i alsahw -o "$eca_pfad/1.wav" &
	wav_arr=""
	wav_t=`date +%s`
else
	exit
fi

weiter=1
ac="läuft"
yl="Pause"
wav_t_arr=""

# Pause, Aufnahme fortsetzen oder Aufnahme beenden, nach jeder Pause und Aufnahme fortstzen wird eine neue wav Datei in $eca_pfad erzeugt
while  [ $weiter -gt 0 ]
do
	let ungerade=$weiter%2
	if [ $ungerade -eq 1 ]; then
		ac="läuft"
		yl="Pause"
		pa=""
	else
		ac="fortsetzen"
		yl="Aufnahme fortsetzen"
		pa="         ACHTUNG PAUSE\n"
	fi

	if kdialog --yesno "$pa         Aufnahme $ac          " --title "Aufnahme $ac" --yes-label "$yl" --no-label "Aufnahme Beenden"; then
		if [ $ungerade -ne 1 ]; then
			ecasound -q -i alsahw -o "$eca_pfad/$weiter.wav" &
			wav_arr="$wav_arr $weiter.wav"
			wav_t=`date +%s`
		else
			killall ecasound
			wav_t2=`date +%s`
			let track_time=$wav_t2-$wav_t
			wav_t_arr="$wav_t_arr $track_time"

		fi
		let weiter=$weiter+1
	else
		if [ $ungerade -eq 1 ]; then
			killall ecasound
			wav_t2=`date +%s`
			let track_time=$wav_t2-$wav_t
			wav_t_arr="$wav_t_arr $track_time"
		fi
		weiter=0
	fi
done


# Hinweis für 20 sek., dass die mp3 noch nicht fertig ist
kdialog   --passivepopup "Aufnahme wird fertig gestellt

Bitte warten bis Meldung erscheint" 20

i=1
y=0

# wav Dateien zu einer zusammenbauen
for j in $wav_arr
do
	tt=`echo $wav_t_arr|$awk -vi=$i '{ print $i; }'`
	let y=$y+$tt+1
	ecasound -q -i $eca_pfad/$j -o $eca_pfad/1.wav -y:$y
	let i=$i+1
done

# die komplette wav Datei in mp3 umwandeln und richtigem Pfad speichern
ecasound -q -i $eca_pfad/1.wav -o $pfad

# temporären Pfad für Aufnahmedateien wieder löschen
rm -rf "$eca_pfad"

# Variablen für mp3tags in latin1 codierung umwandeln
redner="`echo -n "$redner"|iconv -t ISO-8859-1 -f UTF-8`"
vers="`echo -n "$vers"|iconv -t ISO-8859-1 -f UTF-8`"
vortrag="`echo -n "$vortrag"|iconv -t ISO-8859-1 -f UTF-8`"
monat="`echo -n "$monat"|iconv -t ISO-8859-1 -f UTF-8`"
tag=`date +%e`

# mp3tags speichern mit id3v2
id3v2 -a "$redner" -A "$vers" --TPE2 "$vers" -t "$vortrag" -y "$jahr" -c "$tag. $monat $jahr" $pfad

# Hinweis, dass die mp3 jetzt fertig ist
kdialog   --msgbox "Aufnahme-Datei ist fertig!"

exit

Vielleicht kommen ja noch Verbesserungsvorschläge ;)

Toll wär es halt, wenn man ecasound interaktiv verwenden könnte, dann könnte man sich den Umweg mit den wav Dateien, die dann zu einer zusammengebaut und dann noch als mp3 codiert werden müssen, sparen und hätte gleich, ohne Wartezeit, die fertige mp3.

bis dann

huby
 
Oben