函數(shù)void sound(unsigned frequency);

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)建站專業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站建設(shè)、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!
以指定頻率打開PC揚(yáng)聲器
nosound :關(guān)閉PC揚(yáng)聲器
原型為: void nosound(void);
delay 用于將程序的執(zhí)行暫停一段時間(毫秒)
原型為:void delay(unsigned milliseconds);
如delay(5000)表示延遲5秒
sound()函數(shù)用于讓pc喇叭發(fā)聲,nosound()函數(shù)用于使正在發(fā)聲的pc喇叭靜音。要使程序中的發(fā)聲的具體方法,是調(diào)用sound()函數(shù)并延遲一定時間,然后使用nosound()函數(shù)靜音,具體語句實(shí)現(xiàn)方法舉例如下:
sound(100);
delay(100);
nosound();
它們?nèi)齻€都在“dos.h”里面,
至于d(x,y,z)應(yīng)該是程序員自己定義的函數(shù),我沒見過。
可以使用PlaySound()函數(shù)播放聲音文件,
該函數(shù)原型位于#include mmsystem.h中,
因此要使用PlaySound,首先需要添加對這個頭文件的引用。
提示:mm就是MultiMedia的簡寫,多媒體
【1、函數(shù)使用說明】
函數(shù)原型為: BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
返回值表示是否播放成功。
參數(shù)pszSound是要播放聲音的文件名,
只支持WAV等格式的文件(應(yīng)該不能播放MP3格式文件);
你可以去mp3.baidu.com用“wav”為關(guān)鍵詞可以搜到很多wav音樂,
也可以用工具將其他格式的轉(zhuǎn)換為wav格式的。
參數(shù)hmod是應(yīng)用程序的實(shí)例句柄,一般傳遞NULL就可以;
參數(shù)fdwSound是標(biāo)志的組合掩碼,
可選值有SND_FILENAME、SND_ASYNC、SND_SYNC等。
SND_FILENAME表示pszSound參數(shù)指定的是文件名(pszSound還可以指定資源、內(nèi)存音樂、系統(tǒng)音樂等等);
SND_ASYNC:用異步方式播放聲音,PlaySound函數(shù)在開始播放后立即返回;
SND_SYNC:同步播放聲音,在播放完后PlaySound函數(shù)才返回;
SND_LOOP一遍遍的重復(fù)播放聲音,必須與SND_ASYNC標(biāo)志一塊使用。
【2、使用舉例】
PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 啟
動.wav"),NULL,SND_FILENAME|SND_SYNC);
注意的問題:文件名中的反斜線要用“\\”,
因?yàn)镃語言中“\”默認(rèn)是轉(zhuǎn)義符,
如果要表示“\”則需要使用“\\”,
對這點(diǎn)不明白的請回去翻一下C語言的書;
對中文字符串要使用TEXT宏。
我們知道,音樂是音高和音長的有序組合,設(shè)計(jì)微機(jī)音樂最重要的就是如何定義音高和音長,以及如何讓揚(yáng)聲器發(fā)出指定的音符。下面給出音符與頻率的關(guān)系表。C語言提供的三個函數(shù)sound( )、nosound( )和clock( )可以很方便地解決上述的問題。sound( )函數(shù)可以用指定頻率打開PC機(jī)揚(yáng)聲器直到用nosound( )函數(shù)來關(guān)閉它; clock( )函數(shù)正好用來控制發(fā)聲時間,而且它不受PC機(jī)主頻高低的影響。下面這段程序可使微機(jī)發(fā)出c調(diào)1的聲音。
音符與頻率關(guān)系表
音符 c d e f g a b
1 2 3 4 5 6 7
頻率 262 294 330 349 392 440 494
音符 c d e f g a b
1 2 3 4 5 6 7
頻率 523 587 659 698 784 880 988
音符 c d e f g a b
1 2 3 4 5 6 7
頻率 1047 1175 1319 1397 2568 1760 1976
#includestdio.h
#includedos.h
void pause(int);
void sound1(int,int);
void main(void)
{
int i,freq,speed=5;
int time=4*speed;
char *qm="iddgwwwQQgfff dddfghhhggg ddgwwwqqgfff\
ddffhjqqqqq wpggjhgddgqq hhqwwqjjjggg\
ddgwwwqqqgfff ddffhjqqqqqq";/*定義歌曲*/
while (*qm++ !='\0'){
i=1;
switch(*qm){
case 'k':
time=1*speed; i=0;
break;
case 'i':
time=6*speed; i=0;
break;
case 'o':
time=10*speed; i=0;
break;
case 'p':
pause(time); i=0;
break;
case 'a':
freq=523;
break;
case 's':
freq=587;
break;
case 'd':
freq=659;
break;
case 'f':
freq=698;
break;
case 'g':
freq=784;
break;
case 'h':
freq=880;
break;
case 'j':
freq=988;
break;
case 'z':
freq=262;
break;
case 'X':
freq=294;
break;
case 'c':
freq=330;
break;
case 'v':
freq=349;
break;
case 'b':
freq=392;
break;
case 'n':
freq=440;
break;
case 'm':
freq=494;
break;
case 'q':
freq=1047;
break;
case 'w':
freq=1175;
break;
case 'e':
freq=1319;
break;
case 'r':
freq=1397;
break;
case 't':
freq=2568;
break;
case 'y':
freq=1760;
break;
case 'u':
freq=1976;
break;
default:
i=0;
break;
}
if(i)
sound1(freq,time);
}
}
void sound1(int freq,int time) /*freq為頻率,time為持續(xù)時間*/
{
union{
long divisor;
unsigned char c[2];
}count;
unsigned char ch;
count.divisor=1193280/freq; /* 1193280 是系統(tǒng)時鐘速率*/
outp(67,182);
outp(66,count.c[0]);
outp(66,count.c[1]);
ch=inp(97);
outp(97,ch|3);
pause(time);
outp(97,ch);
}
void pause(int time)
{
int t1,t2;
union REGS in,out;
in.h.ah=0X2c;
int86(0X21,in,out); /* 取當(dāng)前時間*/
t1=t2=100*out.h.dh+out.h.dl; /*out.h.dh 為秒值,out.h.dl 為1/100 秒值*/
while(t2-t1time)
{
int86(0X21,in,out);
t2=100*out.h.dh+out.h.dl;
if (t2t1)t2+=6000; /* 增加一分鐘*/
}
}
新聞名稱:c語言聲音控制的函數(shù),c語言發(fā)聲函數(shù)
鏈接地址:http://chinadenli.net/article13/dsicdds.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站營銷、關(guān)鍵詞優(yōu)化、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)