gpt4 book ai didi

android - AudioTrack 不通过耳机播放

转载 作者:行者123 更新时间:2023-11-30 03:36:02 25 4
gpt4 key购买 nike

我已经像这样设置了一个 AudioTrack:

public NoiseThread(byte[] data)
{
rawData = data;
bufferSize = 2* AudioTrack.getMinBufferSize (44000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_8BIT);

track = new AudioTrack(AudioManager.STREAM_MUSIC, 44000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_8BIT, bufferSize, AudioTrack.MODE_STREAM);
track.setStereoVolume(volume, volume);
}

public void run() {
setPriority(MAX_PRIORITY);

track.play();
while(!isInterrupted()){
track.write(rawData, 0, bufferSize);
}
track.stop();
}

样本如我所料通过扬声器播放。当我插入耳机时,扬声器关闭,但声音是从手机听筒而不是耳机发出的。如何通过耳机播放?

最佳答案

许多 Android 设备在 AudioFlinger/音频 HAL 中使用单个输出线程进行所有本地播放(听筒、扬声器、有线耳机/耳机),使得两个音轨的不同路由不可能同时进行(这就是为什么在许多设备上媒体流如果播放通知并且您连接了有线耳机,则强制静音;否则您会在播放通知时听到扬声器中的音乐)。

在某些设备上,如果您设法执行 setForceUse(FOR_MEDIA, FORCE_SPEAKER) 并将 MUSIC 流类型用于您想要播放的内容,则可能会执行您正在寻找的内容在扬声器中,以及要在有线耳机中播放的内容的 VOICE_CALL 流类型。我不确定应用程序是否有任何方法可以执行该 setForceUse 调用。也许您可以通过反射获取 AudioService 类的 handleMessage 方法并向其发送 MSG_SET_FORCE_USE 消息。我自己从未尝试过,所以它可能会惨败。

关于android - AudioTrack 不通过耳机播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16646136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com