在c语言程序中添加背景音乐,怎么给你的C语言程序添加BGM背景音乐?

大家好,我是阿汤哥,上篇文章讲了怎么在命令行能播放音乐。

但是有个问题,那个程序运行起来,只能播放音乐,你不能和程序交互。

今天和大家讲讲,怎么给你的程序添加背景音乐BGM,播放音乐的同时,你也能在命令行打印字符,敲字符,和程序进行互动。

如何添加背景音乐?

这里我们用到Windows系统的多线程接口。什么是多线程,你可能有点蒙圈,说白点,一个线程就是一个工人,可以给你干一件活。通常我们写的程序,一个Main函数,它只有一个主线程,程序顺序执行,一步步地。多线程就是除了主线程这个工人,还可以创建子线程,找来其他工人,同时给你做其他事情。

今天,我们就创建一个子线程,找另一个工人来,来播放背景音乐BGM,只要主程序不退出,背景音乐可以一直放。

一个简单的字符程序游戏:

输入字符'a',打印"A for Apple";

输入字符'b',打印"B for ball";

输入字符'c',打印“C for cat”。

同时,程序运行过程中,播放BGM。

介绍下Windows系统创建线程的关键函数CreateThread:

HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,

_In_ SIZE_T dwStackSize,

_In_ LPTHREAD_START_ROUTINE lpStartAddress,

_In_opt_ LPVOID lpParameter,

_In_ DWORD dwCreationFlags,

_Out_opt_ LPDWORD lpThreadId );

你可能有点懵,你先不用管它的具体含义,用起来很简单。在主函数里这样调用这个函数,创建线程:

CreateThread(NULL,0,线程函数名,NULL,0,NULL);

另外,线程要执行任务,需要有个对应的函数,先定义一个线程所要执行的函数:

这里,我们不妨命名为:play_bgm_poc。线程函数有他的固定格式,函数头这样写:

DWORD WINAPI play_bgm_poc(LPVOID lpParameter)

函数体里面,写播放音乐的代码。下面附上完整代码。

代码

/**

* 功能: 给程序添加BGM背景音乐

* Author: 阿汤哥

* 微信公众号:C语言修仙

*/

#pragma comment(lib,"Winmm.lib")

#include 

#include 

#include

#include

#include

#include

#include 

#include

int index = 0;

DWORD WINAPI play_bgm_poc(LPVOID lpParameter){

static MCI_OPEN_PARMS mciOpen;

static MCI_PLAY_PARMS mciPlay;

static MCI_DGV_SETAUDIO_PARMS mciSetAudioPara;

//开始播放

mciOpen.lpstrElementName = "D:\\dnxk.mp3";     //可以改成你自己的歌曲目录

mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);

mciSendCommand(mciOpen.wDeviceID, MCI_PLAY, MCI_DGV_PLAY_REPEAT,

(DWORD)&mciPlay);

//设置初始音量

mciSendCommand(mciOpen.wDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE |

MCI_DGV_SETAUDIO_ITEM,(DWORD)(LPVOID)&mciSetAudioPara);

printf("Playing BGM\n");

return 0;

}

int main(){

HANDLE hThread1;

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

CloseHandle(hThread1);

printf("hello world\n");

char ch;

while(1)

{

ch = getchar();

if (ch == 'a')

printf("A for apple\n\n");

else if (ch == 'b')

printf("B for ball\n\n");

else if (ch == 'c')

printf("C for cat\n\n");

}

return 0;

}

运行效果

见视频:

写在最后

你以后写程序,特别是那种大一点的程序,比如图书管理系统这些,运行时间比较长,短时间不退出的,可以加上背景BGM。

喜欢的话,记得分享和在看。

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在 C 语言程序添加背景音乐,你可以使用一些多媒体库,比如 SDL。 首先,你需要下载并安装 SDL 库。然后,在你的 C 程序包含头文件 `<SDL2/SDL.h>`。 接下来,你可以使用 SDL 函数 `Mix_OpenAudio` 来打开音频设备,并使用 `Mix_LoadMUS` 函数载音乐文件。你还可以使用 `Mix_PlayMusic` 函数来播放音乐。 例如: ``` #include <SDL2/SDL.h> int main(int argc, char *argv[]) { // 初始化 SDL 库 SDL_Init(SDL_INIT_AUDIO); // 打开音频设备 Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048); // 载音乐文件 Mix_Music *music = Mix_LoadMUS("bgm.mp3"); // 播放音乐 Mix_PlayMusic(music, -1); // 在这里处理你的程序逻辑... // 在结束程序之前,清理并关闭 SDL Mix_FreeMusic(music); Mix_CloseAudio(); SDL_Quit(); return 0; } ``` 注意:你需要在编译时链接 SDL 库。例如,在 GCC 编译器,你可以使用 `-lSDL2 -lSDL2_mixer` 选项来链接这些库。 ### 回答2: 要给C语言程序添加背景音乐,可以遵循以下步骤: 1. 首先,找到适合添加背景音乐的库。C语言常用的库有SDL、OpenAL等,它们支持音频操作。 2. 下载并安装所选库。可以通过在官方网站上下载相应的库文件,并根据库的安装说明进行安装。 3. 导入所需库的头文件。在你的C语言程序,使用#include命令导入所需库的头文件。这样可以在程序引用库提供的函数和数据类型。 4. 载音频文件。使用库提供的函数,将需要作为背景音乐的音频文件载到内存。通常,这需要提供音频文件的路径和文件格式。 5. 配置音频设备。通过调用库的函数,配置音频设备的参数,比如采样率、通道数和音频格式。这些参数需要与你载的音频文件相匹配,以确保正确播放背景音乐。 6. 播放音频文件。使用库的函数,开始播放载的音频文件。你可以根据需要设置音量、循环和暂停等功能。 7. 等待音频播放完成。为了保证程序执行顺利,你可以使用相应的函数来等待音频播放完成,然后继续执行后续代码。 8. 释放资源。在程序结束时,记得释放之前载的音频文件和音频设备资源,以免造成内存泄漏。 通过以上步骤,你可以成功给C语言程序添加背景音乐。不同的库可能有不同的操作步骤和函数,所以需要根据所选库的文档和示例代码进行具体实现。 ### 回答3: 要给C语言程序添加背景音乐,可以通过以下几个步骤来实现。 首先,需要确保你的系统支持音频播放功能。可以使用相关的库文件来实现音频播放,比如ALSA库或者SDL库。 其次,选择合适的音频文件。可以使用一些常见的音频格式,比如WAV或者MP3。你可以从互联网上下载一些免费的音频文件,确保音频文件的大小适合你的程序。 接下来,将音频文件导入到你的C语言程序。可以使用特定的库函数来载音频文件,如ALSA库的snd_pcm_readi()函数或者SDL库的Mix_LoadWAV()函数。 然后,设置音频播放的相关参数。可以使用库函数来设置音频的采样率、声道数和音量等参数,如ALSA库的snd_pcm_set_params()函数或者SDL库的Mix_OpenAudio()函数。 最后,在适当的地方添加音频播放的代码。可以通过调用相应的库函数来播放音频,如ALSA库的snd_pcm_writei()函数或者SDL库的Mix_PlayChannel()函数。你可以选择在程序启动时就开始播放音乐,或者在特定的事件触发时播放音乐。 总之,给C语言程序添加背景音乐需要使用相关的库文件来实现音频播放功能,并通过载音频文件和设置音频参数来实现音频的播放。通过调用相应的库函数来播放音频,可以实现在程序添加背景音乐的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值