用Android的AudioTrack解释奇怪行为背后的原因

用Android的AudioTrack解释奇怪行为背后的原因,android,audiotrack,Android,Audiotrack,我试图用AudioTrack输出生成的声波。然而,产生的波是不一样的,我已经用完了什么可能是问题的想法。请参阅下面的附加图像 我还没有尝试在另一个安卓系统上运行我的代码,所以我不能排除这是这款手机(Nexus5LG)的问题。从iPhone播放相同的样本,并用这款手机录制,会产生与下面audacity中所示类似的正确波形 在这里可以看到,波的第一部分是如何正确地再现的,然而,在峰值后不久,它似乎立即消失。如果信号的长度增加,波会正确再现,但我也无法解释 相关代码: public static

我试图用AudioTrack输出生成的声波。然而,产生的波是不一样的,我已经用完了什么可能是问题的想法。请参阅下面的附加图像

我还没有尝试在另一个安卓系统上运行我的代码,所以我不能排除这是这款手机(Nexus5LG)的问题。从iPhone播放相同的样本,并用这款手机录制,会产生与下面audacity中所示类似的正确波形

在这里可以看到,波的第一部分是如何正确地再现的,然而,在峰值后不久,它似乎立即消失。如果信号的长度增加,波会正确再现,但我也无法解释

相关代码:

public static final int SAMPLE_RATE = 44100;
static final int AUDIOTRACK_BUFFER_SIZE = SAMPLE_RATE;

audioTrackSend = new AudioTrack(AudioManager.STREAM_MUSIC,
            SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT, AUDIOTRACK_BUFFER_SIZE,
            AudioTrack.MODE_STATIC);
short pcm16bit[];
short flushBuffer = new short[AUDIOTRACK_BUFFER_SIZE];
pcm16bit = Encode.encodeData(frequency, pattern, SAMPLE_RATE);
// This is the same array that I print to a file and import into audacity. Therefore everything "should" be correct up to this part
Arrays.fill(flushBuffer, (short) 0);
// I noticed that previous sounds were still in the buffer during consecutive playbacks. After adding this that behavior disappeared. If there is a better way of accomplishing that I'm all ears.
audioTrackSend.write(flushBuffer, 0, flushBuffer.length);
audioTrackSend.write(pcm16bit, 0, pcm16bit.length);
audioTrackSend.play()
如果需要更多信息来回答问题,请询问


谢谢

你在比较什么?应用程序中反对audacity的情节?您如何在应用程序中生成绘图?audacity中的绘图与我通过AudioTrack传输的PCM样本相同。我想知道为什么他们不产生同样的波。应用程序中的情节是通过使用录音录制声音,使用Goertzels算法选择发送声音的特定频率生成的,然后使用MPandroidChart绘制我想如果你包括创建绘图的代码和生成信号的代码,我会更容易提供帮助。绘图不是问题的根源。当我记录相同的样本,但从iPhone发送时,它被正确记录。iPhone在记录Android设备发出的声音时也报告了同样的不一致。