2013年3月9日土曜日

RAZR M 201M でOpenSL ES使うときの注意

RAZR MでOpenSL ESつかってみてますが。ちょいとしたことを忘れてハマる。。 CreateAudioRecorder でレコーダオブジェクトを取得した場合にANDROID_CONFIGURATIONのプリセットを必ず適用すること。そうしないと任意のタイミングでオブジェクトの生成ができないというエラーを食らう。

Realizeできないというエラーがでたらそれが原因。


int num = 2;
const SLInterfaceID ids[2] = {W_SL_IID_BUFFERQUEUE,
                              SL_IID_ANDROIDCONFIGURATION};
const SLboolean req[2] = { SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE };
SLAndroidConfigurationItf recorderCfg;

r = (*pa->engine)->CreateAudioRecorder(pa->engine, &st->recorderObj, &audioSrc,
                                    &audioSink, num, ids, req );
if( r != SL_RESULT_SUCCESS ){
    log("err");
    goto err;
}
...
...
result = (*st->recorderObj)->GetInterface(st->recorderObj,
                                                    SL_IID_ANDROIDCONFIGURATION,
                                                    &recorderConfig);
..
..
SLint32 streamType = SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION;
result = (*recorderConfig)->SetConfiguration(
                         recorderConfig, SL_ANDROID_KEY_RECORDING_PRESET,
                         &streamType, sizeof(SLint32));
...
..
.
みたいなのを忘れずに。CONFIGがなくても音拾えることがあるってのがハマリポイント。 sdkversionは14からみたいだけど、2.3に適用してもエラーでるだけなんで、無視してOK ぽいね。つかはじめから忘れんなよってこと。

0 コメント:

コメントを投稿