ptt 上看到的問題,原題意是在 Dev-C 下要發出聲音,

一開始我沒幫忙解得很好,

於此將該原始碼做修改與備份 ,有空再補上怎麼看簡單的譜寫 code 之心得。

 

/* some music */
#pragma comment(lib,"winmm.lib")
#include <windows.h>
#include <mmsystem.h>
#define FREQ_CNT 8 /* 中音 do ~ 中音 do,8個音階 */
#define QUARTER_SPEED 200  /* 定義 1/4 拍 */

int main()
{
    /* range: 37~32767 */
    const DWORD Freq[FREQ_CNT+1] = {0,524,588,660,698,784,880,998,1048 };

    /* freqence */
    const DWORD SpringGod_Freq[] = {
       2,0,3,5,8,   6,8,6,5,   4,0,5,3,1, 2,0,1,
       5,5,4,4, 3,5,3,2, 5,5,4,4, 3,5,3,2,
       1,0,3,5,8,   6,8,6,5,   4,0,5,3,1, 2,0,1
    };

    /* tempo */
    const DWORD SpringGod_Tempo[] = {
       3,1,1,2,2,    2,1,1,4,  3,1,1,2,2,4,1,4,
       2,2,2,2,2,    1,1,4,    2,2,2,2,2,1,1,4,
       3,1,1,2,2,    2,1,1,4,  3,1,1,2,2,4,1,4
    };

    int i;

    for(i=0; i!=sizeof(SpringGod_Freq)/sizeof(SpringGod_Freq[0]); ++i){
       if(SpringGod_Tempo[i]==Freq[0]) Sleep(SpringGod_Tempo[i]*QUARTER_SPEED);
       else Beep(Freq[SpringGod_Freq[i]], SpringGod_Tempo[i]*QUARTER_SPEED);
    }
    return 0;
}

 

音階對照表

低音 Do Do# Re Re# Mi Fa Fa# So So# La La# Si
頻率 262 277 294 311 330 349 370 392 415 440 464 494
中音 Do Do# Re Re# Mi Fa Fa# So So# La La# Si
頻率 524 554 588 622 660 698 740 784 830 880 928 988
高音 Do Do# Re Re# Mi Fa Fa# So So# La La# Si
頻率 1048 1108 1176 1244 1320 1396 1480 1568 1660 1760 1856 1976
 

若有建議的簡譜,請不吝提供,讓小弟研究,感激不盡。

edisonx 發表在 痞客邦 留言(2) 人氣()