Estou precisando de uma ajudinha para debugar uma classe do MIDP 2.
Meu objetivo é rodar um wav no formato ADPCM em um celular, que teoricamente tem suporte a esse formato. Porém, quando vou testar no emulador do WTK, recebo a seguinte Exception:
javax.microedition.media.MediaException: malformed wav media
at com.sun.mmedia.WavPlayer.readHeader(+348)
Então fui lá no midpapi20.zip e descompilei a classe WavPlayer para ver que tipo de header ela estava esperando, e descobri que na verdade ela faz throw dessa Exception no caso de IOException, como mostrado a seguir:
catch(IOException e)
{
throw new MediaException("malformed wav media");
}
Achei isso meio estranho então fui tentar incluir um printStackTrace dentro desse catch, porém ao tentar compilar a classe descobri que ela é totalmente bizarra, portanto não compila.
Por exemplo, um dos métodos dela é assim:
public long doGetMediaTime()
{
long pos;
label0:
{
pos = 0L;
long l;
synchronized(waveLock)
{
if(sampleRate != 0)
break label0;
l = 0L;
}
return l;
}
if(waveOut != null)
pos = waveOut.getSamplesPlayed();
else
pos = lastPos;
obj;
JVM INSTR monitorexit ;
goto _L1
exception;
throw exception;
_L1:
long nano = ((pos - lastPos) * 0xf4240L) / (long)sampleRate + origin;
return nano;
}
Então minha dúvida é: como conseguiram colocar essas coisas estranhas no meio do código, especialmente nessa parte final do método?
Eu pensava que para usar coisas “não Java” o método deveria ser declarado como native e ficar vazio.
