當前位置:首頁 » 編程語言 » c語言程序添加wav音頻
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言程序添加wav音頻

發布時間: 2023-04-12 14:55:22

❶ 在c語言程序中怎樣載入背景音樂啊,是背景音樂哦,求函數具體用法和實例。謝謝

代碼如下:

#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(); //歡迎界面上的選項菜單

}

(1)c語言程序添加wav音頻擴展閱讀

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語言編寫程序將多個wav文件拼接成一個音頻wav文件並播放

這不是三言兩語的事情,合作wav文件操作並不簡單。要研究好wav文件結構,圓敏讀取文件頭,再進行分析和操此腔轎作森肆。
有兩種辦法:

1.連續播放,例如:

#include<stdio.h>
#include<windows.h>
#include<mmsystem.h>
#pragmacomment(lib,"winmm.lib")
intmain(){
PlaySound("C:\Users\wang\test1.wav",NULL,SND_FILENAME);
PlaySound("C:\Users\wang\test2.wav",NULL,SND_FILENAME);
PlaySound("C:\Users\wang\test3.wav",NULL,SND_FILENAME);
return0;
}


2.系統自帶的「windows movie maker」。運行windows movie maker,然後選擇「導入音頻或音樂」之後把你需要的文件添加進來。然後按照你自己需要排列的順序把這些文件依次拖到下方的時間線上。然後點左上方的「文件」選項,最後保存電影文件即可。

❸ c語言中如何播放wav格式的聲音函數

如果是播放wav文件 。
BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );
lpszSound 聲音文件的路徑和文件名
hmod 文件播放為NULL,載入到內慎明存後播放需提供handle. 原文(This parameter must be NULL unless SND_RESOURCE is specified in fdwSound. )
fuSound 播放方式寬世告(這個太多,自己查返激吧。)

Header: Declared in mmsystem.h.
Import Library: Use winmm.lib.

第一次抄MSDN。

❹ C++讀入音頻wav文件

老舊的程序版本了,可以參考一下:(其中BufferSize保存的是WAV中的音頻數據)

DSBUFFERDESC dsbd; //結構
LPWAVEFORMATEX wav; //聲音格式

DWORD len; //文件長度
BYTE *buf; //臨時緩沖區
LPVOID ptr1; //指針1
LPVOID ptr2; //指針2
DWORD size1;
DWORD size2;
DWORD BufferSize; //DirectSoundBuffer 大小

long WavLong;
FILE* fp = fopen(file,"rb");
if(fp == NULL)
return false;
fseek(fp,0x28,SEEK_SET);
fread(&WavLong,sizeof(long),1,fp); //讀取聲音數據長度
len=WavLong+WAV_HDR_SIZE; //文件長度
BufferSize=len-WAV_HDR_SIZE; //設置緩沖去大小

buf=(BYTE *)GlobalAlloc(GPTR,len);
if(buf == NULL)
{
fclose(fp);
return false;
}
fseek(fp,0x00,SEEK_SET);
fread(buf,len,1,fp);
fclose(fp);

//讀取聲音數據到臨時緩沖區
ptr1=buf+20;
wav=(LPWAVEFORMATEX)(ptr1);

//FILE*txp = fopen("wav.txt","wt");
//fprintf(txp,"samlpe rate:%d blockalign:%d avgbytes:%d bitespersample:%d",
// wav->nSamplesPerSec,wav->nBlockAlign,wav->nAvgBytesPerSec,wav->wBitsPerSample);
//fclose(txp);

memset(&dsbd,0,sizeof(dsbd));
dsbd.dwSize=sizeof(dsbd);
dsbd.dwFlags=/*DSBCAPS_CTRLDEFAULT|*/DSBCAPS_STATIC;
dsbd.dwBufferBytes=len-WAV_HDR_SIZE;
dsbd.lpwfxFormat=wav;
if(lpDS->CreateSoundBuffer(&dsbd,ppDSB,NULL)!=DS_OK)
return false;

if( ((*ppDSB)->Lock(0,BufferSize,&ptr1,&size1,&ptr2,&size2,0))!=DS_OK)
return false;
memcpy(ptr1,buf+WAV_HDR_SIZE,size1); //拷貝數據到聲音緩沖區
if(size2)
memcpy(ptr2,buf+size1+WAV_HDR_SIZE,size2);//拷貝數據到聲音緩沖區
if((*ppDSB)->Unlock(ptr1,size1,ptr2,size2)!=DS_OK)
return false;
GlobalFree(buf);
return true;

