"Generatore di suoni" stereo per Linux?


14

Esiste qualcosa come un generatore di suoni stereo (canale sinistro e destro separato) per Linux? Dove è possibile impostare il volume e il tono / tono per ciascun canale e, preferibilmente, anche impostare la forma d'onda (seno, quadrato, dente di sega, ...) e invertire un canale (rispetto all'altro).

In caso contrario, qualche idea per un buon posto dove iniziare a crearne uno? Immagino che il più semplice sarebbe quello di adattare i programmi esistenti come i sintetizzatori ... Ma se funziona male, ci sono delle librerie (come SDL?) Che possono essere usate come basi per un tale programma?


Potresti riuscire a farlo con Sox.
Renan,

Risposte:


15

Sembra che tu stia cercando Audacity, un editor audio open source multipiattaforma. Una delle sue caratteristiche è quella di consentire di generare toni. È un editor audio multi-traccia, quindi puoi facilmente creare un tono stereo.

Nel Generatemenu, è possibile creare toni di forma d'onda sinusoidale, a dente di sega e quadrato di frequenza, ampiezza e lunghezza arbitrarie senza la necessità di registrare o di richiedere file di input aggiuntivi.


Ma può generare toni "dal nulla"? E non ho intenzione di registrare e riprodurre nulla, solo generare due toni leggermente diversi (uno per ogni canale) "per l'eternità".
Baard Kopperud,

1
@BaardKopperud Sì, ho aggiornato la mia risposta per chiarire.
j883376

8

Potresti vedere speaker-testquale (su una macchina Arch) trovo nel pacchetto alsa-utils.

speaker-test -c2 -t sinecorrere da un xterm, mi ha dato un'onda sinusoidale a 440 Hz per circa 6 secondi ciascuno, alternando altoparlanti sinistro e destro. Nel xterm, ha fornito alcune informazioni su quale oratore pensava di usare.

Secondo la pagina man, può fare onde sinusoidali di frequenza arbitraria e rumore rosa.


1
speaker-test -c2 -t sine -f 440completerà il tuo esempio fornendo il parametro di frequenza. Grazie.
christian,

4

Il siggenprogramma dovrebbe fare il trucco.

screenshot di siggen

Ha due canali con segnali indipendenti e una fase tra di loro. Ogni canale può eseguire questi tipi di segnale:

  • seno
  • coseno
  • piazza
  • triangolo
  • dente di sega
  • pulse
  • rumore

Puoi eseguirlo in modalità stereo in questo modo:

$ siggen -2

Poiché /dev/dspè deprecato nella maggior parte delle distro Linux moderne, sarà probabilmente necessario installare una libreria di compatibilità. Su distribuzioni basate su Debian , installa il alsa-osspacchetto ed eseguilo in questo modo:

$ aoss siggen -2

Puoi anche provarlo con il PulseAudio OSS Wrapper:

$ padsp siggen -2

Ottengo: [siggen] Errore di input / output: / dev / dsp
Ole Tange

Hm. Il wrapper OSS PulseAudio aiuta affatto?
Nathaniel M. Beaver,

Sì. Ha funzionato.
Ole Tange,

3

ffmpeg

ffmpeg può farlo, come al solito.

Crea un out.wavfile audio sinusoidale mono da 1000Hz di 5 secondi :

sudo apt-get install ffmpeg
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" out.wav

Stereo invece:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ac 2 out.wav

Il file sarà 2x volte più grande e ffprobedirà che ha 2 channelsinvece di 1 channel.

Riproduci l'audio per 5 secondi senza creare un file:

ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp

Gioca per sempre finché non impazzisci:

ffplay -f lavfi -i "sine=frequency=1000" -nodisp

Documentazione:

L'altra sezione Sunder Audio fonti documenta altri utili algoritmi di generazione del suono oltre a sine, ad esempio:

  • anoisesrc: rumori di diversi colori, ad es. bianco, rosa, marrone
  • aevalsrc accetta espressioni matematiche arbitrarie e dovrebbe quindi essere in grado di produrre forme d'onda triangolari (espressione TODO)

