在我的申请中,我发出以下声明:
toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600);
在廉价的运行Android 2.3.3的LG LS670上效果非常好,但在我拥有的所有其他手机上都没有声音,从Android 2.2.1到Android 2.3.4。
所以我知道操作系统版本在这里没有发挥作用(我在文档中验证了它自API 1以来一直受到支持)。
此外,Ringer音量和媒体音量都设置为最大值,toneGenerator初始化为:
toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100);
我确认Settings.System.DTMF_TONE_WHEN_DIALING
设置为1。
由于这种不一致的行为(在不同的手机上)感到困惑,我在发生这种情况时检查了系统日志,我能找到的唯一可疑差异是失败发出声音的电话{{ 1}}在他们的日志中有这一行:
TONE_PROP_ACK
AudioFlinger的目的是什么?它与静音AudioFlinger setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121
的关系是什么?
任何idea如何修复我的代码,以便TONE_PROP_ACK始终响起,无论手机型号如何?
答案 0 :(得分:1)
一种解决方法是在Audacity中产生音调,并通过SoundPool或您选择的api播放。
根据Android文档,ToneGenerator.TONE_PROP_ACK是:
1200Hz,100ms ON,100ms OFF 2突发
如果你选择SoundPool,我建议保存ogg文件格式并循环调整直到完成。同时使用非常小的剪辑提供无缝音频,而不是使用大量资源。
答案 1 :(得分:0)
解析/解码由Stage fright处理,它由 媒体播放器服务。解码后的数据被写入音频轨道 通过音频接收器,然后轨道混合 Audio Flinger的混音器线程并写入输出流 (音频硬件)。输出流对象填充其自己的缓冲区 然后将数据写入PCM输出设备文件(可能或 可能不是ALSA的驱动程序。)