Pythonオーディオをnumpy配列に変換:numpy.ValueError:buffer size must be a multiple of element size


使用背景:オーディオ信号をインポートし、次のコードセグメントの最後のエラーを報告します.
import wave
import numpy as np

f = wave.open(wav_path)
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
#    ;     (byte);     ;     
str_audio = f.readframes(nframes)
f.close()

audio = np.frombuffer(str_data, dtype=np.short)

問題解決:最後のdtypeのパラメータを自分の音声信号と一致させる
sampwidthというパラメータを表示すると、量子化ビット数(sampwidth)は音波のサンプリングごとに必要なビット数を記録し、一般的に16,24,32ビットがあります.
sampwidth(byte)
dtype
2byte=16bit
int 16 or i 2(フルセットショット)
3byte=24bit
wavioパッケージ読み取りが必要です
4byte=32bit
int 32 or i 4(ロングフォームlong)
  • データ量(総b)=サンプリング周波数(Hz)x量子化ビット数(bit)x時間(s)xチャネル数(個)
  • データ量(総B)=サンプリング周波数(Hz)x量子化ビット数(bit)x時間(s)xチャネル数(個)/8
  •  
    オーディオの量子化ビット数が24 bitの場合、どのように読み取りますか?
    wavioパケットを使用してnumpy配列に直接読み込むことができます
    import wavio
    
    audio = wavio.read(wav_path)

    wavioのgithubリンクを添付します.
    https://github.com/WarrenWeckesser/wavio/blob/master/wavio.py