當前位置:首頁 » 編程語言 » c語言編寫音樂

c語言編寫音樂

發布時間: 2022-07-16 00:08:35

『壹』 急求高手啊,怎麼在c語言程序中寫一段音樂啊!!!!

編譯能通過---------- 編譯時把注釋去掉

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct song{ //定義一個歌曲結構
int id; //歌曲號
char title[20]; //歌曲名
char singer[20]; //歌手名
};

typedef struct song SONG; //把結構命名為 SONG

int main( void )
{
SONG songlist[100]; //定義一個存儲歌曲信息的列表,長100
int i=0,j;
int c;

clrscr();

while (i<=100) {
printf( "please enter the song's id, title and singer:\n" );

//輸入歌曲號 然後空格 輸入歌曲名 然後空格 輸入歌手名 然後回車

scanf( "%d%s%s", &songlist[i].id, songlist[i].title, songlist[i].singer);
i++;

//每次輸入完一條信息後,把列表中的歌曲信息全部列印出來看一下
printf("the songlist is below:\n\n");
for( j=0; j<=i; j++){
printf( "%d %s %s\n", songlist[j].id, songlist[j].title, songlist[j].singer );
}

printf("\n");

}

getch();
return 0;
}

或者是
#include "dos.h"
#include "stdio.h"
#define time 10000 /*預定義節拍長度 time(一拍)*/
#define time0 5000 /*預定義半節拍長度 time0*/
#define time1 15000 /*預定義1.5節拍長度 time1*/
#define time2 20000 /*預定義2節拍長度 time2*/
#define time3 30000 /*預定義3節拍長度 time3*/
#define _a 262 /*預定義低音音符1~7*/
#define _b 294
#define _c 330
#define _d 349
#define _e 392
#define _f 440
#define _g 494
#define a 523/*預定義中音音符1~7*/
#define b 587
#define c 659
#define d 698
#define e 784
#define f 880
#define g 988
#define a_ 1047/*預定義高音音符1~7*/
#define b_ 1175
#define c_ 1319
#define d_ 1397
#define e_ 2568
#define f_ 1760
#define g_ 1976
main()
{
int i=0,j;
unsigned milliseconds;
int music[1000]={
f,time,
f,time,
g,time0,
f,time,
f,time,
g,time0,
f,time,
g,time,
a_,time,
g,time,
f,time,
g,time0,
f,time0,
d,time,
c,time,
a,time,
c,time,
d,time,
c,time,
c,time0,
a,time0,
_g,time,
f,time,
g,time,
a_,time,
g,time,
f,time,
g,time0,
f,time0,
d,time1,
c,time,
a,time,
c,time,
d,time,
c,time,
c,time0,
a,time0,
g,time1,
f,time,
f,time,
g,time1,
f,time,
f,time,
g,time1,
c,time,
d,time,
g,time0,
f,time0,
c,time,
d,time,
g,time0,
f,time0,
d,time0,
d,time,
c,time3
}
;
while(music[i]!='\0')
{
if(music[i]<=494) /*判斷不是低音*/
{
milliseconds=music[i+1];

for(j=1;j<8;j++)
{
switch(j)
{
case 1: sound(a);
delay(milliseconds);break;
case 2: sound(b);
delay(milliseconds);break;
case 3: sound(c);
delay(milliseconds);break;
case 4: sound(d);
delay(milliseconds);break;
case 5: sound(e);
delay(milliseconds);break;
case 6: sound(f);delay(milliseconds);break;

case 7: sound(g);
delay(milliseconds);break;
}
nosound();
}
}
if(music[i]>494&&music[i]<988) /*判斷不是中音*/
{
milliseconds=music[i+1];
for(j=1;j<8;j++)

{
switch(j)
{
case 1: sound(_a);
delay(milliseconds);break;
case 2: sound(_b);
delay(milliseconds);break;
case 3: sound(_c);
delay(milliseconds);break;
case 4: sound(_d);
delay(milliseconds);break;
case 5: sound(_e);
delay(milliseconds);break;
case 6: sound(_f);
delay(milliseconds);break;
case 7: sound(_g);
delay(milliseconds);break;
}
nosound();
}
}
if(music[i]>988) /*判斷不是高音*/
{
milliseconds=music[i+1];
for(j=1;j<8;j++)
{
switch(j)
{
case 1: sound(a_);
delay(milliseconds);break;
case 2: sound(b_);
delay(milliseconds);break;
case 3: sound(c_);
delay(milliseconds);break;
case 4: sound(d_);
delay(milliseconds);break;
case 5: sound(e_);
delay(milliseconds);break;
case 6: sound(f_);
delay(milliseconds);break;
case 7: sound(g_);
delay(milliseconds);break;
}
nosound();
}
}
nosound();
i=i+2;
}
}

『貳』 c語言怎麼寫插入音樂的程序

http://..com/question/231143472.html?push=core
http://..com/question/24018920.html

