2016/07/29(金) [n年前の日記]
#3 [raspberrypi] MMLを周波数と時間に変換するPythonスクリプトを書いてたり
Raspberry Pi3をモバイルバッテリー付きで外に持ち出すとして、スイッチを押したら画像を撮影、みたいな処理をしたいわけで。
その際、動作したかどうかを確認するために、ブザーを鳴らしたいなと。そして、どうせならメロディーで知らせたいなと。メロディーを指定すると言っても、どうせブザーで鳴らすチープな音だから、簡単な指定でいいよなと。つまりMMLを使ってメロディーを鳴らせればそれで十分だろう、と。
てなわけで、Pythonスクリプト内で記述したMMLを、PWM制御を使ってブザーから鳴らすために、まずは、MMLを周波数と時間のリストに変換する処理を書こうと。
Windows + Python の場合、winsound というモジュールを使うと、winsound.Beep(周波数(Hz), 時間(ms))というメソッドが使えるようになるので、ひとまずソレを使って、Windows10上で動作確認しつつ書いてるところ。
_35.4. winsound ・ Windows 用の音声再生インタフェース ・ Python 2.7.x ドキュメント
_時報を Beep 音で鳴らそうとしたら、意外な厳しさがあった | 傀儡師の館.Python - 楽天ブログ
_Pythonでビープ音を鳴らす(Windowsのみ) - 数値計算とかの備忘録(仮)
ただ、winsound の場合、ビープ音と言っても、M/B上のブザーを鳴らすわけではなく、サウンドボード経由で鳴らす仕様らしい。
ちょっとハマったのは、ConEmu上で実行すると winsound.Beep() が鳴らない点。DOS窓上で実行する分には winsound.Beep() が使えるのだけど…。なんでだろ。
その際、動作したかどうかを確認するために、ブザーを鳴らしたいなと。そして、どうせならメロディーで知らせたいなと。メロディーを指定すると言っても、どうせブザーで鳴らすチープな音だから、簡単な指定でいいよなと。つまりMMLを使ってメロディーを鳴らせればそれで十分だろう、と。
てなわけで、Pythonスクリプト内で記述したMMLを、PWM制御を使ってブザーから鳴らすために、まずは、MMLを周波数と時間のリストに変換する処理を書こうと。
Windows + Python の場合、winsound というモジュールを使うと、winsound.Beep(周波数(Hz), 時間(ms))というメソッドが使えるようになるので、ひとまずソレを使って、Windows10上で動作確認しつつ書いてるところ。
_35.4. winsound ・ Windows 用の音声再生インタフェース ・ Python 2.7.x ドキュメント
_時報を Beep 音で鳴らそうとしたら、意外な厳しさがあった | 傀儡師の館.Python - 楽天ブログ
_Pythonでビープ音を鳴らす(Windowsのみ) - 数値計算とかの備忘録(仮)
ただ、winsound の場合、ビープ音と言っても、M/B上のブザーを鳴らすわけではなく、サウンドボード経由で鳴らす仕様らしい。
ちょっとハマったのは、ConEmu上で実行すると winsound.Beep() が鳴らない点。DOS窓上で実行する分には winsound.Beep() が使えるのだけど…。なんでだろ。
◎ MMLの仕様がちょっとよく分からない。 :
_Music Macro Language - Wikipedia
_MML入門
_Python+PyAudio+MMLでスーパーマリオの地上BGMを - つまみ食う
というか、もしかしてMZ-700のMMLには用意されてなかったコマンドが結構あるのかな。一応自分、X1turboも使ってたけど、そっちでMMLを打ち込んだ記憶はないので、単音用のMMLは記憶があっても、PSG用のMMLコマンドについては全く知らない状態かもしれず。
_MML入門
_Python+PyAudio+MMLでスーパーマリオの地上BGMを - つまみ食う
- CDEFGABでドレミを表す。
- 「#」か「+」がついてたら半音上げる。
- 「-」がついてたら半音下げる。
- C〜Gの次に数字がついてたら音の長さ。
- 数字の後ろに「.」がついてたら付点音符。
- 「T数字」でテンポ指定。
- 「O数字」でオクターブ指定。
というか、もしかしてMZ-700のMMLには用意されてなかったコマンドが結構あるのかな。一応自分、X1turboも使ってたけど、そっちでMMLを打ち込んだ記憶はないので、単音用のMMLは記憶があっても、PSG用のMMLコマンドについては全く知らない状態かもしれず。
[ ツッコむ ]
以上です。