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)