前回の記事ではPythonでGUIを体験するプログラムを紹介した。
今回はPythonで筋トレ用メトロノームを作成。
音がメインなので、GUIは作らないが、CUIでも十分実用的なプログラムが作れるということで紹介。
学習モチベーションUpに繋がると嬉しい。
実行イメージ
開始
↓
ポッ・ポッ・ポッ・ピー・
ポッ・ポッ・ポッ・ピー・
ポッ・ポッ・ポッ・ピー・
ポッ・ポッ・ポッ・ピー・
ポッ・ポッ・ポッ・ピー・
↓
終了
ポッ…低音ビープ
ピー…高温ビープ
中黒「・」…1秒の間
コード
import winsound from time import sleep #設定 replay = 5 #再生回数 count = 3 #カウント数 high_tone = 5 #高音:1~6の範囲で指定 low_tone = 3 #低音:1~6の範囲で指定 duration = 200 #音の長さ:100~1000がお勧め for i in range(replay): for j in range(count): winsound.Beep(55*2**low_tone,duration) sleep(1) winsound.Beep(55*2**high_tone,duration*2) sleep(1)
解説
今回の主役は「winsound」モジュールだ。
※Windows専用なので環境が違う方はごめんなさい。
winsoundのBeep関数は、周波数と音の長さを引数として渡すとビープ音を鳴らす。
周波数を決めるのに参考にしたサイトはこちら。
音階周波数
「ラ」の音の周波数がキリが良くて、55×2のべき乗で表すことができるのでこれを採用した。
Pythonのべき乗は「**」である。
コードでいうと、この部分
winsound.Beep(55*2**low_tone,duration)
あとはfor文でループしながらビープサウンドを鳴らしつつ、1秒スリープを挟めばメトロノーム完成
ちなみにsleepのimport文だが、このように「from モジュール import 関数」と書くと、モジュールの特定関数だけをインポートできる。
from time import sleep
普段VBAを書いている方はPythonのfor文に戸惑うかもしれないので解説しておくと、PythonにVBAでいうFor文はなくて、全部For Eachだと思っていただくと良い。
よく分からない?
それこそが、Pythonを本格的に学習する動機になる。
私のオススメはこちら。