【问题标题】:How to configure OpenSL to work with ear speaker other than main speaker or headphones如何配置 OpenSL 以使用除主扬声器或耳机以外的耳机
【发布时间】:2014-03-01 20:29:37
【问题描述】:

我在 android NDK 中尝试过原生音频代码示例。当我尝试录制一些语音然后播放时,它工作正常。它使用主扬声器(扬声器)进行语音播放。我想修改代码,以便在耳机而不是主扬声器中播放语音。有什么帮助吗?

【问题讨论】:

    标签: android android-ndk opensl


    【解决方案1】:

    我解决了这个问题,我找到了一个相关主题的 google 组。这真的很有帮助。这是链接: https://groups.google.com/forum/#!topic/android-ndk/O-hufEm20cU

    我在 Android NDK 提供的本机音频示例中对其进行了测试。您必须先获取android配置的接口,然后在创建音频播放器后将流类型设置为STREAM_VOICE。

    // Code for working with ear speaker by setting stream type to STREAM_VOICE
    SLAndroidConfigurationItf playerConfig;
    result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_ANDROIDCONFIGURATION, &playerConfig);
    SLint32 streamType = SL_ANDROID_STREAM_VOICE;
    result = (*playerConfig)->SetConfiguration(playerConfig, SL_ANDROID_KEY_STREAM_TYPE, &streamType, sizeof(SLint32));
    

    【讨论】:

    • 感谢您分享您的 cmets。但是当我在创建播放器后使用你的代码时,我崩溃了。请建议如何使用 OpenSL 播放器设置流类型。我想用 Uri 播放器实现。
    • 请看一下这个问题。这可能会帮助你。 stackoverflow.com/questions/24758121/… 查看 OpenSL ES 文档。 Uri 播放器可能需要不同的流类型来播放音频数据。
    • 感谢您的回复。我忘了添加音频播放器中使用的接口所需的接口数组。现在我可以通过将 SL_IID_ANDROIDCONFIGURATION 添加到所需的接口数组中来将其集成到 openSL 中。与使用 SL_ANDROID_STREAM_VOICE 一样,声音仍然来自后置扬声器。如果我想启用前置中置扬声器的声音怎么办
    • 谢谢,我可以从前置扬声器获得音频输出。但它启用了移动设备中所有已安装的应用程序。我可以为我们特定的 android 应用程序这样做吗
    • 当您创建音频播放器时,我假设您已经获取了音量控制接口 ID。然后将布尔请求设置为 TRUE。现在得到音量控制界面,就像你之前得到流类型设置界面一样。试试这个代码,const SLInterfaceID ids[4] = {SL_IID_ANDROIDCONFIGURATION, SL_IID_BUFFERQUEUE, SL_IID_EFFECTSEND, SL_IID_SEEK, SL_IID_VOLUME}; const SLboolean req[4] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE}; result = (*engineEngine)->CreateAudioPlayer(engineEngine, &bqPlayerObject, &audioSrc, &audioSnk, 5, ids, req);
    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多