idl_render工具的代码路径:

drivers_peripheral/audio/test/sample/idl_render.c

选择菜单:

static void PrintMenu2(void)
{
    printf(" ================== Play Render Menu ================== \n");
    printf("| 1. Render Start                                      |\n");
    printf("| 2. Render Stop                                       |\n");
    printf("| 3. Render Resume                                     |\n");
    printf("| 4. Render Pause                                      |\n");
    printf("| 5. Render SetVolume                                  |\n");
    printf("| 6. Render GetGain                                    |\n");
    printf("| 7. Render SetMute                                    |\n");
    printf("| 8. Render SetAttributes                              |\n");
    printf("| 9. Render SelectScene                                |\n");
    printf("| 10. Render getEXtParams                              |\n");
    printf("| 11. Render getMmapPosition                           |\n");
    printf("| 12.Exit                                              |\n");
    printf(" ====================================================== \n");
}

static struct ProcessRenderMenuSwitchList g_processRenderMenuSwitchList[] = {
    {RENDER_START,            PlayingAudioFiles    },
    {RENDER_STOP,             StopAudioFiles       },
    {RENDER_RESUME,           SetRenderResume      },
    {RENDER_PAUSE,            SetRenderPause       },
    {SET_RENDER_VOLUME,       SetRenderVolume      },
    {SET_RENDER_GAIN,         GetRenderGain        },
    {SET_RENDER_MUTE,         SetRenderMute        },
    {SET_RENDER_ATTRIBUTES,   SetRenderAttributes  },
    {SET_RENDER_SLECET_SCENE, SelectRenderScene    },
    {GET_RENDER_EXT_PARAMS,   GetExtParams         },
    {GET_RENDER_POSITION,     GetRenderMmapPosition},
};

支持开始播放,停止,恢复,暂停,设置音量,增益,静音,选择场景等功能。

选择播放场景:

static int32_t SelectRenderScene(struct IAudioRender **render)
{
    (void)render;

    int32_t val = 0;
    struct AudioSceneDescriptor scene;
    system("clear");
    SelectSceneMenu();
    printf("Please input your choice:\n");

    int32_t ret = CheckInputName(INPUT_INT, (void *)&val);
    if (ret < 0) {
        AUDIO_FUNC_LOGE("Invalid value!");
        SystemInputFail();
        return HDF_FAILURE;
    }

    switch (val) {
        case AUDIO_IN_MEDIA:
            scene.scene.id = AUDIO_IN_MEDIA;
            PrintRenderSelectPinFirst(&scene);
            break;
        case AUDIO_IN_COMMUNICATION:
            scene.scene.id = AUDIO_IN_COMMUNICATION;
            PrintRenderSelectPinSecond(&scene);
            break;
        case AUDIO_IN_RINGTONE:
            scene.scene.id = AUDIO_IN_RINGTONE;
            scene.desc.pins = PIN_OUT_SPEAKER | PIN_OUT_HEADSET;
            break;
        case AUDIO_IN_CALL:
            scene.scene.id = AUDIO_IN_CALL;
            PrintRenderSelectPinThird(&scene);
            break;
        case AUDIO_MMAP_NOIRQ:
            scene.scene.id = AUDIO_MMAP_NOIRQ;
            PrintRenderSelectPinFirst(&scene);
            break;
        default:
            break;
    }

    scene.desc.desc = "mic";

    if (g_render == NULL || g_render->SelectScene == NULL) {
        AUDIO_FUNC_LOGE("Music already stop,");
        SystemInputFail();
        return HDF_FAILURE;
    }

    ret = g_render->SelectScene((void *)g_render, &scene);
    if (ret < 0) {
        AUDIO_FUNC_LOGE("Select scene fail\n");
    }
    return ret;
}

idl_render工具的编译

编译测试程序 ./build.sh --product-name oriole --ccache --build-target drivers/peripheral/audio/test/sample_audio_sample

 

修改权限 14 / 15 hdc_std shell mount -o rw,remount /

 

hdc_std shell mount -o rw,remount /vendor

 

将测试程序和音乐文件推送到板子上 hdc_std file send F:\idl_render /data hdc_std file send F:\single_short2.wav /data

 

修改测试文件权限 hdc_std shell chmod 777 /data/idl_render

 

运行测试程序 ./data/idl_render /data/single_short2.wav 选择primary->service loading->start->non-mmap

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