Изменение скорости звукового файла - PullRequest
5 голосов
/ 02 июня 2009

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

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

Спасибо, Бен

Ответы [ 2 ]

10 голосов
/ 02 июня 2009

Существует два варианта для ускорения воспроизведения звукового файла:

  • Увеличение частоты дискретизации
  • Уменьшите количество выборок за единицу времени.

В любом из этих способов увеличение скорости воспроизведения будет иметь соответствующее изменение высоты звука.

Увеличение частоты дискретизации

Увеличение частоты дискретизации увеличит скорость воспроизведения звука. Например, переход от частоты дискретизации 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)

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

4 голосов
/ 02 июня 2009

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

...