我想知道是否需要在音轨上拨打电话?
例如,在我的下面的代码中,我在方法中实例化一个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();
}
答案 0 :(得分:2)
如果不调用release(),则会泄漏Java AudioTrack对象后面的本机内存。 AudioTrack并非完全是Java,因此需要调用本机代码来释放自己的内存,因为它不会被垃圾回收。
完成后应始终调用release()以避免与在应用中消耗过多内存相关的问题。
答案 1 :(得分:0)
“ ...(由于停止播放):”如果您使用release()
,则必须确保所有操作都已完成并且当前未使用该曲目。 play()
似乎启动了一个线程。所以
track.play(); // AudioTrack.MODE_STATIC or AudioTrack.MODE_STREAM
track.release();
大多数情况下将无法开始播放。