Изменение скорости звукового файла

Я пытаюсь изменить скорость звукового файла, но затрудняюсь понять, как это сделать. Я предполагаю, что некоторый тип интерполяции должен иметь место в случае его замедления, но я не уверен, как добиться ускорения - возможно, в среднем из нескольких выборок? Меняет ли он темп или высоту тона, в настоящий момент не имеет значения, я хотел бы узнать, как выполнить оба, но хотел бы, по крайней мере, выполнить один или другой, чтобы начать.

Если у кого-то есть ссылки на математику за этими типами операций, они будут очень благодарны!

Спасибо Бен

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)

Я также разместил ответ на вопрос " Начало работы с программным звуком", в котором я подробно рассказал о некоторых основных аудио манипуляциях, которые могут быть выполнены, так что, возможно, это также может представлять интерес.

В Википедии есть хорошее объяснение о преобразовании частоты дискретизации. По сути, вы конвертируете свой сигнал в наименьшее общее кратное из двух частот дискретизации, отфильтровываете любые частоты, которые не соответствуют целевой частоте дискретизации (или не поступили из источника), и выбираете новые выборки на целевой частоте дискретизации. Существуют математические приемы, позволяющие вычислению потреблять значительно меньше ресурсов (многофазное разложение), но с этого следует начать.

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