用編程寫音樂
① 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(); /*關閉揚聲器*/
}
② 【跟娃學少兒編程scratch】scratch新手教程7課:自製演奏樂曲《小星星》
今天,我們將會製作一個簡單有趣的動畫,它不僅能夠演奏出《小星星》這首美妙的樂曲,還能讓編程變得更有趣。如果你對文字教程感興趣,也可以觀看視頻教程。
首先,打開Scratch編輯器。
我們從創建背景開始。選擇"Spotlight"作為第一個背景,然後添加第二個背景"stars"。默認背景將為"Spotlight"。
接下來,我們需要添加角色來演奏音樂。保留默認角色小貓,也可以根據個人喜好更換角色。為了演奏《小星星》,我們還需要一個吉他角色。在角色庫中選擇"Music"選項卡,添加一個"吉他"角色。
現在,我們開始為小貓和吉他編程。
為小貓編程,首先進行初始化,將角色大小設置為120,切換背景至"stars"。接著錄制報幕聲音:「下面請欣賞《小星星》」,使用「播放聲音等待播放完」中的「錄制……」功能錄制聲音,然後在聲音下拉框中選擇錄制的聲音,並調整大小。
為吉他編程,初始化大小為80,讓吉他彈奏《小星星》。在彈奏前,吉他大小調整為100,與小貓匹配。《小星星》的曲譜是CCGGAAGFFEEDDC、GGFFEEDGGFFEED、CCGGAAGFFEEDDC,我們這里只編寫第一句。每兩個音符換一個造型。
接下來,通過重復的代碼編寫,完成吉他彈奏的程序。整個動畫完成後的效果如下:彈奏前,小貓和吉他處於初始狀態;開始彈奏後,動畫將自動播放《小星星》。
如果你對其他曲譜感興趣,可以嘗試製作,比如《歡樂頌》、《鈴兒響叮當》、《粉刷匠》、《兩只老虎》等。現在,我們已經完成了今天的Scratch新手教程。快和孩子一起動手製作吧!
③ 如何用C語言編寫音樂歌曲
很簡單的。
計算機發聲原理:
聲音有三個特性:響度、音調、音色。
響度,這個非常好理解。就是我們感覺到的聲音的大小。具體點說就是由「振幅」決定,振幅越大響度越大。一般計量響度的單位是分貝,dB。
音調,這個就是聲音的高低,由「頻率」決定,頻率越高音調越高。頻率單位是赫茲,符號Hz。
音色,在生活當中,我們會發現各種物品發出的聲音的特點是不一樣的,如二胡和笛子。聲音的特性就是音色。而決定聲音的音色是由於物體本身的材料、結構。
對於我們的計算機而言。發聲的設置都是固定了的。要麼要計算機上的那個喇叭,那麼是外接的音響等。
現在這里對計算機上的那個喇叭用Turbo C 2.0進行編程,使之發出動聽的音樂《梁祝》。
第一步:定義《梁祝》的每一個音符的頻率和時間,將定義好的頻率和時間寫入文件或者保存在數組裡面。如果僅僅是寫一兩個程序自己玩玩的話,那直接保存在數組裡面就可以了。如果你想自己寫個播放器的話,那你先自己定義一種音樂格式文件(類似.mp3、.wav這種文件,這里暫時把這個文件定為.mymusic),將《梁祝》每個音符的頻率、時間寫入這個自定義的音樂格式文件liangzhu.mymusic。
第二步:完成了liangzhu.mymusic文件的定義後,我們要做的事情就是讀文件,控制喇叭發聲。這個具體可以參照現有的資料。這里需要事先寫幾個函數,讀文件的函數,暫停函數,頻率對照函數等等。
第三步,將上面的程序鏈接起來,就OK了。
將上面的步驟優化下,一個DIY的音樂播放器就成功了。
我上面說的只是控制了聲音的頻率和時間,其實還可以控制響度。對於一些特殊的設備,控制音色也不是不可能。
這種程序我在大一的時候寫過。現在想起來不難的。
主要是對C語言是否熟練,當然,你想要實現一個播放器,那你途中會遇到很多困難的。
祝你好運!
④ 我用 Python 寫了一款炫酷音樂播放器,想聽啥隨便搜!
在一次深夜編程時,我遇到了一個小小困擾。原本想一邊擼代碼,一邊享受音樂,卻發現許多喜歡的歌曲因為版權問題無法播放。於是,我決定用Python自己動手製作一款音樂播放器,既能解渴又滿足了對音樂的追求。
接下來,我將帶領大家一探究竟,看看如何運用Python打造一個集搜索、播放、管理為一體的音樂播放器。
核心功能設計
設計音樂播放器,首要任務是布局和功能規劃。我選擇使用PyQt5框架來構建界面。播放器的核心功能包括:通過關鍵詞搜索獲取音樂、播放音樂、控制播放模式、音量調節、以及播放歷史查看等。為了滿足不同用戶的個性化需求,我還額外設計了循環播放、單曲循環、隨機播放、上一首/下一首等附加功能。
UI設計與排版布局
在設計界面時,我遵循簡潔明了的原則,確保用戶能夠直觀地操作播放器。通過PyQt5,我成功地實現了界面布局,用戶只需輸入關鍵詞,即可搜索到音樂,點擊播放,還可以調整播放模式和音量。
音樂列表爬蟲
為了獲取音樂資源,我編寫了Python腳本,利用多線程技術高效地爬取音樂網站上的歌曲信息,包括歌曲名稱、歌手、URL等。這些數據將被實時顯示在搜索頁面中,方便用戶快速查找。
音樂播放功能
在獲取音樂資源後,我進一步實現了播放功能。用戶只需選擇音樂列表中的歌曲,即可通過多線程下載並播放。此外,我還加入了循環播放、單曲循環、隨機播放等多種播放模式,以及播放暫停、音量調節等功能,全方位滿足用戶需求。
附加功能
為了使音樂播放器更人性化,我還增加了上一首/下一首、播放歷史查看等附加功能。這些額外的設定,使得播放器不僅在基本功能上表現得游刃有餘,還能在細節上為用戶提供更多便利。
至此,我們已經成功構建了一款功能全面、操作簡便的音樂播放器。它不僅解決了我深夜編程時的音樂需求,還為更多追求個性化音樂體驗的用戶提供了新的選擇。通過Python的力量,我們可以親手創造屬於自己的音樂世界。