Audio: play & rec simultanei in una shell (sox?) [risolto]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
zoros
Linux 4.x
Linux 4.x
Messaggi: 1362
Iscritto il: lun 28 mag 2007, 22:51
Nome Cognome: Fabio`Zorba`
Slackware: 15.0
Kernel: 5.15.19smp
Desktop: Trinity R14.0.11
Località: Gorizia

Audio: play & rec simultanei in una shell (sox?) [risolto]

Messaggio 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:

Codice: Seleziona tutto

sox -t ossdsp /dev/dsp waveout.wav
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 ...
Ultima modifica di zoros il mer 25 mar 2009, 17:08, modificato 1 volta in totale.
vorrei riavere le mie firme ...

Avatar utente
zoros
Linux 4.x
Linux 4.x
Messaggi: 1362
Iscritto il: lun 28 mag 2007, 22:51
Nome Cognome: Fabio`Zorba`
Slackware: 15.0
Kernel: 5.15.19smp
Desktop: Trinity R14.0.11
Località: Gorizia

Audio: play & rec simultanei in una shell (sox?) [risolto]

Messaggio 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 ...
vorrei riavere le mie firme ...

sixjan
Linux 2.x
Linux 2.x
Messaggi: 413
Iscritto il: dom 6 gen 2008, 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: Audio: play & rec simultanei in una shell (sox?) [risolto]

Messaggio 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.

Avatar utente
zoros
Linux 4.x
Linux 4.x
Messaggi: 1362
Iscritto il: lun 28 mag 2007, 22:51
Nome Cognome: Fabio`Zorba`
Slackware: 15.0
Kernel: 5.15.19smp
Desktop: Trinity R14.0.11
Località: Gorizia

Re: Audio: play & rec simultanei in una shell (sox?) [risolto]

Messaggio 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:

Codice: Seleziona tutto

sox -V
sox: Version 12.18.1
vorrei riavere le mie firme ...

sixjan
Linux 2.x
Linux 2.x
Messaggi: 413
Iscritto il: dom 6 gen 2008, 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: Audio: play & rec simultanei in una shell (sox?) [risolto]

Messaggio 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.

Avatar utente
zoros
Linux 4.x
Linux 4.x
Messaggi: 1362
Iscritto il: lun 28 mag 2007, 22:51
Nome Cognome: Fabio`Zorba`
Slackware: 15.0
Kernel: 5.15.19smp
Desktop: Trinity R14.0.11
Località: Gorizia

Re: Audio: play & rec simultanei in una shell (sox?) [risolto]

Messaggio 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 ...
vorrei riavere le mie firme ...

Rispondi