t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Pythonで筋トレ用メトロノームを作成

前回の記事では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を本格的に学習する動機になる。

私のオススメはこちら。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。