なんかいろいろこんぴゅーたかんけいのなぐりがき

なんか勉強しているこんぴゅーた関係のことのメモやそれ以外のことを書こうかなあ...

logs

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

pythonでwaveを読みたい1

 pythonならパッと、waveファイルの波形データを表示するプログラムを作れると思っていたが、そんなに一瞬でできるほど簡単ではなかった。
どうやらwaveファイルの44バイト目から記述されているデータを読んで一点一点自分で読んでいかなければならないようだ(当たり前だけど…)

で、たとえば16ビットで量子化さらたモノラルの音声データの場合、は
本当に一番目の点から最後の点まで順番に16ビットなので2バイトずつ記述されているようだ。しかもリトルエンディアンで、
これがステレオになると更に面倒で、左、右、左、右と交互に左右のデータが記述されるらしい。(もしかしたら右から始まるのかもしれないが今はモノラルを扱うのでどうでもいい)

で試にsinはで440Hzの高さの音をpythonで読んでみる。

Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open("sin.wav","rb")
>>> f.seek(44)
>>> f.read(2)
'\x00\x00'
>>>
ここまでは問題ない。ところが、2点目のデータが

>>> f.read(2)
'r\x02'
>>>

ん?なぜ16進表記されない?
で困ったってことでgoogle先生に聞いてみると
どうやら
struct
という標準モジュールをimport してunpackすればいいらしい

>>> import struct
>>> f.seek(46)
>>> data = f.read(2)
>>> struct.unpack("(626,)
>>>

どうやらうまくよんでくれたようだ。
この関数の第一引数はフォーマット文字列でhはショート型をあらわし、< はリトルエンディアンを表す
他のフォーマットについては

http://www.python.jp/doc/release/lib/module-struct.html

を見れば詳しく書いてある。

ということでとりあえず、波形データをとりだせそうなので、このデータをtxtファイルに落としていけるようにしたいと思う。

最終的な目標は波形データを弄って音程を変えたりすることだったりする。
しかし今日はやたらメモったなあ、もう3回目の更新か
スポンサーサイト

トラックバックURL

http://ilovevim.blog42.fc2.com/tb.php/69-53992805

この記事へのトラックバック

この記事へのコメント

コメント投稿フォーム

Paging Navigation

Navigations, etc.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。