❶ 在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