C语言播放音乐

打开codeblocks,创建一个新项目

 选择Console applicatio

 选择c

 创建项目名称和路径

 完成

创建完成后会发现目录下有一个main.c文件 ,

把想要播放的音乐复制到该目录下 

 

用codeblocks打开该main.c文件

 替换原来代码

#include<stdio.h>
#include<Windows.h>
#include<mmsystem.h>
#pragma comment (lib,"winmm.lib")

int main()
{
	mciSendString("open 1.mp3", NULL, 0, NULL);		
	mciSendString("play 1.mp3", NULL, 0, NULL);
	while(1);
	return 0;
}

在菜单栏中点击Project->Build options...

 

 然后Linker settings->Add->winmm->ok

音乐就可播放了

### C语言中实现音乐播放功能的方法 在C语言中,可以通过调用特定的库函数来实现简单的音乐播放功能。以下是几种常见的方法及其具体实现方式。 #### 方法一:使用 `Beep` 函数模拟音符 `Beep` 是 Windows API 提供的一个简单函数,用于通过计算机扬声器发出指定频率的声音。可以利用该函数按照一定的时间间隔依次播放不同的音高,从而形成旋律。 下面是一个基于 `Beep` 的示例代码: ```c #include <windows.h> #include <stdio.h> int main() { // 定义音符频率和持续时间 int si = 1318; // 音符 Si (C#5) 对应的频率 int sfa = 987; // 假设 S fa 对应的频率 int ban_pai = 500; // 半拍时长(毫秒) int pai = 1000; // 全拍时长(毫秒) int ting = 200; // 停顿时间(毫秒) // 按照乐谱顺序播放音符 Beep(si, ban_pai + pai); // 发出第一个音符[^4] Beep(sfa, ban_pai); // 发出第二个音符 Sleep(ting); // 停顿一段时间 Beep(sfa, pai); // 继续下一个音符 Beep(si, pai); // 结束当前片段 printf("音乐播放完成\n"); return 0; } ``` 此代码实现了基本的单声道音乐播放效果。需要注意的是,这种方法仅适用于简单的旋律生成,无法处理复杂的多轨音频或高质量音乐文件。 --- #### 方法二:读取外部歌谱文件并动态生成音乐 为了更灵活地控制音乐内容,可以将歌谱写入到一个 `.txt` 文件中,并由程序解析后逐条执行相应的 `Beep` 调用。 以下是一个例子: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> typedef struct Note { int frequency; // 频率 int duration; // 持续时间(毫秒) } Note; // 解析歌谱数据 Note parse_note(const char *line) { Note note = {0}; sscanf(line, "%d %d", &note.frequency, &note.duration); return note; } int main() { FILE *file = fopen("shangye.txt", "r"); // 打开歌谱文件[^2] if (!file) { perror("打开文件失败"); return EXIT_FAILURE; } char buffer[256]; while (fgets(buffer, sizeof(buffer), file)) { Note current_note = parse_note(buffer); if (current_note.frequency > 0 && current_note.duration > 0) { Beep(current_note.frequency, current_note.duration); // 播放音符 } } fclose(file); printf("歌谱已全部播放完毕。\n"); return 0; } ``` 上述代码假设歌谱文件中的每一行都包含两个整数——分别表示音符的频率和持续时间。例如,“1318 1000”代表以频率 1318Hz 持续发声 1 秒钟。 --- #### 方法三:借助第三方库支持 MP3/WAV 等格式 对于需要播放真实音频文件的情况,则需引入额外的支持工具或框架。比如 SDL 或 SFML 库能够很好地满足这一需求。 安装好相应开发环境之后,可尝试如下代码片段: ```cpp #include <SDL2/SDL.h> #include <iostream> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; bool init(); void close(); SDL_Window* gWindow = NULL; SDL_Renderer* gRenderer = NULL; bool init() { bool success = true; if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { std::cerr << "SDL could not initialize! SDL_Error: " << SDL_GetError() << "\n"; success = false; } else { gWindow = SDL_CreateWindow("Music Player Example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (!gWindow) { std::cerr << "Window could not be created! SDL_Error: " << SDL_GetError() << "\n"; success = false; } else { gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED); if (!gRenderer) { std::cerr << "Renderer could not be created! SDL_Error: " << SDL_GetError() << "\n"; success = false; } } } return success; } void close() { SDL_DestroyRenderer(gRenderer); SDL_DestroyWindow(gWindow); gWindow = nullptr; gRenderer = nullptr; SDL_Quit(); } int main(int argc, char* args[]) { if (!init()) { std::cout << "Failed to initialize!\n"; } else { Mix_Music *music = Mix_LoadMUS("<filename>"); // 加载音频文件[^3] if (music == nullptr) { std::cerr << "Failed to load music! SDL_mixer Error: " << Mix_GetError() << "\n"; } else { Mix_PlayMusic(music, -1); // 循环播放音乐 SDL_Delay(5000); // 让音乐播放几秒钟后再退出 Mix_FreeMusic(music); } } close(); return 0; } ``` 这里展示了如何初始化 SDL 和加载一首背景音乐的过程。实际应用时还需要配置编译选项链接必要的动态库。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值