为什么我的MediaPlayer音频失真/剪切?

时间:2019-01-04 15:15:17

标签: android android-mediaplayer

当我在应用程序中播放声音时,声音会显得短而失真。这是录音:recording

以下是上载到android studio的声音文件:success sound cue

这是从.raw

调用声音的函数
 public void playCorrectAnswerSound() {
        final MediaPlayer mp = MediaPlayer.create(this, R.raw.correct);
        mp.start();
    }

这里我怎么称呼:

Thread t = new Thread(){
            public void run(){
                playCorrectAnswerSound();
            }
        };
        t.start()

这是我第一次调试声音相关的问题。我不知道该帖子中还包含什么内容,因此,如果您需要更多信息,请这样说。

编辑:我被要求记录更多的失真。 Here it is。我还要说,经过更多测试之后,我的物理设备没有声音失真,而声音失真却出现在3个不同的模拟器上。

1 个答案:

答案 0 :(得分:1)

我要说的是,这是由于MediaPlayer's内部播放缓冲区的欠载(饥饿)所致。也就是说,MediaPlayer不能提供足够快的数据来跟上声音硬件的速度(这表明严重缺乏处理能力)。如果缓冲区不足,它将开始播放旧数据(因为它是循环缓冲区)。这会导致尖锐的相变,听起来像是“喀哒”声。大概MediaPlayer恢复得很快,以至于此后不久恢复播放“正确”的声音。

这是Audacity的光谱图。 0-4KHz。第一行是干净的.mp3;接下来的四行是失真的录音(无特定顺序)。所有行均已按时间对齐,并且幅度大致相同。最后四行中的大垂直条纹表示您听到的失真/咔嗒声。

5 rows of sound spectrum - Audacity screenshot