我想让手机变得简单"嘟嘟"噪声。
我已遵循示例here:
我可以发出哔哔声并改变音调和长度。
AudioTrack.getMinBufferSize()
建议最小缓冲区大小为1280。
但是使用那个值我并没有得到所有的哔哔声(它比应该的更短)。 这些数字均为(请求)1秒钟的哔哔声。
我将缓冲区大小从2个字节改为16000个字节。
在2到1280个字节之间,我合理地持续了940毫秒。
从1280到15998字节,蜂鸣声变短了。
最短的实际上是大约12000,250毫秒。
然后它在15998再次增加到337毫秒。 在16000时,根本没有发出哔哔声。
所以,我从来没有完整的1000毫秒,最长的是大约950毫秒。
最短的时间约为250毫秒。
没有其他任何改变,只是缓冲区大小。
使用Sonic Visualiser我可以录制哔哔声并在我的电脑上看到波形。这就是我测量蜂鸣声持续时间的方式。
由于我一直在使用的振幅斜坡和斜坡输出,我可以清楚地看到蜂鸣声从0开始正确地开始,并且它们在末尾被截断。我失去了哔哔声的结束。
任何人都可以解释这个并告诉我如何获得我的所有1秒钟的哔声吗?
更多信息:
对于1秒以外的蜂鸣声持续时间,会发生相同的截断。
麦克风和PC未经校准,但结果可重复。
代码的主要部分如下:
int minBufferSize = AudioTrack.getMinBufferSize(mSampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
mAudioTrack = new AudioTrack(AudioManager.STREAM_ALARM,
mSampleRate,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mBufferSize,
AudioTrack.MODE_STREAM);
来自Sonic Analyzer的图片。
所有这些测试均使用Galaxy S4 Running 5.0.1
完成如何获得完整的1秒钟哔声?
此单张图片可以更好地解释问题: shows: expected profile, profile for buffer=2, profile for buffer=12000
这是缓冲区大小与蜂鸣声长度的关系图。 始终生成相同的蜂鸣声数据,唯一改变的是缓冲区大小:variation of "beep" length with buffer size