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

Posted C语言修仙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么给你的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 <stdio.h>
#include <conio.h>
#include<windows.h>
#include<commctrl.h> 
#include<mmsystem.h>
#include<digitalv.h>
#include <process.h>
#include<windows.h>

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。

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


以上是关于怎么给你的C语言程序添加BGM背景音乐?的主要内容,如果未能解决你的问题,请参考以下文章

Cool 给你的Visual Studio 添加音乐

Pr导出的视频,电脑上能听到人声和背景音乐,在安卓手机上听不到人声只有BGM,但苹果手机上都可以听到?

给你的博客园增加背景,头像和top小火箭

功放中的BGM,VCD,DVD,AUX,REC,PRE各是啥意思

C语言制作小游戏时怎么添加图片音乐,代码怎么打?

C#程序员经常用到的10个实用代码片段 - 操作系统