WarrenWeckesserがwavioを使用しています.24ビットwavファイルをPythonで読む必要があります。私が持っているwavファイルは、ある計測器で生成されており、正規化やスケーリングを行わずに生の値を取得しようとしています。wavio Python 3.5で24ビットWAVを読む
if sampwidth == 3:
a = _np.empty((num_samples, nchannels, 4), dtype=_np.uint8)
raw_bytes = _np.fromstring(data, dtype=_np.uint8)
a[:, :, :sampwidth] = raw_bytes.reshape(-1, nchannels, sampwidth)
a[:, :, sampwidth:] = (a[:, :, sampwidth - 1:sampwidth] >> 7) * 255
result = a.view('<i4').reshape(a.shape[:-1]
誰かが、それは実際に(私は比較的numpyのために新しく、配列スライスしています)何をしているか説明できます:wavioモジュールで
作業を行うコードはこれです。私はそれのほとんどを理解するが、私はここで何が起こっているか理解していない:
a[:, :, sampwidth:] = (a[:, :, sampwidth - 1:sampwidth] >> 7) * 255
私の場合、それは24〜32ビットから変換しないが、私はそれがデータをスケーリングされているかどうかうまくいかないことができ、生の値を変更せずに単純に埋め込むことができます。
データの縮尺や正規化は行われません。ファイルからの符号付き24ビットデータを符号付き32ビットデータとしてnumpy配列に格納できるように符号を拡張します。 @ kennytmの答えはそれをかなりうまく解消する。 –
おかげさまで、私は多くのことを考えましたが、私は確信する必要がありました。それはどこのドキュメンテーションにありますか? – Sam
docstringは 'wavio.read'がデータの縮尺を変更しないと述べていませんが、' wavio.write' *のデフォルト値はデータを拡大するために 'read 'はしません。 –