調用DOS命令,讓 Windows Media Player 幫你播放

創新互聯公司網站建設由有經驗的網站設計師、開發人員和項目經理組成的專業建站團隊,負責網站視覺設計、用戶體驗優化、交互設計和前端開發等方面的工作,以確保網站外觀精美、成都網站建設、成都做網站易于使用并且具有良好的響應性。
下面播放 "zzd.wav"
你若有別的格式文件,Windows Media Player 能識別的都可以播放。
#include stdio.h
void play_wav(char *s){
char cm[100];
sprintf(cm,"mplay32.exe /play %s",s);
system(cm);
}
main()
{
char s[100]="zzd.wav";
play_wav(s);
getchar();
return 0;
}
我們知道,音樂是音高和音長的有序組合,設計微機音樂最重要的就是如何定義音高和音長,以及如何讓揚聲器發出指定的音符。下面給出音符與頻率的關系表。C語言提供的三個函數sound( )、nosound( )和clock( )可以很方便地解決上述的問題。sound( )函數可以用指定頻率打開PC機揚聲器直到用nosound( )函數來關閉它; clock( )函數正好用來控制發聲時間,而且它不受PC機主頻高低的影響。下面這段程序可使微機發出c調1的聲音。
音符與頻率關系表
音符 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為持續時間*/
{
union{
long divisor;
unsigned char c[2];
}count;
unsigned char ch;
count.divisor=1193280/freq; /* 1193280 是系統時鐘速率*/
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); /* 取當前時間*/
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; /* 增加一分鐘*/
}
}
代碼如下:
#include windows.h
#include mmsystem.h
#pragma comment(lib, "WINMM.LIB")
/*播放音樂*/
void playMusic()
{
//aiyo.wav是放在代碼文件中
PlaySound(TEXT("aiyo.wav"),0,SND_FILENAME | SND_ASYNC);
}
/**
* 主? 函? 數(音樂放第一排)
*/
void main()
{
playMusic();
title();? ? ? ? ? ? //歡迎界面上的標題
flower();? ? ? ? ? ?//打印字符畫
welcome();? ? ? ? ? //歡迎界面上的選項菜單
}
擴展資料
C語言解析WAV音頻文件:
C語言基本的二進制文件操作函數有fopen,fread等等。(注意是二進制文件操作函數,所以我們不討論fgets,這是普通的文本文件操作函數)
fread是一個函數。從一個文件流中讀數據,最多讀取count個項,每個項size個字節,如果調用成功返回實際讀取到的項個數(小于或等于count),如果不成功或讀到文件末尾返回 0。
它的函數原型為
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
而且C語言還有一種類型叫做結構體,它在內存中是順序存儲的。剛好我們也已經得知了WAV文件在文件中的順序以及該順序中每個部分對應的含義。
那么我們可以事先根據前面所說的WAV文件結構來定義好一個struct,然后在main主函數中初始化這個struct,并且通過fread的第一個參數帶入初始化好的這個struct,那么執行之后就會自動讀取該文件,并且按照順序自動把這些元數據填充進了我們初始化好的struct中。
分享名稱:c語言音樂函數 c語言演奏音樂
鏈接分享:http://www.yijiale78.com/article16/ddjggdg.html
成都網站建設公司_創新互聯,為您提供手機網站建設、網站營銷、網站設計公司、網站導航、網站排名、軟件開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