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

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

logs

スポンサーサイト

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

pythonでwaveを読みたい3

とりあえず、wavファイルを読み込んでその音量を半分にして別名で保存するスクリプトがかけた。
なんかコレをかくだけで何時間もかかった、

f = open(("foo.wav","rb+")でファイルを開いて、ファイルを2バイト読んでいったんseek(-2,1)で2バイトもどってwriteして、また2バイト読んで…と最初はやっていたが、seekしてもwriteする対象となる場所を思ったとおりに定めることができず、最終的に別ファイルをとして加工後のファイルを保存することにした。


# coding:utf-8
from struct import * #バイナリデータの数値を読み書きするためにつかう
f = open("target.wav","rb")
w = open("new.wav","wb")

#44バイト目までは波形データではない
for x in range(44):
get = f.read(1)
w.write(get)

#波形データを保存しておくためのリスト
list = []

#16bitモノラルの波形データ読み込み
while True:
get = f.read(2)
if get == "":break
list.append(get)

#波形データの振幅を半分にしてコピー
for x in range(len(list)):
#リトルエンディアンのshort型フォーマットで値をとりだす
num = unpack(" num /= 2
#リトルエンディアンのフォーマットにして値を書く
num = pack(" w.write(num)

w.close()
f.close()



音量をいじれるようになったので次は音の高さとか速さをいじりたいのだけれど、なんだかArduioを無性にいじりたくなってきたのでしばらくwavネタはしないかも。wavのバイナリをいじるのがこんなに大変だとは思わなかった。

つまづいたのは、pack,unpackが必要性に気づくのが大変だったことと、バイナリファイルの書き込みのseek()による書き込み位置操作がうまくできなかったこと。(これは今もできない)
FC2 Management

トラックバックURL

http://ilovevim.blog42.fc2.com/tb.php/71-75dc697e

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

この記事へのコメント

コメント投稿フォーム

Paging Navigation

Navigations, etc.

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