Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.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 什么是AudioFlinger?为什么它会失败?_Android_Android Audiomanager_Dtmf_Audioflinger - Fatal编程技术网

Android 什么是AudioFlinger?为什么它会失败?

Android 什么是AudioFlinger?为什么它会失败?,android,android-audiomanager,dtmf,audioflinger,Android,Android Audiomanager,Dtmf,Audioflinger,在我的申请中,我发表以下声明: toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600); 这在运行安卓2.3.3的廉价LG LS670上运行得非常好,但在我拥有的所有其他手机(从安卓2.2.1到安卓2.3.4)上根本听不到 因此,我知道OS版本在这里不起作用(我还在文档中验证了它从API 1开始就受到支持) 此外,振铃器音量和媒体音量都设置为最大,toneGenerator初始化为: toneGenerator = new ToneG

在我的申请中,我发表以下声明:

toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600);
这在运行安卓2.3.3的廉价LG LS670上运行得非常好,但在我拥有的所有其他手机(从安卓2.2.1到安卓2.3.4)上根本听不到

因此,我知道OS版本在这里不起作用(我还在文档中验证了它从API 1开始就受到支持)

此外,振铃器音量和媒体音量都设置为最大,toneGenerator初始化为:

toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100);
我验证了拨号时
Settings.System.DTMF\u TONE\u设置为1

这种不一致的行为(在不同的手机之间)让我感到困惑,当这种情况发生时,我检查了系统日志,我能找到的唯一可疑的区别是,无法发出
TONE\u PROP\u ACK
的手机的日志中有这一行:

AudioFlinger    setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121
静音的目的是什么?它与静音的联系是什么


有没有办法修复我的代码,以便无论手机型号如何,都能听到提示音?

解决方法之一是用Audacity之类的软件生成提示音,并通过SoundPool或您选择的api播放

根据Android文档ToneGenerator.TONE_道具确认为:

1200Hz,100ms开,100ms关2次脉冲


如果您选择SoundPool,我建议以ogg文件格式保存,并循环音调直到完成。同时,它可以用非常小的剪辑提供无缝的音频,并且不需要使用大量的资源。

解析/解码由舞台恐惧处理,舞台恐惧由 媒体播放器服务。解码后的数据被写入音频曲目 通过一个音频接收器,然后这些曲目由 音频Flinger的混音线程并写入输出流 (音频硬件)。输出流对象填充其自己的缓冲区 然后将数据写入PCM输出设备文件(可能是或
可能不是ALSA驱动程序)。

Audio flinger是一个系统组件,它在将来自android用户的音频发送给内核驱动程序之前管理音频。您能从任何音调功能中获得声音吗?你看到API文档中关于音频路由可变的部分了吗?你到底想做什么?你知道这些音调不会通过通话上行,对吧?@ChrisStratton是的,我知道这些音调不会通过通话上行。这实际上是我的首选行为,因为我只是试图给出一个声音提示(不一定是DTMF)。当我使用手机的拨号功能时,我能够从音调功能中获得声音。你能详细说明一下“音频路由是可变的”吗?在API文档中我在哪里可以找到该部分?直接网址将是超级。感谢+1。
routing=0
for
io 25
表示AudioFlinger正在告诉一个特定的音频流(我猜在这种情况下是AudioStreamOut),它应该路由到“无处”。音频HAL将如何处理这一点是特定于实现的,因此它可能(例如)保持该流的路由不变。