AudioTrack发布

时间:2016-02-17 00:55:02

标签: android audiotrack

我想知道是否需要在音轨上拨打电话?

例如,在我的下面的代码中,我在方法中实例化一个AudioTrack实例,并且不在其上调用release(因为它会停止播放)。

这有什么影响?

public void playTone()
{
    float[] output = createTone();

    AudioTrack track = new AudioTrack(AudioManager.STREAM_RING, 44100,
            AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT,
            (output.length*4),
            AudioTrack.MODE_STATIC);

    short[] result =  new short[output.length];

    for(int i = 0; i < output.length; i++)
        result[i] = (short) ((output[i])*32768);

    track.write(result, 0, output.length);
    track.play();
}

2 个答案:

答案 0 :(得分:2)

如果不调用release(),则会泄漏Java AudioTrack对象后面的本机内存。 AudioTrack并非完全是Java,因此需要调用本机代码来释放自己的内存,因为它不会被垃圾回收。

完成后应始终调用release()以避免与在应用中消耗过多内存相关的问题。

答案 1 :(得分:0)

“ ...(由于停止播放):”如果您使用release(),则必须确保所有操作都已完成并且当前未使用该曲目。 play()似乎启动了一个线程。所以
track.play(); // AudioTrack.MODE_STATIC or AudioTrack.MODE_STREAM track.release();
大多数情况下将无法开始播放。