❺ 在VS 2010環境下怎麼用C語言實現在程序中播放音頻文件,假設文件為D:\\music.wav,請寫出代碼,以及需要哪

# include<windows.h>
# include<mmsystem.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdLine,int nCmdShow)
{
PlaySound("文件困廳塌名",NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
MessageBox(NULL,"結束播放?","詢問",MB_OK|MB_ICONQUESTION);
return 0;
}

可以只用一個playsound函數,需要簡歷win32工伏笑程,playsound函汪圓數只能播放wav格式的文件。

❻ 怎麼用c語言播放特定目錄里的wav文件

用C語言播放音樂,一般需要額外的庫或者調用系統的API函數。
以Windows為例,可以通過PlaySound函數播放wav格式的音樂。示例如下,代碼在vc6.0中編譯通過。
#include<stdio.h>
#include<windows.h>
#include<mmsystem.h>
#pragma
comment(lib,
"WINMM.LIB")
int
main()
{
PlaySound(TEXT("1.wav"),0,SND_FILENAME);
//1.wav是要播放的音樂文件
return
0;
}
如果想播放mp3音樂可以使用如下代碼。
注意:生成程序後,請在cmd中執行此程序,不要在vc/vs的IDE中運行。#include
<windows.h>
#include
<mmsystem.h>
#include
<stdio.h>
#pragma
comment(lib,
"Winmm.lib")
int
main(int
argc,
char
*argv[])
{
//絕對地址形式
TCHAR
fileName[]="ganlusi.mp3";
TCHAR
shortName[MAX_PATH];
GetShortPathName(fileName,shortName,sizeof(shortName)/sizeof(TCHAR));
TCHAR
cmd[MAX_PATH+10];
wsprintf(cmd,"play
%s",shortName);
mciSendString(cmd,NULL,
0,
NULL);
Sleep(5
*
60
*
1000);
//這里是防止一播放就結束做的延遲
return
0;
}

❼ C語言編寫程序將多個wav文件拼接成一個音頻wav文件並播放

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

#defineRIFF_SIGN_ID0x46464952ul
#defineWAVE_SIGN_ID0x45564157ul
#defineFMT__SIGN_ID0x20746D66ul
#defineFACT_SIGN_ID0x74636166ul
#defineDATA_SIGN_ID0x61746164ul

#ifndefDWORD
typedefunsignedlongDWORD;
#endif

#ifndefWORD
typedefunsignedshortWORD;
#endif

#ifndefBYTE
typedefunsignedcharBYTE;
#endif
structRIFF_HEADER
{
DWORDRiffID;//資源交換文件標志0x46464952'R','I','F','F'
DWORDRiffSize;//從下個地址開始到文件尾的總位元組數
DWORDRiffFormat;//WAV文件標志0x45564157'W','A','V','E'
};

structWAVE_FORMAT
{
WORDFormatTag;//格式種類(值為1時,表示數據為線性PCM編碼)
WORDChannels;//通道數,單聲道為1,雙聲道為2
DWORDSamplesPerSec;//采樣頻率
DWORDAvgBytesPerSec;//每秒所需位元組數
WORDBlockAlign;//數據塊對齊單位(每個采樣需要的位元組數)
WORDBitsPerSample;//每個采樣需要的bit數
WORDotherInfo;//附加信息(可選,通過Size來判斷有無)
};

structFMT_BLOCK
{
DWORDFmtID;//波形格式標志0x20746D66'f','m','t',''
DWORDFmtSize;//波形格式部分長度(一般為00000010H)
WAVE_FORMATwavFormat;//波形數據格式
};

structUNKNOW_BLOCK
{
DWORDID;//未知塊
DWORDSize;//未知塊長度
};

structFACT_BLOCK
{
DWORDFactID;//可選部分標識0x74636166'f','a','c','t'
DWORDFactSize;//可選部分長度
BYTEData[1];//可選部分數據
};

structDATA_BLOCK
{
DWORDDataID;//數據標志符0x61746164,'d','a','t','a'
DWORDDataSize;//DATA總數據長度位元組
BYTEData[1];//數據
};


BYTE*openWaveFile(constchar*name);
BYTE*getWaveData(BYTE*wav,int*dLen);
voidprintWaveFormat(BYTE*wav);
intsaveWaveFile(constchar*name,BYTE*wav);
BYTE*catWave(BYTE*&wav1,BYTE*&wav2);
size_tgetTotalLen(BYTE*wav);

intmain(intargc,char*argv[])
{
intdLen;
BYTE*data1=openWaveFile("1.wav");
printWaveFormat(data1);
BYTE*data2=openWaveFile("2.wav");
printWaveFormat(data2);
data1=catWave(data1,data2);
printWaveFormat(data1);
saveWaveFile("3.wav",data1);
return0;
}

BYTE*openWaveFile(constchar*name)
{
size_treadByte;
FILE*fp=fopen(name,"rb");
if(fp==NULL)returnNULL;

RIFF_HEADERfh;
if(fread(&fh,sizeof(fh),1,fp)!=1)
{
fclose(fp);
printf("RiffHeader文件長度錯誤 ");
returnNULL;
}
if(fh.RiffFormat!=WAVE_SIGN_ID||fh.RiffID!=RIFF_SIGN_ID)
{
fclose(fp);
printf("文件標識符錯誤ID:%08XFormat:%08X ",fh.RiffID,fh.RiffFormat);
returnNULL;
}
BYTE*r=newBYTE[fh.RiffSize+10],*pr;
if(r==NULL)
{
fclose(fp);
printf("內存申請錯誤 ");
returnNULL;
}
readByte=fread(r,1,fh.RiffSize-4,fp);
if(readByte!=fh.RiffSize-4)
{
delete[]r;
printf("wave文件長度錯誤%d%d ",readByte,fh.RiffSize);
returnNULL;
}
fclose(fp);

FMT_BLOCK*fb=(FMT_BLOCK*)r;
if(fb->FmtID!=FMT__SIGN_ID)
{
printf("格式標識符錯誤或格式大小錯誤ID:%08X ",fb->FmtID);
delete[]r;
returnNULL;
}
if(fb->wavFormat.FormatTag!=1)
{
delete[]r;
printf("不支持的格式Format:%d ",fb->wavFormat.FormatTag);
returnNULL;
}

pr=r+8+fb->FmtSize;
while(1)
{
UNKNOW_BLOCK*ub=(UNKNOW_BLOCK*)pr;
if(ub->ID==FACT_SIGN_ID)
{
printf("Fact標簽length:%d ",ub->Size);
pr+=8+ub->Size;
}
elsebreak;
}
DATA_BLOCK*db=(DATA_BLOCK*)pr;
if(db->DataID!=DATA_SIGN_ID)
{
delete[]r;
printf("數據錯誤 ");
returnNULL;
}
returnr;
}

BYTE*getWaveData(BYTE*wav,int*dLen)
{
UNKNOW_BLOCK*ub=(UNKNOW_BLOCK*)wav;
while(ub->ID!=DATA_SIGN_ID)
{
switch(ub->ID)
{
caseDATA_SIGN_ID:
break;
caseFMT__SIGN_ID:
caseFACT_SIGN_ID:
ub=(UNKNOW_BLOCK*)(((BYTE*)ub)+ub->Size+8);
break;
default:
printf("錯誤標簽%08X ",ub->ID);
returnNULL;
}
}
DATA_BLOCK*db=(DATA_BLOCK*)ub;
*dLen=db->DataSize;
returndb->Data;
}

size_tgetTotalLen(BYTE*wav)
{
size_tr=0;
UNKNOW_BLOCK*ub=(UNKNOW_BLOCK*)wav;
while(1)
{
switch(ub->ID)
{
caseDATA_SIGN_ID:
r+=ub->Size+8;
returnr;
caseFMT__SIGN_ID:
caseFACT_SIGN_ID:
r+=ub->Size+8;
ub=(UNKNOW_BLOCK*)(((BYTE*)ub)+ub->Size+8);
break;
default:
printf("錯誤標簽%08X ",ub->ID);
returnNULL;
}
}
return-1;
}
voidprintWaveFormat(BYTE*wav)
{
intlen;
getWaveData(wav,&len);
FMT_BLOCK*fb=(FMT_BLOCK*)wav;
printf("Wave格式:PCM ");
printf("通道數量:%d ",fb->wavFormat.Channels);
printf("采樣頻率:%dHz ",fb->wavFormat.SamplesPerSec);
printf("每秒所需位元組數:%d位元組 ",fb->wavFormat.AvgBytesPerSec);
printf("數據塊對齊單位:%d位元組 ",fb->wavFormat.BlockAlign);
printf("每個采樣需要的bit數:%dbit ",fb->wavFormat.BitsPerSample);
printf("長度:%.2f秒 ",(double)len/fb->wavFormat.AvgBytesPerSec);
}

BYTE*catWave(BYTE*&wav1,BYTE*&wav2)
{
FMT_BLOCK*fb1=(FMT_BLOCK*)wav2;
constFMT_BLOCK*fb2=(constFMT_BLOCK*)wav2;
if(
fb1->wavFormat.AvgBytesPerSec==fb2->wavFormat.AvgBytesPerSec&&
fb1->wavFormat.BitsPerSample==fb2->wavFormat.BitsPerSample&&
fb1->wavFormat.BlockAlign==fb2->wavFormat.BlockAlign&&
fb1->wavFormat.Channels==fb2->wavFormat.Channels&&
fb1->wavFormat.FormatTag==fb2->wavFormat.FormatTag&&
fb1->wavFormat.SamplesPerSec==fb2->wavFormat.SamplesPerSec)
{
intlen1=getTotalLen(wav1),len2;
BYTE*Data2=getWaveData(wav2,&len2);
BYTE*nD=newBYTE[len1+len2+10];
if(nD==NULL)returnNULL;
memcpy(nD,wav1,len1);
delete[]wav1;
wav1=nD;
BYTE*Data1=getWaveData(wav1,&len1);
DATA_BLOCK*db1=(DATA_BLOCK*)(Data1-8);
db1->DataSize+=len2;
memcpy(Data1+len1,Data2,len2);
returnwav1;
}
returnNULL;
}

intsaveWaveFile(constchar*name,BYTE*wav)
{
FILE*fp=fopen(name,"wb");
if(fp==0)return0;
intlen=getTotalLen(wav);
RIFF_HEADERrh;
rh.RiffFormat=WAVE_SIGN_ID;
rh.RiffID=RIFF_SIGN_ID;
rh.RiffSize=len+4;
fwrite(&rh,sizeof(rh),1,fp);
fwrite(wav,1,len,fp);
fclose(fp);
return1;
}

❽ C語言 怎麼編程播放WAV音樂

可以使用PlaySound()函數播放聲音文件,

該函數原型位於#include<mmsystem.h>中,

函數原型為:BOOLPlaySound(LPCSTRpszSound,HMODULEhmod,DWORDfdwSound);

參數pszSound是要播放聲音的文件名,

只支持WAV等格式的文件

參數hmod是應用程序的實例句柄,一般傳遞NULL就可以;

參數fdwSound是標志的組合掩碼,

可選值有SND_FILENAME、SND_ASYNC、SND_SYNC等。

SND_FILENAME表示pszSound參數指定的是文件名(pszSound還可以指定資源、內存音樂、系統音樂等等);

SND_ASYNC:用非同步方式播放聲音,PlaySound函數在開始播放後立即返回;

SND_SYNC:同步播放聲音,在播放完後PlaySound函數才返回;

SND_LOOP一遍遍的重復播放聲音,必須與SND_ASYNC標志一塊使用。

【2、使用舉例】
PlaySound(TEXT("C:\WINDOWS\Media\WindowsXP啟動.wav"),NULL,SND_FILENAME|SND_SYNC);

❾ C#中導入wav音頻文件,並設置屬性為「嵌入的資源」,怎麼在代碼中調用這個資源

System.IO.Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("兄伍殲命名空羨沖間橘好.xxx.wav");
然後播放這個stream就好了

❿ 如何在c語言程序中添加背景音樂

用PlaySound 函數可以播放 .wav 格式音樂。x0dx0a例如 下面 播放 紫竹調.wav 格式音樂,它存放在 D:\\zzz\\zzd.wav x0dx0a其它音樂格式能不能播放,要試驗一下才知道,也許不行,也許可以。x0dx0a#include x0dx0a#include x0dx0a#include x0dx0a#pragma comment(lib, "winmm.lib")x0dx0ax0dx0avoid main(){x0dx0aPlaySound (TEXT("D:\\zzz\\zzd.wav"), NULL, SND_ASYNC | SND_NODEFAULT);x0dx0a x0dx0awhile (1) x0dx0a{x0dx0a printf("program is running... here\n"); //這里跑你的程序,按 Ctrl-C 組合鍵,結束程序。x0dx0a Sleep(1000); //休息1秒x0dx0a}x0dx0ax0dx0aexit(0);x0dx0a}