Pythonオーディオをnumpy配列に変換:numpy.ValueError:buffer size must be a multiple of element size
990 ワード
使用背景:オーディオ信号をインポートし、次のコードセグメントの最後のエラーを報告します.
問題解決:最後の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配列に直接読み込むことができます
wavioのgithubリンクを添付します.
https://github.com/WarrenWeckesser/wavio/blob/master/wavio.py
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)
オーディオの量子化ビット数が24 bitの場合、どのように読み取りますか?
wavioパケットを使用してnumpy配列に直接読み込むことができます
import wavio
audio = wavio.read(wav_path)
wavioのgithubリンクを添付します.
https://github.com/WarrenWeckesser/wavio/blob/master/wavio.py