示例 - 文档 - 支持的平台 - 后端 - 主要特性 - 构建
此示例展示了使用高级 API 播放声音的一种方法。
#define MINIAUDIO_IMPLEMENTATION
#include "../miniaudio.h"
#include <stdio.h>
int main(int argc, char** argv)
{
ma_result result;
ma_engine engine;
if (argc < 2) {
printf("No input file.");
return -1;
}
result = ma_engine_init(NULL, &engine);
if (result != MA_SUCCESS) {
printf("Failed to initialize audio engine.");
return -1;
}
ma_engine_play_sound(&engine, argv[1], NULL);
printf("Press Enter to quit...");
getchar();
ma_engine_uninit(&engine);
return 0;
}
此示例展示了如何使用低级 API 解码和播放声音。
#define MINIAUDIO_IMPLEMENTATION
#include "../miniaudio.h"
#include <stdio.h>
void data_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount)
{
ma_decoder* pDecoder = (ma_decoder*)pDevice->pUserData;
if (pDecoder == NULL) {
return;
}
ma_decoder_read_pcm_frames(pDecoder, pOutput, frameCount, NULL);
(void)pInput;
}
int main(int argc, char** argv)
{
ma_result result;
ma_decoder decoder;
ma_device_config deviceConfig;
ma_device device;
if (argc < 2) {
printf("No input file.\n");
return -1;
}
result = ma_decoder_init_file(argv[1], NULL, &decoder);
if (result != MA_SUCCESS) {
return -2;
}
deviceConfig = ma_device_config_init(ma_device_type_playback);
deviceConfig.playback.format = decoder.outputFormat;
deviceConfig.playback.channels = decoder.outputChannels;
deviceConfig.sampleRate = decoder.outputSampleRate;
deviceConfig.dataCallback = data_callback;
deviceConfig.pUserData = &decoder;
if (ma_device_init(NULL, &deviceConfig, &device) != MA_SUCCESS) {
printf("Failed to open playback device.\n");
ma_decoder_uninit(&decoder);
return -3;
}
if (ma_device_start(&device) != MA_SUCCESS) {
printf("Failed to start playback device.\n");
ma_device_uninit(&device);
ma_decoder_uninit(&decoder);
return -4;
}
printf("Press Enter to quit...");
getchar();
ma_device_uninit(&device);
ma_decoder_uninit(&decoder);
return 0;
}
更多示例可以在 examples 文件夹或在线此处找到: https://miniaud.io/docs/examples/
在线文档可以在此处找到: https://miniaud.io/docs/
文档也可以在 miniaudio.h 的顶部找到,它始终是关于如何使用 miniaudio 的最新和权威的信息来源。所有其他文档都由此代码内文档生成。
有关 miniaudio 中可用功能的更完整描述,请参阅编程手册。
在一个源文件中执行以下操作
#define MINIAUDIO_IMPLEMENTATION
#include "miniaudio.h"
然后只需编译即可。无需安装任何依赖项。在 Windows 和 macOS 上,无需链接任何内容。在 Linux 上,只需链接到 -lpthread、-lm 和 -ldl。在 BSD 上,只需链接到 -lpthread 和 -lm。在 iOS 上,您需要编译为 Objective-C。
如果您更喜欢单独的 .h 和 .c 文件,您可以在 extras/miniaudio_split 文件夹中找到 miniaudio 的拆分版本。从这里,您可以像传统的 .c 和 .h 库一样使用 miniaudio - 只需将 miniaudio.c 添加到您的源代码树中,就像任何其他源文件一样,并包含 miniaudio.h,就像普通的头文件一样。如果您喜欢编译为单个翻译单元(又名 Unity 构建),您可以直接在您的主源文件中 #include .c 文件
#include "miniaudio.c"
请注意,拆分版本是使用工具自动生成的,并且基于根目录中的主文件。如果您想贡献代码,请在主文件中进行更改。
Vorbis 解码通过 stb_vorbis 启用。要使用它,您需要在 miniaudio 的实现之前包含 stb_vorbis 的头文件部分。您可以通过执行以下操作来启用 Vorbis
#define STB_VORBIS_HEADER_ONLY
#include "extras/stb_vorbis.c" /* Enables Vorbis decoding. */
#define MINIAUDIO_IMPLEMENTATION
#include "miniaudio.h"
/* stb_vorbis implementation must come after the implementation of miniaudio. */
#undef STB_VORBIS_HEADER_ONLY
#include "extras/stb_vorbis.c"