Эффект хора python и значение аудиоданных

Можете ли вы объяснить или указать правильный способ подумать о том, как реализовать два звуковых эффекта в файле WAV.

Поэтому я читаю wav-файл и конвертирую его в значения int (в numpy массив)

array([59383, 58290, 60629, ..., 52606, 51982, 56274], dtype=uint16)

Во-первых, я не уверен, что мне ясно, что эти значения в массиве действительно представляют? Правильно ли, что каждое значение равно 65535 (unsigned int16) уровни, которые аналоговое устройство вывода будет производить в определенный момент времени?

В теории эффект хоруса может быть достигнут следующими шагами:

  1. Сделать копию исходного массива
  2. ослабить этот скопированный массив (умножение на некоторые value < 1)
  3. и добавить этот скопированный массив в исходный

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

Как я могу реализовать эту случайность данных, которые я собираюсь добавить?

1 ответ

Решение

У вас в основном правильные идеи. Вот несколько моментов:

1) Волновой файл представляет собой линейный сигнал в зависимости от времени, так что вы понимаете его правильно. (Многие звуковые объекты являются логарифмическими, поэтому не стоит думать, что они могут быть нелинейными - например, LP кодируются нелинейным способом.)

2) Если вы собираетесь заниматься математикой, сначала перейдите в float или же int32 так что вы не выходите за пределы int16,

3) Чтобы сместить во времени, используйте кусковую нарезку. То есть что-то вроде new = old[1000:]+old[:-1000], Обратите внимание, что вам нужно добавить секции одинаковой длины вместе, поэтому, если вы добавите сдвиг времени, вы не сможете добавить его в полный массив, потому что сдвиг времени будет короче.

4) Что касается добавления со "случайным временем", вы можете добавить к этому с вышеупомянутым в течение одного случайного времени. Чтобы время непрерывно менялось на протяжении всего сложения, вам нужно деформировать исходный сигнал, и это будет более сложным.

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