【发布时间】:2014-04-19 19:03:32
【问题描述】:
在过去的几个小时里,我一直在努力让这段小代码工作。它旨在成为一个最小的 AudioTrack 示例,因为我发现许多示例都非常复杂。
private void playSound() {
// AudioTrack definition
int mBufferSize = AudioTrack.getMinBufferSize(44100,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_8BIT);
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,
AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_8BIT,
mBufferSize, AudioTrack.MODE_STREAM);
// Sine wave
double[] mSound = new double[4410];
short[] mBuffer = new short[4410];
for (int i = 0; i < mSound.length; i++) {
mSound[i] = Math.sin((2.0*Math.PI * 440.0/44100.0*(double)i));
mBuffer[i] = (short) (mSound[i]*Short.MAX_VALUE);
}
mAudioTrack.setStereoVolume(0.1f, 0.1f);
mAudioTrack.play();
mAudioTrack.write(mBuffer, 0, mSound.length);
mAudioTrack.stop();
mAudioTrack.release();
}
当我调用函数playSound() 时,我只听到一声短促的嗡嗡声,听起来根本不像是纯正弦波。我尝试了不同的采样率,从 8000Hz 到 44100Hz,以及不同的缓冲区大小。
导出mBuffer的内容表明正弦波生成正确。如果我用 Matlab 播放它也可以正常播放,尽管音高太高。
有什么我做的不对吗?另外,如果我尝试 16 位编码,我根本听不到声音。
【问题讨论】:
-
嗨 loadstar,我想做相反的功能,想录制音频并同时绘制其正弦波,有什么帮助吗??
标签: android audiotrack