【问题标题】:Android NDK test app using OpenSL ES使用 OpenSL ES 的 Android NDK 测试应用
【发布时间】:2012-09-24 15:09:25
【问题描述】:

我开发了一个 NDK 应用程序(我从控制台运行)并在使用 Android 4.0.3 的 TI AM37x 硬件上运行。这个应用程序正在使用 OpenSL API,我正在尝试在硬件上播放来自 SDCard 的歌曲。相同的路径正在使用 NDK 示例代码(URI 播放),但我无法从我的应用程序中听到音频。有人有什么主意吗? 我的代码流程如下:

    result=slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);
    ....
    result = (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE);
    ....
    result = (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine);
    ....
    result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 1, ids, req);
    ....
    Realize, GetInterface ...
    ....
    SLchar path[] = "/mnt/sdcard/Audio/Msong.mp3" ;
    SLDataLocator_URI loc_uri = {SL_DATALOCATOR_URI, path};
    SLDataFormat_MIME format_mime = {SL_DATAFORMAT_MIME, NULL,   
    SL_CONTAINERTYPE_UNSPECIFIED};
    SLDataSource audioSrcuri = {&loc_uri, &format_mime};
    ...
    result = (*engineEngine)->CreateAudioPlayer(engineEngine, &uriPlayerObject, 
                                             &audioSrcuri,&audioSnkuri, 1, idsuri, requri);
    ...
    result = (*uriPlayerObject)->Realize(uriPlayerObject, SL_BOOLEAN_FALSE);
    ...
    result = (*uriPlayerObject)->GetInterface(uriPlayerObject, SL_IID_PLAY, 
                                                                  &uriPlayerPlay);
    ...
    result = (*uriPlayerObject)->GetInterface(uriPlayerObject, SL_IID_SEEK, 
                                                                   &uriPlayerSeek);
    ...
    result = (*uriPlayerPlay)->SetPlayState(uriPlayerPlay, SL_PLAYSTATE_PLAYING);

【问题讨论】:

    标签: android-ndk opensl


    【解决方案1】:

    需要配置audioSnk

    // create output mix
    const SLInterfaceID ids[1] = {SL_IID_ENVIRONMENTALREVERB};
    const SLboolean req[1] = {SL_BOOLEAN_FALSE};
    result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 1, ids, req);
    
    // realize the output mix
    result = (*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE);
    

    ...

    // configure audio sink
    SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, outputMixObject};
    SLDataSink audioSnk = {&loc_outmix, NULL};
    

    【讨论】:

      猜你喜欢
      • 2016-04-28
      • 2012-12-23
      • 1970-01-01
      • 2023-04-06
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      相关资源
      最近更新 更多