эффект хора python и смысл аудиоданных

88
8

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

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

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

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

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

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

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

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

спросил(а) 2021-01-25T19:37:02+03:00 4 месяца, 4 недели назад
1
Решение
63

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

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

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

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

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

ответил(а) 2021-01-25T19:37:02+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема