Wie erzeugt man eine zeitabhängige Frequenzwelle?

626
cdlvcdlv

Ich möchte einen Sound erzeugen, dessen Frequenz zeitabhängig ist. Nehmen wir an, die Frequenz von timems ist timeHz, daher haben Sie in 20 s alle hörbaren Frequenzen. Mit ffmpeg können Sie beispielsweise die Zeitvariable (% T) verwenden, um die Zeit jedes Frames eines Videos zu überlagern. Ich dachte, ich könnte die Variable% T verwenden, um eine solche Welle zu erzeugen. ich habe es versucht

ffmpeg -f lavfi -i "sine=frequency=%T*1000:sample_rate=44100:duration=20" -c:a pcm_s16le allfreq.wav 

aber es scheint, als sinemüsste der Filter eine feste Frequenz haben.

Ich habe versucht, ffmpeg zu verwenden, aber es ist egal, welches Programm Sie verwenden, solange es kostenlos ist (leichte Downloads werden geschätzt).

0
Sie können jeden Frame eines Videos überlagern und ganz plötzlich auf Audio umstellen? Was die Funktion [`sine`] (https://ffmpeg.org/ffmpeg-filters.html#sine) betrifft, so möchten Sie eigentlich nur einen Teil des Sinus erzeugen. Ansonsten hätten Sie eine steigende Grundfrequenz, während der Sinus weiterhin Sinus wäre. Vielleicht könnten Sie den [Chirp Generator from Audacity] (http://manual.audacityteam.org/man/generate_menu.html) verwenden. Seth vor 7 Jahren 2
Der Chirp Generator passt perfekt. Es hat mehr Optionen, die ich nicht gedacht habe, aber trotzdem interessant. Sie können es als Antwort schreiben. cdlvcdlv vor 7 Jahren 0

2 Antworten auf die Frage

2
Seth

Wenn Sie anfangen, über Video zu sprechen, scheint es, als ob Sie wirklich an Audio interessiert sind. Ihre Vorstellung von der sineFunktion ist richtig, dass eine feste Frequenz erforderlich ist, da Sie die Grundfrequenz auf diese Weise einstellen würden. Es wäre immer noch "rund" um diese Frequenz herum.

Was Sie tatsächlich versuchen, ist die Erzeugung eines Teils eines Sinus oder einer linearen Funktion, die die Frequenz ständig erhöht. Um dies zu tun, können Sie versuchen, ein Programm wie Audacity und seinen Chrip Generator zu verwenden, der nach dem, was es klingt, das ist, wonach Sie suchen. Sie können damit beginnen, einen Ton zu erzeugen, der bei der Frequenz X beginnt und nach dem Zeitpunkt N bei Y endet.

Sie haben recht, meine ursprüngliche Frage war etwas verwirrend geschrieben. Ich habe es bearbeitet, um es zukünftigen Lesern klarer zu machen. cdlvcdlv vor 7 Jahren 1
1
Gyan

Wenn Sie ffmpeg verwenden, haben Sie den aevalsrc-Filter:

ffmpeg -f lavfi -i "aevalsrc='sin(1000*t*2*PI*t)':s=44100:d=20" -c:a pcm_s32le allfreq.wav 

Sie sollten in der Lage sein, alle Parameter des Chirp-Generators zu emulieren, sobald Sie den erforderlichen Ausdruck herausgefunden haben :)

Ich habe 32-Bit-Float als Ausgabeformat verwendet, da dies das Arbeitsformat von Audacity ist.

Ich kannte den "aevalsrc" -Filter nicht. Ich vermute, dass 'ffmpeg' funktionieren kann, aber mit diesen Optionen nicht. Die Frequenz des durch Ihren Befehl erzeugten Klangs steigt bis 11.025 s. dann anfangen, abzunehmen. Ich kann eine Beziehung zwischen der Variablen "t" und der Frequenz sehen, aber nicht wie erwartet. cdlvcdlv vor 7 Jahren 0
Ja, das sehe ich. Wahrscheinlich aufgrund der Kombination zweier Dinge: 1) der niedrigen Abtastrate 2) der Dithering des Filterfrequenzausgangs, sobald er ein Viertel der Abtastrate erreicht. Verwenden Sie "s = 176400". Gyan vor 7 Jahren 1
Es gibt noch ein weiteres Problem: Die Formel in der "Sünde" ist falsch. Mit 'ffmpeg -f lavfi -i "aevalsrc =' sin (1000 * t * PI * t) ': s = 44100: d = 20" -c: a pcm_s16le allfreq.wav` ist die Welle richtig. cdlvcdlv vor 7 Jahren 0
Mit dieser Formel erreichen Sie nur eine Basis von 10 kHz. Ein Zyklus der Sinuswelle ist "2 * PI", also erzeugt "2 * PI * t" eine Welle in einer Sekunde. 1000 * 2 * PI * t produziert in einer Sekunde 1000. Sie multiplizieren sich weiter mit t, um den Träger zu variieren. Gyan vor 7 Jahren 1
Ich verstehe Ihren Punkt, aber sowohl Audition als auch Audacity zeigen eine Welle von ffmpeg -f lavfi -i "aevalsrc = 'sin (1000 * t * 2 * PI * t)': s = 176400: d = 20" -c: a pcm_s32le allfreq.wav` erreicht in Spektralansicht 40 kHz. Vielleicht ein _ffmpeg_ Bug? cdlvcdlv vor 7 Jahren 0
Möglicherweise. Werde morgen nachschauen. Gyan vor 7 Jahren 0