2017年3月26日日曜日

chibi:bitで音声

マイコンボードのchibi:bit,今日は音声出力を試してみた。
わかりにくいけど,ブレッドボードの上にあるのがレシーバ(スピーカ)。
携帯電話の受話用などに使うようなレシーバなので,耳元で鳴らす程度。これをchibi:bitのP0とGNDに接続。
で,chibi:bitのIDEで次のようなプログラムを作成して,転送。
120bpmでドとミを交互にならすだけ。で,正常に鳴ることを確認。

じゃあ,ドレミの歌かえるの歌を演奏させてみようということで,これはブロックエディタでは大変(配列が扱えない)なので,javascriptで。
 let REST = 0  
 let C4 = 0  
 let B3 = 0  
 let A3 = 0  
 let G3 = 0  
 let F3 = 0  
 let E3 = 0  
 let D3 = 0  
 let C3 = 0  
 basic.forever(() => {  
 })  
 C3 = 262  
 D3 = 294  
 E3 = 330  
 F3 = 349  
 G3 = 392  
 A3 = 440  
 B3 = 494  
 C4 = 523  
 REST = -1  
 let song = [C3, D3, E3, F3, E3, D3, C3, REST,  
   E3, F3, G3, A3, G3, F3, E3, REST,  
   C3, REST, C3, REST, C3, REST, C3, REST,  
   C3, D3, E3, F3, E3, D3, C3, REST]  
 function playSong() {  
   let i = 0  
   let v = 0  
   for (i = 0; i < song.length; ++i) {  
     v = song[i]  
     if (v < 0) {  
       music.rest(music.beat(BeatFraction.Whole))  
     } else {  
       music.playTone(v, music.beat(BeatFraction.Whole))  
     }  
  }  
 }  
 music.setTempo(120)  
 control.inBackground(() => {  
   playSong()  
 })
動かしてみたら,ちゃんと演奏できた。

じゃあ,輪唱もということで試してみたのだけど,残念ながら,出力は排他的で,勝手に音声を合成してくれるわけじゃなかった。そりゃそうか。

2017/3/27 21:36
いくつか,本質的ではない間違いがあったので,修正。