Search in sources :

Example 1 with Decoder

use of vazkii.symphony.lib.javazoom.jl.decoder.Decoder in project Symphony by Vazkii.

the class Converter method convert.

public synchronized void convert(InputStream sourceStream, String destName, ProgressListener progressListener, Decoder.Params decoderParams) throws JavaLayerException {
    if (progressListener == null)
        progressListener = PrintWriterProgressListener.newStdOut(PrintWriterProgressListener.NO_DETAIL);
    try {
        if (!(sourceStream instanceof BufferedInputStream))
            sourceStream = new BufferedInputStream(sourceStream);
        int frameCount = -1;
        if (sourceStream.markSupported()) {
            sourceStream.mark(-1);
            frameCount = countFrames(sourceStream);
            sourceStream.reset();
        }
        progressListener.converterUpdate(ProgressListener.UPDATE_FRAME_COUNT, frameCount, 0);
        Obuffer output = null;
        Decoder decoder = new Decoder(decoderParams);
        Bitstream stream = new Bitstream(sourceStream);
        if (frameCount == -1)
            frameCount = Integer.MAX_VALUE;
        int frame = 0;
        long startTime = System.currentTimeMillis();
        try {
            for (; frame < frameCount; frame++) {
                try {
                    Header header = stream.readFrame();
                    if (header == null)
                        break;
                    progressListener.readFrame(frame, header);
                    if (output == null) {
                        // REVIEW: Incorrect functionality.
                        // the decoder should provide decoded
                        // frequency and channels output as it may differ from
                        // the source (e.g. when downmixing stereo to mono.)
                        int channels = (header.mode() == Header.SINGLE_CHANNEL) ? 1 : 2;
                        int freq = header.frequency();
                        output = new WaveFileObuffer(channels, freq, destName);
                        decoder.setOutputBuffer(output);
                    }
                    Obuffer decoderOutput = decoder.decodeFrame(header, stream);
                    // this exception should never happen, we test to be sure.
                    if (decoderOutput != output)
                        throw new InternalError("Output buffers are different.");
                    progressListener.decodedFrame(frame, header, output);
                    stream.closeFrame();
                } catch (Exception ex) {
                    boolean stop = !progressListener.converterException(ex);
                    if (stop) {
                        throw new JavaLayerException(ex.getLocalizedMessage(), ex);
                    }
                }
            }
        } finally {
            if (output != null)
                output.close();
        }
        int time = (int) (System.currentTimeMillis() - startTime);
        progressListener.converterUpdate(ProgressListener.UPDATE_CONVERT_COMPLETE, time, frame);
    } catch (IOException ex) {
        throw new JavaLayerException(ex.getLocalizedMessage(), ex);
    }
}
Also used : Header(vazkii.symphony.lib.javazoom.jl.decoder.Header) BufferedInputStream(java.io.BufferedInputStream) Bitstream(vazkii.symphony.lib.javazoom.jl.decoder.Bitstream) Obuffer(vazkii.symphony.lib.javazoom.jl.decoder.Obuffer) IOException(java.io.IOException) Decoder(vazkii.symphony.lib.javazoom.jl.decoder.Decoder) JavaLayerException(vazkii.symphony.lib.javazoom.jl.decoder.JavaLayerException) JavaLayerException(vazkii.symphony.lib.javazoom.jl.decoder.JavaLayerException) IOException(java.io.IOException)

Example 2 with Decoder

use of vazkii.symphony.lib.javazoom.jl.decoder.Decoder in project Symphony by Vazkii.

the class JavaSoundAudioDevice method getAudioFormat.

protected AudioFormat getAudioFormat() {
    if (fmt == null) {
        Decoder decoder = getDecoder();
        fmt = new AudioFormat(decoder.getOutputFrequency(), 16, decoder.getOutputChannels(), true, false);
    }
    return fmt;
}
Also used : Decoder(vazkii.symphony.lib.javazoom.jl.decoder.Decoder) AudioFormat(javax.sound.sampled.AudioFormat)

Aggregations

Decoder (vazkii.symphony.lib.javazoom.jl.decoder.Decoder)2 BufferedInputStream (java.io.BufferedInputStream)1 IOException (java.io.IOException)1 AudioFormat (javax.sound.sampled.AudioFormat)1 Bitstream (vazkii.symphony.lib.javazoom.jl.decoder.Bitstream)1 Header (vazkii.symphony.lib.javazoom.jl.decoder.Header)1 JavaLayerException (vazkii.symphony.lib.javazoom.jl.decoder.JavaLayerException)1 Obuffer (vazkii.symphony.lib.javazoom.jl.decoder.Obuffer)1