« 湿地畑の草刈り | トップページ | ペルセウス座流星群 »

2018年8月11日 (土)

RaspPiでPSG #4

LPC810をPSG代わりにして、RaspberryPiで曲を演奏したいが、RaspberryPiではまともなタイマ割り込みが使えないため、音源ICがあっても音楽演奏するのは難しいようだ。
タイマ割り込みを普通にやると割り込み間隔は10ms程度になる。

テンポ120は、1分間に4分音符を120個演奏できるという意味である。音の間隔は、60sec / 120 = 0.5sec = 500ms となる。
32分音符を演奏するには、その1/8なので62.5msだね。
音と音の切れ目を、音長の1/8程度入れたいなら、さらに1/8して7.8125msとなる。
これくらいの精度が出せるのタイマ割り込みが欲しいのだ。

しかたがないので、タイマ割り込みのことはいったん忘れて、全力で音楽演奏してみよう。
タイマを監視して、その値を見て演奏のタイミングをはかればいい。

int timeLap, timeNow, timeOld;
struct timeval tim;
//	----------------------------------------
// ---------------------------------------- void usTest() { static int count = 0; gettimeofday(&tim, NULL); timeNow = tim.tv_sec * 1000000 + tim.tv_usec; timeLap = timeNow - timeOld; printf( "%dus", timeLap ); timeOld = timeNow; count++; if((count&7)) printf(", "); else printf("\n"); }

こんな感じのコードを書いて1000回ほど実行すると、こんな結果になった。

>gcc xevious.c -o xevious.x -l wiringPi
>sudo ./xevious.x

0us, 62us, 3us, 3us, 3us, 3us, 2us, 3us
42us, 4us, 2us, 3us, 3us, 3us, 2us, 3us
65us, 4us, 3us, 3us, 3us, 2us, 3us, 3us
51us, 4us, 3us, 2us, 3us, 3us, 2us, 3us
45us, 4us, 3us, 3us, 4us, 2us, 3us, 3us
46us, 4us, 2us, 3us, 3us, 2us, 3us, 3us
44us, 4us, 6us, 3us, 3us, 3us, 4us, 2us
45us, 4us, 3us, 3us, 2us, 3us, 3us, 2us

単位はmsではなくusだ。思っていたより高速だな。
左端の値が大きいのは、改行時に画面の更新が入るためだろう。

« 湿地畑の草刈り | トップページ | ペルセウス座流星群 »

電子工作」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: RaspPiでPSG #4:

« 湿地畑の草刈り | トップページ | ペルセウス座流星群 »

最近のトラックバック