2017.12.10 Sun |

Pythonを使ってWindowsのビープ音で遊んでみる(その5)

shutterstock_524194510

 

最初は2回ほどに分けて書く予定だったこの記事も,書いているうちに内容が膨れ上がり,気づけばもう第5回です.

過去4回にわたり,Windowsのビープ音はプログラムで周波数と長さを制御できるという発見から,Pythonを使ってWindowsのビープ音で録音再生機能付きのピアノを作ってみた話をしてきました.

初回はプログラムコード全体を見せ,ビープ音を鳴らすためのコードと,音程を決めるための手法の話をしました.

第2回は実際に作ったアプリの機能について説明をしたと思います.

第3回はようやくプログラムの説明に入り,使用するモジュールや基本部分の説明を行いました.

第4回では,このアプリの録音機能についてプログラムの説明をしました.

今回もその続きで,説明を残していた再生モードのプログラムコードについて書きます.

動作環境はPython2.7,Windows8.1です.
※Windowsのビープ音と書いてある通り,Macなど他のOSでの動作は確認できていません.

 

過去の記事については以下のリンクをご参照ください.

その1

Pythonを使ってWindowsのビープ音で遊んでみる

その2

Pythonを使ってWindowsのビープ音で遊んでみる(その2)

その3

Pythonを使ってWindowsのビープ音で遊んでみる(その3)


その4

Pythonを使ってWindowsのビープ音で遊んでみる(その4)

 

全体のコードは初回の記事に載せたので参考にしてください.

 

さて,再生モードのプログラムを見ていきます.再生モードは他の二つのモードと比べて構成が異なります.
コードは以下のようになります.

 

再生モード

 

196行目で”rec”をグローバル変数として宣言しています.これにより,前回録音モードで説明したrecording関数で作った配列”rec”を利用することができます.

 

197行目から再生モードの核心部です.といっても行っていることはすごくシンプルでして,配列”rec”の要素を197行目

for num in range (0, len(rec))

により最初から順に読み込んでいき,その要素と一致する音を鳴らしているだけです.

配列”rec”にオクターブキーの情報も格納されているため,最初にオクターブごとに場合分けする必要はありません.

再生すべき音は,

各オクターブの構成音12音×3オクターブ+一番高い”ド”の音(次のオクターブの最低音)

の計37音です.

要素が”0”の場合は,休符を再現するためにtime.sleepで1ミリ秒スリープさせる必要があることに注意です.(272~273行目)

 

再生が終了すると

“finish playing”

という表示とともに自動的に通常モードへ戻ります.

 

2回目の記事で述べましたが,再生モードの間はmsvcrtモジュールを使っていないので,一切のキー入力を受け付けないところが課題点になっています.
たとえば再生しながら通常モードに入れたら,録音に合わせて演奏,なんてことも可能になります.

ほかにも,普通の再生機能って一時停止や早送りなど備えているので,そういった機能も追加できれば素敵だなあと妄想しています.
とりあえずは現在の再生モード中にキー入力を受け付けるような仕様に変更しなければなりません.

これでプログラム部分の説明もひととおり終わりです.

 

shutterstock_507995524

 

今回はビープ音をプログラムで操作してみる,というコンセプトのもと簡単なピアノアプリを作ってみました.

このアプリ自体数年前に作ったものなのですが,今回記事を書くにあたりコードや機能などまだまだ洗練されていない部分,足りない部分があることを思い知り,いつか改良版を作ってみたいと思うようになりました.

 

以上で5回にわたり長々とお送りしてきたPythonを使ってWindowsのビープ音で遊ぶ記事は終了になります.

最後までお付き合いくださりありがとうございました.

 

K.M

東京大学大学院 工学系研究科 修士課程1年

entry! page top