On 12/25/2009 02:00 PM, Business Talk wrote: > I keep posting this message hoping that maybe somebody from google > (media group in particular) monitors the group. I need to stop the > AudioTrack, regardless what's in the buffer, immediately when > executing the stop/release. The AudioTrack plays in the STREAM mode. > It appears that the AudioTrack finishes playing what's in the buffer > and than stops. It seems that it's such a fundamental flaw since there > are so many audio applications out there.
I don't think that your question relates to AudioTrack in particular, but to dealing with audio buffers in general, and especially when these buffers are too large. On almost any platform and API I can think of, if the audio buffer is large then you have to deal with a rather noticeable latency. And I think that your problem is indeed about latency. Instead of starting/stopping the AudioTrack as you do, which is a quite heavy operation (thread, locks, IPC, etc..), I would first recommend that you fill the buffer with zeros whenever sound has to stop. But if your buffer is large then there will be a noticeable delay between the moment you actually write zeros and the moment the sound becomes silent (yet, that should be faster than actually calling play() or stop()). For instance, I'm quite successfully using AudioTrack with a buffer size of 4096 frames, which at 22050Hz, induces (at least) a 185ms delay. That is quite a lot IMO, and I don't think you can reduce that in Android's current state. I would even say than 8092 frames seems a safer choice. But many audio applications out there know how to deal with a such latency, even if it is about hundreds of milliseconds. It is not always possible, but in some case it is, especially if you can: (1) measure the output latency (2) anticipate audio output events So that you start playing sounds (or silence) in advance, taking the latency into account. You can approximate (1) with: latency = bufferSize / sampleRate Whether (2) is possible or not depends on you app. If it isn't and that 200-400ms latency is too much for you then I recommend that you star the following issue to encourage Google to address it as soon as possible: http://code.google.com/p/android/issues/detail?id=3434 -- Olivier -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

