複数のプラットフォームでwavファイルを再生する
windows, mac, freeBSD, linux上で標準モジュールだけを使いwavファイルを再生するコードを書く。
FreeBSD, Linuxの場合
ossaudiodev標準モジュールを使って再生する。メモリ上のデータを渡すのでwave標準モジュールを使うなどしてあらかじめデータをメモリ上に展開しておく。
import ossaudiodev import wave wav = wave.open(filepath, "r") dev = ossaudiodev.open("w") format = [None, ossaudiodev.AFMT_U8, ossaudiodev.AFMT_S16_LE][wav.getsampwidth()] dev.setparameters(format, wav.getnchannels(), wav.getframerate()) dev.write(wav.readframes(wav.getnframes())
MacOSXの場合
AppKitモジュールのNSSoundを使う。詳細は不明。
再生が非同期らしいのでポーリングループで同期させている。
参考:http://yamashita.dyndns.org/blog/play-sounds-with-python-on-mac/
import AppKit sound = AppKit.NSSound.alloc() sound.initWithContentsOfFile_byReference_(filepath, True) sound.play() while sound.isPlaying(): pass