5

Python 3.4 で Pydub を使用して、いくつかのオーディオ ファイルのピッチを検出しようとしています。

私は、リアルタイムアプリケーションに対して堅牢なピッチ検出アルゴリズム (McLeod Pitch Method) を使用しています (それを使って 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 ビット リトル エンディアン PCM、44100Hz、モノラル) にアルゴリズムを適用すると、正しいピッチが得られます。

AudioSegment._data は期待どおりに返されませんか?

4

1 に答える 1

10

sound._dataですbytestring。入力が何を期待しているのかわかりませんが、次のようMpmに変換する必要があるかもしれません:bytestringarray

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)
于 2015-09-03T18:38:39.587 に答える