1

私は 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);
4

1 に答える 1

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};
于 2012-09-05T14:56:44.580 に答える