Как сдвинуть высоту тона вверх, не искажая аудиосигнал?Python

Программы на Python
Ответить
Anonymous
 Как сдвинуть высоту тона вверх, не искажая аудиосигнал?

Сообщение Anonymous »


Чтобы лучше понять алгоритмы изменения высоты звука, я пытаюсь написать собственную (по общему признанию упрощенную) программу изменения высоты звука с нуля. audioData — это NDarray, представляющий файл WAV, прочитанный с помощью scipy.io.wavfile.read().

def ChangePitch(self, Pitch, AudioData): # конвертируем аудиосигнал в частотную область с помощью быстрого преобразования Фурье fft = np.fft.rfft(аудиоданные) скаляр = 2**(питч/12) # величина перемещения каждой частоты (высота {-12, 12} полутонов) shiftedFFT = fft # инициализировать массив сдвинутых частот #переносим старую частоту на новую для i в диапазоне (len(fft)): сдвиг_индекс = int (я * скаляр) если сдвиг_индекс < len(fft): сдвинутыйFFT[shift_index] = fft #конвертировать обратно во временной интервал вывод = np.fft.irfft(shiftedFFT) #WAV читает int16, но numpy возвращает комплекс 128, поэтому приведите вывод = вывод.astype('int16') обратный вывод Моя идея заключалась в том, чтобы взять ДПФ сигнала, умножить каждую частоту на желаемую величину, а затем взять обратное ДПФ. При уменьшении звука звук не искажается, как ожидалось. Единственная потеря данных должна быть связана с целочисленным приведением. Однако при повышении высоты тона частоты len(fft) * (1-(1/scalar)) не будут сдвигаться по высоте (если бы они были смещены, они бы вышли за пределы массива). Эта проблема кажется неизбежной. Как эта проблема решается в других алгоритмах изменения высоты тона?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»