Bibliografia:

Testato in Ubuntu 18.04, ffmpeg 3.4.6.

Esempio di generazione audio C minima senza librerie extra

Solo per divertimento: /programming/732699/how-is-audio-represented-with-numbers-in-computers/36510894#36510894


1

Anche il programma saugns può farlo. (È un generatore audio da riga di comando (attualmente) che supporta 8 tipi di onde e tecniche di modulazione FM / PM / AM.)

Per generare due onde stereo separate da 100 Hz, una sinusoidale e una triangolare e una con ampiezza invertita, è possibile incollare il seguente script in un file ed eseguire il programma (come in ./saugns filename):

Osin f100 a0.5 t2 P0
Otri f100 a(-0.5) t2 P1

La ts specifica il tempo, in secondi.

Le Ps sono per il panning per voce (0.0 = sinistra, 1.0 = destra). Questo potrebbe essere cambiato in qualcosa di diverso rispetto Palle versioni future; il file README descrive la sintassi corrente.

Modifica: sono davvero lo sviluppatore del programma.

Inoltre, un modo alternativo di capovolgere l'ampiezza (per alcuni tipi di onda, ad esempio sinma non saw), è impostare la fase usando una minuscola p. L'aggiunta p0.5imposta la fase al 50% del ciclo dell'onda (metà negativa). Inoltre, poiché non esiste un tipo di coseno denominato, p0.25è il modo di trasformare il seno in coseno (o p0.75per coseno negativo).


Ciao Joel. Benvenuti in Unix e Linux . Ho valutato la tua risposta in quanto è un ottimo primo post. Ho pensato di menzionare che se sei un manutentore o sviluppatore di un progetto, è prassi normale divulgare queste informazioni. Sebbene non sia realmente un problema per il software GPL, vale la pena essere a conoscenza di unix.stackexchange.com/help/promotion Per un utile software gratuito / gratuito, immagino che avresti maggiori probabilità di ottenere l'upgrade su questo sito se gli utenti lo sanno sei uno degli sviluppatori dietro al progetto.
Anthony Geoghegan,

0

Potresti cercare Gnaural .


3
Sarebbe meglio modificare questa risposta per includere ulteriori informazioni su come questo programma fornisce le funzionalità richieste - in modo simile alle altre risposte precedentemente pubblicate.
Anthony Geoghegan,

0

Puoi sintetizzare facilmente i toni con SoX. Ci sono stati alcuni ostacoli, ma alla fine sono stato in grado di capirlo.

Ho avuto problemi a interfacciare SoX con PulseAudio, quindi ho semplicemente soxinserito i dati grezzi paplay.

La pipeline è noiosa, quindi ho creato uno script:

$ cat sox-paplay
#!/bin/bash
: ${HZ:=44100}
: ${NCHAN:=6}
: ${SINK:=mysink}
sox -c $NCHAN -n -t raw -r $HZ -L -b 16 - "$@" | paplay --no-remix --no-remap --raw -v -p --rate $HZ -d $SINK --channels $NCHAN

per esempio

sox-paplay synth sine 1000 gain -5 remix -m 0 0 1 0 0 0

L' remixeffetto viene utilizzato solo per inviare il risultato a un canale specifico. È molto più potente ma qui utilizziamo solo le funzionalità di base. In questo esempio abbiamo un dispositivo a sei canali e stiamo inviando un tono al terzo canale.

Inizialmente ho creato un dispositivo ALSA che avvolgeva il dispositivo PulseAudio, ma poi ho scoperto che era impossibile controllare la mappatura dei canali usando ALSA, e quindi i canali casuali si stavano mescolando in base a come la mia mappa dei canali personalizzata differiva dal default ALSA. Questo è il motivo per cui ho --no-remix --no-remapin paplayprecedenza; Voglio solo ordinare il canale non elaborato per il comando sox.

Vorrei che le cose audio su Linux avessero una migliore documentazione e segnalazione degli errori.

Potresti essere interessato a una risposta che ho pubblicato di recente che mostra come impostare l'equalizzatore PulseAudio dalla riga di comando .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.