怎么在c程序里加音乐

时间:2025-01-27 18:14:10 单机游戏

在C程序中添加音乐可以通过以下几种方法实现:

方法一:使用PlaySound函数

`PlaySound`函数是Windows API中用于播放音频的函数,支持多种音频格式,如WAV、MP3等。以下是一个使用`PlaySound`函数播放WAV文件的示例:

```c

include

include

pragma comment(lib, "winmm.lib")

int main() {

PlaySound("c:\\sound\\music.wav", NULL, SND_ASYNC | SND_NODEFAULT);

return 0;

}

```

方法二:使用mciSendString函数

`mciSendString`函数可以播放多种媒体格式,包括MP3、WMA、WAV和MID。以下是一个使用`mciSendString`函数播放MP3文件的示例:

```c

include

include

pragma comment(lib, "winmm.lib")

int main() {

initgraph(640, 480); // 初始化图形界面

mciSendString("open music.mp3 alias mymusic", NULL, 0, NULL);

outtextxy(0, 0, "按任意键开始播放");

_getch();

mciSendString("play mymusic", NULL, 0, NULL);

return 0;

}

```

方法三:使用多线程播放背景音乐

可以通过创建子线程并使用`PlaySound`函数在后台播放音乐,这样即使主程序退出,背景音乐也会继续播放。以下是一个使用多线程播放背景音乐的示例:

```c

include

include

pragma comment(lib, "winmm.lib")

DWORD WINAPI play_bgm_poc(LPVOID lpParameter) {

PlaySound("sounds\\背景音乐.wav", NULL, SND_FILENAME | SND_ASYNC);

return 0;

}

int main() {

CreateThread(NULL, 0, play_bgm_poc, NULL, 0, NULL);

// 主程序的其他代码

return 0;

}

```

方法四:使用外部音频库

还可以通过调用外部音频库(如SDL、PortAudio等)来实现更复杂的音频处理和控制。以下是一个使用SDL库播放WAV文件的示例:

```c

include

int main(int argc, char* argv[]) {

if (SDL_Init(SDL_INIT_AUDIO) < 0) {

printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());

return 1;

}

SDL_AudioSpec want, have;

want.freq = 44100;

want.format = SDL_S16;

want.channels = 2;

want.samples = 4096;

want.callback = NULL;

want.userdata = NULL;

SDL_AudioDeviceID dev = SDL_OpenAudioDevice(NULL, 0, &want, &have, SDL_AUDIO_ALLOW_FORMAT_CHANGE);

if (dev == 0) {

printf("SDL could not open audio device! SDL_Error: %s\n", SDL_GetError());

SDL_Quit();

return 1;

}

SDL_QueueAudio(dev, (void*)SDL_LoadWAV("sounds\\背景音乐.wav"), SDL_GetWAVLength(SDL_LoadWAV("sounds\\背景音乐.wav")));

SDL_Event event;

int running = 1;

while (running) {

while (SDL_PollEvent(&event)) {

if (event.type == SDL_QUIT) {

running = 0;

}

}

SDL_Delay(10);

}

SDL_CloseAudioDevice(dev);

SDL_Quit();

return 0;

}

```

总结

以上方法各有优缺点,选择哪种方法取决于具体需求和环境。如果需要简单的音频播放,`PlaySound`和`mciSendString`函数是不错的选择。如果需要更复杂的音频处理和控制,可以考虑使用外部音频库。