實訓項目三 樂譜播放程序設計
2009-03-19 21:25
一、實訓目的
1、用C語言開發音樂程序,寫自己喜歡或創作的音樂,使在沒有樂器的情況下聽到自己創作的音樂。
2、鞏固文件讀取和數組的有關知識。
3、學習使用PC機揚聲器的兩個控制函數。
二、功能要求
自己創作樂曲,將其轉換為計算機程序能夠識別的電子文本格式,利用PC機揚聲器的功能播放該樂曲。
三、編程參考
1、發聲原理
編寫音樂程序時,首先需要製作被演奏音樂的樂譜文件。製作樂譜文件可用不同的符號標記,只要所編制的程序易於識別即可。
下面是編制樂譜文件的一種規則:最高音在每個音的前面加「*」:高音,在每個音的前面加「h」;中音,在每個音的前面加「m」;低音,在每個音的前面加「l」。
「*」,「h」,「m」,「l」 與其控制的音符構成音高,決定發聲頻率。音高的後面是音長,可用整數或小數輸入,以控制延時,但中間必須用空格分開。樂譜文件的最前端是一個整數,表示音長基數,一般為300的倍數。樂譜文件的最末端是樂譜文件結束符「##」,以表示樂譜文件結束。
每個音的音長=音長基數*節拍數,其中,音長基數是樂譜文件的第一個字元,如上面樂譜文件為3600,每個音的音頻可用一模擬頻率值輸入。下面是中央C及其前後4個8度中各個音符的頻率值
低8度 1 2 3 4 5 6 7
131 147 165 176 196 220 247
中央C 1 2 3 4 5 6 7
262 296 329.7 349.2 392 440 493.9
高8度 1 2 3 4 5 6 7
523.3 587.3 659.3 698.5 784.0 880 987.8
2、PC機揚聲器的兩個控制函數
sound() 以指定頻率打開PC機的揚聲器,頻率以赫茲為單位。
nosound() 關閉揚聲器。
3、樂譜實例
巴赫的《小步舞曲》:
600 h2 4 m5 1 m6 1 m7 1 h1 1 h2 4 m5 4 m5 4 h3 4 h1 1 h2 1 h3 1 h4 1 h5 4 m5 4 m5 4 h1 4 h2 1 h1 1 m7 1 m6 1 m7 4 h1 1 m7 1 m6 1 m5 1 m4 4 m5 1 m6 1 m7 1 m5 1 m6 6 l2 1 m1 1 l7 1 l6 1 h2 4 m5 1 m6 1 m7 1 h1 1 h2 4 m5 4 m5 4 h3 4 h1 1 h2 1 h3 1 h4 1 h5 4 m5 4 m5 4 h1 4 h2 1 h1 1 m7 1 m6 1 m7 4 h1 1 m7 1 m6 1 m5 1 m6 4 m7 1 m6 1 m5 1 m4 1 m5 10 ##
四、拓展訓練
1、製作選曲菜單,使其可以播放多首樂曲;
2、修改某些參數,改變樂曲播放速度。
源程序
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
void main(int argc,char *argv[])
{ FILE *fp;
int rate;
char sound_high[3];
int sound_long;
register int i=0,j;
int sign=0;
float str[200][2];
if(argc!=2) /*命令行參數個數不正確*/
{ printf("Parameters Errors!\n");
exit(1);
} if((fp=fopen(argv[1],"r"))==NULL) /*文件打開失敗*/
{ printf("Open file music.doc Errors!\n");
exit(1);
} fscanf(fp,"%d",&rate);/*讀取音長基數的值*/
while(!feof(fp)&&!sign) /*文件沒有結束並且數據還是樂譜*/
{ fscanf(fp,"%s%d",sound_high,&sound_long); /*得到音頻,音長的數值*/
str[i][1]=rate*sound_long; /*音長=音長基數*節拍數*/
switch(sound_high[0])
{ case'*': /*最高音*/
switch(sound_high[1]) /*確定發聲頻率*/
{ case'1':
str[i++][0]=1046.5;
break;
case'2':
str[i++][0]=1174.7;
break;
case'3':
str[i++][0]=1318.5;
break;
case'4':
str[i++][0]=1396.9;
break;
case'5':
str[i++][0]=1568;
break;
case'6':
str[i++][0]=1760;
break;
case'7':
str[i++][0]=1975.5;
break;
default:
printf("\nErrors in music.doc\n");
exit(1);
}
break;
case'h': /*高音*/
switch(sound_high[1])
{ case'1':
str[i++][0]=523.3;
break;
case'2':
str[i++][0]=587.3;
break;
case'3':
str[i++][0]=659.3;
break;
case'4':
str[i++][0]=698.5;
break;
case'5':
str[i++][0]=784.0;
break;
case'6':
str[i++][0]=880;
break;
case'7':
str[i++][0]=987.8;
break;
default:
printf("\nErrors in music.doc\n");
exit(1);
}
break;
case'm': /*中音*/
switch(sound_high[1])
{ case'1':
str[i++][0]=262;
break;
case'2':
str[i++][0]=296;
break;
case'3':
str[i++][0]=329.6;
break;
case'4':
str[i++][0]=349.2;
break;
case'5':
str[i++][0]=392;
break;
case'6':
str[i++][0]=440;
break;
case'7':
str[i++][0]=493.9;
break;
default:
printf("\nErrors in music.doc\n");
exit(1);
}
break;
case'l': /*低音*/
switch(sound_high[1])
{ case'1':
str[i++][0]=131;
break;
case'2':
str[i++][0]=147;
break;
case'3':
str[i++][0]=165;
break;
case'4':
str[i++][0]=176;
break;
case'5':
str[i++][0]=196;
break;
case'6':
str[i++][0]=220;
break;
case'7':
str[i++][0]=247;
break;
default:
printf("\nErrors in music.doc\n");
exit(1);
}
break;
case'#':
if(sound_high[1]=='#')sign=1;
break;
default:
printf("\nErrors in music.doc\n");
exit(1);
} }
for(j=0;j<=i-1;j++)
{ sound(str[j][0]); /*按頻率發出歌曲的音調*/
delay(str[j][1]);
} nosound(); /*關閉揚聲器*/
}

