Sox: Sequenz von Frequenzen spielen

11/11/2013 - 19:05 von Mathias Kőrber | Report spam
Moin

Ich kann mit

play -n --no-show-progress --null --channels 1 synth .5 sine $N

Eine Frequenz $N abspielen.

Ich möchte das num aber gerne mit vielen Frequenzen
tun, eine nach der anderen.

Kann Sox dieses von stdin? Ich habe bisher keinen Weg gefunden
die Frequenz (in welchem Format auch immer) in das 'play' Programm
zu 'pipe'n... ohne erst für jede Frequenz ein Sound-Schnipsel-File
erzeugen zu müssen.

Gibt es da ein Dateiformat welches dies erlaubt?

Danke
M
 

Lesen sie die antworten

#1 Marcel Müller
12/11/2013 - 08:47 | Warnen spam
Hallo,

On 11.11.13 19.05, Mathias Kőrber wrote:
Ich möchte das num aber gerne mit vielen Frequenzen
tun, eine nach der anderen.

Kann Sox dieses von stdin? Ich habe bisher keinen Weg gefunden
die Frequenz (in welchem Format auch immer) in das 'play' Programm
zu 'pipe'n... ohne erst für jede Frequenz ein Sound-Schnipsel-File
erzeugen zu müssen.

Gibt es da ein Dateiformat welches dies erlaubt?



ja, RAW.

Einfach sox nach stdout spielen lassen und in einer Skript-Schleife sox
der Reihe nach mit unterschiedlichen Frequenzen jeweils die gewünschte
Dauer spielen lassen.

Alternativ, wenn man unbedingt /kein/ RAW haben möchte, kann man auch
einen RIFF/WAVE Header davor setzen, der einfach behauptet, es wàre eine
ganz große Datei. Natürlich endet das Signal dann vorher, aber das merkt
das nachfolgende Programm erst, wenn es das relevante schon abgespielt hat.

Faktisch habe ich es seinerzeit doch lieber mit einem C-Programm
gemacht, dass auch gleich noch einen Sync-Header vorne weg schickt,
damit die nachfolgenden Auswertung weiß, wann ungefàhr eine neue
Frequenz beginnt. Das Programm macht außerdem auch gleich die
Auswertung. Also
Record-Datenstrom | sweep parameter | Ausgabe-Datenstrom
Siehe http://www.maazl.de/project/analyze...ze-src.zip und darin
C/analyze.dist/src/sweep.cpp. Das ist zwar für OS/2, aber das wird nur
zum Setzen der Prioritàt für die Echtzeitwiedergabe benötigt. Der Rest
ist C++ und die FFTW2 library (für die Auswertung).


Marcel

Ähnliche fragen