My test was rather inconclusive.
The real problem with ADPCM is how exactly it behaves on loop return. Let's assume AICA does interpolation as some soures claim. Does that mean it also interpolates ADPCM sounds? If so, how does it fetch pos+1 sample, is decoder state preserved or modified - because if it is modified then it's always +1 ahead of actual play position. Is there really always one more valid sample after LEA to allow for interpolation?
Hell, I don't even know what's the correct loop end point, because docs says it goes 0, 1, 2, ..., LEA (inclusive) -> LSA+1, LSA+2, ... My own observations (though all I can do in that matter is closely monitor sample position counter) show this to be incorrect, it's 0, 1, 2, ..., LEA-1 -> LSA, LSA+1, ...
I got my own code to work in almost all cases. Almost, with one exception named "Soul Reaver" - which still distorts in-game dialogues from time to time.
Well, it's back to the drawing board for me
I will help you with ADPCM but I suggest you try to discover things on your own as I'm clearly overlooking something again and again. On the bright side, I now know what it was that caused hissing when I tried to interpolate ADPCM and that was a silly mistake on my part.