lib 1400149 // java-lame static LS _stickyLibs_javaLame_wavToMP3_mono = ll(#1400149); import net.sourceforge.lame.lowlevel.*; sclass StreamingMP3Encoder implements AutoCloseable { File mp3; OutputStream out; byte[] outBuffer; LameEncoder encoder; IVF3 onBytesWritten; *(File *mp3, float sampleRate) ctex { this(mp3, javaSound_pcmSignedLittleEndianMono(sampleRate)); } *(File *mp3, AudioFormat format) ctex { encoder = new LameEncoder(format); outBuffer = new byte[encoder.getPCMBufferSize()]; out = newFileOutputStream(mp3); } public void close { encoder.close(); dispose out; } void addData(short[] samples) ctex { byte[] pcm = byteArrayFromShorts_littleEndian(samples); int bytesToTransfer = min(l(outBuffer), l(pcm)), bytesWritten; int iPCM = 0; while (0 < (bytesWritten = encoder.encodeBuffer(pcm, iPCM, bytesToTransfer, outBuffer))) { iPCM += bytesToTransfer; bytesToTransfer = min(l(outBuffer), l(pcm) - iPCM); callF(onBytesWritten, outBuffer, 0, bytesWritten); out.write(outBuffer, 0, bytesWritten); } } }