mieki256's diary



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の仕様がちょっとよく分からない。 :

_Music Macro Language - Wikipedia
_MML入門
_Python+PyAudio+MMLでスーパーマリオの地上BGMを - つまみ食う

  • CDEFGABでドレミを表す。
  • 「#」か「+」がついてたら半音上げる。
  • 「-」がついてたら半音下げる。
  • C〜Gの次に数字がついてたら音の長さ。
  • 数字の後ろに「.」がついてたら付点音符。
  • 「T数字」でテンポ指定。
  • 「O数字」でオクターブ指定。
そこまでは覚えてたけど。「<」「>」「L」は覚えてなかった…。「Q」「V」「&」あたりも記憶が無いな…。

というか、もしかしてMZ-700のMMLには用意されてなかったコマンドが結構あるのかな。一応自分、X1turboも使ってたけど、そっちでMMLを打ち込んだ記憶はないので、単音用のMMLは記憶があっても、PSG用のMMLコマンドについては全く知らない状態かもしれず。

以上です。

過去ログ表示

Prev - 2016/07 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project