Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SoundPool无法通过单个频道播放_Android_Audio_Xamarin_Wav - Fatal编程技术网

Android SoundPool无法通过单个频道播放

Android SoundPool无法通过单个频道播放,android,audio,xamarin,wav,Android,Audio,Xamarin,Wav,我们正在通过Android的SoundPool API播放wav文件。我们已经发明了一种设备,可以将其中一个立体声通道通过麦克风循环,而不是另一个 我还应该提到,我们已经用计算机测试了我们的环回设备,并确认它工作正常 但是,当我们试图通过没有循环回麦克风的通道播放声音时,我们仍然在麦克风上“听到”来自该通道的声音。当我们插上耳机时,Android似乎仍在向另一个频道发送一个更安静的版本的声音,即使这是不应该的 我们试过在一个频道上播放静音的立体声WAV文件,也试过单声道声音文件——两种声音的播放

我们正在通过Android的SoundPool API播放wav文件。我们已经发明了一种设备,可以将其中一个立体声通道通过麦克风循环,而不是另一个

我还应该提到,我们已经用计算机测试了我们的环回设备,并确认它工作正常

但是,当我们试图通过没有循环回麦克风的通道播放声音时,我们仍然在麦克风上“听到”来自该通道的声音。当我们插上耳机时,Android似乎仍在向另一个频道发送一个更安静的版本的声音,即使这是不应该的

我们试过在一个频道上播放静音的立体声WAV文件,也试过单声道声音文件——两种声音的播放方式都是一样的。有谁能解释一下这一点以及如何阻止它?我们使用的代码是:

_Pool = new SoundPool(3, Stream.Music, 0);
var beep = assets.OpenFd("beep.wav");
var beepId = _Pool.Load(beep, 1);

//later, after the sound is loaded we call:
_Pool.Play(beepId, 1, 0, 1, 0, 1);
我还应该提到,我们尝试了音量级别的变化(0.01而不是0.0,0.99而不是1.0)。我们也在多个测试设备上试用过,包括谷歌像素、三星笔记本和LG。似乎什么都不管用。提供了什么?

此“功能”是所有
Android.Media.*
包媒体输出中固有的,由于Android音频堆栈,它发生在物理和模拟设备上,因为Android支持多达8个频道的音频,并混合所有可用频道以产生音频输出

i、 e.如果您创建的音频格式屏蔽了除右声道以外的所有声道,则无论
音频属性如何,左声道仍会有一些输出(假设您使用的是双声道输出设备):

var audioFormat = new AudioFormat.Builder()
                .SetChannelIndexMask(2) // Right channel
                .SetSampleRate(8000)
                .SetEncoding(Encoding.Pcm16bit)
                .Build();
这些API位于AudioFlinger、libmedia、HAL等之上。。。因此,必须由FastMixer/NormalMixer/AudioMixer等提供最终混音

您可以查看ALSA(高级Linux声音体系结构)和OSS(开放式声音系统)以访问硬件音频服务,从而绕过正常的音频处理


谢谢你的回答。我们最终通过修改硬件来“修复”这个问题。