Как генерировать частотно-зависимую волну, зависящую от времени?

Я хочу создать звук, частота которого зависит от времени, скажем, что частота time мс timeГц, следовательно, через 20 с у вас есть все слышимые частоты. Например, с помощью ffmpeg вы можете использовать переменную времени (%T) для наложения времени каждого кадра на видео. Я думал, что смогу использовать переменную% T для генерации такой волны. я пробовал

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

но похоже sine Фильтр должен иметь фиксированную частоту.

Я пытался использовать ffmpeg, но не имеет значения, какую программу вы используете, если она бесплатна (легкие загрузки приветствуются).

2 ответа

Решение

Пока вы начинаете говорить о видео, кажется, что вы действительно заинтересованы в аудио. Вы идея о sine Функция верна, она требует фиксированной частоты, так как вы бы установили базовую частоту таким образом. Это все равно будет синус "вокруг" этой частоты.

То, что вы на самом деле пытаетесь сделать, это генерировать часть синуса или, что более вероятно, линейную функцию, постоянно увеличивающую частоту. Чтобы сделать это, вы можете попробовать использовать такую ​​программу, как Audacity и Chrip Generator, которая, как она звучит, будет именно тем, что вы ищете. Это позволило бы вам генерировать звук, начинающийся с частоты X, и позволить ему заканчиваться в Y после времени N.

Если вы используете ffmpeg, у вас есть фильтр aevalsrc:

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

Вы должны быть в состоянии эмулировать все параметры генератора чирп, как только вы выясните необходимое выражение:)

Я использовал 32-битный float в качестве выходного формата, так как это рабочий формат Audacity.

Другие вопросы по тегам