「已注销」 2023-02-25 15:01 采纳率: 71.4%
浏览 75
已结题

miniaudio如何使用,跑官例没有响应。

使用miniaudio的官方例子去执行,发现MP3格式的文件播放不了,没有声音。有熟悉这个库知道如何使用的吗?

#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;
}

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-02-25 16:06
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    使用 miniaudio 库播放音频的基本流程如下:

    1. 初始化一个 ma_engine 实例。
    2. 调用 ma_engine_play_sound 函数播放音频文件。
    3. 等待音频播放结束或者用户中止播放。
    4. 调用 ma_engine_uninit 函数释放 ma_engine 实例。

    针对你的问题,可能是你需要使用合适的解码器来解码 MP3 文件。miniaudio 库自身并不包含解码器,需要依赖其他库来完成解码工作。比如可以使用 minimp3 库,或者 libmpg123 库等。在使用 miniaudio 的时候,你需要提前把音频数据解码成 PCM 格式,并将 PCM 数据传给 miniaudio 库进行播放。

    你可以参考一下下面这个示例代码,使用 minimp3 库对 MP3 文件进行解码,然后将解码后的 PCM 数据传给 miniaudio 库进行播放:

    #define MINIAUDIO_IMPLEMENTATION
    #include "../miniaudio.h"
    
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char** argv)
    {
    ma_result result;
    ma_engine engine;
    ma_decoder decoder;
    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;
    }
    
    result = ma_decoder_init_file(argv[1], NULL, &decoder);
    if (result != MA_SUCCESS) {
        printf("Failed to open input file.");
        ma_engine_uninit(&engine);
        return -1;
    }
    
    ma_uint64 frameCount = ma_decoder_get_length_in_pcm_frames(&decoder);
    
    ma_sound_group soundGroup;
    result = ma_sound_group_init(&engine, 2, ma_format_f32, ma_decoder_get_output_sample_rate(&decoder), frameCount, &soundGroup);
    if (result != MA_SUCCESS) {
        printf("Failed to create sound group.");
        ma_decoder_uninit(&decoder);
        ma_engine_uninit(&engine);
        return -1;
    }
    
    ma_uint32 decodedFrameCount;
    float* pFrames = (float*)malloc(ma_sound_group_get_bytes_per_frame(&soundGroup) * frameCount);
    if (pFrames == NULL) {
        printf("Failed to allocate memory for decoded PCM frames.");
        ma_sound_group_uninit(&soundGroup);
        ma_decoder_uninit(&decoder);
        ma_engine_uninit(&engine);
        return -1;
    }
    
    result = ma_decoder_read_pcm_frames(&decoder, pFrames, frameCount, &decodedFrameCount);
    if (result != MA_SUCCESS) {
        printf("Failed to read PCM frames from input file.");
        free(pFrames);
        ma_sound_group_uninit(&soundGroup);
        ma_decoder_uninit(&decoder);
        ma_engine_uninit(&engine);
        return -1;
    }
    
    result = ma_sound_group_add_sound(&soundGroup, pFrames, decodedFrameCount);
    if (result != MA_SUCCESS) {
        printf("Failed to add sound to group.");
        free(pFrames);
        ma_sound_group_uninit(&soundGroup);
        ma_decoder_uninit(&decoder);
        ma_engine_uninit(&engine);
        return -1;
    }
    
    free(pFrames);
    ma_decoder_uninit(&decoder);
    
    result = ma_sound_group_play(&soundGroup);
    if (result != MA_SUCCESS) {
        printf("Failed to play sound group.");
        ma_sound_group_uninit(&soundGroup);
        ma_engine_uninit(&engine);
        return -1;
    }
    
    printf("Playing \"%s\"...\n", argv[1]);
    
    printf("Press Enter to quit...");
    getchar();
    
    ma_sound_group_uninit(&soundGroup);
    ma_engine_uninit(&engine);
    
    return 0;
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月28日
  • 已采纳回答 2月27日
  • 创建了问题 2月25日

悬赏问题

  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强