C语言音乐播放器源代码
时间: 2023-09-29 20:02:51 浏览: 109
音乐播放器源代码(C语言)
4星 · 用户满意度95%
以下是一个简单的C语言音乐播放器源代码,使用了SDL库:
```c
#include <stdio.h>
#include <stdlib.h>
#include "SDL/SDL.h"
#include "SDL/SDL_audio.h"
#define FILENAME "music.wav" // 音频文件名
// 音频参数
#define AUDIO_FREQ 44100
#define AUDIO_FORMAT AUDIO_S16
#define AUDIO_CHANNELS 2
#define AUDIO_SAMPLES 4096
Uint8 *audio_pos; // 指向当前音频缓冲区的指针
Uint32 audio_len; // 当前音频缓冲区的长度
// 回调函数,每次需要音频数据时被调用
void audio_callback(void *userdata, Uint8 *stream, int len) {
if (audio_len == 0)
return;
len = (len > audio_len ? audio_len : len);
SDL_memcpy(stream, audio_pos, len); // 将音频数据复制到缓冲区
audio_pos += len;
audio_len -= len;
}
int main(int argc, char *argv[]) {
if (SDL_Init(SDL_INIT_AUDIO) < 0) { // 初始化SDL
printf("SDL初始化失败: %s\n", SDL_GetError());
return 1;
}
SDL_AudioSpec spec; // 音频参数
Uint8 *audio_buf; // 音频缓冲区
Uint32 audio_buf_len; // 音频缓冲区的长度
// 加载音频文件
if (SDL_LoadWAV(FILENAME, &spec, &audio_buf, &audio_buf_len) == NULL) {
printf("无法加载音频文件: %s\n", SDL_GetError());
return 1;
}
// 设置音频参数
spec.callback = audio_callback;
spec.userdata = NULL;
spec.freq = AUDIO_FREQ;
spec.format = AUDIO_FORMAT;
spec.channels = AUDIO_CHANNELS;
spec.samples = AUDIO_SAMPLES;
audio_pos = audio_buf;
audio_len = audio_buf_len;
// 打开音频设备
if (SDL_OpenAudio(&spec, NULL) < 0) {
printf("无法打开音频设备: %s\n", SDL_GetError());
return 1;
}
// 开始播放音频
SDL_PauseAudio(0);
// 等待音频播放完成
while (audio_len > 0)
SDL_Delay(100);
// 关闭音频设备
SDL_CloseAudio();
// 释放音频缓冲区
SDL_FreeWAV(audio_buf);
SDL_Quit();
return 0;
}
```
该程序使用SDL库来播放音频文件。程序首先加载音频文件,然后设置音频参数并打开音频设备。在回调函数中,每次需要数据时从音频缓冲区读取数据并复制到缓冲区。最后,程序等待音频播放完成并释放资源。
阅读全文