我正在尝试在我的项目中实现双簧管库,以便在播放声音时执行最少的延迟。我可以执行回放操作、平移、混合等内部 Android 库(例如 SoundPool
)可以提供的基本操作。
我想测试声像效果,我将耳机连接到我的设备,但后来我发现我的耳机没有播放任何声音。设备扬声器也没有播放任何声音。所以我断开了耳机的连接以检查是否出了问题。我按下了声音播放按钮,但即使耳机与设备完全断开,我也听不到任何声音。
当我第一次打开应用程序时,它可以通过设备扬声器毫无问题地播放声音,但是当我连接耳机时,设备扬声器和耳机都没有声音。
相反,如果我在耳机连接到设备的情况下启动应用程序,它可以通过耳机很好地播放声音。它甚至还可以执行平移效果,但如果我从设备上断开耳机,它就会停止播放任何声音。
- 每当更改首选音频设备时,我是否必须重新打开音频流?
- 如果 1 是,是否有任何方法通知应用程序音频设备已更改,以便我可以手动关闭流并重新打开它?或者我可以让 Oboe 自动处理音频设备更改吗?
最佳答案
如 oboe full guide. 中所述,当主要音频设备发生变化时,您需要打开新的音频流如果您配置 Oboe,它将自动为您处理设备更改检测。
Disconnected audio stream An audio stream can become disconnected at any time if one of these events happens:
The associated audio device is no longer connected (for example when headphones are unplugged). An error occurs internally. An audio device is no longer the primary audio device. - When a stream is disconnected, it has the state "Disconnected" and calls to write() or other functions will return Result::ErrorDisconnected. When a stream is disconnected, all you can do is close it.
举个例子
void OboeStreamCallback::onErrorAfterClose(AudioStream *stream, Result result) {
if (result == oboe::Result::ErrorDisconnected) {
LOGI("Restarting AudioStream after disconnect");
soundEngine.restart(); // please check oboe samples for soundEngine.restart(); call
}
}
Android P 也有一个特例。Please read this, its important!
关于android - 如何使用 Android 双簧管库处理扬声器更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67092859/