『叄』 如何用C語言編寫音樂歌曲

很簡單的。

計算機發聲原理:
聲音有三個特性:響度、音調、音色。

響度,這個非常好理解。就是我們感覺到的聲音的大小。具體點說就是由「振幅」決定,振幅越大響度越大。一般計量響度的單位是分貝,dB。
音調,這個就是聲音的高低,由「頻率」決定,頻率越高音調越高。頻率單位是赫茲,符號Hz。
音色,在生活當中,我們會發現各種物品發出的聲音的特點是不一樣的,如二胡和笛子。聲音的特性就是音色。而決定聲音的音色是由於物體本身的材料、結構。

對於我們的計算機而言。發聲的設置都是固定了的。要麼要計算機上的那個喇叭,那麼是外接的音響等。

現在這里對計算機上的那個喇叭用Turbo C 2.0進行編程,使之發出動聽的音樂《梁祝》。

第一步:定義《梁祝》的每一個音符的頻率和時間,將定義好的頻率和時間寫入文件或者保存在數組裡面。如果僅僅是寫一兩個程序自己玩玩的話,那直接保存在數組裡面就可以了。如果你想自己寫個播放器的話,那你先自己定義一種音樂格式文件(類似.mp3、.wav這種文件,這里暫時把這個文件定為.mymusic),將《梁祝》每個音符的頻率、時間寫入這個自定義的音樂格式文件liangzhu.mymusic。

第二步:完成了liangzhu.mymusic文件的定義後,我們要做的事情就是讀文件,控制喇叭發聲。這個具體可以參照現有的資料。這里需要事先寫幾個函數,讀文件的函數,暫停函數,頻率對照函數等等。

第三步,將上面的程序鏈接起來,就OK了。

將上面的步驟優化下,一個DIY的音樂播放器就成功了。
我上面說的只是控制了聲音的頻率和時間,其實還可以控制響度。對於一些特殊的設備,控制音色也不是不可能。

這種程序我在大一的時候寫過。現在想起來不難的。
主要是對C語言是否熟練,當然,你想要實現一個播放器,那你途中會遇到很多困難的。
祝你好運!

『肆』 用C語言怎麼編寫音樂程序

0x18, 0x30, 0x1C , 0x10,//格式為: 頻率常數, 節拍常數, 頻率常數, 節拍常數。
我猜測可能是單片機編程。

以0x開頭的為16進制數字,它對應聲音的頻率或節拍。
那麼0x18到底代表高音1還是中音3,這取決於單片機生產廠商,一般它會在說明書上說明。

PS:如果你想搞音樂編程,可以使用高級的音樂庫文件。

熱點內容
安卓手機數字怎麼變成紅色 發布:2025-02-01 22:50:20 瀏覽:403
康佳29寸電視存儲器壞怎麼代換 發布:2025-02-01 22:40:44 瀏覽:188
訪問的結果 發布:2025-02-01 22:30:12 瀏覽:176
cmd訪問網站 發布:2025-02-01 22:02:45 瀏覽:441
清除svn緩存 發布:2025-02-01 22:01:04 瀏覽:946
安卓模擬器怎麼用鍵盤操作 發布:2025-02-01 21:55:24 瀏覽:809
安卓手機屏幕為什麼會變色 發布:2025-02-01 21:55:20 瀏覽:824
安卓存摺怎麼看余額 發布:2025-02-01 21:53:34 瀏覽:771
其他電腦怎麼設置訪問伺服器 發布:2025-02-01 21:34:27 瀏覽:896
如何敲編程 發布:2025-02-01 21:26:13 瀏覽:25