c语言播放音频
时间: 2023-07-13 13:06:09 浏览: 56
在C语言中,可以使用多种库来播放音频,比如ALSA、SDL等。下面是一个使用SDL库播放音频的简单示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include "SDL/SDL.h"
#define BUFFER_SIZE 4096
int main(int argc, char **argv) {
if (argc < 2) {
printf("Usage: %s <file>\n", argv[0]);
return 1;
}
const char *filename = argv[1];
// 初始化SDL
if (SDL_Init(SDL_INIT_AUDIO) < 0) {
fprintf(stderr, "Could not initialize SDL audio: %s\n", SDL_GetError());
return 1;
}
// 打开音频文件
SDL_AudioSpec spec;
Uint8 *buf;
Uint32 len;
if (SDL_LoadWAV(filename, &spec, &buf, &len) == NULL) {
fprintf(stderr, "Could not open audio file: %s\n", SDL_GetError());
return 1;
}
// 设置音频参数
SDL_AudioSpec desired_spec;
desired_spec.freq = spec.freq;
desired_spec.format = AUDIO_S16SYS;
desired_spec.channels = spec.channels;
desired_spec.samples = BUFFER_SIZE;
desired_spec.callback = NULL;
// 打开音频设备
SDL_AudioDeviceID dev = SDL_OpenAudioDevice(NULL, 0, &desired_spec, &spec, 0);
if (dev == 0) {
fprintf(stderr, "Failed to open audio device: %s\n", SDL_GetError());
return 1;
}
// 播放音频
int pos = 0;
while (pos < len) {
int remaining = len - pos;
int to_write = remaining > BUFFER_SIZE ? BUFFER_SIZE : remaining;
SDL_QueueAudio(dev, buf + pos, to_write);
pos += to_write;
}
SDL_PauseAudioDevice(dev, 0);
// 等待播放完成
while (SDL_GetQueuedAudioSize(dev) > 0) {
SDL_Delay(100);
}
// 关闭音频设备和SDL
SDL_CloseAudioDevice(dev);
SDL_FreeWAV(buf);
SDL_Quit();
return 0;
}
```
在上面的代码中,首先初始化SDL库,然后打开指定的音频文件,并设置音频参数和回调函数,最后将音频数据写入音频设备的缓冲区并开始播放。播放完成后,关闭音频设备和SDL库。注意在编译时需要链接SDL库。