Pydub необработанные аудио данные

Я использую Pydub в Python 3.4, чтобы попытаться определить высоту звука некоторых файлов.

У меня есть работающий алгоритм определения высоты тона (метод McLeod Pitch), который является надежным для приложений реального времени (я даже создал приложение для определения высоты тона Android: https://github.com/sevagh/Pitcha).

Моя проблема в том, что я не получаю никакого значимого вывода из алгоритма, когда применяю его к AudioSegment._data.

Код:

from pydub import AudioSegment

sound = AudioSegment.from_wav(file="./8700hz.wav")

#sampling rate = sound.frame_rate = 44100hz
mpm = Mpm(sound.frame_rate, len(sound._data))
print(mpm.get_pitch(sound._data))

Выход:

Pitch: 150.000002396

Если я проигрываю тот же файл wav из своих динамиков, записываю его с моего микрофона и применяю алгоритм к необработанному захвату микрофона (16-разрядный бит с прямым порядком байтов с прямым порядком байтов, 44100 Гц, моно), я получаю правильную высоту звука.

AudioSegment._data не возвращает то, что я ожидаю?

1 ответ

Решение

sound._data это bytestring, Я не уверен, что вход Mpm ожидает, но вам может понадобиться преобразовать bytestring для array вот так:

import array
from pydub import AudioSegment
from pydub.utils import get_array_type

sound = AudioSegment.from_wav(file="./8700hz.wav")

bit_depth = sound.sample_width * 8
array_type = get_array_type(bit_depth)

numeric_array = array.array(array_type, sound._data)
Другие вопросы по тегам