Pagina 1 di 1
Audio: play & rec simultanei in una shell (sox?) [risolto]
Inviato: sab 21 mar 2009, 15:15
da zoros
Ciao a tutti,
stavo cercando una soluzione semplice per realizzare uno strumentino che utilizza la scheda audio ... lo strumento dovrebbe inviare in uscita una nota audio e contemporaneamente registrare il segnale proveniente da un'altra fonte (attraverso l'ingresso MIC o AUX) ... la cosa più carina sarebbe utilizzare programmi di uso comune, magari richiamati in una shell ...
ho fatto delle prove con sox, ma sembra che non mi permetta di usare la scheda audio in full-duplex, cioè:
genero facilmente una nota in uscita sugli altoparlanti:
Codice: Seleziona tutto
sox -t nul /dev/null -t ossdsp /dev/dsp synth 1 sine 600
e registro l'audio proveniente dal microfono:
se metto insieme i due comandi registro la nota generata e non il segnale proveniente dal microfono ...
probabilmente usando solo sox non è possibile realizzare quanto premesso ... preferirei rimanere in ambito shell (cioè trovare un semplice script), comunque anche un programma in C, fpc-Pascal, ecc., purché semplice, mi potrebbe andar bene ...
Audio: play & rec simultanei in una shell (sox?) [risolto]
Inviato: mer 25 mar 2009, 16:01
da zoros
Facendo un po' la parte di chi "se la conta e se la dice", direi che il mio problema è risolto ... il play con sox non inibisce la simultanea registrazione da /dev/dsp, bisognava settare la scheda audio (ci avevo provato con kmix, ma senza risultato ... troppi bottoni sulla nVidia CK804) ... comunque, messo in kmix ChMode:2ch e capture collegato al mic, si lavora in full duplex ... lo script che cercavo è il seguente:
Codice: Seleziona tutto
#!/bin/sh
# sweep.sh - tone generator and audio recorder
FREQ=100
SALT=100
TIME=0.9
while [ $FREQ -le 900 ]
do
sox -t nul /dev/null -t ossdsp /dev/dsp synth $TIME sine $FREQ &
dd if=/dev/dsp of=dsp-$FREQ.bin bs=1 count=8000
let FREQ=$FREQ+$SALT
done
cat dsp-*.bin > all-dsp-record.bin
rm -f dsp-*.bin
genera una serie di note a distanza di 1 secondo e contemporaneamente registra da una fonte esterna ... notare che la nota generata in background con sox dura 0.9 secondi mentre con il dd registro 8000 bytes (cioè 1 secondo, stando alla velocità di campionamento di default) ...
sarebbe interessante adesso sapere come si fa ad impostare la velocità di campionamento della scheda audio da linea di comando ...
Re: Audio: play & rec simultanei in una shell (sox?) [risolto]
Inviato: gio 9 apr 2009, 13:35
da sixjan
zoros ha scritto:Facendo un po' la parte di chi "se la conta e se la dice", direi che il mio problema è risolto ... il play con sox non inibisce la simultanea registrazione da /dev/dsp, bisognava settare la scheda audio (ci avevo provato con kmix, ma senza risultato ... troppi bottoni sulla nVidia CK804) ... comunque, messo in kmix ChMode:2ch e capture collegato al mic, si lavora in full duplex ... lo script che cercavo è il seguente:
Codice: Seleziona tutto
#!/bin/sh
# sweep.sh - tone generator and audio recorder
FREQ=100
SALT=100
TIME=0.9
while [ $FREQ -le 900 ]
do
sox -t nul /dev/null -t ossdsp /dev/dsp synth $TIME sine $FREQ &
dd if=/dev/dsp of=dsp-$FREQ.bin bs=1 count=8000
let FREQ=$FREQ+$SALT
done
cat dsp-*.bin > all-dsp-record.bin
rm -f dsp-*.bin
genera una serie di note a distanza di 1 secondo e contemporaneamente registra da una fonte esterna ... notare che la nota generata in background con sox dura 0.9 secondi mentre con il dd registro 8000 bytes (cioè 1 secondo, stando alla velocità di campionamento di default) ...
sarebbe interessante adesso sapere come si fa ad impostare la velocità di campionamento della scheda audio da linea di comando ...
Ciao. Ti sei dimenticato una 'l': 'sox -t nul'. Utile correggerlo per altri utenti. Saluti.
Re: Audio: play & rec simultanei in una shell (sox?) [risolto]
Inviato: sab 11 apr 2009, 13:58
da zoros
sixjan ha scritto:
Ciao. Ti sei dimenticato una 'l': 'sox -t nul'. Utile correggerlo per altri utenti. Saluti.
Ciao,
se ti riferisci alla linea:
Codice: Seleziona tutto
sox -t nul /dev/null -t ossdsp /dev/dsp synth $TIME sine $FREQ
questa è corretta, stranamente lo switch "-t" accetta "nul" e non "null" ... provare per credere, comunque potremmo avere versioni di sox che si comportano diversamente, eventualmente segnalalo qui ... la versione che ho usato:
Re: Audio: play & rec simultanei in una shell (sox?) [risolto]
Inviato: ven 17 apr 2009, 10:45
da sixjan
Sì, io ho la versione inclusa in Slackware 12.2:
sox: SoX v14.1.0
Se do l'argomento "nul" all'opzione "-t" ricevo un errore:
sox formats: no handler for given file type `nul'
A quanto pare è una questione di versioni differenti. Ciao.
Re: Audio: play & rec simultanei in una shell (sox?) [risolto]
Inviato: sab 18 apr 2009, 18:56
da zoros
sixjan ha scritto:Sì, io ho la versione inclusa in Slackware 12.2:
sox: SoX v14.1.0
Se do l'argomento "nul" all'opzione "-t" ricevo un errore:
sox formats: no handler for given file type `nul'
A quanto pare è una questione di versioni differenti. Ciao.
Hai fatto molto bene allora ad evidenziare la questione ... purtroppo è una cosa neanche troppo sporadica, per non parlare poi delle differenze tai i vari sh,csh,bash (e dei bugs ivi contenuti) ... chiaramente cose del genere rischiano di invalidare anche script complessi e ben progettati ... non bene, direi ...