您现在的位置是:首页 > 文章详情

miniaudio - 音频播放和采样库

日期:2025-10-15点击:10

miniaudio 使用 C 语言编写,除了标准库之外没有任何依赖项,可以在所有主流编译器上顺利编译,无需安装任何其他开发包。它支持所有主流桌面和移动平台。

特性

  • 简单的构建系统,没有外部依赖。
  • 简单灵活的 API。
  • 用于直接访问原始音频数据的低级 API。
  • 用于声音管理、混合、效果和可选 3D 空间化的高级 API。
  • 灵活的节点图系统,用于高级混合和效果处理。
  • 用于加载声音文件的资源管理。
  • 解码,内置对 WAV、FLAC 和 MP3 的支持,此外还能够插入自定义解码器。
  • 编码(仅限 WAV)。
  • 数据转换。
  • 重采样,包括自定义重采样器。
  • 通道映射。
  • 波形和噪声的基本生成。
  • 基本效果和过滤器。

有关 miniaudio 中可用功能的更完整描述,参阅编程手册。

示例

此示例展示了使用高级 API 播放声音的一种方法。

#include "miniaudio/miniaudio.h"

#include <stdio.h>

int main()
{
    ma_result result;
    ma_engine engine;

    result = ma_engine_init(NULL, &engine);
    if (result != MA_SUCCESS) {
        return -1;
    }

    ma_engine_play_sound(&engine, "sound.wav", NULL);

    printf("Press Enter to quit...");
    getchar();

    ma_engine_uninit(&engine);

    return 0;
}

此示例展示了如何使用低级 API 解码和播放声音。

#include "miniaudio/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;
}

更多示例可以在示例文件夹或在线此处找到: https://miniaud.io/docs/examples/

原文链接:https://www.oschina.net/p/miniaudio
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章