Изменение скорости звукового файла
Я пытаюсь изменить скорость звукового файла, но затрудняюсь понять, как это сделать. Я предполагаю, что некоторый тип интерполяции должен иметь место в случае его замедления, но я не уверен, как добиться ускорения - возможно, в среднем из нескольких выборок? Меняет ли он темп или высоту тона, в настоящий момент не имеет значения, я хотел бы узнать, как выполнить оба, но хотел бы, по крайней мере, выполнить один или другой, чтобы начать.
Если у кого-то есть ссылки на математику за этими типами операций, они будут очень благодарны!
Спасибо Бен
2 ответа
Есть два варианта для ускорения воспроизведения звукового файла:
- Увеличьте частоту дискретизации
- Уменьшите количество образцов в единицу времени.
В любом из этих способов увеличение скорости воспроизведения будет иметь соответствующее изменение высоты звука.
Увеличение частоты дискретизации
Увеличение частоты дискретизации увеличит скорость воспроизведения звука. Например, переход от частоты дискретизации 22 кГц к частоте 44 кГц сделает звук воспроизведения в два раза быстрее оригинального. В этом методе исходные данные выборки не изменяются - необходимо изменить только настройки воспроизведения звука.
Уменьшите количество образцов в единицу времени
В этом методе частота дискретизации при воспроизведении поддерживается постоянной, но количество выборок уменьшается - некоторые выборки выбрасываются.
Наивный подход к тому, чтобы воспроизведение звука было в два раза быстрее оригинального, заключается в удалении всех остальных сэмплов и воспроизведении с исходной частотой дискретизации.
Однако при таком подходе часть информации будет потеряна, и я ожидаю, что некоторые артефакты будут введены в аудио, так что это не самый желательный подход.
Хотя я сам не пробовал, идея усреднения сэмплов для создания нового сэмпла - хороший подход для начала. Казалось бы, это означает, что вместо того, чтобы просто выбросить аудиоинформацию, она может быть в некоторой степени "сохранена" процессом усреднения.
В качестве приблизительного представления о процессе, вот фрагмент псевдокода для удвоения скорости воспроизведения:
original_samples = [0, 0.1, 0.2, 0.3, 0.4, 0.5]
def faster(samples):
new_samples = []
for i = 0 to samples.length:
if i is even:
new_samples.add(0.5 * (samples[i] + samples[i+1]))
return new_samples
faster_samples = faster(original_samples)
Я также разместил ответ на вопрос " Начало работы с программным звуком", в котором я подробно рассказал о некоторых основных аудио манипуляциях, которые могут быть выполнены, так что, возможно, это также может представлять интерес.
В Википедии есть хорошее объяснение о преобразовании частоты дискретизации. По сути, вы конвертируете свой сигнал в наименьшее общее кратное из двух частот дискретизации, отфильтровываете любые частоты, которые не соответствуют целевой частоте дискретизации (или не поступили из источника), и выбираете новые выборки на целевой частоте дискретизации. Существуют математические приемы, позволяющие вычислению потреблять значительно меньше ресурсов (многофазное разложение), но с этого следует начать.