From 17ef28659df2a0e56929cb4b61d0348036eecf7b Mon Sep 17 00:00:00 2001 From: "Muhammad Rakha (1301154124)" Date: Fri, 19 May 2017 22:06:12 +0700 Subject: [PATCH] Bismillah Task 5 --- JLayer1.0.1/CHANGES.txt | 122 + JLayer1.0.1/LICENSE.txt | 504 ++++ JLayer1.0.1/README.txt | 81 + JLayer1.0.1/build-unix.sh | 42 + JLayer1.0.1/build-win32.bat | 42 + JLayer1.0.1/build.xml | 58 + ...onverter$PrintWriterProgressListener.class | Bin 0 -> 2429 bytes .../Converter$ProgressListener.class | Bin 0 -> 551 bytes .../javazoom/jl/converter/Converter.class | Bin 0 -> 3242 bytes .../converter/RiffFile$RiffChunkHeader.class | Bin 0 -> 417 bytes .../javazoom/jl/converter/RiffFile.class | Bin 0 -> 3887 bytes .../converter/WaveFile$WaveFileSample.class | Bin 0 -> 386 bytes .../converter/WaveFile$WaveFormat_Chunk.class | Bin 0 -> 1207 bytes .../WaveFile$WaveFormat_ChunkData.class | Bin 0 -> 725 bytes .../javazoom/jl/converter/WaveFile.class | Bin 0 -> 2475 bytes .../jl/converter/WaveFileObuffer.class | Bin 0 -> 999 bytes .../javazoom/jl/converter/jlc$jlcArgs.class | Bin 0 -> 2073 bytes .../classes/javazoom/jl/converter/jlc.class | Bin 0 -> 1592 bytes .../javazoom/jl/decoder/BitReserve.class | Bin 0 -> 997 bytes .../javazoom/jl/decoder/Bitstream.class | Bin 0 -> 4774 bytes .../javazoom/jl/decoder/BitstreamErrors.class | Bin 0 -> 412 bytes .../jl/decoder/BitstreamException.class | Bin 0 -> 755 bytes .../classes/javazoom/jl/decoder/Control.class | Bin 0 -> 240 bytes .../classes/javazoom/jl/decoder/Crc16.class | Bin 0 -> 436 bytes .../javazoom/jl/decoder/Decoder$Params.class | Bin 0 -> 1277 bytes .../classes/javazoom/jl/decoder/Decoder.class | Bin 0 -> 3559 bytes .../javazoom/jl/decoder/DecoderErrors.class | Bin 0 -> 276 bytes .../jl/decoder/DecoderException.class | Bin 0 -> 749 bytes .../jl/decoder/Equalizer$EQFunction.class | Bin 0 -> 279 bytes .../javazoom/jl/decoder/Equalizer.class | Bin 0 -> 1440 bytes .../javazoom/jl/decoder/FrameDecoder.class | Bin 0 -> 177 bytes .../classes/javazoom/jl/decoder/Header.class | Bin 0 -> 9487 bytes .../jl/decoder/InputStreamSource.class | Bin 0 -> 719 bytes .../javazoom/jl/decoder/JavaLayerError.class | Bin 0 -> 148 bytes .../javazoom/jl/decoder/JavaLayerErrors.class | Bin 0 -> 183 bytes .../jl/decoder/JavaLayerException.class | Bin 0 -> 670 bytes .../javazoom/jl/decoder/JavaLayerHook.class | Bin 0 -> 159 bytes .../javazoom/jl/decoder/JavaLayerUtils.class | Bin 0 -> 2602 bytes .../jl/decoder/LayerIDecoder$Subband.class | Bin 0 -> 1444 bytes .../decoder/LayerIDecoder$SubbandLayer1.class | Bin 0 -> 1960 bytes ...Decoder$SubbandLayer1IntensityStereo.class | Bin 0 -> 1394 bytes .../LayerIDecoder$SubbandLayer1Stereo.class | Bin 0 -> 1770 bytes .../javazoom/jl/decoder/LayerIDecoder.class | Bin 0 -> 2810 bytes .../LayerIIDecoder$SubbandLayer2.class | Bin 0 -> 23694 bytes ...Decoder$SubbandLayer2IntensityStereo.class | Bin 0 -> 2158 bytes .../LayerIIDecoder$SubbandLayer2Stereo.class | Bin 0 -> 2540 bytes .../javazoom/jl/decoder/LayerIIDecoder.class | Bin 0 -> 1307 bytes .../LayerIIIDecoder$III_side_info_t.class | Bin 0 -> 526 bytes .../jl/decoder/LayerIIIDecoder$SBI.class | Bin 0 -> 348 bytes .../jl/decoder/LayerIIIDecoder$Sftable.class | Bin 0 -> 511 bytes .../decoder/LayerIIIDecoder$gr_info_s.class | Bin 0 -> 810 bytes .../decoder/LayerIIIDecoder$temporaire.class | Bin 0 -> 468 bytes .../decoder/LayerIIIDecoder$temporaire2.class | Bin 0 -> 325 bytes .../javazoom/jl/decoder/LayerIIIDecoder.class | Bin 0 -> 25071 bytes .../classes/javazoom/jl/decoder/Manager.class | Bin 0 -> 299 bytes .../classes/javazoom/jl/decoder/Obuffer.class | Bin 0 -> 533 bytes .../javazoom/jl/decoder/OutputChannels.class | Bin 0 -> 1329 bytes .../javazoom/jl/decoder/SampleBuffer.class | Bin 0 -> 960 bytes .../classes/javazoom/jl/decoder/Source.class | Bin 0 -> 324 bytes .../javazoom/jl/decoder/SynthesisFilter.class | Bin 0 -> 15349 bytes .../classes/javazoom/jl/decoder/au2lin.ser | Bin 0 -> 539 bytes .../javazoom/jl/decoder/huffcodetab.class | Bin 0 -> 49460 bytes .../classes/javazoom/jl/decoder/l3reorder.ser | Bin 0 -> 13925 bytes .../classes/javazoom/jl/decoder/lin2au.ser | Bin 0 -> 16411 bytes .../classes/javazoom/jl/decoder/sfd.ser | Bin 0 -> 2075 bytes .../javazoom/jl/player/AudioDevice.class | Bin 0 -> 324 bytes .../javazoom/jl/player/AudioDeviceBase.class | Bin 0 -> 1015 bytes .../jl/player/AudioDeviceFactory.class | Bin 0 -> 783 bytes .../javazoom/jl/player/FactoryRegistry.class | Bin 0 -> 2069 bytes .../jl/player/JavaSoundAudioDevice.class | Bin 0 -> 3179 bytes .../player/JavaSoundAudioDeviceFactory.class | Bin 0 -> 1557 bytes .../javazoom/jl/player/NullAudioDevice.class | Bin 0 -> 215 bytes .../classes/javazoom/jl/player/Player.class | Bin 0 -> 2222 bytes .../javazoom/jl/player/PlayerApplet.class | Bin 0 -> 2670 bytes .../jl/player/advanced/AdvancedPlayer.class | Bin 0 -> 3196 bytes .../jl/player/advanced/PlaybackEvent.class | Bin 0 -> 815 bytes .../jl/player/advanced/PlaybackListener.class | Bin 0 -> 299 bytes .../javazoom/jl/player/advanced/jlap$1.class | Bin 0 -> 872 bytes .../player/advanced/jlap$InfoListener.class | Bin 0 -> 1056 bytes .../javazoom/jl/player/advanced/jlap.class | Bin 0 -> 1970 bytes .../classes/javazoom/jl/player/jlp.class | Bin 0 -> 2665 bytes JLayer1.0.1/doc/allclasses-frame.html | 118 + JLayer1.0.1/doc/allclasses-noframe.html | 118 + JLayer1.0.1/doc/constant-values.html | 600 ++++ JLayer1.0.1/doc/deprecated-list.html | 140 + JLayer1.0.1/doc/help-doc.html | 213 ++ JLayer1.0.1/doc/index-all.html | 1451 ++++++++++ JLayer1.0.1/doc/index.html | 39 + ...Converter.PrintWriterProgressListener.html | 568 ++++ .../converter/Converter.ProgressListener.html | 390 +++ .../doc/javazoom/jl/converter/Converter.html | 418 +++ .../doc/javazoom/jl/converter/RiffFile.html | 809 ++++++ .../jl/converter/WaveFile.WaveFileSample.html | 258 ++ .../doc/javazoom/jl/converter/WaveFile.html | 504 ++++ .../jl/converter/WaveFileObuffer.html | 397 +++ .../doc/javazoom/jl/converter/jlc.html | 256 ++ .../javazoom/jl/converter/package-frame.html | 53 + .../jl/converter/package-summary.html | 192 ++ .../javazoom/jl/converter/package-tree.html | 157 ++ .../doc/javazoom/jl/decoder/Bitstream.html | 601 ++++ .../javazoom/jl/decoder/BitstreamErrors.html | 343 +++ .../jl/decoder/BitstreamException.html | 359 +++ .../doc/javazoom/jl/decoder/Control.html | 325 +++ .../doc/javazoom/jl/decoder/Crc16.html | 279 ++ .../javazoom/jl/decoder/Decoder.Params.html | 342 +++ .../doc/javazoom/jl/decoder/Decoder.html | 575 ++++ .../javazoom/jl/decoder/DecoderErrors.html | 259 ++ .../javazoom/jl/decoder/DecoderException.html | 348 +++ .../jl/decoder/Equalizer.EQFunction.html | 255 ++ .../doc/javazoom/jl/decoder/Equalizer.html | 491 ++++ .../doc/javazoom/jl/decoder/FrameDecoder.html | 211 ++ .../doc/javazoom/jl/decoder/Header.html | 1202 ++++++++ .../jl/decoder/InputStreamSource.html | 396 +++ .../javazoom/jl/decoder/JavaLayerError.html | 242 ++ .../javazoom/jl/decoder/JavaLayerErrors.html | 233 ++ .../jl/decoder/JavaLayerException.html | 348 +++ .../javazoom/jl/decoder/JavaLayerHook.html | 209 ++ .../javazoom/jl/decoder/JavaLayerUtils.html | 436 +++ .../doc/javazoom/jl/decoder/Manager.html | 291 ++ .../doc/javazoom/jl/decoder/Obuffer.html | 417 +++ .../javazoom/jl/decoder/OutputChannels.html | 496 ++++ .../doc/javazoom/jl/decoder/SampleBuffer.html | 481 ++++ .../doc/javazoom/jl/decoder/Source.html | 348 +++ .../javazoom/jl/decoder/package-frame.html | 105 + .../javazoom/jl/decoder/package-summary.html | 287 ++ .../doc/javazoom/jl/decoder/package-tree.html | 171 ++ .../doc/javazoom/jl/player/AudioDevice.html | 361 +++ .../javazoom/jl/player/AudioDeviceBase.html | 563 ++++ .../jl/player/AudioDeviceFactory.html | 311 +++ .../javazoom/jl/player/FactoryRegistry.html | 433 +++ .../jl/player/JavaSoundAudioDevice.html | 578 ++++ .../player/JavaSoundAudioDeviceFactory.html | 319 +++ .../javazoom/jl/player/NullAudioDevice.html | 272 ++ .../doc/javazoom/jl/player/Player.html | 408 +++ .../doc/javazoom/jl/player/PlayerApplet.html | 740 +++++ .../jl/player/advanced/AdvancedPlayer.html | 471 ++++ .../jl/player/advanced/PlaybackEvent.html | 404 +++ .../jl/player/advanced/PlaybackListener.html | 273 ++ .../jl/player/advanced/jlap.InfoListener.html | 276 ++ .../doc/javazoom/jl/player/advanced/jlap.html | 395 +++ .../jl/player/advanced/package-frame.html | 38 + .../jl/player/advanced/package-summary.html | 165 ++ .../jl/player/advanced/package-tree.html | 149 + JLayer1.0.1/doc/javazoom/jl/player/jlp.html | 420 +++ .../doc/javazoom/jl/player/package-frame.html | 59 + .../javazoom/jl/player/package-summary.html | 207 ++ .../doc/javazoom/jl/player/package-tree.html | 168 ++ JLayer1.0.1/doc/overview-frame.html | 48 + JLayer1.0.1/doc/overview-summary.html | 158 ++ JLayer1.0.1/doc/overview-tree.html | 191 ++ JLayer1.0.1/doc/package-list | 4 + JLayer1.0.1/doc/packages.html | 31 + JLayer1.0.1/doc/resources/inherit.gif | Bin 0 -> 57 bytes JLayer1.0.1/doc/serialized-form.html | 295 ++ JLayer1.0.1/doc/stylesheet.css | 29 + JLayer1.0.1/jl1.0.1.jar | Bin 0 -> 105363 bytes JLayer1.0.1/playerapplet.html | 44 + JLayer1.0.1/setEnvAnt.bat | 3 + .../src/javazoom/jl/converter/Converter.java | 411 +++ .../src/javazoom/jl/converter/RiffFile.java | 495 ++++ .../src/javazoom/jl/converter/WaveFile.java | 522 ++++ .../jl/converter/WaveFileObuffer.java | 141 + .../src/javazoom/jl/converter/jlc.java | 216 ++ .../src/javazoom/jl/decoder/BitReserve.java | 223 ++ .../src/javazoom/jl/decoder/Bitstream.java | 655 +++++ .../javazoom/jl/decoder/BitstreamErrors.java | 72 + .../jl/decoder/BitstreamException.java | 71 + .../src/javazoom/jl/decoder/Control.java | 57 + .../src/javazoom/jl/decoder/Crc16.java | 70 + .../src/javazoom/jl/decoder/Decoder.java | 357 +++ .../javazoom/jl/decoder/DecoderErrors.java | 45 + .../javazoom/jl/decoder/DecoderException.java | 61 + .../src/javazoom/jl/decoder/Equalizer.java | 227 ++ .../src/javazoom/jl/decoder/FrameDecoder.java | 39 + .../src/javazoom/jl/decoder/Header.java | 762 +++++ .../jl/decoder/InputStreamSource.java | 80 + .../javazoom/jl/decoder/JavaLayerError.java | 31 + .../javazoom/jl/decoder/JavaLayerErrors.java | 40 + .../jl/decoder/JavaLayerException.java | 80 + .../javazoom/jl/decoder/JavaLayerHook.java | 36 + .../javazoom/jl/decoder/JavaLayerUtils.java | 207 ++ .../javazoom/jl/decoder/LayerIDecoder.java | 448 +++ .../javazoom/jl/decoder/LayerIIDecoder.java | 1064 +++++++ .../javazoom/jl/decoder/LayerIIIDecoder.java | 2439 +++++++++++++++++ .../src/javazoom/jl/decoder/Manager.java | 46 + .../src/javazoom/jl/decoder/Obuffer.java | 88 + .../javazoom/jl/decoder/OutputChannels.java | 143 + .../src/javazoom/jl/decoder/SampleBuffer.java | 132 + .../src/javazoom/jl/decoder/Source.java | 49 + .../javazoom/jl/decoder/SynthesisFilter.java | 1817 ++++++++++++ .../src/javazoom/jl/decoder/au2lin.ser | Bin 0 -> 539 bytes .../src/javazoom/jl/decoder/huffcodetab.java | 600 ++++ .../src/javazoom/jl/decoder/l3reorder.ser | Bin 0 -> 13925 bytes .../src/javazoom/jl/decoder/lin2au.ser | Bin 0 -> 16411 bytes .../src/javazoom/jl/decoder/readme.txt | 15 + JLayer1.0.1/src/javazoom/jl/decoder/sfd.ser | Bin 0 -> 2075 bytes .../src/javazoom/jl/player/AudioDevice.java | 103 + .../javazoom/jl/player/AudioDeviceBase.java | 177 ++ .../jl/player/AudioDeviceFactory.java | 87 + .../javazoom/jl/player/FactoryRegistry.java | 129 + .../jl/player/JavaSoundAudioDevice.java | 215 ++ .../player/JavaSoundAudioDeviceFactory.java | 85 + .../javazoom/jl/player/NullAudioDevice.java | 37 + .../src/javazoom/jl/player/Player.java | 251 ++ .../src/javazoom/jl/player/PlayerApplet.java | 246 ++ .../jl/player/advanced/AdvancedPlayer.java | 242 ++ .../jl/player/advanced/PlaybackEvent.java | 51 + .../jl/player/advanced/PlaybackListener.java | 30 + .../src/javazoom/jl/player/advanced/jlap.java | 116 + JLayer1.0.1/src/javazoom/jl/player/jlp.java | 176 ++ JLayer1.0.1/srctest/AllTests.java | 39 + .../javazoom/jl/decoder/BitstreamTest.java | 155 ++ .../srctest/javazoom/jl/player/jlpTest.java | 87 + JLayer1.0.1/srctest/test.mp3.properties | 30 + build.xml | 73 + build/classes/.netbeans_automatic_build | 0 build/classes/.netbeans_update_resources | 0 build/classes/AllTests.class | Bin 0 -> 666 bytes build/classes/CHANGES.txt | 122 + build/classes/LICENSE.txt | 504 ++++ build/classes/README.txt | 81 + build/classes/build-unix.sh | 42 + build/classes/build-win32.bat | 42 + build/classes/build.xml | 58 + ...onverter$PrintWriterProgressListener.class | Bin 0 -> 2429 bytes .../Converter$ProgressListener.class | Bin 0 -> 551 bytes .../javazoom/jl/converter/Converter.class | Bin 0 -> 3242 bytes .../converter/RiffFile$RiffChunkHeader.class | Bin 0 -> 417 bytes .../javazoom/jl/converter/RiffFile.class | Bin 0 -> 3887 bytes .../converter/WaveFile$WaveFileSample.class | Bin 0 -> 386 bytes .../converter/WaveFile$WaveFormat_Chunk.class | Bin 0 -> 1207 bytes .../WaveFile$WaveFormat_ChunkData.class | Bin 0 -> 725 bytes .../javazoom/jl/converter/WaveFile.class | Bin 0 -> 2475 bytes .../jl/converter/WaveFileObuffer.class | Bin 0 -> 999 bytes .../javazoom/jl/converter/jlc$jlcArgs.class | Bin 0 -> 2073 bytes .../classes/javazoom/jl/converter/jlc.class | Bin 0 -> 1592 bytes .../javazoom/jl/decoder/BitReserve.class | Bin 0 -> 997 bytes .../javazoom/jl/decoder/Bitstream.class | Bin 0 -> 4774 bytes .../javazoom/jl/decoder/BitstreamErrors.class | Bin 0 -> 412 bytes .../jl/decoder/BitstreamException.class | Bin 0 -> 755 bytes .../classes/javazoom/jl/decoder/Control.class | Bin 0 -> 240 bytes .../classes/javazoom/jl/decoder/Crc16.class | Bin 0 -> 436 bytes .../javazoom/jl/decoder/Decoder$Params.class | Bin 0 -> 1277 bytes .../classes/javazoom/jl/decoder/Decoder.class | Bin 0 -> 3559 bytes .../javazoom/jl/decoder/DecoderErrors.class | Bin 0 -> 276 bytes .../jl/decoder/DecoderException.class | Bin 0 -> 749 bytes .../jl/decoder/Equalizer$EQFunction.class | Bin 0 -> 279 bytes .../javazoom/jl/decoder/Equalizer.class | Bin 0 -> 1440 bytes .../javazoom/jl/decoder/FrameDecoder.class | Bin 0 -> 177 bytes .../classes/javazoom/jl/decoder/Header.class | Bin 0 -> 9487 bytes .../jl/decoder/InputStreamSource.class | Bin 0 -> 719 bytes .../javazoom/jl/decoder/JavaLayerError.class | Bin 0 -> 148 bytes .../javazoom/jl/decoder/JavaLayerErrors.class | Bin 0 -> 183 bytes .../jl/decoder/JavaLayerException.class | Bin 0 -> 670 bytes .../javazoom/jl/decoder/JavaLayerHook.class | Bin 0 -> 159 bytes .../javazoom/jl/decoder/JavaLayerUtils.class | Bin 0 -> 2602 bytes .../jl/decoder/LayerIDecoder$Subband.class | Bin 0 -> 1444 bytes .../decoder/LayerIDecoder$SubbandLayer1.class | Bin 0 -> 1960 bytes ...Decoder$SubbandLayer1IntensityStereo.class | Bin 0 -> 1394 bytes .../LayerIDecoder$SubbandLayer1Stereo.class | Bin 0 -> 1770 bytes .../javazoom/jl/decoder/LayerIDecoder.class | Bin 0 -> 2810 bytes .../LayerIIDecoder$SubbandLayer2.class | Bin 0 -> 23694 bytes ...Decoder$SubbandLayer2IntensityStereo.class | Bin 0 -> 2158 bytes .../LayerIIDecoder$SubbandLayer2Stereo.class | Bin 0 -> 2540 bytes .../javazoom/jl/decoder/LayerIIDecoder.class | Bin 0 -> 1307 bytes .../LayerIIIDecoder$III_side_info_t.class | Bin 0 -> 526 bytes .../jl/decoder/LayerIIIDecoder$SBI.class | Bin 0 -> 348 bytes .../jl/decoder/LayerIIIDecoder$Sftable.class | Bin 0 -> 511 bytes .../decoder/LayerIIIDecoder$gr_info_s.class | Bin 0 -> 810 bytes .../decoder/LayerIIIDecoder$temporaire.class | Bin 0 -> 468 bytes .../decoder/LayerIIIDecoder$temporaire2.class | Bin 0 -> 325 bytes .../javazoom/jl/decoder/LayerIIIDecoder.class | Bin 0 -> 25071 bytes .../classes/javazoom/jl/decoder/Manager.class | Bin 0 -> 299 bytes .../classes/javazoom/jl/decoder/Obuffer.class | Bin 0 -> 533 bytes .../javazoom/jl/decoder/OutputChannels.class | Bin 0 -> 1329 bytes .../javazoom/jl/decoder/SampleBuffer.class | Bin 0 -> 960 bytes .../classes/javazoom/jl/decoder/Source.class | Bin 0 -> 324 bytes .../javazoom/jl/decoder/SynthesisFilter.class | Bin 0 -> 15349 bytes .../classes/javazoom/jl/decoder/au2lin.ser | Bin 0 -> 539 bytes .../javazoom/jl/decoder/huffcodetab.class | Bin 0 -> 49460 bytes .../classes/javazoom/jl/decoder/l3reorder.ser | Bin 0 -> 13925 bytes .../classes/javazoom/jl/decoder/lin2au.ser | Bin 0 -> 16411 bytes .../classes/javazoom/jl/decoder/sfd.ser | Bin 0 -> 2075 bytes .../javazoom/jl/player/AudioDevice.class | Bin 0 -> 324 bytes .../javazoom/jl/player/AudioDeviceBase.class | Bin 0 -> 1015 bytes .../jl/player/AudioDeviceFactory.class | Bin 0 -> 783 bytes .../javazoom/jl/player/FactoryRegistry.class | Bin 0 -> 2069 bytes .../jl/player/JavaSoundAudioDevice.class | Bin 0 -> 3179 bytes .../player/JavaSoundAudioDeviceFactory.class | Bin 0 -> 1557 bytes .../javazoom/jl/player/NullAudioDevice.class | Bin 0 -> 215 bytes .../classes/javazoom/jl/player/Player.class | Bin 0 -> 2222 bytes .../javazoom/jl/player/PlayerApplet.class | Bin 0 -> 2670 bytes .../jl/player/advanced/AdvancedPlayer.class | Bin 0 -> 3196 bytes .../jl/player/advanced/PlaybackEvent.class | Bin 0 -> 815 bytes .../jl/player/advanced/PlaybackListener.class | Bin 0 -> 299 bytes .../javazoom/jl/player/advanced/jlap$1.class | Bin 0 -> 872 bytes .../player/advanced/jlap$InfoListener.class | Bin 0 -> 1056 bytes .../javazoom/jl/player/advanced/jlap.class | Bin 0 -> 1970 bytes .../classes/javazoom/jl/player/jlp.class | Bin 0 -> 2665 bytes build/classes/doc/allclasses-frame.html | 118 + build/classes/doc/allclasses-noframe.html | 118 + build/classes/doc/constant-values.html | 600 ++++ build/classes/doc/deprecated-list.html | 140 + build/classes/doc/help-doc.html | 213 ++ build/classes/doc/index-all.html | 1451 ++++++++++ build/classes/doc/index.html | 39 + ...Converter.PrintWriterProgressListener.html | 568 ++++ .../converter/Converter.ProgressListener.html | 390 +++ .../doc/javazoom/jl/converter/Converter.html | 418 +++ .../doc/javazoom/jl/converter/RiffFile.html | 809 ++++++ .../jl/converter/WaveFile.WaveFileSample.html | 258 ++ .../doc/javazoom/jl/converter/WaveFile.html | 504 ++++ .../jl/converter/WaveFileObuffer.html | 397 +++ .../doc/javazoom/jl/converter/jlc.html | 256 ++ .../javazoom/jl/converter/package-frame.html | 53 + .../jl/converter/package-summary.html | 192 ++ .../javazoom/jl/converter/package-tree.html | 157 ++ .../doc/javazoom/jl/decoder/Bitstream.html | 601 ++++ .../javazoom/jl/decoder/BitstreamErrors.html | 343 +++ .../jl/decoder/BitstreamException.html | 359 +++ .../doc/javazoom/jl/decoder/Control.html | 325 +++ .../doc/javazoom/jl/decoder/Crc16.html | 279 ++ .../javazoom/jl/decoder/Decoder.Params.html | 342 +++ .../doc/javazoom/jl/decoder/Decoder.html | 575 ++++ .../javazoom/jl/decoder/DecoderErrors.html | 259 ++ .../javazoom/jl/decoder/DecoderException.html | 348 +++ .../jl/decoder/Equalizer.EQFunction.html | 255 ++ .../doc/javazoom/jl/decoder/Equalizer.html | 491 ++++ .../doc/javazoom/jl/decoder/FrameDecoder.html | 211 ++ .../doc/javazoom/jl/decoder/Header.html | 1202 ++++++++ .../jl/decoder/InputStreamSource.html | 396 +++ .../javazoom/jl/decoder/JavaLayerError.html | 242 ++ .../javazoom/jl/decoder/JavaLayerErrors.html | 233 ++ .../jl/decoder/JavaLayerException.html | 348 +++ .../javazoom/jl/decoder/JavaLayerHook.html | 209 ++ .../javazoom/jl/decoder/JavaLayerUtils.html | 436 +++ .../doc/javazoom/jl/decoder/Manager.html | 291 ++ .../doc/javazoom/jl/decoder/Obuffer.html | 417 +++ .../javazoom/jl/decoder/OutputChannels.html | 496 ++++ .../doc/javazoom/jl/decoder/SampleBuffer.html | 481 ++++ .../doc/javazoom/jl/decoder/Source.html | 348 +++ .../javazoom/jl/decoder/package-frame.html | 105 + .../javazoom/jl/decoder/package-summary.html | 287 ++ .../doc/javazoom/jl/decoder/package-tree.html | 171 ++ .../doc/javazoom/jl/player/AudioDevice.html | 361 +++ .../javazoom/jl/player/AudioDeviceBase.html | 563 ++++ .../jl/player/AudioDeviceFactory.html | 311 +++ .../javazoom/jl/player/FactoryRegistry.html | 433 +++ .../jl/player/JavaSoundAudioDevice.html | 578 ++++ .../player/JavaSoundAudioDeviceFactory.html | 319 +++ .../javazoom/jl/player/NullAudioDevice.html | 272 ++ .../doc/javazoom/jl/player/Player.html | 408 +++ .../doc/javazoom/jl/player/PlayerApplet.html | 740 +++++ .../jl/player/advanced/AdvancedPlayer.html | 471 ++++ .../jl/player/advanced/PlaybackEvent.html | 404 +++ .../jl/player/advanced/PlaybackListener.html | 273 ++ .../jl/player/advanced/jlap.InfoListener.html | 276 ++ .../doc/javazoom/jl/player/advanced/jlap.html | 395 +++ .../jl/player/advanced/package-frame.html | 38 + .../jl/player/advanced/package-summary.html | 165 ++ .../jl/player/advanced/package-tree.html | 149 + build/classes/doc/javazoom/jl/player/jlp.html | 420 +++ .../doc/javazoom/jl/player/package-frame.html | 59 + .../javazoom/jl/player/package-summary.html | 207 ++ .../doc/javazoom/jl/player/package-tree.html | 168 ++ build/classes/doc/overview-frame.html | 48 + build/classes/doc/overview-summary.html | 158 ++ build/classes/doc/overview-tree.html | 191 ++ build/classes/doc/package-list | 4 + build/classes/doc/packages.html | 31 + build/classes/doc/resources/inherit.gif | Bin 0 -> 57 bytes build/classes/doc/serialized-form.html | 295 ++ build/classes/doc/stylesheet.css | 29 + ...onverter$PrintWriterProgressListener.class | Bin 0 -> 3436 bytes .../Converter$ProgressListener.class | Bin 0 -> 727 bytes .../javazoom/jl/converter/Converter.class | Bin 0 -> 5052 bytes .../converter/RiffFile$RiffChunkHeader.class | Bin 0 -> 603 bytes .../javazoom/jl/converter/RiffFile.class | Bin 0 -> 6644 bytes .../converter/WaveFile$WaveFileSample.class | Bin 0 -> 559 bytes .../converter/WaveFile$WaveFormat_Chunk.class | Bin 0 -> 1494 bytes .../WaveFile$WaveFormat_ChunkData.class | Bin 0 -> 1074 bytes .../javazoom/jl/converter/WaveFile.class | Bin 0 -> 3307 bytes .../jl/converter/WaveFileObuffer.class | Bin 0 -> 1672 bytes .../javazoom/jl/converter/jlc$jlcArgs.class | Bin 0 -> 2752 bytes build/classes/javazoom/jl/converter/jlc.class | Bin 0 -> 2285 bytes .../javazoom/jl/decoder/BitReserve.class | Bin 0 -> 1707 bytes .../javazoom/jl/decoder/Bitstream.class | Bin 0 -> 7886 bytes .../javazoom/jl/decoder/BitstreamErrors.class | Bin 0 -> 456 bytes .../jl/decoder/BitstreamException.class | Bin 0 -> 1122 bytes .../javazoom/jl/decoder/BitstreamTest.class | Bin 0 -> 4426 bytes .../classes/javazoom/jl/decoder/Control.class | Bin 0 -> 318 bytes build/classes/javazoom/jl/decoder/Crc16.class | Bin 0 -> 819 bytes .../javazoom/jl/decoder/Decoder$Params.class | Bin 0 -> 1683 bytes .../classes/javazoom/jl/decoder/Decoder.class | Bin 0 -> 4898 bytes .../javazoom/jl/decoder/DecoderErrors.class | Bin 0 -> 318 bytes .../jl/decoder/DecoderException.class | Bin 0 -> 1112 bytes .../jl/decoder/Equalizer$EQFunction.class | Bin 0 -> 489 bytes .../javazoom/jl/decoder/Equalizer.class | Bin 0 -> 2570 bytes .../javazoom/jl/decoder/FrameDecoder.class | Bin 0 -> 218 bytes .../classes/javazoom/jl/decoder/Header.class | Bin 0 -> 12498 bytes .../jl/decoder/InputStreamSource.class | Bin 0 -> 1215 bytes .../javazoom/jl/decoder/JavaLayerError.class | Bin 0 -> 306 bytes .../javazoom/jl/decoder/JavaLayerErrors.class | Bin 0 -> 227 bytes .../jl/decoder/JavaLayerException.class | Bin 0 -> 1120 bytes .../javazoom/jl/decoder/JavaLayerHook.class | Bin 0 -> 246 bytes .../javazoom/jl/decoder/JavaLayerUtils.class | Bin 0 -> 3808 bytes .../jl/decoder/LayerIDecoder$Subband.class | Bin 0 -> 1747 bytes .../decoder/LayerIDecoder$SubbandLayer1.class | Bin 0 -> 2792 bytes ...Decoder$SubbandLayer1IntensityStereo.class | Bin 0 -> 2203 bytes .../LayerIDecoder$SubbandLayer1Stereo.class | Bin 0 -> 2608 bytes .../javazoom/jl/decoder/LayerIDecoder.class | Bin 0 -> 3737 bytes .../LayerIIDecoder$SubbandLayer2.class | Bin 0 -> 25413 bytes ...Decoder$SubbandLayer2IntensityStereo.class | Bin 0 -> 3174 bytes .../LayerIIDecoder$SubbandLayer2Stereo.class | Bin 0 -> 3751 bytes .../javazoom/jl/decoder/LayerIIDecoder.class | Bin 0 -> 1700 bytes .../LayerIIIDecoder$III_side_info_t.class | Bin 0 -> 726 bytes .../jl/decoder/LayerIIIDecoder$SBI.class | Bin 0 -> 600 bytes .../jl/decoder/LayerIIIDecoder$Sftable.class | Bin 0 -> 787 bytes .../decoder/LayerIIIDecoder$gr_info_s.class | Bin 0 -> 1040 bytes .../decoder/LayerIIIDecoder$temporaire.class | Bin 0 -> 659 bytes .../decoder/LayerIIIDecoder$temporaire2.class | Bin 0 -> 509 bytes .../javazoom/jl/decoder/LayerIIIDecoder.class | Bin 0 -> 37461 bytes .../classes/javazoom/jl/decoder/Manager.class | Bin 0 -> 589 bytes .../classes/javazoom/jl/decoder/Obuffer.class | Bin 0 -> 961 bytes .../javazoom/jl/decoder/OutputChannels.class | Bin 0 -> 1857 bytes .../javazoom/jl/decoder/SampleBuffer.class | Bin 0 -> 1840 bytes .../classes/javazoom/jl/decoder/Source.class | Bin 0 -> 432 bytes .../javazoom/jl/decoder/SynthesisFilter.class | Bin 0 -> 23737 bytes .../javazoom/jl/decoder/huffcodetab.class | Bin 0 -> 50616 bytes .../javazoom/jl/player/AudioDevice.class | Bin 0 -> 447 bytes .../javazoom/jl/player/AudioDeviceBase.class | Bin 0 -> 1728 bytes .../jl/player/AudioDeviceFactory.class | Bin 0 -> 1245 bytes .../javazoom/jl/player/FactoryRegistry.class | Bin 0 -> 3087 bytes .../jl/player/JavaSoundAudioDevice.class | Bin 0 -> 4770 bytes .../player/JavaSoundAudioDeviceFactory.class | Bin 0 -> 2193 bytes .../javazoom/jl/player/NullAudioDevice.class | Bin 0 -> 404 bytes build/classes/javazoom/jl/player/Player.class | Bin 0 -> 3461 bytes .../javazoom/jl/player/PlayerApplet.class | Bin 0 -> 4071 bytes .../jl/player/advanced/AdvancedPlayer.class | Bin 0 -> 4664 bytes .../jl/player/advanced/PlaybackEvent.class | Bin 0 -> 1251 bytes .../jl/player/advanced/PlaybackListener.class | Bin 0 -> 601 bytes .../javazoom/jl/player/advanced/jlap$1.class | Bin 0 -> 1130 bytes .../player/advanced/jlap$InfoListener.class | Bin 0 -> 1369 bytes .../javazoom/jl/player/advanced/jlap.class | Bin 0 -> 2877 bytes build/classes/javazoom/jl/player/jlp.class | Bin 0 -> 3939 bytes .../classes/javazoom/jl/player/jlpTest.class | Bin 0 -> 1648 bytes build/classes/jl1.0.1.jar | Bin 0 -> 105363 bytes build/classes/playerapplet.html | 44 + build/classes/setEnvAnt.bat | 3 + .../src/javazoom/jl/converter/Converter.rs | 3 + .../src/javazoom/jl/converter/RiffFile.rs | 2 + .../src/javazoom/jl/converter/WaveFile.rs | 4 + .../javazoom/jl/converter/WaveFileObuffer.rs | 1 + .../classes/src/javazoom/jl/converter/jlc.rs | 2 + .../src/javazoom/jl/decoder/BitReserve.rs | 1 + .../src/javazoom/jl/decoder/Bitstream.rs | 1 + .../javazoom/jl/decoder/BitstreamErrors.rs | 1 + .../javazoom/jl/decoder/BitstreamException.rs | 1 + .../src/javazoom/jl/decoder/Control.rs | 1 + .../classes/src/javazoom/jl/decoder/Crc16.rs | 1 + .../src/javazoom/jl/decoder/Decoder.rs | 2 + .../src/javazoom/jl/decoder/DecoderErrors.rs | 1 + .../javazoom/jl/decoder/DecoderException.rs | 1 + .../src/javazoom/jl/decoder/Equalizer.rs | 2 + .../src/javazoom/jl/decoder/FrameDecoder.rs | 1 + .../classes/src/javazoom/jl/decoder/Header.rs | 1 + .../javazoom/jl/decoder/InputStreamSource.rs | 1 + .../src/javazoom/jl/decoder/JavaLayerError.rs | 1 + .../javazoom/jl/decoder/JavaLayerErrors.rs | 1 + .../javazoom/jl/decoder/JavaLayerException.rs | 1 + .../src/javazoom/jl/decoder/JavaLayerHook.rs | 1 + .../src/javazoom/jl/decoder/JavaLayerUtils.rs | 1 + .../src/javazoom/jl/decoder/LayerIDecoder.rs | 5 + .../src/javazoom/jl/decoder/LayerIIDecoder.rs | 4 + .../javazoom/jl/decoder/LayerIIIDecoder.rs | 7 + .../src/javazoom/jl/decoder/Manager.rs | 1 + .../src/javazoom/jl/decoder/Obuffer.rs | 1 + .../src/javazoom/jl/decoder/OutputChannels.rs | 1 + .../src/javazoom/jl/decoder/SampleBuffer.rs | 1 + .../classes/src/javazoom/jl/decoder/Source.rs | 1 + .../javazoom/jl/decoder/SynthesisFilter.rs | 1 + .../src/javazoom/jl/decoder/au2lin.ser | Bin 0 -> 539 bytes .../src/javazoom/jl/decoder/huffcodetab.rs | 1 + .../src/javazoom/jl/decoder/l3reorder.ser | Bin 0 -> 13925 bytes .../src/javazoom/jl/decoder/lin2au.ser | Bin 0 -> 16411 bytes .../src/javazoom/jl/decoder/readme.txt | 15 + build/classes/src/javazoom/jl/decoder/sfd.ser | Bin 0 -> 2075 bytes .../src/javazoom/jl/player/AudioDevice.rs | 1 + .../src/javazoom/jl/player/AudioDeviceBase.rs | 1 + .../javazoom/jl/player/AudioDeviceFactory.rs | 1 + .../src/javazoom/jl/player/FactoryRegistry.rs | 1 + .../jl/player/JavaSoundAudioDevice.rs | 1 + .../jl/player/JavaSoundAudioDeviceFactory.rs | 1 + .../src/javazoom/jl/player/NullAudioDevice.rs | 1 + .../classes/src/javazoom/jl/player/Player.rs | 1 + .../src/javazoom/jl/player/PlayerApplet.rs | 1 + .../jl/player/advanced/AdvancedPlayer.rs | 1 + .../jl/player/advanced/PlaybackEvent.rs | 1 + .../jl/player/advanced/PlaybackListener.rs | 1 + .../src/javazoom/jl/player/advanced/jlap.rs | 3 + build/classes/src/javazoom/jl/player/jlp.rs | 1 + build/classes/srctest/AllTests.rs | 1 + .../javazoom/jl/decoder/BitstreamTest.rs | 1 + .../srctest/javazoom/jl/player/jlpTest.rs | 1 + build/classes/srctest/test.mp3.properties | 30 + .../task5/Application$ThreadPlayer.class | Bin 0 -> 718 bytes build/classes/task5/Application.class | Bin 0 -> 2022 bytes build/classes/task5/Controller.class | Bin 0 -> 2859 bytes build/classes/task5/Driver.class | Bin 0 -> 447 bytes build/classes/task5/View$1.class | Bin 0 -> 975 bytes build/classes/task5/View.class | Bin 0 -> 6240 bytes build/classes/task5/View.form | 191 ++ jlayer1.0.1.zip | Bin 0 -> 544174 bytes manifest.mf | 3 + nbproject/build-impl.xml | 1429 ++++++++++ nbproject/genfiles.properties | 8 + nbproject/private/config.properties | 0 nbproject/private/private.properties | 6 + nbproject/private/private.xml | 19 + nbproject/project.properties | 79 + nbproject/project.xml | 16 + src/task5/Application.java | 89 + src/task5/Controller.java | 76 + src/task5/Driver.java | 17 + src/task5/View.form | 191 ++ src/task5/View.java | 204 ++ 526 files changed, 67301 insertions(+) create mode 100644 JLayer1.0.1/CHANGES.txt create mode 100644 JLayer1.0.1/LICENSE.txt create mode 100644 JLayer1.0.1/README.txt create mode 100644 JLayer1.0.1/build-unix.sh create mode 100644 JLayer1.0.1/build-win32.bat create mode 100644 JLayer1.0.1/build.xml create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/Converter$PrintWriterProgressListener.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/Converter$ProgressListener.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/Converter.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/RiffFile$RiffChunkHeader.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/RiffFile.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/WaveFile$WaveFileSample.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/WaveFile$WaveFormat_Chunk.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/WaveFile$WaveFormat_ChunkData.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/WaveFile.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/WaveFileObuffer.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/jlc$jlcArgs.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/converter/jlc.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/BitReserve.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Bitstream.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/BitstreamErrors.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/BitstreamException.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Control.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Crc16.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Decoder$Params.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Decoder.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/DecoderErrors.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/DecoderException.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Equalizer$EQFunction.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Equalizer.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/FrameDecoder.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Header.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/InputStreamSource.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerError.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerErrors.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerException.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerHook.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerUtils.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$Subband.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1IntensityStereo.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1Stereo.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2IntensityStereo.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2Stereo.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIDecoder.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$III_side_info_t.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$SBI.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$Sftable.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$gr_info_s.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire2.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Manager.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Obuffer.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/OutputChannels.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/SampleBuffer.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/Source.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/SynthesisFilter.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/au2lin.ser create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/huffcodetab.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/l3reorder.ser create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/lin2au.ser create mode 100644 JLayer1.0.1/classes/javazoom/jl/decoder/sfd.ser create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/AudioDevice.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/AudioDeviceBase.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/AudioDeviceFactory.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/FactoryRegistry.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/JavaSoundAudioDevice.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/JavaSoundAudioDeviceFactory.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/NullAudioDevice.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/Player.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/PlayerApplet.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/advanced/AdvancedPlayer.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/advanced/PlaybackEvent.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/advanced/PlaybackListener.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/advanced/jlap$1.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/advanced/jlap$InfoListener.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/advanced/jlap.class create mode 100644 JLayer1.0.1/classes/javazoom/jl/player/jlp.class create mode 100644 JLayer1.0.1/doc/allclasses-frame.html create mode 100644 JLayer1.0.1/doc/allclasses-noframe.html create mode 100644 JLayer1.0.1/doc/constant-values.html create mode 100644 JLayer1.0.1/doc/deprecated-list.html create mode 100644 JLayer1.0.1/doc/help-doc.html create mode 100644 JLayer1.0.1/doc/index-all.html create mode 100644 JLayer1.0.1/doc/index.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/Converter.PrintWriterProgressListener.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/Converter.ProgressListener.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/Converter.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/RiffFile.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/WaveFile.WaveFileSample.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/WaveFile.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/WaveFileObuffer.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/jlc.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/package-frame.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/package-summary.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/converter/package-tree.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Bitstream.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/BitstreamErrors.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/BitstreamException.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Control.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Crc16.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Decoder.Params.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Decoder.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/DecoderErrors.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/DecoderException.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Equalizer.EQFunction.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Equalizer.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/FrameDecoder.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Header.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/InputStreamSource.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerError.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerErrors.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerException.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerHook.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerUtils.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Manager.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Obuffer.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/OutputChannels.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/SampleBuffer.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/Source.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/package-frame.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/package-summary.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/decoder/package-tree.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/AudioDevice.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/AudioDeviceBase.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/AudioDeviceFactory.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/FactoryRegistry.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/JavaSoundAudioDevice.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/JavaSoundAudioDeviceFactory.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/NullAudioDevice.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/Player.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/PlayerApplet.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/advanced/AdvancedPlayer.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/advanced/PlaybackEvent.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/advanced/PlaybackListener.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/advanced/jlap.InfoListener.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/advanced/jlap.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/advanced/package-frame.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/advanced/package-summary.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/advanced/package-tree.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/jlp.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/package-frame.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/package-summary.html create mode 100644 JLayer1.0.1/doc/javazoom/jl/player/package-tree.html create mode 100644 JLayer1.0.1/doc/overview-frame.html create mode 100644 JLayer1.0.1/doc/overview-summary.html create mode 100644 JLayer1.0.1/doc/overview-tree.html create mode 100644 JLayer1.0.1/doc/package-list create mode 100644 JLayer1.0.1/doc/packages.html create mode 100644 JLayer1.0.1/doc/resources/inherit.gif create mode 100644 JLayer1.0.1/doc/serialized-form.html create mode 100644 JLayer1.0.1/doc/stylesheet.css create mode 100644 JLayer1.0.1/jl1.0.1.jar create mode 100644 JLayer1.0.1/playerapplet.html create mode 100644 JLayer1.0.1/setEnvAnt.bat create mode 100644 JLayer1.0.1/src/javazoom/jl/converter/Converter.java create mode 100644 JLayer1.0.1/src/javazoom/jl/converter/RiffFile.java create mode 100644 JLayer1.0.1/src/javazoom/jl/converter/WaveFile.java create mode 100644 JLayer1.0.1/src/javazoom/jl/converter/WaveFileObuffer.java create mode 100644 JLayer1.0.1/src/javazoom/jl/converter/jlc.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/BitReserve.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/Bitstream.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/BitstreamErrors.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/BitstreamException.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/Control.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/Crc16.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/Decoder.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/DecoderErrors.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/DecoderException.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/Equalizer.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/FrameDecoder.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/Header.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/InputStreamSource.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerError.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerErrors.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerException.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerHook.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerUtils.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/LayerIDecoder.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/LayerIIDecoder.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/LayerIIIDecoder.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/Manager.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/Obuffer.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/OutputChannels.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/SampleBuffer.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/Source.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/SynthesisFilter.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/au2lin.ser create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/huffcodetab.java create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/l3reorder.ser create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/lin2au.ser create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/readme.txt create mode 100644 JLayer1.0.1/src/javazoom/jl/decoder/sfd.ser create mode 100644 JLayer1.0.1/src/javazoom/jl/player/AudioDevice.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/AudioDeviceBase.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/AudioDeviceFactory.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/FactoryRegistry.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/JavaSoundAudioDevice.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/JavaSoundAudioDeviceFactory.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/NullAudioDevice.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/Player.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/PlayerApplet.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/advanced/AdvancedPlayer.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/advanced/PlaybackEvent.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/advanced/PlaybackListener.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/advanced/jlap.java create mode 100644 JLayer1.0.1/src/javazoom/jl/player/jlp.java create mode 100644 JLayer1.0.1/srctest/AllTests.java create mode 100644 JLayer1.0.1/srctest/javazoom/jl/decoder/BitstreamTest.java create mode 100644 JLayer1.0.1/srctest/javazoom/jl/player/jlpTest.java create mode 100644 JLayer1.0.1/srctest/test.mp3.properties create mode 100644 build.xml create mode 100644 build/classes/.netbeans_automatic_build create mode 100644 build/classes/.netbeans_update_resources create mode 100644 build/classes/AllTests.class create mode 100644 build/classes/CHANGES.txt create mode 100644 build/classes/LICENSE.txt create mode 100644 build/classes/README.txt create mode 100644 build/classes/build-unix.sh create mode 100644 build/classes/build-win32.bat create mode 100644 build/classes/build.xml create mode 100644 build/classes/classes/javazoom/jl/converter/Converter$PrintWriterProgressListener.class create mode 100644 build/classes/classes/javazoom/jl/converter/Converter$ProgressListener.class create mode 100644 build/classes/classes/javazoom/jl/converter/Converter.class create mode 100644 build/classes/classes/javazoom/jl/converter/RiffFile$RiffChunkHeader.class create mode 100644 build/classes/classes/javazoom/jl/converter/RiffFile.class create mode 100644 build/classes/classes/javazoom/jl/converter/WaveFile$WaveFileSample.class create mode 100644 build/classes/classes/javazoom/jl/converter/WaveFile$WaveFormat_Chunk.class create mode 100644 build/classes/classes/javazoom/jl/converter/WaveFile$WaveFormat_ChunkData.class create mode 100644 build/classes/classes/javazoom/jl/converter/WaveFile.class create mode 100644 build/classes/classes/javazoom/jl/converter/WaveFileObuffer.class create mode 100644 build/classes/classes/javazoom/jl/converter/jlc$jlcArgs.class create mode 100644 build/classes/classes/javazoom/jl/converter/jlc.class create mode 100644 build/classes/classes/javazoom/jl/decoder/BitReserve.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Bitstream.class create mode 100644 build/classes/classes/javazoom/jl/decoder/BitstreamErrors.class create mode 100644 build/classes/classes/javazoom/jl/decoder/BitstreamException.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Control.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Crc16.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Decoder$Params.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Decoder.class create mode 100644 build/classes/classes/javazoom/jl/decoder/DecoderErrors.class create mode 100644 build/classes/classes/javazoom/jl/decoder/DecoderException.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Equalizer$EQFunction.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Equalizer.class create mode 100644 build/classes/classes/javazoom/jl/decoder/FrameDecoder.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Header.class create mode 100644 build/classes/classes/javazoom/jl/decoder/InputStreamSource.class create mode 100644 build/classes/classes/javazoom/jl/decoder/JavaLayerError.class create mode 100644 build/classes/classes/javazoom/jl/decoder/JavaLayerErrors.class create mode 100644 build/classes/classes/javazoom/jl/decoder/JavaLayerException.class create mode 100644 build/classes/classes/javazoom/jl/decoder/JavaLayerHook.class create mode 100644 build/classes/classes/javazoom/jl/decoder/JavaLayerUtils.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIDecoder$Subband.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1IntensityStereo.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1Stereo.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIDecoder.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2IntensityStereo.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2Stereo.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIDecoder.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$III_side_info_t.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$SBI.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$Sftable.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$gr_info_s.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire2.class create mode 100644 build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Manager.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Obuffer.class create mode 100644 build/classes/classes/javazoom/jl/decoder/OutputChannels.class create mode 100644 build/classes/classes/javazoom/jl/decoder/SampleBuffer.class create mode 100644 build/classes/classes/javazoom/jl/decoder/Source.class create mode 100644 build/classes/classes/javazoom/jl/decoder/SynthesisFilter.class create mode 100644 build/classes/classes/javazoom/jl/decoder/au2lin.ser create mode 100644 build/classes/classes/javazoom/jl/decoder/huffcodetab.class create mode 100644 build/classes/classes/javazoom/jl/decoder/l3reorder.ser create mode 100644 build/classes/classes/javazoom/jl/decoder/lin2au.ser create mode 100644 build/classes/classes/javazoom/jl/decoder/sfd.ser create mode 100644 build/classes/classes/javazoom/jl/player/AudioDevice.class create mode 100644 build/classes/classes/javazoom/jl/player/AudioDeviceBase.class create mode 100644 build/classes/classes/javazoom/jl/player/AudioDeviceFactory.class create mode 100644 build/classes/classes/javazoom/jl/player/FactoryRegistry.class create mode 100644 build/classes/classes/javazoom/jl/player/JavaSoundAudioDevice.class create mode 100644 build/classes/classes/javazoom/jl/player/JavaSoundAudioDeviceFactory.class create mode 100644 build/classes/classes/javazoom/jl/player/NullAudioDevice.class create mode 100644 build/classes/classes/javazoom/jl/player/Player.class create mode 100644 build/classes/classes/javazoom/jl/player/PlayerApplet.class create mode 100644 build/classes/classes/javazoom/jl/player/advanced/AdvancedPlayer.class create mode 100644 build/classes/classes/javazoom/jl/player/advanced/PlaybackEvent.class create mode 100644 build/classes/classes/javazoom/jl/player/advanced/PlaybackListener.class create mode 100644 build/classes/classes/javazoom/jl/player/advanced/jlap$1.class create mode 100644 build/classes/classes/javazoom/jl/player/advanced/jlap$InfoListener.class create mode 100644 build/classes/classes/javazoom/jl/player/advanced/jlap.class create mode 100644 build/classes/classes/javazoom/jl/player/jlp.class create mode 100644 build/classes/doc/allclasses-frame.html create mode 100644 build/classes/doc/allclasses-noframe.html create mode 100644 build/classes/doc/constant-values.html create mode 100644 build/classes/doc/deprecated-list.html create mode 100644 build/classes/doc/help-doc.html create mode 100644 build/classes/doc/index-all.html create mode 100644 build/classes/doc/index.html create mode 100644 build/classes/doc/javazoom/jl/converter/Converter.PrintWriterProgressListener.html create mode 100644 build/classes/doc/javazoom/jl/converter/Converter.ProgressListener.html create mode 100644 build/classes/doc/javazoom/jl/converter/Converter.html create mode 100644 build/classes/doc/javazoom/jl/converter/RiffFile.html create mode 100644 build/classes/doc/javazoom/jl/converter/WaveFile.WaveFileSample.html create mode 100644 build/classes/doc/javazoom/jl/converter/WaveFile.html create mode 100644 build/classes/doc/javazoom/jl/converter/WaveFileObuffer.html create mode 100644 build/classes/doc/javazoom/jl/converter/jlc.html create mode 100644 build/classes/doc/javazoom/jl/converter/package-frame.html create mode 100644 build/classes/doc/javazoom/jl/converter/package-summary.html create mode 100644 build/classes/doc/javazoom/jl/converter/package-tree.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Bitstream.html create mode 100644 build/classes/doc/javazoom/jl/decoder/BitstreamErrors.html create mode 100644 build/classes/doc/javazoom/jl/decoder/BitstreamException.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Control.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Crc16.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Decoder.Params.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Decoder.html create mode 100644 build/classes/doc/javazoom/jl/decoder/DecoderErrors.html create mode 100644 build/classes/doc/javazoom/jl/decoder/DecoderException.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Equalizer.EQFunction.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Equalizer.html create mode 100644 build/classes/doc/javazoom/jl/decoder/FrameDecoder.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Header.html create mode 100644 build/classes/doc/javazoom/jl/decoder/InputStreamSource.html create mode 100644 build/classes/doc/javazoom/jl/decoder/JavaLayerError.html create mode 100644 build/classes/doc/javazoom/jl/decoder/JavaLayerErrors.html create mode 100644 build/classes/doc/javazoom/jl/decoder/JavaLayerException.html create mode 100644 build/classes/doc/javazoom/jl/decoder/JavaLayerHook.html create mode 100644 build/classes/doc/javazoom/jl/decoder/JavaLayerUtils.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Manager.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Obuffer.html create mode 100644 build/classes/doc/javazoom/jl/decoder/OutputChannels.html create mode 100644 build/classes/doc/javazoom/jl/decoder/SampleBuffer.html create mode 100644 build/classes/doc/javazoom/jl/decoder/Source.html create mode 100644 build/classes/doc/javazoom/jl/decoder/package-frame.html create mode 100644 build/classes/doc/javazoom/jl/decoder/package-summary.html create mode 100644 build/classes/doc/javazoom/jl/decoder/package-tree.html create mode 100644 build/classes/doc/javazoom/jl/player/AudioDevice.html create mode 100644 build/classes/doc/javazoom/jl/player/AudioDeviceBase.html create mode 100644 build/classes/doc/javazoom/jl/player/AudioDeviceFactory.html create mode 100644 build/classes/doc/javazoom/jl/player/FactoryRegistry.html create mode 100644 build/classes/doc/javazoom/jl/player/JavaSoundAudioDevice.html create mode 100644 build/classes/doc/javazoom/jl/player/JavaSoundAudioDeviceFactory.html create mode 100644 build/classes/doc/javazoom/jl/player/NullAudioDevice.html create mode 100644 build/classes/doc/javazoom/jl/player/Player.html create mode 100644 build/classes/doc/javazoom/jl/player/PlayerApplet.html create mode 100644 build/classes/doc/javazoom/jl/player/advanced/AdvancedPlayer.html create mode 100644 build/classes/doc/javazoom/jl/player/advanced/PlaybackEvent.html create mode 100644 build/classes/doc/javazoom/jl/player/advanced/PlaybackListener.html create mode 100644 build/classes/doc/javazoom/jl/player/advanced/jlap.InfoListener.html create mode 100644 build/classes/doc/javazoom/jl/player/advanced/jlap.html create mode 100644 build/classes/doc/javazoom/jl/player/advanced/package-frame.html create mode 100644 build/classes/doc/javazoom/jl/player/advanced/package-summary.html create mode 100644 build/classes/doc/javazoom/jl/player/advanced/package-tree.html create mode 100644 build/classes/doc/javazoom/jl/player/jlp.html create mode 100644 build/classes/doc/javazoom/jl/player/package-frame.html create mode 100644 build/classes/doc/javazoom/jl/player/package-summary.html create mode 100644 build/classes/doc/javazoom/jl/player/package-tree.html create mode 100644 build/classes/doc/overview-frame.html create mode 100644 build/classes/doc/overview-summary.html create mode 100644 build/classes/doc/overview-tree.html create mode 100644 build/classes/doc/package-list create mode 100644 build/classes/doc/packages.html create mode 100644 build/classes/doc/resources/inherit.gif create mode 100644 build/classes/doc/serialized-form.html create mode 100644 build/classes/doc/stylesheet.css create mode 100644 build/classes/javazoom/jl/converter/Converter$PrintWriterProgressListener.class create mode 100644 build/classes/javazoom/jl/converter/Converter$ProgressListener.class create mode 100644 build/classes/javazoom/jl/converter/Converter.class create mode 100644 build/classes/javazoom/jl/converter/RiffFile$RiffChunkHeader.class create mode 100644 build/classes/javazoom/jl/converter/RiffFile.class create mode 100644 build/classes/javazoom/jl/converter/WaveFile$WaveFileSample.class create mode 100644 build/classes/javazoom/jl/converter/WaveFile$WaveFormat_Chunk.class create mode 100644 build/classes/javazoom/jl/converter/WaveFile$WaveFormat_ChunkData.class create mode 100644 build/classes/javazoom/jl/converter/WaveFile.class create mode 100644 build/classes/javazoom/jl/converter/WaveFileObuffer.class create mode 100644 build/classes/javazoom/jl/converter/jlc$jlcArgs.class create mode 100644 build/classes/javazoom/jl/converter/jlc.class create mode 100644 build/classes/javazoom/jl/decoder/BitReserve.class create mode 100644 build/classes/javazoom/jl/decoder/Bitstream.class create mode 100644 build/classes/javazoom/jl/decoder/BitstreamErrors.class create mode 100644 build/classes/javazoom/jl/decoder/BitstreamException.class create mode 100644 build/classes/javazoom/jl/decoder/BitstreamTest.class create mode 100644 build/classes/javazoom/jl/decoder/Control.class create mode 100644 build/classes/javazoom/jl/decoder/Crc16.class create mode 100644 build/classes/javazoom/jl/decoder/Decoder$Params.class create mode 100644 build/classes/javazoom/jl/decoder/Decoder.class create mode 100644 build/classes/javazoom/jl/decoder/DecoderErrors.class create mode 100644 build/classes/javazoom/jl/decoder/DecoderException.class create mode 100644 build/classes/javazoom/jl/decoder/Equalizer$EQFunction.class create mode 100644 build/classes/javazoom/jl/decoder/Equalizer.class create mode 100644 build/classes/javazoom/jl/decoder/FrameDecoder.class create mode 100644 build/classes/javazoom/jl/decoder/Header.class create mode 100644 build/classes/javazoom/jl/decoder/InputStreamSource.class create mode 100644 build/classes/javazoom/jl/decoder/JavaLayerError.class create mode 100644 build/classes/javazoom/jl/decoder/JavaLayerErrors.class create mode 100644 build/classes/javazoom/jl/decoder/JavaLayerException.class create mode 100644 build/classes/javazoom/jl/decoder/JavaLayerHook.class create mode 100644 build/classes/javazoom/jl/decoder/JavaLayerUtils.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIDecoder$Subband.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1IntensityStereo.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1Stereo.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIDecoder.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2IntensityStereo.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2Stereo.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIDecoder.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIIDecoder$III_side_info_t.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIIDecoder$SBI.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIIDecoder$Sftable.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIIDecoder$gr_info_s.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire2.class create mode 100644 build/classes/javazoom/jl/decoder/LayerIIIDecoder.class create mode 100644 build/classes/javazoom/jl/decoder/Manager.class create mode 100644 build/classes/javazoom/jl/decoder/Obuffer.class create mode 100644 build/classes/javazoom/jl/decoder/OutputChannels.class create mode 100644 build/classes/javazoom/jl/decoder/SampleBuffer.class create mode 100644 build/classes/javazoom/jl/decoder/Source.class create mode 100644 build/classes/javazoom/jl/decoder/SynthesisFilter.class create mode 100644 build/classes/javazoom/jl/decoder/huffcodetab.class create mode 100644 build/classes/javazoom/jl/player/AudioDevice.class create mode 100644 build/classes/javazoom/jl/player/AudioDeviceBase.class create mode 100644 build/classes/javazoom/jl/player/AudioDeviceFactory.class create mode 100644 build/classes/javazoom/jl/player/FactoryRegistry.class create mode 100644 build/classes/javazoom/jl/player/JavaSoundAudioDevice.class create mode 100644 build/classes/javazoom/jl/player/JavaSoundAudioDeviceFactory.class create mode 100644 build/classes/javazoom/jl/player/NullAudioDevice.class create mode 100644 build/classes/javazoom/jl/player/Player.class create mode 100644 build/classes/javazoom/jl/player/PlayerApplet.class create mode 100644 build/classes/javazoom/jl/player/advanced/AdvancedPlayer.class create mode 100644 build/classes/javazoom/jl/player/advanced/PlaybackEvent.class create mode 100644 build/classes/javazoom/jl/player/advanced/PlaybackListener.class create mode 100644 build/classes/javazoom/jl/player/advanced/jlap$1.class create mode 100644 build/classes/javazoom/jl/player/advanced/jlap$InfoListener.class create mode 100644 build/classes/javazoom/jl/player/advanced/jlap.class create mode 100644 build/classes/javazoom/jl/player/jlp.class create mode 100644 build/classes/javazoom/jl/player/jlpTest.class create mode 100644 build/classes/jl1.0.1.jar create mode 100644 build/classes/playerapplet.html create mode 100644 build/classes/setEnvAnt.bat create mode 100644 build/classes/src/javazoom/jl/converter/Converter.rs create mode 100644 build/classes/src/javazoom/jl/converter/RiffFile.rs create mode 100644 build/classes/src/javazoom/jl/converter/WaveFile.rs create mode 100644 build/classes/src/javazoom/jl/converter/WaveFileObuffer.rs create mode 100644 build/classes/src/javazoom/jl/converter/jlc.rs create mode 100644 build/classes/src/javazoom/jl/decoder/BitReserve.rs create mode 100644 build/classes/src/javazoom/jl/decoder/Bitstream.rs create mode 100644 build/classes/src/javazoom/jl/decoder/BitstreamErrors.rs create mode 100644 build/classes/src/javazoom/jl/decoder/BitstreamException.rs create mode 100644 build/classes/src/javazoom/jl/decoder/Control.rs create mode 100644 build/classes/src/javazoom/jl/decoder/Crc16.rs create mode 100644 build/classes/src/javazoom/jl/decoder/Decoder.rs create mode 100644 build/classes/src/javazoom/jl/decoder/DecoderErrors.rs create mode 100644 build/classes/src/javazoom/jl/decoder/DecoderException.rs create mode 100644 build/classes/src/javazoom/jl/decoder/Equalizer.rs create mode 100644 build/classes/src/javazoom/jl/decoder/FrameDecoder.rs create mode 100644 build/classes/src/javazoom/jl/decoder/Header.rs create mode 100644 build/classes/src/javazoom/jl/decoder/InputStreamSource.rs create mode 100644 build/classes/src/javazoom/jl/decoder/JavaLayerError.rs create mode 100644 build/classes/src/javazoom/jl/decoder/JavaLayerErrors.rs create mode 100644 build/classes/src/javazoom/jl/decoder/JavaLayerException.rs create mode 100644 build/classes/src/javazoom/jl/decoder/JavaLayerHook.rs create mode 100644 build/classes/src/javazoom/jl/decoder/JavaLayerUtils.rs create mode 100644 build/classes/src/javazoom/jl/decoder/LayerIDecoder.rs create mode 100644 build/classes/src/javazoom/jl/decoder/LayerIIDecoder.rs create mode 100644 build/classes/src/javazoom/jl/decoder/LayerIIIDecoder.rs create mode 100644 build/classes/src/javazoom/jl/decoder/Manager.rs create mode 100644 build/classes/src/javazoom/jl/decoder/Obuffer.rs create mode 100644 build/classes/src/javazoom/jl/decoder/OutputChannels.rs create mode 100644 build/classes/src/javazoom/jl/decoder/SampleBuffer.rs create mode 100644 build/classes/src/javazoom/jl/decoder/Source.rs create mode 100644 build/classes/src/javazoom/jl/decoder/SynthesisFilter.rs create mode 100644 build/classes/src/javazoom/jl/decoder/au2lin.ser create mode 100644 build/classes/src/javazoom/jl/decoder/huffcodetab.rs create mode 100644 build/classes/src/javazoom/jl/decoder/l3reorder.ser create mode 100644 build/classes/src/javazoom/jl/decoder/lin2au.ser create mode 100644 build/classes/src/javazoom/jl/decoder/readme.txt create mode 100644 build/classes/src/javazoom/jl/decoder/sfd.ser create mode 100644 build/classes/src/javazoom/jl/player/AudioDevice.rs create mode 100644 build/classes/src/javazoom/jl/player/AudioDeviceBase.rs create mode 100644 build/classes/src/javazoom/jl/player/AudioDeviceFactory.rs create mode 100644 build/classes/src/javazoom/jl/player/FactoryRegistry.rs create mode 100644 build/classes/src/javazoom/jl/player/JavaSoundAudioDevice.rs create mode 100644 build/classes/src/javazoom/jl/player/JavaSoundAudioDeviceFactory.rs create mode 100644 build/classes/src/javazoom/jl/player/NullAudioDevice.rs create mode 100644 build/classes/src/javazoom/jl/player/Player.rs create mode 100644 build/classes/src/javazoom/jl/player/PlayerApplet.rs create mode 100644 build/classes/src/javazoom/jl/player/advanced/AdvancedPlayer.rs create mode 100644 build/classes/src/javazoom/jl/player/advanced/PlaybackEvent.rs create mode 100644 build/classes/src/javazoom/jl/player/advanced/PlaybackListener.rs create mode 100644 build/classes/src/javazoom/jl/player/advanced/jlap.rs create mode 100644 build/classes/src/javazoom/jl/player/jlp.rs create mode 100644 build/classes/srctest/AllTests.rs create mode 100644 build/classes/srctest/javazoom/jl/decoder/BitstreamTest.rs create mode 100644 build/classes/srctest/javazoom/jl/player/jlpTest.rs create mode 100644 build/classes/srctest/test.mp3.properties create mode 100644 build/classes/task5/Application$ThreadPlayer.class create mode 100644 build/classes/task5/Application.class create mode 100644 build/classes/task5/Controller.class create mode 100644 build/classes/task5/Driver.class create mode 100644 build/classes/task5/View$1.class create mode 100644 build/classes/task5/View.class create mode 100644 build/classes/task5/View.form create mode 100644 jlayer1.0.1.zip create mode 100644 manifest.mf create mode 100644 nbproject/build-impl.xml create mode 100644 nbproject/genfiles.properties create mode 100644 nbproject/private/config.properties create mode 100644 nbproject/private/private.properties create mode 100644 nbproject/private/private.xml create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml create mode 100644 src/task5/Application.java create mode 100644 src/task5/Controller.java create mode 100644 src/task5/Driver.java create mode 100644 src/task5/View.form create mode 100644 src/task5/View.java diff --git a/JLayer1.0.1/CHANGES.txt b/JLayer1.0.1/CHANGES.txt new file mode 100644 index 0000000..9605c9f --- /dev/null +++ b/JLayer1.0.1/CHANGES.txt @@ -0,0 +1,122 @@ + JLayer 1.0.1 + JavaZOOM 1999-2008 + + Project Homepage : + http://www.javazoom.net/javalayer/javalayer.html + + JAVA and MP3 online Forums : + http://www.javazoom.net/services/forums/index.jsp +----------------------------------------------------- + +11/16/2008: JLayer 1.0.1 +------------------------ +- Subband allocation bug fix. + + +11/28/2004: JLayer 1.0 +---------------------- +- VBRI frame header (Fraunhofer VBR) support added in Header.java. +- Frame controls improved. It fixes the following bugs : + + ArrayIndexOutOfBound Exception in t_43[] array. + + ArrayIndexOutOfBound Exception in huffman_decode() method. +- Licensing moved from GPL to LGPL : It means that you can use JLayer in + your own application without being restricted by GPL license issues. + It's more business friendly. +- JavaLayer renamed into JLayer to be compliant to SUN trademark rules. +- Tested under JRE 1.5.0. CPU usage < 1%, RAM usage < 12MB under P4/2Ghz. + + +01/02/2004: JavaLayer 0.4 +------------------------- +- XING VBR header frame support improved in Header.java : + + public boolean vbr() added. + + public int vbr_scale() added. + + public byte[] vbr_toc() added. + total_ms(), ms_per_frame(), min_number_of_frames(int), max_number_of_frames(int), + bitrate_string(), bitrate() methods check for VBR status. + +- ID3v2 frames support improved : + + public InputStream getRawID3v2() added in Bitstream.java + +- Misc : + Bug fixed in the decoder for some +320kbps stream. + Bug fixed : SYNC conflict with some ID3v2 frames. + + public int bitrate() added. + + public int bitrate_instant() added. + jUnit tests added (see srctest/ folder) + + +08/04/2003: JavaLayer 0.3.0 +--------------------------- +- Advanced threaded player classes added. + + +04/01/2002: JavaLayer 0.2.0 +--------------------------- + - MPEG 2.5 support added. + Encoded files with LAME are supported. + - Bug fixes for ms time computation with free format. + + Bench notes : + + Heap use range : 1380KB to 1900KB - 370 classes loaded. + + Footprint : ~8MB under WinNT4 + J2SE 1.3 (Hotspot). + + CPU usage : ~12% under PIII 800Mhz/WinNT4+J2SE 1.3 (Hotspot). + + CPU usage : ~11% under PIII 1Ghz/Win2K+J2SE 1.4 (Hotspot). + + +03/04/2002: JavaLayer 0.1.2 +--------------------------- + - API improved to let developers get MP3 bitrate, framelength and total time features. + - Additionnal files added (CHANGES.txt and LICENSE.txt). + + +10/01/2001: JavaLayer 0.1.1 +--------------------------- + - Bugs fixes in the decoder (Layer III). + + +07/02/2001: JavaLayer 0.1.0 +--------------------------- + - Streaming support added to the simple player (jlp). + - Bugs fixes in the simple player (too fast playback for low rate files). + + +06/04/2001: JavaLayer 0.0.9 +--------------------------- + - Bugs fixes in Layer I and Layer II decoder. + - ANT build script added. + - HTML page added to play MP3 through PlayerApplet in a JavaSound 1.0 (JDK 1.3) + compliant browser. + + +04/16/2000: JavaLayer 0.0.8 +--------------------------- +A simple player have been added and you can now play MP3 in real time with JVM +that supports JavaSound 1.0 (i.e JDK 1.3). + + - Bug fixes. + - Decoder improvements. + - Build Scripts have been added for Win32 and Unix platforms. + + +12/16/1999: JavaLayer 0.0.7 +--------------------------- +JavaLayer 0.0.7 contains significant improvements over version 0.0 : + + - API and documentation added. + - The decoder is much more faster. Fast enough for real-time decoding. + - Huffman/Layer3 tables serialization added. + - New buffers management. + - Exceptions + Utils added. + - Bugs fixes. + + +02/28/1999: JavaLayer 0.0 +------------------------- +JavaLayer V0.0 does not play any MP3 but it allows the MP3toWAV conversion. +This is the first step in this project. We do it thanks to free mp3 ressources +available on the net: + + - MAPlay for the OO MP3 decoder (C++). + - WAV format description from Microsoft. + +The MP3 decoder works now but it is too slow to allow real time implementation. diff --git a/JLayer1.0.1/LICENSE.txt b/JLayer1.0.1/LICENSE.txt new file mode 100644 index 0000000..b1e3f5a --- /dev/null +++ b/JLayer1.0.1/LICENSE.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/JLayer1.0.1/README.txt b/JLayer1.0.1/README.txt new file mode 100644 index 0000000..51bb94e --- /dev/null +++ b/JLayer1.0.1/README.txt @@ -0,0 +1,81 @@ + JLayer 1.0.1 + JavaZOOM 1999-2008 + + Project Homepage : + http://www.javazoom.net/javalayer/javalayer.html + + JAVA and MP3 online Forums : + http://www.javazoom.net/services/forums/index.jsp +----------------------------------------------------- + +DESCRIPTION : +----------- +JLayer is a library that decodes/plays/converts MPEG 1/2/2.5 Layer 1/2/3 +(i.e. MP3) in real time for the JAVA(tm) platform. This is a non-commercial project +and anyone can add his contribution. JLayer is licensed under LGPL (see LICENSE.txt). + + +FAQ : +--- + +- How to install JLayer ? + Before running JLayer you must set PATH and CLASSPATH for JAVA + and you must add jl1.0.1.jar to the CLASSPATH. + +- Do I need JMF to run JLayer player ? + No, JMF is not required. You just need a JVM JavaSound 1.0 compliant. + (i.e. JVM1.3 or higher). + +- How to run the MP3TOWAV converter ? + java javazoom.jl.converter.jlc -v -p output.wav yourfile.mp3 + (Note : MP3TOWAV converter should work under jdk1.1.x or higher) + +- How to run the simple MP3 player ? + java javazoom.jl.player.jlp localfile.mp3 + or + java javazoom.jl.player.jlp -url http://www.aserver.com/remotefile.mp3 + Note : MP3 simple player only works under JVM that supports JavaSound 1.0 (i.e JDK1.3.x+) + +- How to run the advanced (threaded) MP3 player ? + java javazoom.jl.player.advanced.jlap localfile.mp3 + +- Does simple MP3 player support streaming ? + Yes, use the following command to play music from stream : + java javazoom.jl.player.jlp -url http://www.shoutcastserver.com:8000 + (If JLayer returns without playing SHOUTcast stream then it might mean + that the server expect a winamp like "User-Agent" in HTTP request). + +- Does JLayer support MPEG 2.5 ? + Yes, it works fine for all files generated with LAME. + +- Does JLayer support VBR ? + Yes, It supports VBRI and XING VBR header too. + +- How to get ID3v1 or ID3v2 tags from JLayer API ? + The API provides a getRawID3v2() method to get an InputStream on ID3v2 frames. + +- How to skip frames to have a seek feature ? + See javazoom.jl.player.advanced.jlap source to learn how to skip frames. + +- How much memory/CPU JLayer needs to run ? + Here are our benchmark notes : + - Heap use range : 1380KB to 1900KB - 370 classes loaded. + - Footprint : ~8MB under WinNT4/Win2K + J2SE 1.3 (Hotspot). + ~10MB under WinNT4/Win2K + J2SE 1.4.1 (Hotspot). + - CPU usage : ~12% under PIII 800Mhz/WinNT4+J2SE 1.3 (Hotspot). + ~8% under PIII 1Ghz/Win2K+J2SE 1.3.1 (Hotspot). + ~12% under PIII 1Ghz/Win2K+J2SE 1.4.1 (Hotspot). + ~1% under PIII 1Ghz/Win2K+J2SE 1.5.0 (Hotspot). + +- How to contact JLayer developers ? + Try to post a thread on Java&MP3 online forums at : + http://www.javazoom.net/services/forums/index.jsp + You can also contact us at jlayer@javazoom.net for contributions. + + +KNOWN PROBLEMS : +-------------- +99% of MP3 plays well with JLayer but some (1%) return an ArrayIndexOutOfBoundsException +while playing. It might come from invalid audio frames. +Workaround : Just try/catch ArrayIndexOutOfBoundsException in your code to skip + non-detected invalid frames. \ No newline at end of file diff --git a/JLayer1.0.1/build-unix.sh b/JLayer1.0.1/build-unix.sh new file mode 100644 index 0000000..5f50fb3 --- /dev/null +++ b/JLayer1.0.1/build-unix.sh @@ -0,0 +1,42 @@ +#!/bin/sh +####################################################### +# JLayer 1.0.1 Un*x Build Script +# +# Project Homepage : +# http://www.javazoom.net/javalayer/javalayer.html +# +# Java and MP3 online Forums : +# http://www.javazoom.net/services/forums/index.jsp +# +####################################################### + +# JAVA_HOME and JL must be set below +JAVA_HOME=/usr/local/java/jdk1.3.1 +JL=/home/javazoom/JLayer1.0.1 + +#--------------------------- +# Do not modify lines below +#--------------------------- +CLASSPATH=$JAVA_HOME/lib/tools.jar +PATH=$PATH:$JAVA_HOME/bin +JLDECODERSRC=$JL/src/javazoom/jl/decoder +JLCONVERTERSRC=$JL/src/javazoom/jl/converter +JLSIMPLEPLAYER=$JL/src/javazoom/jl/player +JLADVPLAYER=$JL/src/javazoom/jl/player/advanced +javac -classpath $CLASSPATH:$JL/classes -d $JL/classes $JLDECODERSRC/*.java +javac -classpath $CLASSPATH:$JL/classes -d $JL/classes $JLCONVERTERSRC/*.java +cd $JLDECODERSRC +cp *.ser $JL/classes/javazoom/jl/decoder + +# MP3 Simple + Advanced Player support : +# +# Comment both lines below for JDK1.1.x or JDK 1.2.x +cd $JLSIMPLEPLAYER +javac -classpath $JL/classes -d $JL/classes *.java +cd $JLADVPLAYER +javac -classpath $JL/classes -d $JL/classes *.java + +# Jar Generation +cd $JL/classes +jar cvf ../jl1.0.1.jar * +cd $JL diff --git a/JLayer1.0.1/build-win32.bat b/JLayer1.0.1/build-win32.bat new file mode 100644 index 0000000..bbbc7b8 --- /dev/null +++ b/JLayer1.0.1/build-win32.bat @@ -0,0 +1,42 @@ +rem ####################################################### +rem # JLayer 1.0.1 WIN32 Build Script +rem # +rem # Project Homepage : +rem # http://www.javazoom.net/javalayer/javalayer.html +rem # +rem # Java and MP3 online Forums : +rem # http://www.javazoom.net/services/forums/index.jsp +rem # +rem ####################################################### + +rem # JAVA_HOME and JL must be set below +set JAVA_HOME=c:\jdk1.3.1 +set JL=c:\JLayer1.0.1 + +rem #--------------------------- +rem # Do not modify lines below +rem #--------------------------- +set CLASSPATH=%JAVA_HOME%\lib\tools.jar +set PATH=%PATH%;%JAVA_HOME%\bin +set JLDECODERSRC=%JL%\src\javazoom\jl\decoder +set JLCONVERTERSRC=%JL%\src\javazoom\jl\converter +set JLSIMPLEPLAYER=%JL%\src\javazoom\jl\player +set JLADVPLAYER=%JL%\src\javazoom\jl\player\advanced +javac -classpath %CLASSPATH%;%JL%\classes -d %JL%\classes %JLDECODERSRC%\*.java +javac -classpath %CLASSPATH%;%JL%\classes -d %JL%\classes %JLCONVERTERSRC%\*.java +cd %JLDECODERSRC% +copy *.ser %JL%\classes\javazoom\jl\decoder + +rem # MP3 Simple + Advanced Player support : +rem # +rem # Comment both lines below for JDK1.1.x or JDK 1.2.x +cd %JLSIMPLEPLAYER% +javac -classpath %JL%\classes -d %JL%\classes *.java + +cd %JLADVPLAYER% +javac -classpath %JL%\classes -d %JL%\classes *.java + +rem # JAR Generation +cd %JL%\classes +jar cvf ..\jl1.0.1.jar * +cd %JL% diff --git a/JLayer1.0.1/build.xml b/JLayer1.0.1/build.xml new file mode 100644 index 0000000..200340a --- /dev/null +++ b/JLayer1.0.1/build.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JLayer1.0.1/classes/javazoom/jl/converter/Converter$PrintWriterProgressListener.class b/JLayer1.0.1/classes/javazoom/jl/converter/Converter$PrintWriterProgressListener.class new file mode 100644 index 0000000000000000000000000000000000000000..540332f54296ff3e42057e875fd4dd5c11344367 GIT binary patch literal 2429 zcmcIlT~ixn6n@^2u$yFo7{CGnn_AE$6w+#~O4?dJLYtZrBz$Xamt=vZn@!x^K#L#s z!XMzRy>P}WF7!ej8)jt2AK;I2Jn!xXmXDz`&N!Jl?>Xmv-t&DnfB*C6UjVM*TLIGo z?gnuWxe$D~9|FV2A-suvkhlk&%y3XBIfv6A?09nKu$CNlJbE1T>jtv2u0#t_JOySW~c78mUXJ9#ow#lk) zTC#2}%357%p{OaEw(Rn3c5dDUawTJEU(C);6pC4o*2f@CWhWNydUOIq=)w51M-yW3 z)pi)V^IP(^oK~ypSwq#WB}26oBf}6bE0(Nkd1YJCC_r7=DO%-1-C~G&fU`z*!%$2! zubP&kD+amF>2ywNvS}(N!<|GfX?xhMRx9Z(EnTYW+loOx(v+ja4W46=BJodF%L+s5 zO;uN|+YG&lGegcL7a2s=oU-GlXXJU6q2tiuLai)Y+)yHyv%%q-Y?w-U+K?-xjwf=* z0xc^g@@u5;DKZ@yZarua@4_YLzA4^1|Mi)c3v2cDb=P$CFwE@Jl2WtOs?N~kW~#~h zMtXkJsP4#XnvzMb3V6bh;f?!`Wo76*qwNAT2^HuPK0uX|4>_qxxQc5M-ocQBF=Qls zff~aF+khQf(W24Wn5e57Rf;C9+1YYjf&r5gnwxNZombk7t9qOv5U-f=1oelXHN|i) zN0Soj*yb*F1Uw~M)2gP#RWmNro3>d)riM9Cl6_-D!gJJ=Lsk2f-L@lzNHbfjTVr-8 z&j{`YM*)vY*u{>7FL{c)_)5Un628H6hR9KFg|#iEMA2V;b+u2fLge&zTzrLU#K$nXh)ZDf_rP!&0(vosA>!YnFR%}9lbrC# zNs?0@d6?uY9(jc1QIDJ^8?;`wE!r?TMFjCKZjgufNs6PDIH2nQY~=vHmEY0g--o|% zAAw&<&;J={QC)P5tnq(_j?_L{Q^PMIr21b%{LKZ@_PW460{TeXp85k~>?a8RJ@{LG zad9_s%f+ei(+_x<3N#S>0ZXx;ZA_6U4~yIA9C(3%|2A0?8VK>@0O6H=NYSB?l|5Wf zMM8Fz!>6DZ2o~dBdyc(ndcO1jdG0;m^Ef8loWG}>1C;Z3%`EQoEXMrajQhOCdi^9h z74%{#Ok5zt~xT>K-^U~>oSQcH@ZQ0V0s84 f{)p(XgS_NEI2@h#D1#_r8M3%elYE)Zt=8bbLFPvs literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/converter/Converter$ProgressListener.class b/JLayer1.0.1/classes/javazoom/jl/converter/Converter$ProgressListener.class new file mode 100644 index 0000000000000000000000000000000000000000..eb6412aa3b5eb14e701a75a8d1a333436ca86690 GIT binary patch literal 551 zcmah{O;5r=5S^+4z^QsB9!M>*2~a``2QOr47lf2uvRlyj(>(YC{87ef zsf0wMmwo$Y=FQB`?8oQZI{@55O@|X5&Iwe8{ri?{joX7(*BYD7u;&sWHi4okxC$u` zM>JTo6sib;Y7%Way^%F=F}~aHSgsYh4+xYz!8c5XOb%B*4H*HgZrgTaL?FMSQZc_R z=@QLXb-S~m8~Q55(pUtB&phEXX*@8B(2N9GiT5PDu=Rh_yT8@HW_Bj)=`=}Q*|llC zcx)BU1t(Ce$2udRd}g>$Qasa1z?zLm9jXLw_PgE54V=;Tz1MvyW|Aq@nX8a-CJB^( znhG{Yml;r{n8JuC>9(LVSuigoaQROi4VME4(X`!Lnw+*N>7-1ig`x;5 zDqiufAYPVhx%!|F@{)pGOO`LPmjA=G{1w)HCX-%5EWFr8dMzBP=Rg@ThXK984VoAq(rZL^ht%| z^4Ez9Uq*O`ChfpzC zfgufRF)U@%QfoxT8M(=5*d(19mCl(OS}?34tDzNRD$c5~ROA@e^jK-rK53nMFPKC{|?0zBt?zEY<_cC~!noltJ+OsLapeD2Cgs@0u zb5rMtF=0eAhB*}NwFz&i?fw&~svSC?6k~QeYm#UE52fZ9x{%F|Mn^JH7gAW!_5!%D zHkA6?)_g+6ID@~(u#8c{x%fZfEb=TRlEjJ?Jy=*b6u`+BhRZH~IvY)xW8*e4B#hBA z3@tMFP@yi;Si*(MWOm%NJBSZKgsd*_P;-JIkR21I<0V6L8Qz*5#Arz<9FHT$u?u@u zOmLjTd5!~UmnZvFOmbX6jG@*k5~T?@FmKt4WHagF068TiLI&#-Z!`g|%+8WW-;oe|vwj?)tB6OK>u8OP`N zf?<^tl+#BElN#1EGKVZHOO0CJJ#JI&G!_(djfN!}Q)wr1)7~NteaZ0^u5;X&=h`u} zfWohFQ^hyb^+oQaFGW;JjNF#c_$@<2`B>&UkY>ib+uZ{rB1to$?Ey;Ewo8nqtq;~N zon-44sub(U&8gdsiySS?DH;D|^lu$Ovah1Wa+R*G^HE8TL0N3I>ZMI$uC@ zq%Xx^+kdw>jicbGVV&t69~;YBwn#Z~pQ52IPiY}&l2PcE5adbq9P;t8lwnh>{-#92 z5pjop(Z%wNJE1M8j^0VSct#nPC&w*In08-!RCJ{?nKVr$x?GOX0HWELat0N{qb{$d z7>7wjSQKSrQ=;qybOmH2b>+&U@LmS(++=}4OPn1SW^$5xf#O?`B=r@qP1nwjv0_nSF3w@QzKNXCIT#TMOX}6qK zMyt{?4R%YuC(&Ja0v_je2nxJ(7HA2#GM0y@AQGn|AL&&%!fgwLeXek%oG_C&n=5>n zEc;1#M{6G58&FtROE?c-Txrpj)`;%QL(!Ey{8LyFS7uPrFLwc5nTB@v7C{HlfOQlM zu-KV>1^et8*SZP=4XwS-^h94(Ld zLW=heYAD3Ge+ISvx^J4?P-hU5sw?9aA;t4O)S6W>#TyIU#_F9~C=gP9z)yNb9(tVX z{GN3EW+W8Q`5n}Gq5JP4s`EV7_({_@1)mZN%Kam;su|Sxhk~K1)@eK%_v@sBy?6 zpeCJ5@~#Bf)NG&b{{wXrr+ErB@oKrPaJG8&U5aO=Ca%VKL<#Xwz#*c18WfoHN%A*+ zK3~LN&N{?avh_s!dbUxn2(S*8C`pq~enwCVW&Ksr>Y>%+`I(-ws_1*iEs-#lo;rPD2Z{O?)$}2ELMRm@5kt*j+D1j(Ql(l*-q;Ye*nAbKY=|6 F{0lqOaP9yA literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/converter/RiffFile$RiffChunkHeader.class b/JLayer1.0.1/classes/javazoom/jl/converter/RiffFile$RiffChunkHeader.class new file mode 100644 index 0000000000000000000000000000000000000000..51208f8d54697d0906d4de681955fa615c0ab23e GIT binary patch literal 417 zcmah_O-sW-6r9(zNgG!iwSFEXU=KBd(X-+uA_fFO!Fx=%c9Xb)B=*pM<)H{3`~m(b z@vT>(vM@VucyDL+eSLp?0yx8d4;}Pf*zgQnH?ZMg;9!T)PV@MRKrz8i^9MDTOq!{x zho=PpHcMv7yewbBtO(Om&t%oeD!f;d$+arvIrm;Dt(r^1;po5Sqer%j%CQu1u_7R_ zE8w6j&_mb39^quU-O%_((^s9}$Yd-lLjR8s8dpAAe1Ji4yZ{C7Xa&{+mVx#g>t=qN L(dD~?O>6-_VzFGS literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/converter/RiffFile.class b/JLayer1.0.1/classes/javazoom/jl/converter/RiffFile.class new file mode 100644 index 0000000000000000000000000000000000000000..cdddf70755b0a33c2c8a93c1f3337e1ca0585a65 GIT binary patch literal 3887 zcmb7HU2I!f5&mxOZ(O&%aqDi=q}wiCwvKJG0?!9*0CIU5; z=bV`{GiPSbcjnyw?mxf$HGosN>q89rW<)U~q+nv!2Mt$*nX^#zalG10$-IySVXv7e zSt$G9$8{l}Hc^pr(LzvJWremdrjQh1^V`qQIXll?s*k zLT+)fu&7|y&`^9jGZBv`G8qL*Qo-(cxwKf#m8zF=3rhvY26$@21If{ebV5Xmf)=q% zO=PE2!_#Alu~d3W7Mc|7k%i&pXkt2%PN&i$RTbDGO^#n07)=gM#|K77MXq_;6PZMM zdSEb>&WcojL|c4`++ZB(;j!t7@#n`=lj91Sg_}$#vk3*3%+ra1Au3gv^z@vU@X67u zxf{7#j#2w4M@ufsxs7fK2agj|;k zxzd%+Otn%hUFl28x;|McR=K4SdSTEJaFTH*-LA=FF`>bWugDX^7TT# z$_?WSag?UyY zG$IM_CM?p4?6g}11;J3VV|#5F@Njvl5|4|*_T`SG9~VF}jF0${z$pbM9`De_{)>LZ zLHKCt&uHmxN4WRKY>#gEtVRX@Ilulw;0A>YKeOuXU8w{gdh@8G+Bd=FE8q>vVJk!6}F&6mnIOGgux zN}2ZG#}5=d`M-1IEpmczK$d#(s&n4Q{vV9`92Dp0ldOc1pU)I;5go^ODEbb^K>X`B zT>zT`;H3D{^De@)ii13FfpzdXs+qZRg*eoB?o_rMS+YclCHjLe$!#DE2Or9&h880~ zm#YkT<^+efSjQHf?YUBLF5ty-vBVosmlTLc_C1UDK>&FPPqCTC*j;v`6(`yC6?}+X z6S~NEH}I#)_cZWl$Uob_f0%r41K&sfYy*Fee18M~9QpGNyzDp7z{`Gv4g49#M0_$f zO(5=!#5>0p#!UE=j*#o)y27zD{4SKRavx1$^*+?_ub@p)q~C`Tz6T>2@CJ7EAO4}T-u^Sne@crc z$0eAFGgq1zg?}m%*!?c{FfiMCVD)OPnkqruL$iJGarbZfZ8PgoL zhRK-jur)l!3}M}1IokrFSZ$$DjJ6;sHa-`BX3Qk;VisW+BlvVuGpGsn8jAc#X4X!b z-N9Sl7SKDcWc66|7)=HQ4Hh7&I zNa=30@x}!XuH5Nw6WXI4_BQ0`Zpic1Jef>9A@7^OzjY<3)9$u&I~y_&nj1J&k88)o z)3}Vh7uQ4`u3;XjB!0l@R4z>SO|C+c6ZrG-X7{%}yGykW$8M}Tu#Bnw1ZDe_HgoPS zBXBN#TmNAfiW_KubMx=Unz$p(9F*%ghU1<)emA(~QJ!EJ@)`S2^{gBzdnE8z{%TF~ zkT-u{c4*!JtM$Mdi*9R<(QUmkx~(-vAMT7%yVmJy%`qFb>)o&h=cvV<*i*giy!uuTm!sP$v73pJ` z@-Xxa%OR~L;JSM9{3@*R{Wx;|$lKHaEbQ`ZK8_bWn{Mx%j*881Yu)GwE9f0cI2P14 z@RXc%GhfU7bq}9-JP#ju*n@^o;!~c7)+6lzuw5JJD_o0>{<^Pp=0)xE^?BJ#c(I5Lyp(tOvsD zTm#eNXRGHu%YX!L7t9CNlxiQ%PH94PAqL54ST!T+1|pH#0~D#hKau+L6Y*Z3bM3WH PfKK}KaSx3xfD!%|UhX3i literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/converter/WaveFile$WaveFileSample.class b/JLayer1.0.1/classes/javazoom/jl/converter/WaveFile$WaveFileSample.class new file mode 100644 index 0000000000000000000000000000000000000000..0bffdcb0440b02b442d5875b023837a9391a64fb GIT binary patch literal 386 zcmah_O-sW-5Pg#-T@%-u`gu|md#DjvJu6-cf*^P(=)uz(7n`u%ND^}JUwJ4(k^TUG zlsGwf@lY9{EWGnds@grnhq6N4_LmFckiQb}t32>= u5I`Kab{Qd#2&=xVOGJ-1SH%N z%xwj!1foa_ClkY+1m<=yAHs3bQE8Jz121=W`6&(dH8+M0DG9s`{&sbzbs= zzEIa@j#uw5#wpG3hpdX`pCHrk2@Nyv?s$g5FcA(jtflCCmQ!6#6{stvMq!hI5sa1^ zMQe{{8F!4DNsDaL3bP{ZxwFx(=5~GFdd^1TX$ix6E=}ZqSeSm@VPe|`F2atP+ z5RMA0^bkvT5gCntN1}&8fi0&TQ>EJ!Nu`Y(>FBm?A zkq)*(*k?j-q!yl9O^ewb%!b~D@EH2 literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/converter/WaveFile$WaveFormat_ChunkData.class b/JLayer1.0.1/classes/javazoom/jl/converter/WaveFile$WaveFormat_ChunkData.class new file mode 100644 index 0000000000000000000000000000000000000000..a93949632ca2b9d805ab9b6282c79be00a53a39f GIT binary patch literal 725 zcmaix-%iv}5XQel%XYV0p(2RNzg1SDaHBC{OGq{`(WC?}&2c?$yPQ2WZCwMe z;cIwf0-A8a1MpD9nFjU7;LY#MOwae7nd#-#`2~RI*leJQWfvY+I9g?_FMtw60z(xUxLp!IqrC-NlA#^FeZgUn1+UaCAiloPd= zYW0HdzD!M8z7kmP{O@x2K){Z&4~kS#WE(ph`_@w%y^h(__*z1 zj&X<6dBy`QIoJ@`y1BD<)nc`%cTw`$9PP?d3e5kz?Dc7Xd8B1gDB7aW-l3Le7`}Nw zQiD>!>Tvg~H$RFN{V0!qumizkP(<6mK53XLr+KQAMygJl3h;ei0OeDpSj0Wzead>U zsRC>V8)p!~PfP{Y87zj)m}b-%4x=8}{B^G3`}PmG-$}_G(8~V!S>(umODtYtn`PDo irxcxHIw8~(zpmN#x>)63>51Qd9ddBVv5Cic3j6{#E0+WS literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/converter/WaveFile.class b/JLayer1.0.1/classes/javazoom/jl/converter/WaveFile.class new file mode 100644 index 0000000000000000000000000000000000000000..5eefd20405b01ebe9da50fb7069b0a9c4c45a022 GIT binary patch literal 2475 zcma)8-BTM?6#p&BW|Oc$pbZ~F(6(qH(5AHowa`ikAVErzL};vZwdzHD@ ze01#GF1ollvyc!V#09j(483eBy1AkhDyoa>)+C^Lng~=00VMU3@0vbLPHa*_TY>plj}8QpQ(&@HM`X z5yg~@7?Wwt$e3kv8Pxp#hhL(hf>R&?XCCgMR)zzxyzqbY55Tnc!cNtm!eLlBiH!3j zZm8un#nST38kJHkCLnmk`{MWG&TPb|2_cz{gtkKuck~gD?og{aXM&-JrbSlE5i`i3 zVU#hv1auw|xP~7acLb;@OW?`dQ{dvG3UFu)SoZ#H0yB-gq(W&31UGT8hE$*aALv?j z8*&UzHN#4A%eqaEZsn$KnW_a_K55pc3PxrlTF`QIk5;`7(qgt~jS=6JlG)f)%uJq9 zJl~*xPVbIN9VckWpQZsTq6cRY0S!VPxAdWEVhmY4;m}$M&(=zirqxfn1aqPjv|FI> zlR)ca_#T9?Zy!xz*FId~U*S%XNZf~qc!_!MK78Rlcsl&|(Yz0tdD3mM41OjbAWsAv z+w8%Mk!LD$)iastGm%DF)!8VgTKJV*U#2 zruNVhy2-U04&6h@v7k9*Tb!fDHj%}EYl8Iq-FMKzL7JREk5Ba8hL@W1#6+)SO#{rf z?xK~O+Dz(P+&y$TN;KdaDn0N-1F)e|r{n2`2jSZ7a3Y0sImeeVXZz@L57Aztb(mx$w4R~WO-L98 F{smfQN*VwF literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/converter/WaveFileObuffer.class b/JLayer1.0.1/classes/javazoom/jl/converter/WaveFileObuffer.class new file mode 100644 index 0000000000000000000000000000000000000000..a8453593288ff0a19473d0f490e164d5af1a9633 GIT binary patch literal 999 zcmaJa{8iis#m69XnoMhGUejtiD_?d-bw^4WjD zKk$p6O#~7#`q9LnV&Y#=&+T4fBKYN;-g}KW)5zk2hU1u2aWRFd zG$a_}JS~DL!X*`#)6hDwqWHQZf+fOL6*DTXF(jY0HaB_5kXSD>sGU=TAys?s_&)cV z49uoN(27=_HfI=rwC%K=H$hOhwmqvB_-!6WJhVi0$@Ta=aqF+|ce^In}q$;?8r4nD+0tnJENCdp7%I#eG>ifRgE_yH}FZb(7x={ zxnRxe7(`CTkO(J`@A8jcTE|HY>$r}Rjyc@WaTB)~Cjal$N^iBo-?$B4BR@i`U(Fkb z`=+muUrRx_Dr{mHIRs{x%hUApv>5Whi5#-oSTEb+Qd#U9X=8$(OO_s%f`r(dz7k^j zIMe=drVS}W_(?GdMn;{cSfJAjVk(rmxesP4pS4{iir2Q`T6WT&c{ zgrx~AL(5TP-&nzn$1#9?d(CHlRwZP(BM&= z>5iX*OwS)E5GW~n6-uL(I6o-~-qW2*k2Hp}UD7=w3C*+8U1@<(Vp2?&N_)sG#M%V; nUwJ=z&Bn>NjsbbfjGAep(H@Si_8{l_kW4I^g!fA4k1F90p^DBH literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/converter/jlc$jlcArgs.class b/JLayer1.0.1/classes/javazoom/jl/converter/jlc$jlcArgs.class new file mode 100644 index 0000000000000000000000000000000000000000..f2ba829bd2c3dcbf8d80ee9b9cb0b3ec3dec2599 GIT binary patch literal 2073 zcmZ`(>vI!T6#w03)7_@aE6`#sj|&2(DNStEs^uXiQVde4VnL`_wwv2z>t;9XZju(? zitpEFzMk>5 zQB_f6P@5IYtjwAWtjN&q)`MC-n60`c!LYsVi&?kn%=)Hbi+RHgT#xjwklx0d35G4P z<-BDJ$EcEZ`s{+yF!HwHl=Bw?&vME~7__zTdP8_~E=7ofZE7EF(GWI6=TXbCg5wN{ z%)mtkr4T~uu6eF0e1F_4`wYFAnFoUm5WeKJZ*SakDQJnNuI*6juAYq z<2fmf;#r11iS>r-R`UyXz9dWv=H&~XIXtQ(j~oMZJR=o5hAJwq>+s;~IF1)}1gOjF zhK>fBIu@~{;|AVQ@ve^d@IJ%dwK|-uSLcK`;d)ggIJIbsT41@3iVt*rh>sW!7M+G+ zTO}UXf`_%p@oAr`$4k_Lx*gKHH ziDyEOT*qhlT#_%Sp94C+#8)y0nupOTTNu9JeodIx{1P`D9(9(tJI9UrKzKZ;2tHKf zZkWP89be-cnu`f)|2b+uKgJn)&QMX$8cU>Ia2?7?+Kn;n;e4nuvv`%af9-VTB;?4j zzx|=jnK@^g&N@VUXK3X{BPG(?CsRGf4@!7XRr<*vgkK~NjZ=bO!D zuHEjOBLWrQGVE*L$N@0hXz5@cpno)O>VJ}6bR6LoY{T~j&EeLy7M!135N5F9D(VVN zw76b3Y*O#Ztee`%;E0^sPP1Zo<7BL4iUS3Plph#g;9s(W%Kwbw_Y@k@dn-!?nss`? zU4DJe4_})!DGscQ6dN&YTZ3D40#TN;qSXw~7j%3?Byznj%L_|>AgUBocx2lX1+m=x z6g~5R;s~Qkk9~U>XX7<(oSIa!oks+sx1OM$QZL1iSpsfEqApk-UwvZ5T{-J|@7 zzXo@YBwEXh4d{yipUMMZy}=CCq>czh_fM&%l{0ozfo4GN^`WYo9GSeM(aDO8!hsv l;3G2pp$LBZ$(UziJ`nTnm=mbJ#7f))mw1Z24Z?;4?O&}8`n~`F literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/converter/jlc.class b/JLayer1.0.1/classes/javazoom/jl/converter/jlc.class new file mode 100644 index 0000000000000000000000000000000000000000..78c04b74ba648a00b3b5c25297fd49682fce1123 GIT binary patch literal 1592 zcmah}-BS}+6#rebo0}|)@?pfF@?lXzP~%67HnCcy*n&ZjpcrU{Ww|iRY<4r74OO4} z&>8=N_OUO#_@dJZPBUft?BC+wpglJUkeH}Dv**q|=XcM!=bYa?Z{Pp32jB`eH1uOw zLkuGv@eoEiE@)7tO2tK~zr>Ny5XNwrG?%5g!f}=3>o6I=(Qp)F8rpGPT5d@3twbj| zQW9{J<2wyK7!Kid<-FH z6pmp~8lJmuF0o}NOxM{Ko-aJwm_xPe=$OK^j(bQm^tVP&?4Q#ygZnyWF~^Yl0(NMQ zuIev(7R8(M+)Ymu3Tdn03rd~g)Mu^Tm2@mOQHRp;0P`~Kj1&tx9)hZ{D8*weGn}u# z&$=+Fh+blvvQHb&gg5!r6nWor9UVVoo}s4_p{}NPik3|$7>?JnCG5b4VcA7bBnNc- zf+td}=valpv8KbsIzzNRYD0Y+nlih#B}~6Tm3c=H&U#n2l&Fw7SHe9^C2mSlwJp|P$#sY>+FhGh%K$Ps_LnrX{$jKY$;l|vY> z6^(<=bTktsTZ>lLs#LS*il&+72gD^ZHZqW&5EVgq)bOB@&kKiod9g*Pk)~KRqEM9@ z@YN2dK8FwaZuR{V$zshw^4Q4xYSC$MO4@1Cox}N>`9B1qk?!Ri92t-ADXU{jMEMti^k|?<$ppsKh#KGf z3*Dm;RauQk)T^1_RJQZsT^VY27r~?&RYyzUe}XG-5Go@~S}hrjs(+*H546cu-+>Ys z<7KpG%Q%{Sjbq9#IwE`*oykzN0_~Ex?r5ll<2&e2hF{}E89n6cWLLC=-e|alQze`( p;Y@&{yrR4Rir?`95xO~zM3TJ-&=~K-075j_!?;F&mj0z+_(nYdXV27cC2R z{sI$YjGJ!Um`F^F@dx-9-1tkZ=bJv9jcIbfd+y`hbMN%$pKm_^%wsx%IL1}r1m|Gj zhBP;&nUH4Ez%2t)0>;vlm5tS>4+O-j!0>Xt<_CpZuvw@cxB_M`yZz|?#zS(oIs$sV zT=w07PEZeu9v!oIP~I-S3fyh4bS$6}3MkLWHxy>PpqtPayqXs*vLZXPDWEOaOPpa; zd_Qoj)iBJScxBI(ygnhmrSIP zHZg*PiSyDVkq{W$FB}$L*Xu8G`_){@-KCI5ZpjPQUEggSQdCkF{Bm&jgq>gM^K?L`rO%K-r6CNnrErL zn6Y-!%12CDTUu%1JyvY(IBzqfW=>Tx`xb`QhNhn6+nwLNl8JvMk$gtmNwqr7#dhbH zlc7YrFTxsVoTCVZA|^u-niL@iNg1;Xj(oZt?6&&dHZr{x-f#i_^Uz|UCbg^fsUoZt zPMT{2l)M)O<57@|f_MZN5kD63wdR_gRz6@TJboK-$L2@qpMGp0>`rg3>F#YyaxGq2 ox9I6|t9KX)18IdT55C>?0l{4o$jxqB`f)xau?Hm5`!5Op0?!e&U;qFB literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/Bitstream.class b/JLayer1.0.1/classes/javazoom/jl/decoder/Bitstream.class new file mode 100644 index 0000000000000000000000000000000000000000..1c44dd5fba6dac56469b04c9680630001496265b GIT binary patch literal 4774 zcmb7HZFEy-9sk|jo7^wz`R-@G`Pt(+9zPj>|9fxR!V2e@p8Nct=l}fQ z-|p>S{`>a30Pe+~1K5FQ8qkktW%;5kGIrb4OJj zby>cl??l#5@<@@ut5-&AlFPaq_h zw(?rLHj-^hf zx^so@z0;+M@l^VFB7b7KyuVz`rlxvH=m=F1wF#dr6sEe5O?GFpX-X}2KVqvSoi29J zBL!-@m?rt*73l|y>3icO_ZL&Aa+#i!_tESlxnikoyH9o7bNO7kU%}e;MZ=aG)NxRO zHfTGfws%O}CJU)d;$d4-Gi`SEj#;;sLdL+ZnRNCgefSQDOI6G5z85;6S`^M?~GEo6riAxsFmG(2TgVV)g zHecRbC^7SeJcH1l=wL?u!Z(mB(+9!OFFOc>6WR3fta}m8XHN-0 zm>K(6d%_9IWGa8O`@lr8a4I!EneF{QLZ#G%2gKZfhw(}yl>#B#IB5!29D#H zf#2bM1)GKM=CFOZs0{obV+KAU;hq#RAK(uL_Q-KqmOtXUh@Lj^c|2`kL~y6^q=C<& zD31Nfz)lPpcoh2#oD-5ka8$-_t6hOdux=T})tvY3wySJES@$x8T$>G8}6?uNU)DI4@TnyH^t=<`VjY2qD zpUC}=-dhH`_jV#1O7v)CcFFSqFOgZx_P=f?sE0YZHJGV*-O`X%Iqcj95};@xiU zJ@_~&*iQDI*|i}%%Z5y^4VhsZGOIRZ)7g;8Bn(Oa*^s4cLw1`D*>Hp&=_?zuwQR`l zB5b7%>JpBt^QUd?57NA%`FJXA}ahh~|ftAV7djwCg0BknlGM%Sk)+>THn&)n+t(f$8t(Ng z(BLEXaZg{T8K~k;5g+NZqKr#t7123t7@k9H*x84<4{mcWyxY93+O_Bfv|3SdVO1wp ztWsrpw~DsM=b#N=W_h$=4T~ejG_;_Na2+;cvwOCvx{VltUAPB5#9Q3S`9Y@hF`gyW zoK;*Up~qc=M;W#~=D+(pyHuZO>r#8n#4L7qX+7q{v*_>g_Lx1hh%dX3YrKqmiP7sE z;TfS{H8UpUI)SfetUqQ3#+*oHs8D01VtleV;>K(vKPsiB)`+Xu;Z-hO!Mdaz7O;M( z^AfKl2ONv8%^fa7m^5pv*f58tA=aXYLA~qRWs(9qzc|I!y2ee!=5WjvaE<~rxmAW( z#~X(zr&*hYDG^tz_=uEo^Bi{X>8fILQ1Q-Ui&TS6JBRM!yKS^~k>w>@K6hQ4!y1R$ zM$4AZUDs&7hksEfWfRlTgE--GyF4=GUArWyVttTyZ1K#pt{2eGeZYyqk~1Ee?k-a+ zoe`!cA+)$ORng%T?h=E7sYQlI=)1)Ge$rahvX!uta5LeS3s^_6mX9i>x21}%IT&_$ ztGL^a?iy^NCpSlz??Rd(B^7nOFfGqK1INXZrL*2l1)OkAKTk`%8rPz)Q8I8h zAMsXx5k8Xl4O(2AL$ei&kn6rGdg5A`&8%=35AmgVvumG4(RD3EQ6kJ|MXI>pDQX3! z+um#P!gcvqyP*$U!KP$HS-?k~%nHrPWi5;9K zJ}YU{AEE+t{VYPZDnVM>7&S*husS=V}t)=Lw%S&?9EM`a%OadTq@&Ep|w+IYaPSU2Zc=3Kmflv#>h zKrdCT?Tp5%*iM7I9Dw0iQp@yTz=qD~Gaf}fFjxC$SPOd@*(le(SlFBCpQ~Nx7JsSwY+1ZlTS2w=aK@`0<6s5gcZy QLl`}VDdRli1c-;)q%5jh6!lW%Z_)-p z8AbLjT4>yA#j_Ccd;$Yjhp4}TCU2qRPOk-u4*O4hACC5ioj62+*}kd zZuFeVRsB!!9&Nt(kg5rG^b;*C8yvWS7PPVN;BQ%bJ~H?i=UszOkb4IAkp~8!A`cBd LLq0cngje7f9Xm@R literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/BitstreamException.class b/JLayer1.0.1/classes/javazoom/jl/decoder/BitstreamException.class new file mode 100644 index 0000000000000000000000000000000000000000..40973016c6cce298b0be9edae9304d2b8a91a3a0 GIT binary patch literal 755 zcmaKq+fLg+5QhKB$%$D4fj}TBZ6F*R1G2bI#RUkdskkdb>ZKv8)F{}|vYh%%y=Wy) z0*MFUp-^Xo0}+(U^6q%|n}2qG@5AHmJ%BZ=*btb?VF=SU4`nkL)W?`O?lS)NuKWa$=H3^x|K^W+Dg6nJ__$R*C@x!+FO{*YmHwIRAeyHfw z-|NUmeV35h>hi%$gz6Hc=}AQ9IU7)3!Kj}d`MlnABQ zN830KIxVRTxIidw1o}uT=^s{~+p7vJV#$IdP)A9?#WG>h==_YLL+_yDwWP5@dC$pP zXZy0NgD89l{L0DO{<%~GVD0~k#(*ONch9b6{BBoxAbi5N7(#K~#*0*PNeot*id@pg^RVYW+mNPoXZX3V-m PwtRyePgk&i_Y&|IQ+Kcw literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/Control.class b/JLayer1.0.1/classes/javazoom/jl/decoder/Control.class new file mode 100644 index 0000000000000000000000000000000000000000..dbc8adb56991fbbacbf6a60f1d2344c5019a7e05 GIT binary patch literal 240 zcmYk0I}XAy5JYDo5dP3}0jMmFfS?CaP|%sgiW~(m${Hj%8U+X7PzWbVK{c8;v!nfd zUvB^_%wkMpObH$Fy7YwhVtFJ);`vJGTiF--VO>@Sr%=1RB7|XP z{GP>n%dReO1CxIiEw-)nro@dFHNKEk*<{Q>tVFq;4X literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/Crc16.class b/JLayer1.0.1/classes/javazoom/jl/decoder/Crc16.class new file mode 100644 index 0000000000000000000000000000000000000000..b62c4357b7063cc294ec2924b4553a27682bbc8e GIT binary patch literal 436 zcmYk0%}&Bl5QWceZ)q(R`BBs$uCbejjjN^`R;*l*n6M({w$Wl~4L=5rF@#reB`?6n zjej9=;REa-$pb7$txoO8a9$qus3x(w$I?RWLO~gZ&l^DZD;(&^46&j(5 zP2{7AKgu}UqqL_LbII=9%ro=M&OUcPe|`H7UkD3JNMzWaV-{iY2)}kjq0AF+5W6IEp7K;?jJkpr~M#Vc2PkdQ+6%8@A1@2191^ z(D-N^JI+zz&??k;)v0l}un{(HI$wxUJy1hBZuR7{>&|>pFBHeUV+^Qq${A)1qtC@B%Lx0xM~0 zz0$Cbl5BN@VX9Ybt7%y~jwws_u?0ye3d#(#gU+$x=_IpbxW*BUDAF~w3hBx%Sw^G5 z$v@Jg@$Q*nwCC!a*4Vd569ZZN*GxKE-+uds$c%cO+ckzoPaQrT^-Ie)3{sd6?*)rj z;iJOwP=9LnB9~#Tzk_Z?Qe*0hp<#wTlBI!SML5F`s2 z*IQuv7X(fb)Y}N{wGci<IrS3d*oOan|SpSOP Z2^q4d4CV%eBi--{fm8w{@f6F5{RYP2N1Olv literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/Decoder.class b/JLayer1.0.1/classes/javazoom/jl/decoder/Decoder.class new file mode 100644 index 0000000000000000000000000000000000000000..5066962afff340baa840320afffe09b39cb91a7b GIT binary patch literal 3559 zcma)8>30)V6#q>-$&krd+EUO`s~|fx;kcYLXLAfPU4i{PRDUS z9+2aMLU>4)hc!H+qYaPB;V})5>$nV0$l*y1Pw7|>OO~ev^NfaPb!-&OMm#MVpHox+ zoP?NqUc(ClU)0fsmo&UAKD{FT@>Z{Ecum9W3ZlDB$DA%IFw*(FDIvw~&>6pE# zA`^a>KxU~(Z$)H7sFS`(Rbr)o`;=oHpSAMYQwo$cW9eguj+hLw&EUpJHtpPL%TaK7 zsN#__gM@S@NKrhO&$&5IaFUw$leA4x+ZEI&I`2}T4lyYTu1bXJ4BRZ|N(34YTkfzm zWzO1exel&ObY6%w3#Mqf6*m=J5pJ}?(J%JmemqkwIr_OjTx5r3vb6d`y%@~7Mc1*+ z>HcsptM#RioXlD?Zmy7Lz*o}OU0z`hdiAGZUAXPCyg1v;;P^sI^2tCmqfHf3HK|qh zLA#JWmSK7otjb$+LEJ0;DCkV2!`)xb%It4Xq`gS=*k=B4&)y?WVa}Yets3_aQLxgn zTqkFpumYNbL*aM7u(;Ro+)HU-fnMv?Qe}ys*PeuW#kQ>NRkDHGafd9UoFHKXr&3P_ zQn=N?7Hl=JLzXx2rh&Jx$H3cohxHgH9XJ@YfPr^K#d~<)Kp*-Ie1H!PY?ECYw;3=o zq2VI~A7jkG4Y*Om83UhS)WA3nY53GYMh>6ha|1&dHZX!=4$AWwuGD~B@vMQHz~0>u zCa`RP3I7)cZpJM&ZuZ~dW#CI;AHbl3^|jRp;V^J74jT9hW9*AC?uZ3(27dP7EI_dq5yzIVr-ed8l{a-`GppqZac znOWC!MNM=bNKuOnMbaaQ11Tx&wPDxx8;wl1yizq{6HFpn&f1pgjQbB~jRY<2K1$3v zIoGO4sGK%*rM1=|A?=Is4y{hx&|!SOfw8O#!l(HKF_lNMcZq10!{23^)M@Xji%nIZ z+DIbp@o0&3N}|s{Nxl3Jr{FpmSSyo)|L*Ffkv+(c_aOV-gX~2Qvd28g=J6mq+kzbtg~Fw4)G4lga{=AGm`@zayaE#6ODl#Puc@P?tQ1`mqJ5 z^N4gULi-WX(PY;=wB*mwN?5V8`%lEVk93z1^Hs&L3%dhVYdk}MPPr2FKM?;uFn1^R z1Uy4@N6c;Y^&6w2u8ZmfmT=Kd!Uo?;1Ffv&vC%&^%CYQ!279SU?l%Ax5yH*nY<9DwS-Fq`u^>sxJv)p_}zuO15YJzb)-Zk z0xf03_h2lbHxWu;BUIG-9XAr!{h{QwW%7XvxiOGdn_}>(Do5Xa#LA`C&>yj_pF`VN z8xwb_@2T({T*4!f^m)3M@bF0pg7YV0UT}U@`qcJs$jskae&V;t&hbm}yOeimUqn0e zf7w`f7f%iR8u_)p+{Iq%fcQDYdE;w;LbO~xo9V62=*Kw@u1D-&ulAeP literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/DecoderErrors.class b/JLayer1.0.1/classes/javazoom/jl/decoder/DecoderErrors.class new file mode 100644 index 0000000000000000000000000000000000000000..18fcd784b18b7d386073e603cf108aee54234aa0 GIT binary patch literal 276 zcmZvXK~BRk5Jmqa&`_Whmasz{z~TsQW1)a$S8fAh6`9sTib5>80SS)Q1qa|zs1Dt9 z!D{qo-k1LT{BFJh++v*JG{Y#v8DUha2c@4>C5+LAKt`o+tKLWm*R}nyU*5m5x?wA~^eY!w zzMCQhAJ&BP-eHYxUzvWX-LfOx{1>~AnzWxT?1F>X_^)1y6qh)_VdO#lGC>ykXpe`H KkN5Z_TG#@_gFG7m literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/DecoderException.class b/JLayer1.0.1/classes/javazoom/jl/decoder/DecoderException.class new file mode 100644 index 0000000000000000000000000000000000000000..5bcefb71d7689481a01108d1aac02bcdb3c62896 GIT binary patch literal 749 zcmZ{i+fLg+5QhKB$%)y9CJ=IJOHyd+m>{dyL0q&%YAWtpRqCZ7t6-Gc(PB#4XW{}R zP6CMs=tEVVO`Ixff~=h#?|$>o&g}mFbN>k79a<&?N*OGnY_h3nQ!-FBk;IEMUh4Uk ziFMSpS2yt5z=nZMLPjbTsKcNq3DhN|c0At;cL}z&f9(Enoq_B3ozJ22{C<08<;#%@ z&fJ56Y&X9W5+B9_WvlxnBKk7y=v)&tZZ$bucDgu8Kqy$<=8Qy?SKv8v0$D5ztf5FK z{(rRhr{16^l?LAs@_SNOq-y_)s|hsl)_^6@L{Y%T7GYDX{0f5a&hfzMO+uU~v@<%C z!_W(SLSqs3i9`3@pHj_$^+n)RPnUi|;JUeADR(%Oevh!dpv&_Oh^lK7ayrH2PP%?5 z`%)2>!r-GEO*@zlgQ>e}%}cdW=eHq1c*Y~9d&(~;!9KT`ZJz%si1P2Ij>$0Dl3viLEdI literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/Equalizer$EQFunction.class b/JLayer1.0.1/classes/javazoom/jl/decoder/Equalizer$EQFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..3226c9e2acae1862418f4d6981a3404255265345 GIT binary patch literal 279 zcmaKmzskZu5X5I=;%SWk9>7Adh+lJjy;vv;R$^m+CWj=%3ntORhZ3v=3m?FT5;tOD zE-GEp%mRQ%zZU{BLf6U0^*6J%HXth!8MI)7KtrOa6h)IM>GX|ZQD&Y!Hwbl{ka`~~X$hOZPi&?a~0yK~OD=ia&Pk3U~F0h~n6kNr5^h9J)P zDV*iu91rJtxZpcqM}J~cHn zefh@CnS6<%=gPeHP+Kz1h4g$iJ*$_^S-qCdKUmbNl_kA4#Ng(-QzTY&k~f9HSJy48 zV$4xZ#~rHR8Lk)=Ym~v6NZw*_Wl4f)i8}>;JdxPFLcG<|5XXB-y-+h382a{L+HiMG zCjzxKr&|-6F`G3P4LXvQ;+7UqayP|7lDv8ajBF-~JmIcZ7Aiz=CG6)x@w}jwEwe@) zx)Mp=WBY%3n!#|nYIiN62a1F!j!1~3kB69qqda#40}@g=F3~y+crh+v0$GOWt^=2F z7+v%-IVfG#jJfo+yYqUP942<Asu3;q82cc9r_0e2{X~F2!CtbrFZrwO!o+Q)T6w=Mx<7DFGYSCtybi z=Ac|?CrnMP!`Z^d_QJZFSemiG4#G_>00Zhe+^J1jc@3YetnvF1=V&ytica+-98onD z&1}F^T6VIvzrR{K&6*jZ6X!azBDjZ}+;w=j**{zCe&M29bQesiZxB#ZRB=aVvNh@krA}*sq($J;vA8c(MXhDNh+f9T9M2;{H0|Fe2A! zb_PyH28FD|vc#(V{9OI49DRuTB7Lw97qI3cMg{?p68)USymWp4q^#8B5=I6UY`UNt g;1;kkGB7eQ0iDFaz{mo$pMeF)X9e;=G#dj00DbZ;ng9R* literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/Header.class b/JLayer1.0.1/classes/javazoom/jl/decoder/Header.class new file mode 100644 index 0000000000000000000000000000000000000000..d6d00d56bfbcfc179e5af012ebf024b1ac40cabf GIT binary patch literal 9487 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 HctZaNolUU9 literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/InputStreamSource.class b/JLayer1.0.1/classes/javazoom/jl/decoder/InputStreamSource.class new file mode 100644 index 0000000000000000000000000000000000000000..015b74f889f5925d467df473e76840458ff124f0 GIT binary patch literal 719 zcmaJfgc5Pcgvabuh`O&chsEg${BP7W3qE=3%QIHW=p5ebQMa-CJ!bZb|M1E{~L z9FTxYAi)ud9|gR1O@pAq(s(?c_h#PC?Drp^z5uv`whI?44pwL2xhUa!6;<4DaTB-7 zKa0n~nuB!*8v-Sj2(%szqgPR=(y*HxO|o7#lF{LoK;@oFRCZrr(Z3K8JQJ`VqzNv-qD z4udiO)A>6Aql%WvAbaVdj@tsOxm+D3gYfZ0>nEv7GC4YLXi&Zf4>bpYhdDF_HVoxB zO%KDN4*N2u=+U32?WL1ZObv}`>D~RIj5C3yi>SZx^Euv3Zuh)@eguxDRZJ}x%Au-c zuw_Ozl?kul-MCGpCvQG>S^E8|A1zHQ2izan?!Az+@30(O%XPs5x gy};Fi*I-M-vlrmJr8h#BDBw)G$y$G9m;b}XFA3w07XSbN literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerError.class b/JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerError.class new file mode 100644 index 0000000000000000000000000000000000000000..8c774f155b80ae1349803daf55c5c8464961458d GIT binary patch literal 148 zcmX^0Z`VEs1_nb0E-nUU26lD^4t54kMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvExD76w*E z2BoaTvc#(V{9OI49Q~BkWS~ruz86r;C$TcM$hD{_zlf26AEZb>CowNwA1uP4$iM_N d9|RbI5NHsPWCQX9!F&b=R;}#}j2poU7yyy}9S;Bi literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerErrors.class b/JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerErrors.class new file mode 100644 index 0000000000000000000000000000000000000000..c32689931944ed0bf211b337c67f54e2bf807e61 GIT binary patch literal 183 zcmX^0Z`VEs1_nb0ZgvJvb_Om+27V{ckl>IYS4ZD?*PtN(AVvm8Peuk_=ls0llEl1{ zu*96wRAvSSpfCfki>tH0i)#=>AyAMBD5#v3Se96opP#Frm7|}Mnw+1KTBPp<6!S@} zOf7OPD#|Y^W@HcmsnX9$%uCnzPs&P7E@1;1$OLo>6N4lJGXo2d#|q}L0r~7md=8)} F0|5A9CJ+Ds literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerException.class b/JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerException.class new file mode 100644 index 0000000000000000000000000000000000000000..186f20ab602e9e8301922c6becae9f1f04dfb0b7 GIT binary patch literal 670 zcmZuuO;5r=5Pi#6X({q;@mnM@P)!=o7%#?);a~#sUSWepXi05U{6k*VC?p=dn)suP zvr=edxXjGH_jcy(?Dx;dCx9bV704)wuqq=7O-31O3RUX@qp*QZ30o4j8D##@;Umv- zY=%;^Z{C^4z_fct``UHx&8q=#FeHvG+wx8rqP6-ZL+sS)a#Ghq@|NdXcCR65eF+{? z291SS?Q!ocaG=%dOQj5%5e@KKp4qu+yJm;xm;E`GV_eKQmzzVfph87jgp3LWDG56& zc2QALKvBY;$Z3Xs@zzJj85;e8(d8X_lWUw4)-=c54S6aAO9`Rb0BwzLJwBxEaMxWd z@t-S(P@BaHP@zwe>CYGs>wdZ6*}c8Gs`Leuc-PiG@TlJ Q&4wkOporrH((D3$0q7uzX#fBK literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerHook.class b/JLayer1.0.1/classes/javazoom/jl/decoder/JavaLayerHook.class new file mode 100644 index 0000000000000000000000000000000000000000..8c9cde9192e1a80a7d28e9b215b75452c2040518 GIT binary patch literal 159 zcmX^0Z`VEs1_nb0c6J64WF#UvPAuy z#JqHUpkQWRy0s=mC^KK*Gq0eu1ftZMkwFopvMN76S3fI9KP5FeKP9zD-wP<_lUSKr mby>PKV30)DrEH+B(J~9Ht#dUuMX*caIz!5XrR#+_x3*3U}?A zQ=|w_g}{C=6rN#~w};mrwI`COREyt2&1;*fFfSt4lFL0&1%@Mm-?MAwyObL)hsT2$ zpY6jiKpu@ar`@1(tvW>G4Rf}o$PDu7qUmcy#Ux&4I4ES5@jd5jrg_;mERQ?QDwC3m zrYrV(Do)~*gqn(bxZiN}@$ZqcN~JLTScx}wkM1ZzgsgL zUeby}bjKJv42xmNXGP!vYDA}k$^#Y4SYgmw+~UxXCNmh%LjR7G%yed0987opP zTt7P9(sZG86`$iF!${5I52|#HC|G}8E83N+Z4tI6QYGOF6<^{jhCP8fI7O=%ZbkQs zbliDdAPF=hT8K~@Z1D~Rf39Yj)FCL9HA`PKx#roLY3n6QcyLX$qbk0}Hw=s(vN%nZ zwridk7nd0JH%2-Egd@m}`~liEeR#W6soNZZ_0aWnc_ zTm6br<1yS^D4i{C0ai9~lVM-$#zrKQ6^IHoxlp4FyTj`i=spA>9e8$-ysbOJ9zr|l z{)L1FHevXS)E_0o4Z9n4U}6*(4vjJg5{s0|;kQf@L?(3Uq0M<;T2BcvN7~b?Rc@6S z((O_g>7AQoK+J|(xrtWOPfqWB$MAUDqBOEgDI66=d1{eG@53m)!;aGnnDQ;OK~D-j zQ=_5r1pV7ZGo!gHSqJ-#9)KRvR_F~a%#-M(FEE~Zf*tGVDD-#M5!* zLV6YPI(7*}hCvJy*3K=+bVWks6+)KCYBgE*3*_OBp9Q&rLjUeM_G~2Auy>wt2d82~ zu~qDAFdq`k#mfGvuA#2fFJVB>iRIyrM;J=4VfaM%p6=mCq3M7yrMJiWD$azA&QhdZ z#AuQZJvg6!g0Xds6xN{?>KN@mw2HAL{raD$VHJn#II@vW4X@#-ptc?NHJlA`PlokK zHFG#FB5lT<2r`-!8BNViP)a9)qP9wsz%W{(d}6;Nj5Z-! xUT94dC!vi|mM8l^h|`$-6URD`e~cXi$jnVpkT2v@K|nIz*rYlE+{K#b;(vb9r)2;D literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$Subband.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$Subband.class new file mode 100644 index 0000000000000000000000000000000000000000..cb56034296571b96e596d5b8a38aaf022754f71a GIT binary patch literal 1444 zcmbu-+fEZv6vpwjWoS#OQWna|0|xbG$)!9&5343v!YqitY}s=E1D6_h-O4Hq8ZVQXj(KanifrqrbW}Dx~MLyi|V4f zs4hAqIsy)=0&#RT3pi-+UvJ>mO&NJtEt+toi^-^WGgo*Xkd?oM$Ox`n^@(Px5>&wmVFJ&vBpclP!@x9kLtqTzonnS6k^?LQ5+tL{Ot zee_mE8;RAXkGgqS4W77u#b2&?!QY{q`ʸ-Q3xAOM#-1X6t@m@#jG( z8frG}x9zn-{J7@ub5qnOpBkeO{_zmFvy4$Et_s)I@pq)&U_hFpYqWx!tMUTZ>$tN< z>kYX<8;$Etx&@6;@y9~y73Shky@=0#2-z*ii?+tcigqiv6zx!~Xop!V+7WIo+VK#F z&@hM52uIL1ZbPFSMccU@jWOO6Kh9Vueu7V+9o&J&IgWO6C(6ud7k8m2`6POZPodr1 zjrMR4+RMFYANQgC+>f5-)94vKgP!HH=s7-z4)6dv$b;w*523?6jGpK7=m?LXqdba^ z@fdo6FQ5rdph-@m<2;UDXqK~Rj&rEN25Pd2<~fgAY@vnr;#(>-ju3}-4`&g@b(ZeXmKOO2r1xUp literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1.class new file mode 100644 index 0000000000000000000000000000000000000000..2371df334b17c580c86f0b81c600a5ee4cd7dac7 GIT binary patch literal 1960 zcmbtU-*XdH6#h23+1+k7O?p+ZRV_=qqnL!L#zB5^($#eeuD6!v8>cWJU%(cazl8iK8<<Pw|>Sl#*kE~{Vo;SQ^RaOWph|L~7{tp3rTMA_V=C{?qx zZdUsllw~wEv_NL2 zoVO%|E0&qh>Vnu3CkBHqz4A*2ptR7V2iI-V8Yl<;ify&$|vj4LSVa8OpTE+O77%$#}2 zs-&912IdTQnF#O_+_DaWxYGqzc+TGY~^|12m$X-Y}h*Y4K#yiw^^EjN>;`D+X> zeI(t@?!;}=S&g4ttCTN@kIkF0?sjV42$GVS&o`9<(UkWc=sO0G0_<;hdsjc{vnx1a zVp_uzh|YRieeEtkR8REMe^#9S2Q_qyW|7w|T1A$LVel-?gJ)?JJWIXvEOpqk)JD%z zpFK-mCM!dtfk+Y_rBx68srkr;W49s2dTQ{+{5AN$q%9ET7+$1fK|D`^8QHV3VdWOs zVhw>v_&UPhK{mR4KIt};`p7TPM`AY-AciXJRSd?2Wy>{m#J++i7KdvHlCL-YP$SlH z(q>cPv9E*Nhw0VV38n{B?uSC*}=Vx zJl`#Jv4)I_6izo~e)cK`)FR>UWy2p#8;tX`5#W!c4VgchHWdC?+EDqPv=Nc{UP6UG zPN?#3!Vdlfp~ia%gZxQCo$n(I@uvto`P1pIq3uxa70P`=xnC&n7s>;~l=&c`!k-~j v`2oTX9wpTH5MhwV2z5S87~%&BJNXDH>#gEusSccqdI%YqP-!YN$TRgXglOdr literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1IntensityStereo.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1IntensityStereo.class new file mode 100644 index 0000000000000000000000000000000000000000..014c0b6ca45afac95f87860bcc586bb65e35eae5 GIT binary patch literal 1394 zcmbtU+fEZv6kP|Vol=I2h=La6R<#$PEefJwRSLu=#1|41@u8Vc4>HYkhRhrc_}~Zl z2m0h2FTQ955+D2kKgzfdGo^)$8e^K-XPT1rlhGxWJ!uT^x*atvLVj?M5QwNck!>u(&Vk*iy|8aJrW&8?Wi6I9$- z3Qa#H819DWO0H2@Sdv5IYx@S@m2*55cNzLmr=R0m{Gai1hW|#M-q^KxO&2=D8+cV_}x2SEJ|-_7{Fx>S8!FsJQg(E!=j4& z8XjOt!!j;u=$9se5e*NeSCr@^M;)#Y8lvJ!T6vIwvLqFhddDTC!)hx9`_h>|2U4J=NvvmG7KT0dZr1|N4pSNnL%sQ z1`+9aNlG3K!#a~EL+lk7l`6^A*E*qex1rEYXdZC1c|W4g_O{0b(f0hWX74qsoG#8( z*r*FfOC(KOil+%1Nv)sWu!*qdbBBa+y1{+)A3#jy;gc63pL9ZYkah#;pdS#;Bu>CS zlP7CQLKKzxLF!Xzjb*aaGbiZqD~2edP~9*+*Kj?+%2TY9GRe$WbiT(}<_nZ;fAkoU z{1FXk->J<>q{X1S#Uy)z*eAk~Oh$1d$iE}(D8=6T==&L3yXcA6$#hqb(3SXrd=QM* z7nQ(O>x+@;A-U6z(K9m?3A{thCzOv!v~{$~4l&$nS6XqU$*Vw2B;#JpB99n-<5}E6 F>=$zDVwC^@ literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1Stereo.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1Stereo.class new file mode 100644 index 0000000000000000000000000000000000000000..76d8759661a38ff85834dd424d277b37aa6490e1 GIT binary patch literal 1770 zcmbtU%Tg0T6g>?Sf}zoXfMW2C8WLha1W^{hg4Es-a-k#JmD{%;i!GsA&dM*GYI;t8IH zkrNmUddvy^g{ow)x=-6ZwU*E8X3=r>PtlcBnIs$Nm06N;Wz5hmOIZTxeD`1Gz=j)K$}#Eqw*c{p9A_N?y^p9}Vhnn}h^p$z+lG`V7T0 zPPd1Hifdk&l-EK3n1BXotT{p&i^o|>UCv4pa#j+Wvy#?m4MDJO$sVCyE9&TvcoMNq zh);w-k)!A)FUQ}Yo|u7GiDY;Kb?d12ftLD?_Eh2v>M0OnpfO;_TO3R9s?Dzx@n?j2 z)3=UB!aF=1p;hw|HBM~u5;aPcULxaWx2a>)ghs6$r{4+0z4p(Lubv`FW_^nms@s{2 zHc+QjxywDG)*1EhNK@vK#EF7Qx)RAvv|Mnjq6y|~BBs~tXzlt)asDzikzUn3IyywY zOd{5s+QjZ@w{AG5y~hCIR{F_hGR=81(dA(+_72h19*uTw8)*N4=HBW?^ZBn6Bfm)p O#&Hde^v2`3fyQ6Y9k|l~ literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIDecoder.class new file mode 100644 index 0000000000000000000000000000000000000000..ea084667219626da2d3adb4168309d0da27e9a27 GIT binary patch literal 2810 zcmb_eOLG)e6#i~zG95adhhWGPNJ7MJv|*}!lWlo_W;2M zTE)sL%bitmBgI13Rxv}Bly0r^KUn1gi+^GK?(LogVpk#PqR+W~&vzd8^gZ9qZ-4#t z3xH94u44$P9oUc8G`y}O7QCF4J8wvFN{Z7`yeY*Q9d98mS8r>0N9qN+^R8UIr&BCS zaaM|R((t}qeIUh$8ZtUMab9j)8nQZia9)G0qfc(OASZ<*#gY^kbmURcu&m*thN8f( zbS0a$+}ufP%_)zjeW&b{1dNpHI^~(7<#~=L(Dwi+<@%2675ue2y5#}0fEKL8f`>;ISi+1dAz`zt zK5O}YIMREouaV}kmyx#Z?R$Jsy_+dncysW{=gZa#%hu2?t4FC<+o7qz0uq+Delhl;+SYP12!mVq9_%VwPcbK;! zOi@LHc?Yq@+lX`dBMqSW6&wxWN6-L`dxPe|DjLm0RV2*ARcK~6@l9rTV--8hjzkrD z-S-$%HK;W_$n7XsMz#+-s|%-K^mWK0EpBBC_FEv;+=MuA`Zo z9ej2N;g2(1oIz(O$z@@Y-=LAHfG_FRp16U5*kmu4#!XzMYVEy)&c)u_=t^G~;)jiU z5*5FJqXCMAb>Bp12<(x--T-(v3^E?t`lM}77-Ta=l;^#m+PI|Juo+{lSk`!8({Zl~ zJ4V^aC&8zohP|r9KmK`I@^yIH7Dkb674;+}@X&OGA6F(B+)UE*V3Hd4sRVcHzU2MT z_bV3INZ&7Fld&mTPz`OpnnUXbE)xZs$pPC z0e=s7cGP&4ZbAPRyY?i$<24|NkKFEC-?-JgzVUTXn!wZYAS|kfvvGj8xQ}|6x|4c@ Kx`o<|H~kHu{_;2g literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2.class new file mode 100644 index 0000000000000000000000000000000000000000..1adbf04f0e669a5f9269befab1e8036c2769a8d1 GIT binary patch literal 23694 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 bb@RW7Wz7G4IK_FzvHzc4sq=>OmLLBgKZAwA literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2IntensityStereo.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2IntensityStereo.class new file mode 100644 index 0000000000000000000000000000000000000000..060b6c493acd5278b8a3b808a00fc661799ba61f GIT binary patch literal 2158 zcmbVM-%}e^6#g#RP10~%ur^W(wU$y1NsthHXZlBVJZCoxOD5>p+1c-&dwzW9-m~ZI(`SD^0WgWp3@+ex zhKW-cL@7hMGD}koZ)ET$uCetk-c}giW_X8Tnhi57U1ykOm}7XC;XQ_Vh6RQj3^y4T zGk71jQurW+4+YLxo2Kh3r(E@{bU5Qv%5u+qL~! z0WD{Y-KAxrQC9+eO=Z@rrsFg$)3+P0z)Egu%lyv#q0!i$*m5T7$|A?+#Juf$J~?ks zcQxN48rAG>TWDI7*QPn?g&><}9bTsDDMwjh;_J_q_=vo}lU!i-xhUIr;RA=|@yzWV zN7YT=6d3t0%CS`n+u8N2uKM1uhM@v?az@v>E$_Mhrt)lW(RTck3fSp1wkmNMBNC&y zD)AA9Q}|fo6MQPMjA4l()_f-MIqpj2FedQ@zLdC#mnAMSyuy%2L1Kjss~oh3uOzhT$VLgQnfw^vtvSjY5reWL&`(|``w^lRVdY~;EuCH9r_VSJ)$U@EDwx0_afpor5 z96vx$W?k&rC@g=~?mIvG+dBw2`OOiq zBgkhi-{BICjvU6z?_eGYL zGxYYADjF^QiSpmb4zTz_qEw^hY@)PP(T0A;w*y*5C&i1YUvNI~I7fy7R%Ny-dJ9u* z>`zD5Y-H^XtRd-3ky4Vf7_baH#`*DphNTvM9MT?OzMZJ=Fi{JaBmPjy{4L19foYG} zxTfJbLr*#$d3J=;sSd;GFtPCb3Y9~xU9^m>8!oY2$X$B13LHZv^ Cg$sTF literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2Stereo.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2Stereo.class new file mode 100644 index 0000000000000000000000000000000000000000..d35474b08b453a046d05ff5b933922fc2350bd23 GIT binary patch literal 2540 zcmbVN-%}G;6#kaoY~r$!fJVfCRHSX#1PN%Pf}jcc(1&v);+d(PdL|NQ;} zz&O6t(2q+;5W!_8lT4+c3CD7)rfplLiHun)m2;+BEZY*Kw1lHgkCR(* ziW0&t2D4Uaxp>lk5TFo`l*#;1OKrsH#DbUegq9RoP+hp8iroQ^zO2ANFYybg;~ z-oP0hLrl&xSwTU^1-zqU6-6CMT-33~8DB6dG1|Hg8)ZK#5|Zs&X3l(MRnzGkUIz^? zY-F>hofp=L1uE7mQ`fh(>S-Fl>TJn$9PaAG|3#M&+=naSc)@a8+PpDdgYCa&qXTI6 z2HNf290myi2F}uOc#}mLTI;jX*DhW3ETx+Hd_C0{O^d1Y)gKnUWkv}3M5Ss~%&Jvy zrwn&`(Jn|BdFA=j>E+ZiuN3!kuuv^;R4C0gvn3jRd6^#(-Rn?$V?AqCC3K3Qh8A?Z zZ`RPywyWkqcM@dL=KgQAzAu^*wGFjP-rpnCgb{k40SyXwEJ+IYso>P0f>VzQPHieU z4T0b^2ZGZ82u>p*I86m{6%x-3(NWTF!iNsxmyO5{Btvj6xV#LDAHUc#qX-eAYE_z3e-*ALooh)fW zYM>?PPv{-+7NN<6HpS6T(PzYb0!)wZLXVSCC%uyaTAaa#Gsw;cD2;d>^lt~V4pY+K|bs*{QQ^IPWFYHguKlV$HRq1ej z3lA7T-h=&?bXiWUJ?ScZKhHkp6+Yh~zJBk!&?}3J^}3$YT&Psn6C)BI-N6ZJH&NO* z5#>j0@u(io6BIvxgq2sjL9|}F&t-d^OPsCA zN=M&tMTNx;6KMV1)iQi8h}+W=rrZ7gYS?Z&HkxM7Xt~|Q0Yq(w`=(1+47}rM+wlN= zO-Q$NLNX9nwe(_Hx+0sfVaqOj?RH_q?zbUfBO7S@_l`idM=kS_3yL!^he+{oPJ(cm z$2`Q6CxF*$e3E~OWh8$J`otR`jJbjO0}u2F|9hW5#z^!K=};xf+t3jXScH>b5P6wA zMYR5o=;QA*i3%TL+e0ZQh#g_Z2gW5Z;Q@d8Bx}BIRO(cpWN<~0`5Ln`J_<25{0Ydn#weIz`NcQbV-)>o6s=d-HxtZV8DjsCCoVGPiyUhxu+1tK K_-lu86QwVmgM709 literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$SBI.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$SBI.class new file mode 100644 index 0000000000000000000000000000000000000000..6717293bae1dcb32db7afa5ed346ef9bdf734ce8 GIT binary patch literal 348 zcma)%&q~8U5XQer(ry#iHvXv|yeJlIqp*0F9;}xI!Gq9CPHVeJLrfqkg1(gpDTw$0 zK9o2cd+5>2?9A-%oB8JZ=i>{&B@QCAupJ^m*M*+Ij=(;Fa)Os?PHIB?YEdkfV}d^% zO$ouIoLhnzraIN5sYHlKq75O@fe`2u&NB0CUd!@HWx1N$84D_PYhG-nwZ8eQ2lv-J z-*2MSMPaK+ZtB|d!q~}GZi+{B_mJ7yl5qNui8$sHT6~uWHVwfUIZNvf+vIwStCNNR v`pF8E#D|~JJG>V1+cTM9+$sdRZuV5PHdJ+pd}r6G(!ff90VFB7T4$ zCC;L#$6R*i&Aj(!c0N8|-vONBpp6!M4>mS*wyB>j2ip$13@l?XVnIp8VApp^)jwf4 znxyhUJ{84%lxERF&5MO9qltV}r4Zus8=sNjJjs*#f*}YRDF#ypYfNSgqh^X }bz z@UX(cvB%-S?n%4|w zpqD*t;Ex_1)TUFLpb>B>V|qcr_x0X{4XSXg(z`~ePuQT?4Tnpx@C8QbzIjWSp{;}U hOg-(vvHqjz5#OR(=T9-x{NsP@UFv(pZ=r)7;0qLMaJ~Ql literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$gr_info_s.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$gr_info_s.class new file mode 100644 index 0000000000000000000000000000000000000000..5225cf6f47659078e05d0d16362710b6a1badcef GIT binary patch literal 810 zcma))OK;Oa6ot|)yZkLh%?kp2~*3(5hjR0+1`l-xNbgHFk#Q?luloH`{>PRW*2GVhf9JEaJmQVLEf z2&aPMq85Qi4ib5z1CO%4BcAJf1;6W O=^4={4e=OHvG@~|_Moc( literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire.class new file mode 100644 index 0000000000000000000000000000000000000000..b6b90c4e8eee73180ee2e826e31434756f171ec6 GIT binary patch literal 468 zcmb7=%Syvw5QWd=_BS!rw%%O{y08Ho-Kw~$n?S*ZAV?P_rhh|9n#i9Z=vxVvg0~0o zp~Q)zxU8Ew^DWMq%lpUE8-PP>IS^>tu+S1%sdUwWj;6qxzy`rAqEV3$w0^)PRs=g% zgCrZ}gM#1&SteCC4U0lD9`t+T@HV{9^NBxB{h^HVp;Ue^ypt*jg0pYl{S7!KSSLxA zl&1uJuYE}{y6kYVh$R;_*aDk`{eNY;a8M_7<}sCWa+9ktQIg>Ng+}G}(=dzu^XsvU zO2W<@f!OB%3I3}Fs@CU@gHiuds;**gFdf0*4(NC@kSAW8DKyV~g+7JhJ;KnRpk904^|=NU+mK7b5`~G!@trI3!R>h!%!TLx>l_C6{@Xw^xj3 z=eLB;tX?^V0hEG3PoWPfa756BeYDSYz1BskS8mB|UfTgPWYUJ&x}A}KXw#W{85gCVjeP05VHf0 ivsX}-j<<4yC`;1e2jXah&I{MV-vfRnYZtrNNADY)EkIrX literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder.class b/JLayer1.0.1/classes/javazoom/jl/decoder/LayerIIIDecoder.class new file mode 100644 index 0000000000000000000000000000000000000000..b3ead01a14f2e276c53682640973a7d3d665fdce GIT binary patch literal 25071 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 literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/Obuffer.class b/JLayer1.0.1/classes/javazoom/jl/decoder/Obuffer.class new file mode 100644 index 0000000000000000000000000000000000000000..5d4e0e35a2e3b3d037a644eaa1399f6fa5105ea7 GIT binary patch literal 533 zcmYjNJx?1!6rA<#*REUDc4NaOLrJzOPkMJ)rZ!ZR=+1Z&l^Y*=ceExe6U>Wmir0^+?Bxckx%gw?ze!9^G;Mkh&Uen^$zSeUBH=|fG!LZct5l)LW53PN&CzTJX^ZKRCTeyPdQtCxgHfFifoP z%KP#QUEhoEs_}x7*9%G|o~;?>nvvX*HBC{g2?m#$npnI)2GLH+(4n_LDfG0W@1-?^ zVKS5s|6g_?NmUu#b0w{0EKn6<<`{a5%1IA)M<&i03e#9RPoqh_#tXWYXEj-^5;0`f zjjOU&jAx(hDtRLje#GF}k*hmaEzewDwX0FOoP;3^OBmrI$i*mz8OHc*tSo6&Rf@8@ zSSi-_6wOFI&nso4q-zZQr=Sg^Qqqb`wUSChlyC`ghQ746FRP_OFmFvW$R|7-l(2{; zE|LcPL31jG?E^Q<|#BAW-%i+vPTJvca)`Mvra=EN%1%_DjIIJEM)@H1?wX{vk z9&9Y`?6AksEe1nR=J#rE}2TP^6CbNZ<=P z0mtp2b45O*PRZqpR3hvE$`!l1^eWQFPs% z%c3iB(M>ik6byn?moEG-g1?~kzWEZQn|J5lbI(2J&i!@v?FWGSxHAOSJP2Qko z2bIu5yn%I5%U0+HOZ58 z6=F+vPT8>oo$C1fdoa&V6tCfWq!`|W{#$IOK*tM@At13~0^LZUW%4Nzv>>lpLL)kc TWzjJh9piUA?PfyxZyNprK2)c| literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/Source.class b/JLayer1.0.1/classes/javazoom/jl/decoder/Source.class new file mode 100644 index 0000000000000000000000000000000000000000..256d1a9926f46d9ef90672bcfecbfe0f05700454 GIT binary patch literal 324 zcmX|-TTa6;6h!B?X##~pp*#dDNWLt#P*l+rlt`3^1Ruyvtdi8kC~*OGX?(B%76sf! z5&jv?nepTL`{(luz!{D`9C$b+>|Bkai<|M&ZFCvM_Yr|6gx8$(1oLBG)2SiAhx{re;|td_aF43N4Gdh-bM literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/SynthesisFilter.class b/JLayer1.0.1/classes/javazoom/jl/decoder/SynthesisFilter.class new file mode 100644 index 0000000000000000000000000000000000000000..74e63d299217d7d7a7885d49c526903e24040581 GIT binary patch literal 15349 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 Y^-|Hlt9qG-2mHOO=2dvOUv|0qZ`clYd;kCd literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/au2lin.ser b/JLayer1.0.1/classes/javazoom/jl/decoder/au2lin.ser new file mode 100644 index 0000000000000000000000000000000000000000..0b20bc8bbd97303c0e82602289279017a3d51517 GIT binary patch literal 539 zcmV+$0_6Ry?EnRJasUEbQ}2T=2IXC_`T_s|cyIs!0RVykh6IWTjtr6!mKB;Ao*kkg zrY5Q?t}e1Nwl}&vzCXc2!$ieL$4SXc%T3Ks&r#7+(^b`2*IL}_?=j-U~>Fw(7>+kIF?eXsO@AUAr@ipgn^*Qyr_B!^v z_dEBz_&oTX_}%#(`Cj>+`QG{-`d|8=`rrE>`(XQ^`{4W_{9*i&{IUGe{PFz}{WASh z{c`=1{j&Yi{qp`2{xkkl{&W6|{+s@*{=5Fm{@ecR{`>z6{~Z4;|2+Rp|6KoU|9t<5 z|B(Nf|DgY<|FHkK|G@vq|Iq)~|KR`V|M36#004dfdHi+warABPY3pU@VdGujS=v?B zQPNG$Ny$aULBT%0JiI!&IJY*nG_x|XFt0AHEUPN0D5fT)B%&gqAf6u_9vdAR92pxJ z8W$NB7!?;3784Z`6cG~;5)Tm#5DX7Y4$BTp4ayBl49N^g3&;yc3dagY3C0OU2*n6Q z2gCa0Hgqv0E7T|0B`_k d0AK)E08ju(06+jZ05AY303ZMu01yBO001A}1w;S< literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/huffcodetab.class b/JLayer1.0.1/classes/javazoom/jl/decoder/huffcodetab.class new file mode 100644 index 0000000000000000000000000000000000000000..330d49878eb208c6a002a99216b0fb91237f4e03 GIT binary patch literal 49460 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 Zwe!8w?3Y<-szwdh7pyb~tT6cRe*g_r(2D>7 literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/decoder/l3reorder.ser b/JLayer1.0.1/classes/javazoom/jl/decoder/l3reorder.ser new file mode 100644 index 0000000000000000000000000000000000000000..da216fcf469620b74fadec2ab33eb91cc99572d5 GIT binary patch literal 13925 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�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 Sg;}_TEfbnvLG~-#@%am{$*L^? literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/player/AudioDeviceFactory.class b/JLayer1.0.1/classes/javazoom/jl/player/AudioDeviceFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..bf7576577ef6aa636e3a3073e0064818e4741719 GIT binary patch literal 783 zcmah{T~E|N6g`*i?m(%+DhMlz3%FPW)0p_QYfK12f^L=v6W_;n+;meqq#aQFL%zZb z8XkymCj2PEono*Ofj-Qgk8{txJ?EaD9iISr3Ezdlgo{Z$a505xyK4wM6qpfsM5w)v z)7ZQrRQ#on1ZPc0ick+TC5>9$jbi;)?ZqMA&HGE;f!vedwB8N|NwAa1eU$|zOo!mE ze+|`+iFKL_JSL3BX>Md{VrC<}_X~y~k!e3zOJtsRwTx8ODP4asS)BGex7HGv6?h`h z^e~JOfjJNJSP*#Xp@jtxi+Dzuy}4mR>t?`)42{nA3F8)b(f8J;feH;_v78#IkcG>F zcMR)VT`qMXH2>xn|J>7NL+_^1{~?=6qWUsf4MUaZ*FY{cWt~fqu`7iL;j-pWr5wVm&9msgHZX*&() a2u{1&sQyB=_u{~E7F@$zx{iCe51a!CYtSVC literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/player/FactoryRegistry.class b/JLayer1.0.1/classes/javazoom/jl/player/FactoryRegistry.class new file mode 100644 index 0000000000000000000000000000000000000000..f32bdde250ad5efdf0d9afde3eb973e66ffedab2 GIT binary patch literal 2069 zcma)7Yf~Fl7=8|HvSHbz+|m+SYFZ1D3yoI6N)V+$Z86XbNX2?vl0#S~+0E>3u<2+2 zM8Eoluk{v28C%EB$c+C&e~9%xyPL2eGi7J?oZa_4@BMQA`uEpo0N#SGAb|-PlL|U8 z(SC3?;Ywj!+tD7IW;M56$<-=agIl?q zTG27B#(iGaZO3Zl8M-!IlFn_0xXY5OJ9;H|OS88eZKJ{o6Q0%$-I-zN980Y+NONY1 z6vXU??eJ<#7Q^UR>U264tyJE=A&(Tm(i=7s8Bi&xE^7HPFnBRd8> z0lA81lyh?x&9+@=^azw#ix$@$9uUlM`DBX&81i0OcvR#yM>h=$(Lk9yo4L`T$`KDH{9Ll5oO&2R}tW{jW2t&Wf;jx6MxQy3TByouxcy*3d zyp0hV_f@Q5RmCS*Q}FqhA$5h^WLrBP4R>IAzUEJBYr?{$+KGN0o0hsW=esJpyE75#Hs4y{(>Mu}nk6&y!0MWuWM z?;YlYHXX-D9MdC-F8e=_B*udlv?Nla`d#h0>eB<>t!`Q7H|}(C2a2sfrbedea+?Cq zE4<1Lhng+X(&K#x-d(oF9dX4rj&_Klqt)ujJ0iE;(^rZK|();LG-$UomkiI7xkir`n^O2(@ zOFTnAAasEKeS`@r|A-L%HxZ%rse8_dEA8_Pk#xZoOaBBZ(?l1&$^%a}Lk3wNca~5B zr}((;HfFpnE8%0JEm=(*!l)7HSU6NCN5iyhtdMR(UCJKd;y$A5`-qXfXNcC**V{y2 z6a9M_c+QqPC#B2*l5r{f>^mf~ap_uq~!#t%<>z;U}0J{tbx&srP6@ zLf2{Fp1cZ~l4WM2$E literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/player/JavaSoundAudioDevice.class b/JLayer1.0.1/classes/javazoom/jl/player/JavaSoundAudioDevice.class new file mode 100644 index 0000000000000000000000000000000000000000..0cf72b05027077d76a8985106c5c7c4acb50d495 GIT binary patch literal 3179 zcmah~`F9gl6#iZ_$)xE}y8u$!+JY=;QjMsfQY=tPHJFOf0=9LVCewCmGE-+J(BiIG zS5Vyd1(&+uf=5%a9ME6%9RC6T1^){5-kC|8Vz4JC_szU_x9{HjzWL+tpU(r>gzqD` z0fUv;f*}@nvA8=z;vO0IMsOcg7Q+#Qkml`-j1d{55maG}-*pz_EbeEKWs!@(fLR3v z6D%H(Vac#%I5P5K9FCv?N7&&cizyaILpv_)pnO1X6+FmJ9%At@zdpiGkMh%FEFKTK ziU|BA^_=boA5O4%g2j_89+Yt`f&>P`c#79)7EiNyhGRb~<2f163xsSlZ>2SXb*XXn zusWHbcO#Rq)!al@%Ov{T({9yKQ@Wvb2n0rQj=-9-$~*HJ-Rv=~oa&IKJUr!SUHK7# zilHtFv`sg3r;|KH+YSmyyUYwlt+q9%#EjC2F6o-ht4A-gyE59gq@h49nR$>HPSO}L zDHCr|l7^vKyRxcnYqr4pOZY36VjWu%O39qi41vh*$+R}%=%zuoVcttp0R@z_rKyhQ z#T2N|>DjDqYiZNS*!^Y~RmhFCWa`Pbq(EglYucLUxbldlJN~mA9qLOaxhx9dW2ZYU zOPvx3Mw4w^`zpr`!}b&tnzY-eKB0gK)b<5hcpcQP7F)3U0(r3bvv{ z!8Y8i-~}8PXel={CH<6fLcxo;Q^89tI&o6LE_BOynP#Y*?V|DutSzUrcqZBFD+*r4 zYYKLvOTlfN?CW?#!EW3t<4px`;T;7@K6@A21y-}uL{>FM6Z`Xqqvy2w<_WA^IHVD| zUmewUTb5}Fw3kbTr|5t|?)0oWoGtaUfz^+iW-c+FO=PIy8O=)Up}mwkrCB8bThgjw zm`zMT4rmjf-mqTi?0-%#@C#{ zHv$_=0Zn8Xg^P!}VPxEvd%pap6`}i@B??`tO&32x)7I^kg~rIgY(=ADy?h0_W{suM zFFF>eBWHW_&P3knv9t&BnvtgA=ezE0?i!;KYgxXT(Vk>-aFDM`6MMXv?uz3lu-W4w zZ%kZP=veZSvfGeu?{yi0Xl{^5koe7em!fXiOW&BjDcjL%Oprbq;^0~)A zUd0bI0gM%{82sD?Qp!v=S zth&@W*3bv~2Ks^rP{FiHPZi9p?n>lJ>tzsh?Y5KLL2v8mT+q5IHVY9GKca#~AXZz0 zbKxH$ouM;8V*c|j>d2yk_Cm2ZDHhL(dj0dw2)pNPu^$ll9j&nff~nXXLId#vr+7KKdQib7&Z-TTN&hFPw4Pl)$xE zNzoG2u*==G6RRk#g`@>~al2oe4SqhWo2Ch96aAZ~$4Oo>JwASXIalQaB%NP!$C~g%C;Mmq`Lki(>A@wiZzy6HID|X>_*`0^ z?A3v7jPy6u@p2X$=?Wv7duCgsS6YFA`SG~RpY~hb39pOQ)JX1Z7Z9%vzjv-O6^jSr z=L=}3LS9Axt7p(c6WuT{hs3}vuBqEpz_rxA>k7Dj7Mp1#xKUBWX(Sepz%BI7cdrT> MdQgeC@hz|a0%IKtq5uE@ literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/player/JavaSoundAudioDeviceFactory.class b/JLayer1.0.1/classes/javazoom/jl/player/JavaSoundAudioDeviceFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..c0280b03afbb92cf67f36893bc39338b0c1b4318 GIT binary patch literal 1557 zcmah}Yg5xu5IvXHriAclf%5P{0eJ;z#kYWHDMbq@ID^9seqlnJsi`69gcQY};;+CN zEi*DBe)dN>?oC=6q~LVA_vYTSXU}eS^ZU<_p8)3YMnpd*TG59|k<1h~vVds;GXiEs z2$%>X!Pg`=_qdr85yE`|4@5k~BN31BB#fur^O=D8Fc$dzqKIxh7qBGY1w+Wu4jiq( zz}_)LRx;b!bY?fLq_(zpH&VF_LsTiLhicML&0=!Pv30Y!z|fwy%mYU?oo&^qXvDIp zo4T{a5SX0WW(cOO0-Z+kwx&8-s#4Ic741;Z)7i-6luP*8vi6fDBUv`oBh60wFhnnA zKIOHtqf-!u-b*am{j$L@-JEHS)NWZ7vv85JljrF>l5ht@5(Y3RVVv*oVvM1?k?Xkx zhH-vc7hKTtl$@R9aTKoI2kdLOd!<^g=mvoqMk}VeXJ~Q9ihJqAxxcG3UT{k@AD8eF zDQ=b}q_M&kW*A}(PDM9As6{Pf+mM4D!LSTIvS}W`U~B; vnd2N65bc>cLGPJ=PtM_50KN|Y6M()cR0S`?7=`2+iaaBQ5{P+KXvo1|VMdfN literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/player/NullAudioDevice.class b/JLayer1.0.1/classes/javazoom/jl/player/NullAudioDevice.class new file mode 100644 index 0000000000000000000000000000000000000000..b471b19635109d789ef39a2249af9763f432f1ff GIT binary patch literal 215 zcmX^0Z`VEs1_nb09xeuE22OScE_McPMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvG9r?)21> zfc)ajlFa-(u#_hc0}BHyBZE>_Vp(EUetxcgR*rr_PGV(hk-lGPPL5+~N@l)GYFTD7 zP&YP3ND7=1i&GgC8JK|100AZjptTIFK#~o}69m$XK$=x+I|JiJkUWsf&cFec=7UNz KF|Ps3F#rHX1S+)v literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/player/Player.class b/JLayer1.0.1/classes/javazoom/jl/player/Player.class new file mode 100644 index 0000000000000000000000000000000000000000..ffc7e73271b5490c5376552fde6f4624a920228f GIT binary patch literal 2222 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 literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/player/advanced/jlap$1.class b/JLayer1.0.1/classes/javazoom/jl/player/advanced/jlap$1.class new file mode 100644 index 0000000000000000000000000000000000000000..2a79ecf79c1286687dfa337144e445e00c15be7d GIT binary patch literal 872 zcmb7CTWb?R6#gcgW}EG5w>I%oTTO4e*;LmcK1Bp6eOO39tW@-E%ns?s&Fr!}3F;s6 zxsbG=pzr=D@k|mdB1C+cbIzPOxB0&FVC<0@8dI9jZsYQnS8zyZU${*51V+4GM+bVaJ7geq=adS4EuiU#8Mqm2i6 zsEhavJBy&`$2{F@GJwGjq!ig<%=29249;csSErfa1V-&&l?XYFbtiqykk0_~qr?wn zI#kDsiVRvoun|We zq*dHm=NalWJW)oQQl0;5%EjDUKS7OlbcGhza2!n}K$^ImYNC@~3Ut5A8wfO(q}6uhko4DSNPGxBRbDyYt*pTL;rZ+l}39#iZX#yOT=e}>ck3iD0l9LpCd ee?OxH>Pan1qzkxCvWOeFiG8vxdbLOc%fA55oZJBb literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/player/advanced/jlap$InfoListener.class b/JLayer1.0.1/classes/javazoom/jl/player/advanced/jlap$InfoListener.class new file mode 100644 index 0000000000000000000000000000000000000000..4a9c30dc6d468b1b18c0c1496d8ff8fb2a8c395b GIT binary patch literal 1056 zcma)5YflqF6g@*L+pa6EJOmVU3q^NZ%7Sk#@&O`A6F!iTnD}w%4rOs)*&Q13Uuj}7 zn)n0!QN}wh#cEA4o6OGLJ?Gqe&z<@4^Xqp28`#QY0&_YFn9t)j?r2!hk;Qxti|Tz> z$32*8S5nK8j%Ac{SkVc4UxTHg$}ldEy|lc}u(Wr=+x$Zm1sDT@p;&C4rJnmt?g6KcSXW5rxeY!m)<-|qJS122-Cni zHZ(jm@Cc7p@WjAVJk#*pzze+WGn-Km`+`b0xx8f7v8mw|L+vW-%8l?S+VfH=LRE}0 z6w>D%pQouv8CFNB^^N&0ma)3_40L`*c>;z^bSfEUx`T4O$k``DB-tW(phn5#ScEi* zT5l4AuGQ@xY1l|2+W%8tcWw;1mXN#3W~#=r8w?9pW0ZDIM!mT)Ok2Z1%0AWY^UrP= zv{?1#ht%%Bx={yFy!XhBEaj)j9Myw5>nPFHD$p%s#iBZAw9A0eVVk0Lnxb16qX*C{ z)z4s+bBukYi13)9e?5#%9EDl@gv>W&-=5>zuPm$cditu#P0 W{-$NV;6|TXp&UBpoWKLvV7~wieG)kU literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/player/advanced/jlap.class b/JLayer1.0.1/classes/javazoom/jl/player/advanced/jlap.class new file mode 100644 index 0000000000000000000000000000000000000000..bb10b2875bd9c62495d5cbde774f786cd05b71ec GIT binary patch literal 1970 zcmcIkU3VH)6x}yWGBBCehBQf$7->E#fxwvHXNc7%wv`Gd8rzEXYXTPphk?aRYU_(X z#mBzdK0ubN)gR!GGM+O)m}rwexP&!x=iYnv+2`JK_WAR#Kb`|vM@7R`WK_JRVGJ35 zy{+LLyvtwjsdzs`lT8gOvKqGVfr{%ICh?()k2GAs4K~|mo1Gv&4&r7Iw*tQ&A0PAj zZ55xW$Z43v9SyVilo#_V3L2t3iQ+RAyBZd-$FI*-d?BFc>`F6Vb6jc5wl}45$1)v9 zIsy}0HM{0s7YM{x?+GY7&9bDSVb*Mc+4zHe-F#>omT6aweYah+t69&iWtoo!X5ug2 z)^0v3$(CDd+K!5S6<-R3oFAJ%-*wC?c~==-Xk`TI0|&LHajRy@tmp2RX0u_`ErYFO z+c3)yO}iw^#vaWN%+gQ8vt(D#HNP>yF-*3z0@gpsa=CNy|CP=e(dF#cp-a~%%|`Zr zW!15a6@eHh?W}98TV_i~8Y?R9>bQsdI#!Vom>y;NBz-!*LQ%)pc%b4N9pAED>SfNC z{RPJneMeR2IUl5%*AhAmys6`R6seB9!q|*aXtAvd6@qOxB-JDYvN4&irem~6M>;uI zx^AWW<&hqi2Q8VcnAI$q7JEoHS{bHT7l;nIw+|~7*_LHrIt1p1yIg?29S-sbewplM zLm>`j)JXe0h#bgIc;0WVSFrQ2WHaeJif^gv(f@>XwI?#CUDY=Ls zh9zQTjgWjP2IgEEIGyWZvPisop@$2_WEU6Lj_}I;eiTVEoFKp&QUs<(Fo20pAQ1`l5p+0^!TaBh36x6JW@YB90J?aA3ZOaRLCdJKesguU8BlyUQ$N<>L@@LCTG#fTD}@8b0iVi9HJMxo=Z U(X&LbFu9qeXOZR$GzWrz1I)tym;e9( literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/classes/javazoom/jl/player/jlp.class b/JLayer1.0.1/classes/javazoom/jl/player/jlp.class new file mode 100644 index 0000000000000000000000000000000000000000..d9b2006156826fc817ee72d7eb34ee31eb273610 GIT binary patch literal 2665 zcmbVN+jA3T6#p$**v+!E5Lzy_YA6!ZBuxs4VwFFGkS6KF{imZn7xWF&3v4@K)US}t7 zsCZL_q2iK?oPxZDotRW1m`|xFFrQ|tB9j>=mlc>AdQf6Q8I=`SDk>TxxT3(;(2FV) zM?p5<;07W7bHSM!ArhaO`5aFeqVzElQR{ zr_y-|a>*!`C2Wgccv!Xf9GxGv@}%09vxVV^k#f~B$~hABt!d!;xMo?U)Qp*`n8v)Y z>8Zj&)5UVpIV2$vWw)KtM}%W7s-a@oRdLuZR3DWZr5>zKTXSctMuF0iIhX|P_|=@K zI7O>WhFc24IeR8EQm)h-Dqa{R3EQK+jle}KIm@RV2J)Z5V z`g}TrItD=GD260#ZMFVERtnzM@eZylxS``+yr<)Re4yh)d_;A!{wm+pI~{2Z>39)` zb?nD8Iu77j9WQ`dDfiWEQ^ChNKEbCtj0&rN{($ab2Jx?*=zaB{4amgR?W#7Rj1{6;9!4$KizMu>5X|mQY)HyVM|cCCR%{7j?eK0 z&0#W`)bS<0(s3NaI$mOO0wWT3u5l6L?kw|NeBHcRo}kkYZdO9XZlSALJg70*Ej~{gW$n|Y@J-L{0`qGTZ(Z2aa6Z2I^(53{0Oa-|f|##m{-Er%hwpY(;9(=@SoZuGQ7Bd& zn^3Z?>fUin5Lp}9RvA)5wlqEizEZG@K3)6hd%BMPgir1hK@{>9iw+4)8qOC@j5oh>8>RxcgSuX+7WWCf()#lr?49f=vaoD zT|_VwkJX{w!g?ta|CJ(eE`*t$b{D-7+MzwRh>bDn9`sn?9yZ-^6(wG<)oxcR#^QCf zHMC`hT~9mYC9xqECzs80LTT@OlG5gKPXvbI_vPE@h{Xf@$df$ehF?H`{Qmmeh>$eY zUdQHJ(5Q+n3)m5h%buc4c`iU}4`ZLOn&d8fy>d3?LacMxxu zOkXE5u>GLoKsit + + + + + +All Classes + + + + + + + + + + +All Classes +
+ + + + + +
AdvancedPlayer +
+AudioDevice +
+AudioDeviceBase +
+AudioDeviceFactory +
+Bitstream +
+BitstreamErrors +
+BitstreamException +
+Control +
+Converter +
+Converter.PrintWriterProgressListener +
+Converter.ProgressListener +
+Crc16 +
+Decoder +
+Decoder.Params +
+DecoderErrors +
+DecoderException +
+Equalizer +
+Equalizer.EQFunction +
+FactoryRegistry +
+FrameDecoder +
+Header +
+InputStreamSource +
+JavaLayerError +
+JavaLayerErrors +
+JavaLayerException +
+JavaLayerHook +
+JavaLayerUtils +
+JavaSoundAudioDevice +
+JavaSoundAudioDeviceFactory +
+jlap +
+jlc +
+jlp +
+Manager +
+NullAudioDevice +
+Obuffer +
+OutputChannels +
+PlaybackEvent +
+PlaybackListener +
+Player +
+PlayerApplet +
+RiffFile +
+SampleBuffer +
+Source +
+WaveFile +
+WaveFileObuffer +
+
+ + + diff --git a/JLayer1.0.1/doc/allclasses-noframe.html b/JLayer1.0.1/doc/allclasses-noframe.html new file mode 100644 index 0000000..92bc889 --- /dev/null +++ b/JLayer1.0.1/doc/allclasses-noframe.html @@ -0,0 +1,118 @@ + + + + + + +All Classes + + + + + + + + + + +All Classes +
+ + + + + +
AdvancedPlayer +
+AudioDevice +
+AudioDeviceBase +
+AudioDeviceFactory +
+Bitstream +
+BitstreamErrors +
+BitstreamException +
+Control +
+Converter +
+Converter.PrintWriterProgressListener +
+Converter.ProgressListener +
+Crc16 +
+Decoder +
+Decoder.Params +
+DecoderErrors +
+DecoderException +
+Equalizer +
+Equalizer.EQFunction +
+FactoryRegistry +
+FrameDecoder +
+Header +
+InputStreamSource +
+JavaLayerError +
+JavaLayerErrors +
+JavaLayerException +
+JavaLayerHook +
+JavaLayerUtils +
+JavaSoundAudioDevice +
+JavaSoundAudioDeviceFactory +
+jlap +
+jlc +
+jlp +
+Manager +
+NullAudioDevice +
+Obuffer +
+OutputChannels +
+PlaybackEvent +
+PlaybackListener +
+Player +
+PlayerApplet +
+RiffFile +
+SampleBuffer +
+Source +
+WaveFile +
+WaveFileObuffer +
+
+ + + diff --git a/JLayer1.0.1/doc/constant-values.html b/JLayer1.0.1/doc/constant-values.html new file mode 100644 index 0000000..3ba3e67 --- /dev/null +++ b/JLayer1.0.1/doc/constant-values.html @@ -0,0 +1,600 @@ + + + + + + +Constant Field Values + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ +
+ + + +
+
+

+Constant Field Values

+
+
+Contents + + + + + + +
+javazoom.jl.*
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.converter.Converter.PrintWriterProgressListener
+public static final intDEBUG_DETAIL7
+public static final intEXPERT_DETAIL1
+public static final intMAX_DETAIL10
+public static final intNO_DETAIL0
+public static final intVERBOSE_DETAIL2
+ +

+ +

+ + + + + + + + + + + + + + + + + +
javazoom.jl.converter.Converter.ProgressListener
+public static final intUPDATE_CONVERT_COMPLETE2
+public static final intUPDATE_FRAME_COUNT1
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.converter.RiffFile
+public static final intDDC_FAILURE1
+public static final intDDC_FILE_ERROR3
+public static final intDDC_INVALID_CALL4
+public static final intDDC_INVALID_FILE6
+public static final intDDC_OUT_OF_MEMORY2
+public static final intDDC_SUCCESS0
+public static final intDDC_USER_ABORT5
+public static final intRFM_READ2
+public static final intRFM_UNKNOWN0
+public static final intRFM_WRITE1
+ +

+ +

+ + + + + + + + + + + + +
javazoom.jl.converter.WaveFile
+public static final intMAX_WAVE_CHANNELS2
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.BitstreamErrors
+public static final intBITSTREAM_LAST511
+public static final intINVALIDFRAME261
+public static final intSTREAM_EOF260
+public static final intSTREAM_ERROR258
+public static final intUNEXPECTED_EOF259
+public static final intUNKNOWN_ERROR256
+public static final intUNKNOWN_SAMPLE_RATE257
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.DecoderErrors
+public static final intILLEGAL_SUBBAND_ALLOCATION514
+public static final intUNKNOWN_ERROR512
+public static final intUNSUPPORTED_LAYER513
+ +

+ +

+ + + + + + + + + + + + +
javazoom.jl.decoder.Equalizer
+public static final floatBAND_NOT_PRESENT-1f/0f
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.Header
+public static final intDUAL_CHANNEL2
+public static final intFOURTYEIGHT1
+public static final intFOURTYFOUR_POINT_ONE0
+public static final intJOINT_STEREO1
+public static final intMPEG11
+public static final intMPEG2_LSF0
+public static final intMPEG25_LSF2
+public static final intSINGLE_CHANNEL3
+public static final intSTEREO0
+public static final intTHIRTYTWO2
+ +

+ +

+ + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.JavaLayerErrors
+public static final intBITSTREAM_ERROR256
+public static final intDECODER_ERROR512
+ +

+ +

+ + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.Obuffer
+public static final intMAXCHANNELS2
+public static final intOBUFFERSIZE2304
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.OutputChannels
+public static final intBOTH_CHANNELS0
+public static final intDOWNMIX_CHANNELS3
+public static final intLEFT_CHANNEL1
+public static final intRIGHT_CHANNEL2
+ +

+ +

+ + + + + + + + + + + + +
javazoom.jl.decoder.Source
+public static final longLENGTH_UNKNOWN-1L
+ +

+ +

+ + + + + + + + + + + + +
javazoom.jl.player.PlayerApplet
+public static final java.lang.StringAUDIO_PARAMETER"audioURL"
+ +

+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/deprecated-list.html b/JLayer1.0.1/doc/deprecated-list.html new file mode 100644 index 0000000..a7fed74 --- /dev/null +++ b/JLayer1.0.1/doc/deprecated-list.html @@ -0,0 +1,140 @@ + + + + + + +Deprecated List + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Deprecated API

+
+
+Contents
    +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/help-doc.html b/JLayer1.0.1/doc/help-doc.html new file mode 100644 index 0000000..3df9fcd --- /dev/null +++ b/JLayer1.0.1/doc/help-doc.html @@ -0,0 +1,213 @@ + + + + + + +API Help + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+How This API Document Is Organized

+
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

+Overview

+
+ +

+The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

+

+Package

+
+ +

+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    +
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
+
+

+Class/Interface

+
+ +

+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description +

    +

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary +

    +

  • Field Detail
  • Constructor Detail
  • Method Detail
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+ +

+Annotation Type

+
+ +

+Each annotation type has its own separate page with the following sections:

    +
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
+
+ +

+Enum

+
+ +

+Each enum has its own separate page with the following sections:

    +
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
+
+

+Tree (Class Hierarchy)

+
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    +
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
+
+

+Deprecated API

+
+The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+

+Index

+
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+

+Prev/Next

+These links take you to the next or previous class, interface, package, or related page.

+Frames/No Frames

+These links show and hide the HTML frames. All pages are available with or without frames. +

+

+Serialized Form

+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. +

+

+Constant Field Values

+The Constant Field Values page lists the static final fields and their values. +

+ + +This help file applies to API documentation generated using the standard doclet. + +
+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/index-all.html b/JLayer1.0.1/doc/index-all.html new file mode 100644 index 0000000..1cde02b --- /dev/null +++ b/JLayer1.0.1/doc/index-all.html @@ -0,0 +1,1451 @@ + + + + + + +Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I J L M N O P R S T U V W
+

+A

+
+
add_bits(int, int) - +Method in class javazoom.jl.decoder.Crc16 +
Feed a bitstring to the crc calculation (0 < length <= 32). +
addControl(Control) - +Method in class javazoom.jl.decoder.Manager +
  +
addFactory(AudioDeviceFactory) - +Method in class javazoom.jl.player.FactoryRegistry +
Registers an AudioDeviceFactory instance + with this registry. +
AdvancedPlayer - Class in javazoom.jl.player.advanced
a hybrid of javazoom.jl.player.Player tweeked to include play(startFrame, endFrame) + hopefully this will be included in the api
AdvancedPlayer(InputStream) - +Constructor for class javazoom.jl.player.advanced.AdvancedPlayer +
Creates a new Player instance. +
AdvancedPlayer(InputStream, AudioDevice) - +Constructor for class javazoom.jl.player.advanced.AdvancedPlayer +
  +
append(int, short) - +Method in class javazoom.jl.converter.WaveFileObuffer +
Takes a 16 Bit PCM sample. +
append(int, short) - +Method in class javazoom.jl.decoder.Obuffer +
Takes a 16 Bit PCM sample. +
append(int, short) - +Method in class javazoom.jl.decoder.SampleBuffer +
Takes a 16 Bit PCM sample. +
appendSamples(int, float[]) - +Method in class javazoom.jl.decoder.Obuffer +
Accepts 32 new PCM samples. +
appendSamples(int, float[]) - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
AUDIO_PARAMETER - +Static variable in class javazoom.jl.player.PlayerApplet +
  +
AudioDevice - Interface in javazoom.jl.player
The AudioDevice interface provides an abstraction for + a device capable of sounding audio samples.
AudioDeviceBase - Class in javazoom.jl.player
The AudioDeviceBase class provides a simple thread-safe + implementation of the AudioDevice interface.
AudioDeviceBase() - +Constructor for class javazoom.jl.player.AudioDeviceBase +
  +
AudioDeviceFactory - Class in javazoom.jl.player
An AudioDeviceFactory class is responsible for creating + a specific AudioDevice implementation.
AudioDeviceFactory() - +Constructor for class javazoom.jl.player.AudioDeviceFactory +
  +
+
+

+B

+
+
Backpatch(long, RiffFile.RiffChunkHeader, int) - +Method in class javazoom.jl.converter.RiffFile +
Write Data to specified offset. +
Backpatch(long, byte[], int) - +Method in class javazoom.jl.converter.RiffFile +
  +
BAND_NOT_PRESENT - +Static variable in class javazoom.jl.decoder.Equalizer +
Equalizer setting to denote that a given band will not be + present in the output signal. +
bitrate() - +Method in class javazoom.jl.decoder.Header +
Return Bitrate. +
bitrate_index() - +Method in class javazoom.jl.decoder.Header +
Returns bitrate index. +
bitrate_instant() - +Method in class javazoom.jl.decoder.Header +
Return Instant Bitrate. +
bitrate_str - +Static variable in class javazoom.jl.decoder.Header +
  +
bitrate_string() - +Method in class javazoom.jl.decoder.Header +
Return Bitrate. +
bitrates - +Static variable in class javazoom.jl.decoder.Header +
  +
BitsPerSample() - +Method in class javazoom.jl.converter.WaveFile +
  +
Bitstream - Class in javazoom.jl.decoder
The Bistream class is responsible for parsing + an MPEG audio bitstream.
Bitstream(InputStream) - +Constructor for class javazoom.jl.decoder.Bitstream +
Construct a IBitstream that reads data from a + given InputStream. +
BITSTREAM_ERROR - +Static variable in interface javazoom.jl.decoder.JavaLayerErrors +
The first bitstream error code. +
BITSTREAM_LAST - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
  +
BitstreamErrors - Interface in javazoom.jl.decoder
This interface describes all error codes that can be thrown + in BistreamExceptions.
BitstreamException - Exception in javazoom.jl.decoder
Instances of BitstreamException are thrown + when operations on a Bitstream fail.
BitstreamException(String, Throwable) - +Constructor for exception javazoom.jl.decoder.BitstreamException +
  +
BitstreamException(int, Throwable) - +Constructor for exception javazoom.jl.decoder.BitstreamException +
  +
BOTH - +Static variable in class javazoom.jl.decoder.OutputChannels +
  +
BOTH_CHANNELS - +Static variable in class javazoom.jl.decoder.OutputChannels +
Flag to indicate output should include both channels. +
+
+

+C

+
+
calculate_framesize() - +Method in class javazoom.jl.decoder.Header +
Calculate Frame size. +
chan - +Variable in class javazoom.jl.converter.WaveFile.WaveFileSample +
  +
checksum() - +Method in class javazoom.jl.decoder.Crc16 +
Return the calculated checksum. +
checksum - +Variable in class javazoom.jl.decoder.Header +
  +
checksum_ok() - +Method in class javazoom.jl.decoder.Header +
Returns Checksum flag. +
checksums() - +Method in class javazoom.jl.decoder.Header +
Returns Protection bit. +
clear_buffer() - +Method in class javazoom.jl.converter.WaveFileObuffer +
  +
clear_buffer() - +Method in class javazoom.jl.decoder.Obuffer +
Clears all data in the buffer (for seeking). +
clear_buffer() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
clone() - +Method in class javazoom.jl.decoder.Decoder.Params +
  +
Close() - +Method in class javazoom.jl.converter.RiffFile +
Close Riff File. +
Close() - +Method in class javazoom.jl.converter.WaveFile +
  +
close() - +Method in class javazoom.jl.converter.WaveFileObuffer +
  +
close() - +Method in class javazoom.jl.decoder.Bitstream +
Close the Bitstream. +
close() - +Method in class javazoom.jl.decoder.Obuffer +
  +
close() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
close() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
Cloases this player. +
close() - +Method in interface javazoom.jl.player.AudioDevice +
Closes this audio device. +
close() - +Method in class javazoom.jl.player.AudioDeviceBase +
Closes this audio device. +
close() - +Method in class javazoom.jl.player.Player +
Cloases this player. +
closeFrame() - +Method in class javazoom.jl.decoder.Bitstream +
Close MP3 frame. +
closeImpl() - +Method in class javazoom.jl.player.AudioDeviceBase +
Template method to provide the implementation for + closing the audio device. +
closeImpl() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
Control - Interface in javazoom.jl.decoder
Work in progress.
convert(String, String) - +Method in class javazoom.jl.converter.Converter +
  +
convert(String, String, Converter.ProgressListener) - +Method in class javazoom.jl.converter.Converter +
  +
convert(String, String, Converter.ProgressListener, Decoder.Params) - +Method in class javazoom.jl.converter.Converter +
  +
convert(InputStream, String, Converter.ProgressListener, Decoder.Params) - +Method in class javazoom.jl.converter.Converter +
  +
Converter - Class in javazoom.jl.converter
The Converter class implements the conversion of + an MPEG audio file to a .WAV file.
Converter() - +Constructor for class javazoom.jl.converter.Converter +
Creates a new converter instance. +
Converter.PrintWriterProgressListener - Class in javazoom.jl.converter
Implementation of ProgressListener that writes + notification text to a PrintWriter.
Converter.PrintWriterProgressListener(PrintWriter, int) - +Constructor for class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
Converter.ProgressListener - Interface in javazoom.jl.converter
This interface is used by the Converter to provide + notification of tasks being carried out by the converter, + and to provide new information as it becomes available.
converterException(Throwable) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
converterException(Throwable) - +Method in interface javazoom.jl.converter.Converter.ProgressListener +
Called when an exception is thrown during while converting + a frame. +
converterUpdate(int, int, int) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
converterUpdate(int, int, int) - +Method in interface javazoom.jl.converter.Converter.ProgressListener +
Notifies the listener that new information is available. +
copyright() - +Method in class javazoom.jl.decoder.Header +
Returns Copyright. +
countFrames(InputStream) - +Method in class javazoom.jl.converter.Converter +
  +
Crc16 - Class in javazoom.jl.decoder
16-Bit CRC checksum
Crc16() - +Constructor for class javazoom.jl.decoder.Crc16 +
Dummy Constructor +
createAudioDevice() - +Method in class javazoom.jl.player.AudioDeviceFactory +
Creates a new AudioDevice. +
createAudioDevice() - +Method in class javazoom.jl.player.FactoryRegistry +
  +
createAudioDevice() - +Method in class javazoom.jl.player.JavaSoundAudioDeviceFactory +
  +
createAudioDeviceImpl() - +Method in class javazoom.jl.player.JavaSoundAudioDeviceFactory +
  +
createInstance(String[]) - +Static method in class javazoom.jl.player.jlp +
  +
createPlayerThread() - +Method in class javazoom.jl.player.PlayerApplet +
Creates a new thread used to run the audio player. +
createSource() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
CurrentFileMode() - +Method in class javazoom.jl.converter.RiffFile +
Return File Mode. +
CurrentFilePosition() - +Method in class javazoom.jl.converter.RiffFile +
Return File Position. +
CurrentFilePosition() - +Method in class javazoom.jl.converter.WaveFile +
  +
+
+

+D

+
+
DDC_FAILURE - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_FILE_ERROR - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_INVALID_CALL - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_INVALID_FILE - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_OUT_OF_MEMORY - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_SUCCESS - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_USER_ABORT - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DEBUG_DETAIL - +Static variable in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
Debug detail. +
decodedFrame(int, Header, Obuffer) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
decodedFrame(int, Header, Obuffer) - +Method in interface javazoom.jl.converter.Converter.ProgressListener +
This method is called after a frame has been decoded. +
decodeFrame(Header, Bitstream) - +Method in class javazoom.jl.decoder.Decoder +
Decodes one frame from an MPEG audio bitstream. +
decodeFrame() - +Method in interface javazoom.jl.decoder.FrameDecoder +
Decodes one frame of MPEG audio. +
decodeFrame() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
Decodes a single frame. +
decodeFrame() - +Method in class javazoom.jl.player.Player +
Decodes a single frame. +
Decoder - Class in javazoom.jl.decoder
The Decoder class encapsulates the details of + decoding an MPEG audio frame.
Decoder() - +Constructor for class javazoom.jl.decoder.Decoder +
Creates a new Decoder instance with default + parameters. +
Decoder(Decoder.Params) - +Constructor for class javazoom.jl.decoder.Decoder +
Creates a new Decoder instance with default + parameters. +
Decoder.Params - Class in javazoom.jl.decoder
The Params class presents the customizable + aspects of the decoder.
Decoder.Params() - +Constructor for class javazoom.jl.decoder.Decoder.Params +
  +
DECODER_ERROR - +Static variable in interface javazoom.jl.decoder.JavaLayerErrors +
The first decoder error code. +
DecoderErrors - Interface in javazoom.jl.decoder
This interface provides constants describing the error + codes used by the Decoder to indicate errors.
DecoderException - Exception in javazoom.jl.decoder
The DecoderException represents the class of + errors that can occur when decoding MPEG audio.
DecoderException(String, Throwable) - +Constructor for exception javazoom.jl.decoder.DecoderException +
  +
DecoderException(int, Throwable) - +Constructor for exception javazoom.jl.decoder.DecoderException +
  +
deserialize(InputStream, Class) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
Deserializes the object contained in the given input stream. +
deserialize(InputStream) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
Deserializes an object from the given InputStream. +
deserializeArray(InputStream, Class, int) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
Deserializes an array from a given InputStream. +
deserializeArrayResource(String, Class, int) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
  +
destroy() - +Method in class javazoom.jl.player.PlayerApplet +
  +
DOWNMIX - +Static variable in class javazoom.jl.decoder.OutputChannels +
  +
DOWNMIX_CHANNELS - +Static variable in class javazoom.jl.decoder.OutputChannels +
Flag to indicate output is mono. +
DUAL_CHANNEL - +Static variable in class javazoom.jl.decoder.Header +
  +
+
+

+E

+
+
Equalizer - Class in javazoom.jl.decoder
The Equalizer class can be used to specify + equalization settings for the MPEG audio decoder.
Equalizer() - +Constructor for class javazoom.jl.decoder.Equalizer +
Creates a new Equalizer instance. +
Equalizer(float[]) - +Constructor for class javazoom.jl.decoder.Equalizer +
  +
Equalizer(Equalizer.EQFunction) - +Constructor for class javazoom.jl.decoder.Equalizer +
  +
Equalizer.EQFunction - Class in javazoom.jl.decoder
 
Equalizer.EQFunction() - +Constructor for class javazoom.jl.decoder.Equalizer.EQFunction +
  +
equals(Object) - +Method in class javazoom.jl.decoder.OutputChannels +
  +
Expect(String, int) - +Method in class javazoom.jl.converter.RiffFile +
Expect NumBytes data. +
EXPERT_DETAIL - +Static variable in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
Level of detail typically expected of expert + users. +
+
+

+F

+
+
factories - +Variable in class javazoom.jl.player.FactoryRegistry +
  +
FactoryRegistry - Class in javazoom.jl.player
The FactoryRegistry class stores the factories + for all the audio device implementations available in the system.
FactoryRegistry() - +Constructor for class javazoom.jl.player.FactoryRegistry +
  +
file - +Variable in class javazoom.jl.converter.RiffFile +
  +
flush() - +Method in interface javazoom.jl.player.AudioDevice +
Blocks until all audio samples previously written to this audio device have + been heard. +
flush() - +Method in class javazoom.jl.player.AudioDeviceBase +
Waits for any buffered audio samples to be played by the + audio device. +
flushImpl() - +Method in class javazoom.jl.player.AudioDeviceBase +
Template method to provide the implementation for + flushing any buffered audio data. +
flushImpl() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
fmode - +Variable in class javazoom.jl.converter.RiffFile +
  +
FourCC(String) - +Static method in class javazoom.jl.converter.RiffFile +
Fill the header. +
FOURTYEIGHT - +Static variable in class javazoom.jl.decoder.Header +
  +
FOURTYFOUR_POINT_ONE - +Static variable in class javazoom.jl.decoder.Header +
  +
FrameDecoder - Interface in javazoom.jl.decoder
Implementations of FrameDecoder are responsible for decoding + an MPEG audio frame.
framesize - +Variable in class javazoom.jl.decoder.Header +
  +
frequencies - +Static variable in class javazoom.jl.decoder.Header +
  +
frequency() - +Method in class javazoom.jl.decoder.Header +
Returns Frequency. +
fromInt(int) - +Static method in class javazoom.jl.decoder.OutputChannels +
Creates an OutputChannels instance + corresponding to the given channel code. +
+
+

+G

+
+
get_bits(int) - +Method in class javazoom.jl.decoder.Bitstream +
Read bits from buffer into the lower bits of an unsigned int. +
getAudioDevice() - +Method in class javazoom.jl.player.jlp +
  +
getAudioDevice() - +Method in class javazoom.jl.player.PlayerApplet +
Retrieves the AudioDevice instance that will + be used to sound the audio data. +
getAudioFileName() - +Method in class javazoom.jl.player.PlayerApplet +
  +
getAudioFormat() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
getAudioStream() - +Method in class javazoom.jl.player.PlayerApplet +
Retrieves the InputStream that provides the MPEG audio + stream data. +
getAudioURL() - +Method in class javazoom.jl.player.PlayerApplet +
  +
getBand(int) - +Method in class javazoom.jl.decoder.Equalizer.EQFunction +
Returns the setting of a band in the equalizer. +
getBand(int) - +Method in class javazoom.jl.decoder.Equalizer +
Retrieves the eq setting for a given band. +
getBandCount() - +Method in class javazoom.jl.decoder.Equalizer +
Retrieves the number of bands present in this equalizer. +
getBuffer() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
getBufferLength() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
getByteArray(int) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
getChannelCount() - +Method in class javazoom.jl.decoder.OutputChannels +
Retrieves the number of output channels represented + by this channel output type. +
getChannelCount() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
getChannelsOutputCode() - +Method in class javazoom.jl.decoder.OutputChannels +
Retrieves the code representing the desired output channels. +
getDecoder() - +Method in class javazoom.jl.player.AudioDeviceBase +
Retrieves the decoder that provides audio data to this + audio device. +
getDefaultParams() - +Static method in class javazoom.jl.decoder.Decoder +
  +
getErrorCode() - +Method in exception javazoom.jl.decoder.BitstreamException +
  +
getErrorCode() - +Method in exception javazoom.jl.decoder.DecoderException +
  +
getErrorString(int) - +Static method in exception javazoom.jl.decoder.BitstreamException +
  +
getErrorString(int) - +Static method in exception javazoom.jl.decoder.DecoderException +
  +
getException() - +Method in exception javazoom.jl.decoder.JavaLayerException +
  +
getFactoriesPriority() - +Method in class javazoom.jl.player.FactoryRegistry +
  +
getFileName() - +Method in class javazoom.jl.player.PlayerApplet +
  +
getFrame() - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
getHook() - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
  +
getId() - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
getInitialEqualizerSettings() - +Method in class javazoom.jl.decoder.Decoder.Params +
Retrieves the equalizer settings that the decoder's equalizer + will be initialized from. +
getInputStream() - +Method in class javazoom.jl.player.jlp +
Playing file from FileInputStream. +
getOutputBlockSize() - +Method in class javazoom.jl.decoder.Decoder +
Retrieves the maximum number of samples that will be written to + the output buffer when one frame is decoded. +
getOutputChannels() - +Method in class javazoom.jl.decoder.Decoder +
Retrieves the number of channels of PCM samples output by + this decoder. +
getOutputChannels() - +Method in class javazoom.jl.decoder.Decoder.Params +
  +
getOutputFrequency() - +Method in class javazoom.jl.decoder.Decoder +
Retrieves the sample frequency of the PCM samples output + by this decoder. +
getPlayBackListener() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
gets the PlaybackListener +
getPosition() - +Method in interface javazoom.jl.decoder.Control +
Retrieves the current position. +
getPosition() - +Method in interface javazoom.jl.player.AudioDevice +
Retrieves the current playback position in milliseconds. +
getPosition() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
getPosition() - +Method in class javazoom.jl.player.NullAudioDevice +
  +
getPosition() - +Method in class javazoom.jl.player.Player +
Retrieves the position in milliseconds of the current audio + sample being played. +
getRawID3v2() - +Method in class javazoom.jl.decoder.Bitstream +
Return raw ID3v2 frames + header. +
getResourceAsStream(String) - +Method in interface javazoom.jl.decoder.JavaLayerHook +
Retrieves the named resource. +
getResourceAsStream(String) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
Retrieves an InputStream for a named resource. +
getSampleFrequency() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
getSource() - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
getSourceLineInfo() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
getSyncHeader() - +Method in class javazoom.jl.decoder.Header +
Returns synchronized header. +
getURLInputStream() - +Method in class javazoom.jl.player.jlp +
Playing file from URL (Streaming). +
+
+

+H

+
+
hashCode() - +Method in class javazoom.jl.decoder.OutputChannels +
  +
Header - Class in javazoom.jl.decoder
Class for extracting information from a frame header.
header_pos() - +Method in class javazoom.jl.decoder.Bitstream +
Return position of the first audio header. +
+
+

+I

+
+
ILLEGAL_SUBBAND_ALLOCATION - +Static variable in interface javazoom.jl.decoder.DecoderErrors +
Illegal allocation in subband layer. +
init(String) - +Method in class javazoom.jl.player.jlp +
  +
init() - +Method in class javazoom.jl.player.PlayerApplet +
Initializes this applet. +
InputStreamSource - Class in javazoom.jl.decoder
Work In Progress.
InputStreamSource(InputStream) - +Constructor for class javazoom.jl.decoder.InputStreamSource +
  +
instantiate(ClassLoader, String) - +Method in class javazoom.jl.player.AudioDeviceFactory +
Creates an instance of an AudioDevice implementation. +
intensity_stereo_bound() - +Method in class javazoom.jl.decoder.Header +
Returns Intensity Stereo. +
INVALIDFRAME - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
Frame data are missing. +
isComplete() - +Method in class javazoom.jl.player.Player +
Returns the completed status of this player. +
isDetail(int) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
isOpen() - +Method in interface javazoom.jl.player.AudioDevice +
Retrieves the open state of this audio device. +
isOpen() - +Method in class javazoom.jl.player.AudioDeviceBase +
Determines if this audio device is open or not. +
isPlaying() - +Method in interface javazoom.jl.decoder.Control +
  +
isRandomAccess() - +Method in interface javazoom.jl.decoder.Control +
  +
isSeekable() - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
isSeekable() - +Method in interface javazoom.jl.decoder.Source +
  +
isSyncCurrentPosition(int) - +Method in class javazoom.jl.decoder.Bitstream +
Determines if the next 4 bytes of the stream represent a + frame header. +
isSyncMark(int, int, int) - +Method in class javazoom.jl.decoder.Bitstream +
  +
+
+

+J

+
+
JavaLayerError - Error in javazoom.jl.decoder
Work in progress.
JavaLayerError() - +Constructor for error javazoom.jl.decoder.JavaLayerError +
  +
JavaLayerErrors - Interface in javazoom.jl.decoder
Exception erorr codes for components of the JavaLayer API.
JavaLayerException - Exception in javazoom.jl.decoder
The JavaLayerException is the base class for all API-level + exceptions thrown by JavaLayer.
JavaLayerException() - +Constructor for exception javazoom.jl.decoder.JavaLayerException +
  +
JavaLayerException(String) - +Constructor for exception javazoom.jl.decoder.JavaLayerException +
  +
JavaLayerException(String, Throwable) - +Constructor for exception javazoom.jl.decoder.JavaLayerException +
  +
JavaLayerHook - Interface in javazoom.jl.decoder
The JavaLayerHooks class allows developers to change + the way the JavaLayer library uses Resources.
JavaLayerUtils - Class in javazoom.jl.decoder
The JavaLayerUtils class is not strictly part of the JavaLayer API.
JavaLayerUtils() - +Constructor for class javazoom.jl.decoder.JavaLayerUtils +
  +
JavaSoundAudioDevice - Class in javazoom.jl.player
The JavaSoundAudioDevice implements an audio + device by using the JavaSound API.
JavaSoundAudioDevice() - +Constructor for class javazoom.jl.player.JavaSoundAudioDevice +
  +
JavaSoundAudioDeviceFactory - Class in javazoom.jl.player
This class is responsible for creating instances of the + JavaSoundAudioDevice.
JavaSoundAudioDeviceFactory() - +Constructor for class javazoom.jl.player.JavaSoundAudioDeviceFactory +
  +
javazoom.jl.converter - package javazoom.jl.converter
 
javazoom.jl.decoder - package javazoom.jl.decoder
 
javazoom.jl.player - package javazoom.jl.player
 
javazoom.jl.player.advanced - package javazoom.jl.player.advanced
 
jlap - Class in javazoom.jl.player.advanced
This class implements a sample player using Playback listener.
jlap() - +Constructor for class javazoom.jl.player.advanced.jlap +
  +
jlap.InfoListener - Class in javazoom.jl.player.advanced
 
jlap.InfoListener() - +Constructor for class javazoom.jl.player.advanced.jlap.InfoListener +
  +
jlc - Class in javazoom.jl.converter
The jlc class presents the JavaLayer + Conversion functionality as a command-line program.
jlc() - +Constructor for class javazoom.jl.converter.jlc +
  +
jlp - Class in javazoom.jl.player
The jlp class implements a simple command-line + player for MPEG audio files.
jlp(String) - +Constructor for class javazoom.jl.player.jlp +
  +
JOINT_STEREO - +Static variable in class javazoom.jl.decoder.Header +
  +
+
+

+L

+
+
layer() - +Method in class javazoom.jl.decoder.Header +
Returns Layer ID. +
layer_string() - +Method in class javazoom.jl.decoder.Header +
Return Layer version. +
LEFT - +Static variable in class javazoom.jl.decoder.OutputChannels +
  +
LEFT_CHANNEL - +Static variable in class javazoom.jl.decoder.OutputChannels +
Flag to indicate output should include the left channel only. +
length() - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
length() - +Method in interface javazoom.jl.decoder.Source +
  +
LENGTH_UNKNOWN - +Static variable in interface javazoom.jl.decoder.Source +
  +
+
+

+M

+
+
main(String[]) - +Static method in class javazoom.jl.converter.jlc +
  +
main(String[]) - +Static method in class javazoom.jl.player.advanced.jlap +
  +
main(String[]) - +Static method in class javazoom.jl.player.jlp +
  +
Manager - Class in javazoom.jl.decoder
Work in progress.
Manager() - +Constructor for class javazoom.jl.decoder.Manager +
  +
MAX_DETAIL - +Static variable in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
max_number_of_frames(int) - +Method in class javazoom.jl.decoder.Header +
Returns the maximum number of frames in the stream. +
MAX_WAVE_CHANNELS - +Static variable in class javazoom.jl.converter.WaveFile +
  +
MAXCHANNELS - +Static variable in class javazoom.jl.decoder.Obuffer +
  +
millisecondsToBytes(AudioFormat, int) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
min_number_of_frames(int) - +Method in class javazoom.jl.decoder.Header +
Returns the maximum number of frames in the stream. +
mode() - +Method in class javazoom.jl.decoder.Header +
Returns Mode. +
mode_extension() - +Method in class javazoom.jl.decoder.Header +
Returns Mode Extension. +
mode_string() - +Method in class javazoom.jl.decoder.Header +
Returns Mode. +
MPEG1 - +Static variable in class javazoom.jl.decoder.Header +
Constant for MPEG-1 version +
MPEG25_LSF - +Static variable in class javazoom.jl.decoder.Header +
  +
MPEG2_LSF - +Static variable in class javazoom.jl.decoder.Header +
Constant for MPEG-2 LSF version +
ms_per_frame() - +Method in class javazoom.jl.decoder.Header +
Returns ms/frame. +
+
+

+N

+
+
newBitstreamException(int) - +Method in class javazoom.jl.decoder.Bitstream +
  +
newBitstreamException(int, Throwable) - +Method in class javazoom.jl.decoder.Bitstream +
  +
newDecoderException(int) - +Method in class javazoom.jl.decoder.Decoder +
  +
newDecoderException(int, Throwable) - +Method in class javazoom.jl.decoder.Decoder +
  +
newStdOut(int) - +Static method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
NO_DETAIL - +Static variable in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
nSlots - +Variable in class javazoom.jl.decoder.Header +
  +
NullAudioDevice - Class in javazoom.jl.player
The NullAudioDevice implements a silent, no-op + audio device.
NullAudioDevice() - +Constructor for class javazoom.jl.player.NullAudioDevice +
  +
number_of_subbands() - +Method in class javazoom.jl.decoder.Header +
Returns the number of subbands in the current frame. +
NumChannels() - +Method in class javazoom.jl.converter.WaveFile +
  +
NumSamples() - +Method in class javazoom.jl.converter.WaveFile +
  +
+
+

+O

+
+
Obuffer - Class in javazoom.jl.decoder
Base Class for audio output.
Obuffer() - +Constructor for class javazoom.jl.decoder.Obuffer +
  +
OBUFFERSIZE - +Static variable in class javazoom.jl.decoder.Obuffer +
  +
Open(String, int) - +Method in class javazoom.jl.converter.RiffFile +
Open a RIFF file. +
open(Decoder) - +Method in interface javazoom.jl.player.AudioDevice +
Prepares the AudioDevice for playback of audio samples. +
open(Decoder) - +Method in class javazoom.jl.player.AudioDeviceBase +
Opens this audio device. +
open(AudioFormat) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
OpenForWrite(String, int, short, short) - +Method in class javazoom.jl.converter.WaveFile +
  +
OpenForWrite(String, WaveFile) - +Method in class javazoom.jl.converter.WaveFile +
Open for write using another wave file's parameters... +
openImpl() - +Method in class javazoom.jl.player.AudioDeviceBase +
Template method to provide the + implementation for the opening of the audio device. +
openImpl() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
openInput(String) - +Method in class javazoom.jl.converter.Converter +
  +
original() - +Method in class javazoom.jl.decoder.Header +
Returns Original. +
OutputChannels - Class in javazoom.jl.decoder
A Type-safe representation of the the supported output channel + constants.
+
+

+P

+
+
padding() - +Method in class javazoom.jl.decoder.Header +
Returns Layer III Padding bit. +
parseArgs(String[]) - +Method in class javazoom.jl.player.jlp +
  +
parsedFrame(int, Header) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
parsedFrame(int, Header) - +Method in interface javazoom.jl.converter.Converter.ProgressListener +
If the converter wishes to make a first pass over the + audio frames, this is called as each frame is parsed. +
PASS_THRU_EQ - +Static variable in class javazoom.jl.decoder.Equalizer +
  +
pause() - +Method in interface javazoom.jl.decoder.Control +
  +
play() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
  +
play(int) - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
Plays a number of MPEG audio frames. +
play(int, int) - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
Plays a range of MPEG audio frames +
play(String) - +Method in class javazoom.jl.player.advanced.jlap +
  +
play() - +Method in class javazoom.jl.player.jlp +
  +
play() - +Method in class javazoom.jl.player.Player +
  +
play(int) - +Method in class javazoom.jl.player.Player +
Plays a number of MPEG audio frames. +
play(InputStream, AudioDevice) - +Method in class javazoom.jl.player.PlayerApplet +
Decompresses audio data from an InputStream and plays it + back through an AudioDevice. +
PlaybackEvent - Class in javazoom.jl.player.advanced
An event which indicates a Player has performed an 'playback action'
PlaybackEvent(AdvancedPlayer, int, int) - +Constructor for class javazoom.jl.player.advanced.PlaybackEvent +
  +
playbackFinished(PlaybackEvent) - +Method in class javazoom.jl.player.advanced.jlap.InfoListener +
  +
playbackFinished(PlaybackEvent) - +Method in class javazoom.jl.player.advanced.PlaybackListener +
  +
PlaybackListener - Class in javazoom.jl.player.advanced
Listener for javalayer Player playback
PlaybackListener() - +Constructor for class javazoom.jl.player.advanced.PlaybackListener +
  +
playbackStarted(PlaybackEvent) - +Method in class javazoom.jl.player.advanced.jlap.InfoListener +
  +
playbackStarted(PlaybackEvent) - +Method in class javazoom.jl.player.advanced.PlaybackListener +
  +
Player - Class in javazoom.jl.player
The Player class implements a simple player for playback + of an MPEG audio stream.
Player(InputStream) - +Constructor for class javazoom.jl.player.Player +
Creates a new Player instance. +
Player(InputStream, AudioDevice) - +Constructor for class javazoom.jl.player.Player +
  +
PlayerApplet - Class in javazoom.jl.player
A simple applet that plays an MPEG audio file.
PlayerApplet() - +Constructor for class javazoom.jl.player.PlayerApplet +
  +
playMp3(File, PlaybackListener) - +Static method in class javazoom.jl.player.advanced.jlap +
  +
playMp3(File, int, int, PlaybackListener) - +Static method in class javazoom.jl.player.advanced.jlap +
  +
playMp3(InputStream, int, int, PlaybackListener) - +Static method in class javazoom.jl.player.advanced.jlap +
  +
printStackTrace() - +Method in exception javazoom.jl.decoder.JavaLayerException +
  +
printStackTrace(PrintStream) - +Method in exception javazoom.jl.decoder.JavaLayerException +
  +
+
+

+R

+
+
Read(byte[], int) - +Method in class javazoom.jl.converter.RiffFile +
Read NumBytes data. +
read(byte[], int, int) - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
read(byte[], int, int) - +Method in interface javazoom.jl.decoder.Source +
  +
readBits(int) - +Method in class javazoom.jl.decoder.Bitstream +
  +
readCheckedBits(int) - +Method in class javazoom.jl.decoder.Bitstream +
  +
readFrame(int, Header) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
readFrame(int, Header) - +Method in interface javazoom.jl.converter.Converter.ProgressListener +
This method is called after each frame has been read, + but before it has been decoded. +
readFrame() - +Method in class javazoom.jl.decoder.Bitstream +
Reads and parses the next frame from the input source. +
registerDefaultFactories() - +Method in class javazoom.jl.player.FactoryRegistry +
  +
removeAll() - +Method in class javazoom.jl.decoder.Manager +
  +
removeControl(Control) - +Method in class javazoom.jl.decoder.Manager +
  +
removeFactory(AudioDeviceFactory) - +Method in class javazoom.jl.player.FactoryRegistry +
  +
removeFactoryType(Class) - +Method in class javazoom.jl.player.FactoryRegistry +
  +
reset() - +Method in class javazoom.jl.decoder.Equalizer +
Sets all bands to 0.0 +
retrieveDecoder(Header, Bitstream, int) - +Method in class javazoom.jl.decoder.Decoder +
  +
RFM_READ - +Static variable in class javazoom.jl.converter.RiffFile +
  +
RFM_UNKNOWN - +Static variable in class javazoom.jl.converter.RiffFile +
  +
RFM_WRITE - +Static variable in class javazoom.jl.converter.RiffFile +
  +
RiffFile - Class in javazoom.jl.converter
Class to manage RIFF files
RiffFile() - +Constructor for class javazoom.jl.converter.RiffFile +
Dummy Constructor +
RIGHT - +Static variable in class javazoom.jl.decoder.OutputChannels +
  +
RIGHT_CHANNEL - +Static variable in class javazoom.jl.decoder.OutputChannels +
Flag to indicate output should include the right channel only. +
run() - +Method in class javazoom.jl.player.PlayerApplet +
The run method for the audio player thread. +
+
+

+S

+
+
sample_frequency() - +Method in class javazoom.jl.decoder.Header +
Returns Sample Frequency. +
sample_frequency_string() - +Method in class javazoom.jl.decoder.Header +
Returns Frequency +
SampleBuffer - Class in javazoom.jl.decoder
The SampleBuffer class implements an output buffer + that provides storage for a fixed size block of samples.
SampleBuffer(int, int) - +Constructor for class javazoom.jl.decoder.SampleBuffer +
Constructor +
SamplingRate() - +Method in class javazoom.jl.converter.WaveFile +
  +
Seek(long) - +Method in class javazoom.jl.converter.RiffFile +
Seek in the File. +
seek(long) - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
seek(long) - +Method in interface javazoom.jl.decoder.Source +
  +
serialize(OutputStream, Object) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
  +
set_stop_flag() - +Method in class javazoom.jl.converter.WaveFileObuffer +
  +
set_stop_flag() - +Method in class javazoom.jl.decoder.Obuffer +
Notify the buffer that the user has stopped the stream. +
set_stop_flag() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
setAudioFormat(AudioFormat) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
setBand(int, float) - +Method in class javazoom.jl.decoder.Equalizer +
  +
setEqualizer(Equalizer) - +Method in class javazoom.jl.decoder.Decoder +
  +
setFileName(String) - +Method in class javazoom.jl.player.PlayerApplet +
Sets the URL of the audio stream to play. +
setFrame(int) - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
setFrom(float[]) - +Method in class javazoom.jl.decoder.Equalizer +
  +
setFrom(Equalizer.EQFunction) - +Method in class javazoom.jl.decoder.Equalizer +
  +
setFrom(Equalizer) - +Method in class javazoom.jl.decoder.Equalizer +
Sets the bands of this equalizer to the value the bands of + another equalizer. +
setHook(JavaLayerHook) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
Sets the system-wide JavaLayer hook. +
setId(int) - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
setOpen(boolean) - +Method in class javazoom.jl.player.AudioDeviceBase +
Sets the open state for this audio device. +
setOutputBuffer(Obuffer) - +Method in class javazoom.jl.decoder.Decoder +
Changes the output buffer. +
setOutputChannels(OutputChannels) - +Method in class javazoom.jl.decoder.Decoder.Params +
  +
setPlayBackListener(PlaybackListener) - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
sets the PlaybackListener +
setPosition(double) - +Method in interface javazoom.jl.decoder.Control +
  +
setSource(AdvancedPlayer) - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
showUsage() - +Method in class javazoom.jl.player.advanced.jlap +
  +
showUsage() - +Method in class javazoom.jl.player.jlp +
  +
SINGLE_CHANNEL - +Static variable in class javazoom.jl.decoder.Header +
  +
skipFrame() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
skips over a single frame +
slots() - +Method in class javazoom.jl.decoder.Header +
Returns Slots. +
Source - Interface in javazoom.jl.decoder
Work in progress.
start() - +Method in interface javazoom.jl.decoder.Control +
Starts playback of the media presented by this control. +
start() - +Method in class javazoom.jl.player.PlayerApplet +
Starts this applet. +
STARTED - +Static variable in class javazoom.jl.player.advanced.PlaybackEvent +
  +
STEREO - +Static variable in class javazoom.jl.decoder.Header +
  +
stop() - +Method in interface javazoom.jl.decoder.Control +
Stops playback of the media presented by this control. +
stop() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
closes the player and notifies PlaybackListener +
stop() - +Method in class javazoom.jl.player.PlayerApplet +
Stops this applet. +
STOPPED - +Static variable in class javazoom.jl.player.advanced.PlaybackEvent +
  +
stopPlayer() - +Method in class javazoom.jl.player.PlayerApplet +
Stops the audio player. +
STREAM_EOF - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
The end of the stream was reached. +
STREAM_ERROR - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
A problem occurred reading from the stream. +
systemRegistry() - +Static method in class javazoom.jl.player.FactoryRegistry +
  +
+
+

+T

+
+
tell() - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
tell() - +Method in interface javazoom.jl.decoder.Source +
  +
test() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
Runs a short test by playing a short silent sound. +
testAudioDevice() - +Method in class javazoom.jl.player.JavaSoundAudioDeviceFactory +
  +
THIRTYTWO - +Static variable in class javazoom.jl.decoder.Header +
  +
toByteArray(short[], int, int) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
toString() - +Method in class javazoom.jl.decoder.Header +
  +
total_ms(int) - +Method in class javazoom.jl.decoder.Header +
Returns total ms. +
+
+

+U

+
+
UNEXPECTED_EOF - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
The end of the stream was reached prematurely. +
UNKNOWN_ERROR - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
An undeterminable error occurred. +
UNKNOWN_ERROR - +Static variable in interface javazoom.jl.decoder.DecoderErrors +
  +
UNKNOWN_SAMPLE_RATE - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
The header describes an unknown sample rate. +
unreadFrame() - +Method in class javazoom.jl.decoder.Bitstream +
Unreads the bytes read from the frame. +
UNSUPPORTED_LAYER - +Static variable in interface javazoom.jl.decoder.DecoderErrors +
Layer not supported by the decoder. +
UPDATE_CONVERT_COMPLETE - +Static variable in interface javazoom.jl.converter.Converter.ProgressListener +
Conversion is complete. +
UPDATE_FRAME_COUNT - +Static variable in interface javazoom.jl.converter.Converter.ProgressListener +
  +
+
+

+V

+
+
vbr() - +Method in class javazoom.jl.decoder.Header +
Return VBR. +
vbr_scale() - +Method in class javazoom.jl.decoder.Header +
Return VBR scale. +
vbr_toc() - +Method in class javazoom.jl.decoder.Header +
Return VBR TOC. +
VERBOSE_DETAIL - +Static variable in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
Verbose detail. +
version() - +Method in class javazoom.jl.decoder.Header +
Returns version. +
version_string() - +Method in class javazoom.jl.decoder.Header +
Returns Version. +
+
+

+W

+
+
WaveFile - Class in javazoom.jl.converter
Class allowing WaveFormat Access
WaveFile() - +Constructor for class javazoom.jl.converter.WaveFile +
Constructs a new WaveFile instance. +
WaveFile.WaveFileSample - Class in javazoom.jl.converter
 
WaveFile.WaveFileSample() - +Constructor for class javazoom.jl.converter.WaveFile.WaveFileSample +
  +
WaveFileObuffer - Class in javazoom.jl.converter
Implements an Obuffer by writing the data to + a file in RIFF WAVE format.
WaveFileObuffer(int, int, String) - +Constructor for class javazoom.jl.converter.WaveFileObuffer +
Creates a new WareFileObuffer instance. +
willReadBlock() - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
willReadBlock() - +Method in interface javazoom.jl.decoder.Source +
  +
Write(byte[], int) - +Method in class javazoom.jl.converter.RiffFile +
Write NumBytes data. +
Write(short[], int) - +Method in class javazoom.jl.converter.RiffFile +
Write NumBytes data. +
Write(RiffFile.RiffChunkHeader, int) - +Method in class javazoom.jl.converter.RiffFile +
Write NumBytes data. +
Write(short, int) - +Method in class javazoom.jl.converter.RiffFile +
Write NumBytes data. +
Write(int, int) - +Method in class javazoom.jl.converter.RiffFile +
Write NumBytes data. +
write(short[], int, int) - +Method in interface javazoom.jl.player.AudioDevice +
Writes a number of samples to this AudioDevice. +
write(short[], int, int) - +Method in class javazoom.jl.player.AudioDeviceBase +
Writes audio data to this audio device. +
write_buffer(int) - +Method in class javazoom.jl.converter.WaveFileObuffer +
  +
write_buffer(int) - +Method in class javazoom.jl.decoder.Obuffer +
Write the samples to the file or directly to the audio hardware. +
write_buffer(int) - +Method in class javazoom.jl.decoder.SampleBuffer +
Write the samples to the file (Random Acces). +
WriteData(short[], int) - +Method in class javazoom.jl.converter.WaveFile +
Write 16-bit audio +
writeImpl(short[], int, int) - +Method in class javazoom.jl.player.AudioDeviceBase +
Template method to provide the implementation for + writing audio samples to the audio device. +
writeImpl(short[], int, int) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
+
+A B C D E F G H I J L M N O P R S T U V W + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/index.html b/JLayer1.0.1/doc/index.html new file mode 100644 index 0000000..46ebcbf --- /dev/null +++ b/JLayer1.0.1/doc/index.html @@ -0,0 +1,39 @@ + + + + + + +Generated Documentation (Untitled) + + + + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to<A HREF="overview-summary.html">Non-frame version.</A> + + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/Converter.PrintWriterProgressListener.html b/JLayer1.0.1/doc/javazoom/jl/converter/Converter.PrintWriterProgressListener.html new file mode 100644 index 0000000..2108ece --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/Converter.PrintWriterProgressListener.html @@ -0,0 +1,568 @@ + + + + + + +Converter.PrintWriterProgressListener + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class Converter.PrintWriterProgressListener

+
+java.lang.Object
+  extended by javazoom.jl.converter.Converter.PrintWriterProgressListener
+
+
+
All Implemented Interfaces:
Converter.ProgressListener
+
+
+
Enclosing class:
Converter
+
+
+
+
public static class Converter.PrintWriterProgressListener
extends java.lang.Object
implements Converter.ProgressListener
+ + +

+Implementation of ProgressListener that writes + notification text to a PrintWriter. +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intDEBUG_DETAIL + +
+          Debug detail.
+static intEXPERT_DETAIL + +
+          Level of detail typically expected of expert + users.
+static intMAX_DETAIL + +
+           
+static intNO_DETAIL + +
+           
+static intVERBOSE_DETAIL + +
+          Verbose detail.
+ + + + + + + +
Fields inherited from interface javazoom.jl.converter.Converter.ProgressListener
UPDATE_CONVERT_COMPLETE, UPDATE_FRAME_COUNT
+  + + + + + + + + + + +
+Constructor Summary
Converter.PrintWriterProgressListener(java.io.PrintWriter writer, + int detailLevel) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanconverterException(java.lang.Throwable t) + +
+          Called when an exception is thrown during while converting + a frame.
+ voidconverterUpdate(int updateID, + int param1, + int param2) + +
+          Notifies the listener that new information is available.
+ voiddecodedFrame(int frameNo, + Header header, + Obuffer o) + +
+          This method is called after a frame has been decoded.
+ booleanisDetail(int detail) + +
+           
+static Converter.PrintWriterProgressListenernewStdOut(int detail) + +
+           
+ voidparsedFrame(int frameNo, + Header header) + +
+          If the converter wishes to make a first pass over the + audio frames, this is called as each frame is parsed.
+ voidreadFrame(int frameNo, + Header header) + +
+          This method is called after each frame has been read, + but before it has been decoded.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+NO_DETAIL

+
+public static final int NO_DETAIL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+EXPERT_DETAIL

+
+public static final int EXPERT_DETAIL
+
+
Level of detail typically expected of expert + users. +

+

+
See Also:
Constant Field Values
+
+
+ +

+VERBOSE_DETAIL

+
+public static final int VERBOSE_DETAIL
+
+
Verbose detail. +

+

+
See Also:
Constant Field Values
+
+
+ +

+DEBUG_DETAIL

+
+public static final int DEBUG_DETAIL
+
+
Debug detail. All frame read notifications are shown. +

+

+
See Also:
Constant Field Values
+
+
+ +

+MAX_DETAIL

+
+public static final int MAX_DETAIL
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+Converter.PrintWriterProgressListener

+
+public Converter.PrintWriterProgressListener(java.io.PrintWriter writer,
+                                             int detailLevel)
+
+
+ + + + + + + + +
+Method Detail
+ +

+newStdOut

+
+public static Converter.PrintWriterProgressListener newStdOut(int detail)
+
+
+
+
+
+
+
+
+
+ +

+isDetail

+
+public boolean isDetail(int detail)
+
+
+
+
+
+
+
+
+
+ +

+converterUpdate

+
+public void converterUpdate(int updateID,
+                            int param1,
+                            int param2)
+
+
Description copied from interface: Converter.ProgressListener
+
Notifies the listener that new information is available. +

+

+
Specified by:
converterUpdate in interface Converter.ProgressListener
+
+
+
Parameters:
updateID - Code indicating the information that has been + updated.
param1 - Parameter whose value depends upon the update code.
param2 - Parameter whose value depends upon the update code. + + The updateID parameter can take these values: + + UPDATE_FRAME_COUNT: param1 is the frame count, or -1 if not known. + UPDATE_CONVERT_COMPLETE: param1 is the conversion time, param2 + is the number of frames converted.
+
+
+
+ +

+parsedFrame

+
+public void parsedFrame(int frameNo,
+                        Header header)
+
+
Description copied from interface: Converter.ProgressListener
+
If the converter wishes to make a first pass over the + audio frames, this is called as each frame is parsed. +

+

+
Specified by:
parsedFrame in interface Converter.ProgressListener
+
+
+
+
+
+
+ +

+readFrame

+
+public void readFrame(int frameNo,
+                      Header header)
+
+
Description copied from interface: Converter.ProgressListener
+
This method is called after each frame has been read, + but before it has been decoded. +

+

+
Specified by:
readFrame in interface Converter.ProgressListener
+
+
+
Parameters:
frameNo - The 0-based sequence number of the frame.
header - The Header rerpesenting the frame just read.
+
+
+
+ +

+decodedFrame

+
+public void decodedFrame(int frameNo,
+                         Header header,
+                         Obuffer o)
+
+
Description copied from interface: Converter.ProgressListener
+
This method is called after a frame has been decoded. +

+

+
Specified by:
decodedFrame in interface Converter.ProgressListener
+
+
+
Parameters:
frameNo - The 0-based sequence number of the frame.
header - The Header rerpesenting the frame just read.
o - The Obuffer the deocded data was written to.
+
+
+
+ +

+converterException

+
+public boolean converterException(java.lang.Throwable t)
+
+
Description copied from interface: Converter.ProgressListener
+
Called when an exception is thrown during while converting + a frame. +

+

+
Specified by:
converterException in interface Converter.ProgressListener
+
+
+
Parameters:
t - The Throwable instance that + was thrown. +
Returns:
true to continue processing, or false + to abort conversion. + + If this method returns false, the exception + is propagated to the caller of the convert() method. If + true is returned, the exception is silently + ignored and the converter moves onto the next frame.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/Converter.ProgressListener.html b/JLayer1.0.1/doc/javazoom/jl/converter/Converter.ProgressListener.html new file mode 100644 index 0000000..591a096 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/Converter.ProgressListener.html @@ -0,0 +1,390 @@ + + + + + + +Converter.ProgressListener + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Interface Converter.ProgressListener

+
+
All Known Implementing Classes:
Converter.PrintWriterProgressListener
+
+
+
Enclosing class:
Converter
+
+
+
+
public static interface Converter.ProgressListener
+ + +

+This interface is used by the Converter to provide + notification of tasks being carried out by the converter, + and to provide new information as it becomes available. +

+ +

+


+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+static intUPDATE_CONVERT_COMPLETE + +
+          Conversion is complete.
+static intUPDATE_FRAME_COUNT + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanconverterException(java.lang.Throwable t) + +
+          Called when an exception is thrown during while converting + a frame.
+ voidconverterUpdate(int updateID, + int param1, + int param2) + +
+          Notifies the listener that new information is available.
+ voiddecodedFrame(int frameNo, + Header header, + Obuffer o) + +
+          This method is called after a frame has been decoded.
+ voidparsedFrame(int frameNo, + Header header) + +
+          If the converter wishes to make a first pass over the + audio frames, this is called as each frame is parsed.
+ voidreadFrame(int frameNo, + Header header) + +
+          This method is called after each frame has been read, + but before it has been decoded.
+  +

+ + + + + + + + +
+Field Detail
+ +

+UPDATE_FRAME_COUNT

+
+static final int UPDATE_FRAME_COUNT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+UPDATE_CONVERT_COMPLETE

+
+static final int UPDATE_CONVERT_COMPLETE
+
+
Conversion is complete. Param1 contains the time + to convert in milliseconds. Param2 contains the number + of MPEG audio frames converted. +

+

+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Method Detail
+ +

+converterUpdate

+
+void converterUpdate(int updateID,
+                     int param1,
+                     int param2)
+
+
Notifies the listener that new information is available. +

+

+
Parameters:
updateID - Code indicating the information that has been + updated.
param1 - Parameter whose value depends upon the update code.
param2 - Parameter whose value depends upon the update code. + + The updateID parameter can take these values: + + UPDATE_FRAME_COUNT: param1 is the frame count, or -1 if not known. + UPDATE_CONVERT_COMPLETE: param1 is the conversion time, param2 + is the number of frames converted.
+
+
+
+ +

+parsedFrame

+
+void parsedFrame(int frameNo,
+                 Header header)
+
+
If the converter wishes to make a first pass over the + audio frames, this is called as each frame is parsed. +

+

+
+
+
+
+ +

+readFrame

+
+void readFrame(int frameNo,
+               Header header)
+
+
This method is called after each frame has been read, + but before it has been decoded. +

+

+
Parameters:
frameNo - The 0-based sequence number of the frame.
header - The Header rerpesenting the frame just read.
+
+
+
+ +

+decodedFrame

+
+void decodedFrame(int frameNo,
+                  Header header,
+                  Obuffer o)
+
+
This method is called after a frame has been decoded. +

+

+
Parameters:
frameNo - The 0-based sequence number of the frame.
header - The Header rerpesenting the frame just read.
o - The Obuffer the deocded data was written to.
+
+
+
+ +

+converterException

+
+boolean converterException(java.lang.Throwable t)
+
+
Called when an exception is thrown during while converting + a frame. +

+

+
Parameters:
t - The Throwable instance that + was thrown. +
Returns:
true to continue processing, or false + to abort conversion. + + If this method returns false, the exception + is propagated to the caller of the convert() method. If + true is returned, the exception is silently + ignored and the converter moves onto the next frame.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/Converter.html b/JLayer1.0.1/doc/javazoom/jl/converter/Converter.html new file mode 100644 index 0000000..162093f --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/Converter.html @@ -0,0 +1,418 @@ + + + + + + +Converter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class Converter

+
+java.lang.Object
+  extended by javazoom.jl.converter.Converter
+
+
+
+
public class Converter
extends java.lang.Object
+ + +

+The Converter class implements the conversion of + an MPEG audio file to a .WAV file. To convert an MPEG audio stream, + just create an instance of this class and call the convert() + method, passing in the names of the input and output files. You can + pass in optional ProgressListener and + Decoder.Params objects also to customize the conversion. +

+ +

+

+
Since:
+
0.0.7
+
+
+ +

+ + + + + + + + + + + + + + + +
+Nested Class Summary
+static classConverter.PrintWriterProgressListener + +
+          Implementation of ProgressListener that writes + notification text to a PrintWriter.
+static interfaceConverter.ProgressListener + +
+          This interface is used by the Converter to provide + notification of tasks being carried out by the converter, + and to provide new information as it becomes available.
+  + + + + + + + + + + +
+Constructor Summary
Converter() + +
+          Creates a new converter instance.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidconvert(java.io.InputStream sourceStream, + java.lang.String destName, + Converter.ProgressListener progressListener, + Decoder.Params decoderParams) + +
+           
+ voidconvert(java.lang.String sourceName, + java.lang.String destName) + +
+           
+ voidconvert(java.lang.String sourceName, + java.lang.String destName, + Converter.ProgressListener progressListener) + +
+           
+ voidconvert(java.lang.String sourceName, + java.lang.String destName, + Converter.ProgressListener progressListener, + Decoder.Params decoderParams) + +
+           
+protected  intcountFrames(java.io.InputStream in) + +
+           
+protected  java.io.InputStreamopenInput(java.lang.String fileName) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Converter

+
+public Converter()
+
+
Creates a new converter instance. +

+

+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public void convert(java.lang.String sourceName,
+                    java.lang.String destName)
+             throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+convert

+
+public void convert(java.lang.String sourceName,
+                    java.lang.String destName,
+                    Converter.ProgressListener progressListener)
+             throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+convert

+
+public void convert(java.lang.String sourceName,
+                    java.lang.String destName,
+                    Converter.ProgressListener progressListener,
+                    Decoder.Params decoderParams)
+             throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+convert

+
+public void convert(java.io.InputStream sourceStream,
+                    java.lang.String destName,
+                    Converter.ProgressListener progressListener,
+                    Decoder.Params decoderParams)
+             throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+countFrames

+
+protected int countFrames(java.io.InputStream in)
+
+
+
+
+
+
+ +

+openInput

+
+protected java.io.InputStream openInput(java.lang.String fileName)
+                                 throws java.io.IOException
+
+
+ +
Throws: +
java.io.IOException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/RiffFile.html b/JLayer1.0.1/doc/javazoom/jl/converter/RiffFile.html new file mode 100644 index 0000000..c9b09d4 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/RiffFile.html @@ -0,0 +1,809 @@ + + + + + + +RiffFile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class RiffFile

+
+java.lang.Object
+  extended by javazoom.jl.converter.RiffFile
+
+
+
Direct Known Subclasses:
WaveFile
+
+
+
+
public class RiffFile
extends java.lang.Object
+ + +

+Class to manage RIFF files +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intDDC_FAILURE + +
+           
+static intDDC_FILE_ERROR + +
+           
+static intDDC_INVALID_CALL + +
+           
+static intDDC_INVALID_FILE + +
+           
+static intDDC_OUT_OF_MEMORY + +
+           
+static intDDC_SUCCESS + +
+           
+static intDDC_USER_ABORT + +
+           
+protected  java.io.RandomAccessFilefile + +
+           
+protected  intfmode + +
+           
+static intRFM_READ + +
+           
+static intRFM_UNKNOWN + +
+           
+static intRFM_WRITE + +
+           
+  + + + + + + + + + + +
+Constructor Summary
RiffFile() + +
+          Dummy Constructor
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intBackpatch(long FileOffset, + byte[] Data, + int NumBytes) + +
+           
+ intBackpatch(long FileOffset, + javazoom.jl.converter.RiffFile.RiffChunkHeader Data, + int NumBytes) + +
+          Write Data to specified offset.
+ intClose() + +
+          Close Riff File.
+ intCurrentFileMode() + +
+          Return File Mode.
+ longCurrentFilePosition() + +
+          Return File Position.
+ intExpect(java.lang.String Data, + int NumBytes) + +
+          Expect NumBytes data.
+static intFourCC(java.lang.String ChunkName) + +
+          Fill the header.
+ intOpen(java.lang.String Filename, + int NewMode) + +
+          Open a RIFF file.
+ intRead(byte[] Data, + int NumBytes) + +
+          Read NumBytes data.
+protected  intSeek(long offset) + +
+          Seek in the File.
+ intWrite(byte[] Data, + int NumBytes) + +
+          Write NumBytes data.
+ intWrite(int Data, + int NumBytes) + +
+          Write NumBytes data.
+ intWrite(javazoom.jl.converter.RiffFile.RiffChunkHeader Triff_header, + int NumBytes) + +
+          Write NumBytes data.
+ intWrite(short[] Data, + int NumBytes) + +
+          Write NumBytes data.
+ intWrite(short Data, + int NumBytes) + +
+          Write NumBytes data.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+DDC_SUCCESS

+
+public static final int DDC_SUCCESS
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_FAILURE

+
+public static final int DDC_FAILURE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_OUT_OF_MEMORY

+
+public static final int DDC_OUT_OF_MEMORY
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_FILE_ERROR

+
+public static final int DDC_FILE_ERROR
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_INVALID_CALL

+
+public static final int DDC_INVALID_CALL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_USER_ABORT

+
+public static final int DDC_USER_ABORT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_INVALID_FILE

+
+public static final int DDC_INVALID_FILE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+RFM_UNKNOWN

+
+public static final int RFM_UNKNOWN
+
+
+
See Also:
Constant Field Values
+
+
+ +

+RFM_WRITE

+
+public static final int RFM_WRITE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+RFM_READ

+
+public static final int RFM_READ
+
+
+
See Also:
Constant Field Values
+
+
+ +

+fmode

+
+protected int fmode
+
+
+
+
+
+ +

+file

+
+protected java.io.RandomAccessFile file
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+RiffFile

+
+public RiffFile()
+
+
Dummy Constructor +

+

+ + + + + + + + +
+Method Detail
+ +

+CurrentFileMode

+
+public int CurrentFileMode()
+
+
Return File Mode. +

+

+
+
+
+
+ +

+Open

+
+public int Open(java.lang.String Filename,
+                int NewMode)
+
+
Open a RIFF file. +

+

+
+
+
+
+ +

+Write

+
+public int Write(byte[] Data,
+                 int NumBytes)
+
+
Write NumBytes data. +

+

+
+
+
+
+ +

+Write

+
+public int Write(short[] Data,
+                 int NumBytes)
+
+
Write NumBytes data. +

+

+
+
+
+
+ +

+Write

+
+public int Write(javazoom.jl.converter.RiffFile.RiffChunkHeader Triff_header,
+                 int NumBytes)
+
+
Write NumBytes data. +

+

+
+
+
+
+ +

+Write

+
+public int Write(short Data,
+                 int NumBytes)
+
+
Write NumBytes data. +

+

+
+
+
+
+ +

+Write

+
+public int Write(int Data,
+                 int NumBytes)
+
+
Write NumBytes data. +

+

+
+
+
+
+ +

+Read

+
+public int Read(byte[] Data,
+                int NumBytes)
+
+
Read NumBytes data. +

+

+
+
+
+
+ +

+Expect

+
+public int Expect(java.lang.String Data,
+                  int NumBytes)
+
+
Expect NumBytes data. +

+

+
+
+
+
+ +

+Close

+
+public int Close()
+
+
Close Riff File. + Length is written too. +

+

+
+
+
+
+ +

+CurrentFilePosition

+
+public long CurrentFilePosition()
+
+
Return File Position. +

+

+
+
+
+
+ +

+Backpatch

+
+public int Backpatch(long FileOffset,
+                     javazoom.jl.converter.RiffFile.RiffChunkHeader Data,
+                     int NumBytes)
+
+
Write Data to specified offset. +

+

+
+
+
+
+ +

+Backpatch

+
+public int Backpatch(long FileOffset,
+                     byte[] Data,
+                     int NumBytes)
+
+
+
+
+
+
+ +

+Seek

+
+protected int Seek(long offset)
+
+
Seek in the File. +

+

+
+
+
+
+ +

+FourCC

+
+public static int FourCC(java.lang.String ChunkName)
+
+
Fill the header. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/WaveFile.WaveFileSample.html b/JLayer1.0.1/doc/javazoom/jl/converter/WaveFile.WaveFileSample.html new file mode 100644 index 0000000..d46f87a --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/WaveFile.WaveFileSample.html @@ -0,0 +1,258 @@ + + + + + + +WaveFile.WaveFileSample + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class WaveFile.WaveFileSample

+
+java.lang.Object
+  extended by javazoom.jl.converter.WaveFile.WaveFileSample
+
+
+
Enclosing class:
WaveFile
+
+
+
+
public class WaveFile.WaveFileSample
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + +
+Field Summary
+ short[]chan + +
+           
+  + + + + + + + + + + +
+Constructor Summary
WaveFile.WaveFileSample() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+chan

+
+public short[] chan
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WaveFile.WaveFileSample

+
+public WaveFile.WaveFileSample()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/WaveFile.html b/JLayer1.0.1/doc/javazoom/jl/converter/WaveFile.html new file mode 100644 index 0000000..ea4628e --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/WaveFile.html @@ -0,0 +1,504 @@ + + + + + + +WaveFile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class WaveFile

+
+java.lang.Object
+  extended by javazoom.jl.converter.RiffFile
+      extended by javazoom.jl.converter.WaveFile
+
+
+
+
public class WaveFile
extends RiffFile
+ + +

+Class allowing WaveFormat Access +

+ +

+


+ +

+ + + + + + + + + + + +
+Nested Class Summary
+ classWaveFile.WaveFileSample + +
+           
+ + + + + + + + + + +
+Field Summary
+static intMAX_WAVE_CHANNELS + +
+           
+ + + + + + + +
Fields inherited from class javazoom.jl.converter.RiffFile
DDC_FAILURE, DDC_FILE_ERROR, DDC_INVALID_CALL, DDC_INVALID_FILE, DDC_OUT_OF_MEMORY, DDC_SUCCESS, DDC_USER_ABORT, file, fmode, RFM_READ, RFM_UNKNOWN, RFM_WRITE
+  + + + + + + + + + + +
+Constructor Summary
WaveFile() + +
+          Constructs a new WaveFile instance.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ shortBitsPerSample() + +
+           
+ intClose() + +
+          Close Riff File.
+ longCurrentFilePosition() + +
+          Return File Position.
+ shortNumChannels() + +
+           
+ intNumSamples() + +
+           
+ intOpenForWrite(java.lang.String Filename, + int SamplingRate, + short BitsPerSample, + short NumChannels) + +
+           
+ intOpenForWrite(java.lang.String Filename, + WaveFile OtherWave) + +
+          Open for write using another wave file's parameters...
+ intSamplingRate() + +
+           
+ intWriteData(short[] data, + int numData) + +
+          Write 16-bit audio
+ + + + + + + +
Methods inherited from class javazoom.jl.converter.RiffFile
Backpatch, Backpatch, CurrentFileMode, Expect, FourCC, Open, Read, Seek, Write, Write, Write, Write, Write
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+MAX_WAVE_CHANNELS

+
+public static final int MAX_WAVE_CHANNELS
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+WaveFile

+
+public WaveFile()
+
+
Constructs a new WaveFile instance. +

+

+ + + + + + + + +
+Method Detail
+ +

+OpenForWrite

+
+public int OpenForWrite(java.lang.String Filename,
+                        int SamplingRate,
+                        short BitsPerSample,
+                        short NumChannels)
+
+
+
+
+
+
+ +

+WriteData

+
+public int WriteData(short[] data,
+                     int numData)
+
+
Write 16-bit audio +

+

+
+
+
+
+ +

+Close

+
+public int Close()
+
+
Description copied from class: RiffFile
+
Close Riff File. + Length is written too. +

+

+
Overrides:
Close in class RiffFile
+
+
+
+
+
+
+ +

+SamplingRate

+
+public int SamplingRate()
+
+
+
+
+
+
+ +

+BitsPerSample

+
+public short BitsPerSample()
+
+
+
+
+
+
+ +

+NumChannels

+
+public short NumChannels()
+
+
+
+
+
+
+ +

+NumSamples

+
+public int NumSamples()
+
+
+
+
+
+
+ +

+OpenForWrite

+
+public int OpenForWrite(java.lang.String Filename,
+                        WaveFile OtherWave)
+
+
Open for write using another wave file's parameters... +

+

+
+
+
+
+ +

+CurrentFilePosition

+
+public long CurrentFilePosition()
+
+
Description copied from class: RiffFile
+
Return File Position. +

+

+
Overrides:
CurrentFilePosition in class RiffFile
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/WaveFileObuffer.html b/JLayer1.0.1/doc/javazoom/jl/converter/WaveFileObuffer.html new file mode 100644 index 0000000..200134d --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/WaveFileObuffer.html @@ -0,0 +1,397 @@ + + + + + + +WaveFileObuffer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class WaveFileObuffer

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Obuffer
+      extended by javazoom.jl.converter.WaveFileObuffer
+
+
+
+
public class WaveFileObuffer
extends Obuffer
+ + +

+Implements an Obuffer by writing the data to + a file in RIFF WAVE format. +

+ +

+

+
Since:
+
0.0
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class javazoom.jl.decoder.Obuffer
MAXCHANNELS, OBUFFERSIZE
+  + + + + + + + + + + +
+Constructor Summary
WaveFileObuffer(int number_of_channels, + int freq, + java.lang.String FileName) + +
+          Creates a new WareFileObuffer instance.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidappend(int channel, + short value) + +
+          Takes a 16 Bit PCM sample.
+ voidclear_buffer() + +
+          Clears all data in the buffer (for seeking).
+ voidclose() + +
+           
+ voidset_stop_flag() + +
+          Notify the buffer that the user has stopped the stream.
+ voidwrite_buffer(int val) + +
+          Write the samples to the file or directly to the audio hardware.
+ + + + + + + +
Methods inherited from class javazoom.jl.decoder.Obuffer
appendSamples
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+WaveFileObuffer

+
+public WaveFileObuffer(int number_of_channels,
+                       int freq,
+                       java.lang.String FileName)
+
+
Creates a new WareFileObuffer instance. +

+

+
Parameters:
number_of_channels - The number of channels of audio data + this buffer will receive.
freq - The sample frequency of the samples in the buffer.
fileName - The filename to write the data to.
+
+ + + + + + + + +
+Method Detail
+ +

+append

+
+public void append(int channel,
+                   short value)
+
+
Takes a 16 Bit PCM sample. +

+

+
Specified by:
append in class Obuffer
+
+
+
+
+
+
+ +

+write_buffer

+
+public void write_buffer(int val)
+
+
Description copied from class: Obuffer
+
Write the samples to the file or directly to the audio hardware. +

+

+
Specified by:
write_buffer in class Obuffer
+
+
+
+
+
+
+ +

+close

+
+public void close()
+
+
+
Specified by:
close in class Obuffer
+
+
+
+
+
+
+ +

+clear_buffer

+
+public void clear_buffer()
+
+
Description copied from class: Obuffer
+
Clears all data in the buffer (for seeking). +

+

+
Specified by:
clear_buffer in class Obuffer
+
+
+
+
+
+
+ +

+set_stop_flag

+
+public void set_stop_flag()
+
+
Description copied from class: Obuffer
+
Notify the buffer that the user has stopped the stream. +

+

+
Specified by:
set_stop_flag in class Obuffer
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/jlc.html b/JLayer1.0.1/doc/javazoom/jl/converter/jlc.html new file mode 100644 index 0000000..67ddbf2 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/jlc.html @@ -0,0 +1,256 @@ + + + + + + +jlc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class jlc

+
+java.lang.Object
+  extended by javazoom.jl.converter.jlc
+
+
+
+
public class jlc
extends java.lang.Object
+ + +

+The jlc class presents the JavaLayer + Conversion functionality as a command-line program. +

+ +

+

+
Since:
+
0.0.7
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
jlc() + +
+           
+  + + + + + + + + + + + +
+Method Summary
+static voidmain(java.lang.String[] args) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+jlc

+
+public jlc()
+
+
+ + + + + + + + +
+Method Detail
+ +

+main

+
+public static void main(java.lang.String[] args)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/package-frame.html b/JLayer1.0.1/doc/javazoom/jl/converter/package-frame.html new file mode 100644 index 0000000..4bfc943 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/package-frame.html @@ -0,0 +1,53 @@ + + + + + + +javazoom.jl.converter + + + + + + + + + + + +javazoom.jl.converter + + + + +
+Interfaces  + +
+Converter.ProgressListener
+ + + + + + +
+Classes  + +
+Converter +
+Converter.PrintWriterProgressListener +
+jlc +
+RiffFile +
+WaveFile +
+WaveFileObuffer
+ + + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/package-summary.html b/JLayer1.0.1/doc/javazoom/jl/converter/package-summary.html new file mode 100644 index 0000000..9bc73a4 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/package-summary.html @@ -0,0 +1,192 @@ + + + + + + +javazoom.jl.converter + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package javazoom.jl.converter +

+ + + + + + + + + +
+Interface Summary
Converter.ProgressListenerThis interface is used by the Converter to provide + notification of tasks being carried out by the converter, + and to provide new information as it becomes available.
+  + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
ConverterThe Converter class implements the conversion of + an MPEG audio file to a .WAV file.
Converter.PrintWriterProgressListenerImplementation of ProgressListener that writes + notification text to a PrintWriter.
jlcThe jlc class presents the JavaLayer + Conversion functionality as a command-line program.
RiffFileClass to manage RIFF files
WaveFileClass allowing WaveFormat Access
WaveFileObufferImplements an Obuffer by writing the data to + a file in RIFF WAVE format.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/converter/package-tree.html b/JLayer1.0.1/doc/javazoom/jl/converter/package-tree.html new file mode 100644 index 0000000..b2b5e68 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/converter/package-tree.html @@ -0,0 +1,157 @@ + + + + + + +javazoom.jl.converter Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package javazoom.jl.converter +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Bitstream.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Bitstream.html new file mode 100644 index 0000000..6a4ce40 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Bitstream.html @@ -0,0 +1,601 @@ + + + + + + +Bitstream + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Bitstream

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Bitstream
+
+
+
All Implemented Interfaces:
BitstreamErrors, JavaLayerErrors
+
+
+
+
public final class Bitstream
extends java.lang.Object
implements BitstreamErrors
+ + +

+The Bistream class is responsible for parsing + an MPEG audio bitstream. + + REVIEW: much of the parsing currently occurs in the + various decoders. This should be moved into this class and associated + inner classes. +

+ +

+


+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.BitstreamErrors
BITSTREAM_LAST, INVALIDFRAME, STREAM_EOF, STREAM_ERROR, UNEXPECTED_EOF, UNKNOWN_ERROR, UNKNOWN_SAMPLE_RATE
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  + + + + + + + + + + +
+Constructor Summary
Bitstream(java.io.InputStream in) + +
+          Construct a IBitstream that reads data from a + given InputStream.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          Close the Bitstream.
+ voidcloseFrame() + +
+          Close MP3 frame.
+ intget_bits(int number_of_bits) + +
+          Read bits from buffer into the lower bits of an unsigned int.
+ java.io.InputStreamgetRawID3v2() + +
+          Return raw ID3v2 frames + header.
+ intheader_pos() + +
+          Return position of the first audio header.
+ booleanisSyncCurrentPosition(int syncmode) + +
+          Determines if the next 4 bytes of the stream represent a + frame header.
+ booleanisSyncMark(int headerstring, + int syncmode, + int word) + +
+           
+protected  BitstreamExceptionnewBitstreamException(int errorcode) + +
+           
+protected  BitstreamExceptionnewBitstreamException(int errorcode, + java.lang.Throwable throwable) + +
+           
+ intreadBits(int n) + +
+           
+ intreadCheckedBits(int n) + +
+           
+ HeaderreadFrame() + +
+          Reads and parses the next frame from the input source.
+ voidunreadFrame() + +
+          Unreads the bytes read from the frame.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Bitstream

+
+public Bitstream(java.io.InputStream in)
+
+
Construct a IBitstream that reads data from a + given InputStream. +

+

+
Parameters:
in - The InputStream to read from.
+
+ + + + + + + + +
+Method Detail
+ +

+header_pos

+
+public int header_pos()
+
+
Return position of the first audio header. +

+

+
+
+
+ +
Returns:
size of ID3v2 tag frames.
+
+
+
+ +

+getRawID3v2

+
+public java.io.InputStream getRawID3v2()
+
+
Return raw ID3v2 frames + header. +

+

+
+
+
+ +
Returns:
ID3v2 InputStream or null if ID3v2 frames are not available.
+
+
+
+ +

+close

+
+public void close()
+           throws BitstreamException
+
+
Close the Bitstream. +

+

+
+
+
+ +
Throws: +
BitstreamException
+
+
+
+ +

+readFrame

+
+public Header readFrame()
+                 throws BitstreamException
+
+
Reads and parses the next frame from the input source. +

+

+
+
+
+ +
Returns:
the Header describing details of the frame read, + or null if the end of the stream has been reached. +
Throws: +
BitstreamException
+
+
+
+ +

+unreadFrame

+
+public void unreadFrame()
+                 throws BitstreamException
+
+
Unreads the bytes read from the frame. +

+

+
+
+
+ +
Throws: +
BitstreamException
+
+
+
+ +

+closeFrame

+
+public void closeFrame()
+
+
Close MP3 frame. +

+

+
+
+
+
+
+
+
+ +

+isSyncCurrentPosition

+
+public boolean isSyncCurrentPosition(int syncmode)
+                              throws BitstreamException
+
+
Determines if the next 4 bytes of the stream represent a + frame header. +

+

+
+
+
+ +
Throws: +
BitstreamException
+
+
+
+ +

+readBits

+
+public int readBits(int n)
+
+
+
+
+
+
+
+
+
+ +

+readCheckedBits

+
+public int readCheckedBits(int n)
+
+
+
+
+
+
+
+
+
+ +

+newBitstreamException

+
+protected BitstreamException newBitstreamException(int errorcode)
+
+
+
+
+
+
+
+
+
+ +

+newBitstreamException

+
+protected BitstreamException newBitstreamException(int errorcode,
+                                                   java.lang.Throwable throwable)
+
+
+
+
+
+
+
+
+
+ +

+isSyncMark

+
+public boolean isSyncMark(int headerstring,
+                          int syncmode,
+                          int word)
+
+
+
+
+
+
+
+
+
+ +

+get_bits

+
+public int get_bits(int number_of_bits)
+
+
Read bits from buffer into the lower bits of an unsigned int. + The LSB contains the latest read bit of the stream. + (1 <= number_of_bits <= 16) +

+

+
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/BitstreamErrors.html b/JLayer1.0.1/doc/javazoom/jl/decoder/BitstreamErrors.html new file mode 100644 index 0000000..0e08363 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/BitstreamErrors.html @@ -0,0 +1,343 @@ + + + + + + +BitstreamErrors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface BitstreamErrors

+
+
All Superinterfaces:
JavaLayerErrors
+
+
+
All Known Implementing Classes:
Bitstream, BitstreamException
+
+
+
+
public interface BitstreamErrors
extends JavaLayerErrors
+ + +

+This interface describes all error codes that can be thrown + in BistreamExceptions. +

+ +

+

+
Since:
+
0.0.6
+
See Also:
BitstreamException
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intBITSTREAM_LAST + +
+           
+static intINVALIDFRAME + +
+          Frame data are missing.
+static intSTREAM_EOF + +
+          The end of the stream was reached.
+static intSTREAM_ERROR + +
+          A problem occurred reading from the stream.
+static intUNEXPECTED_EOF + +
+          The end of the stream was reached prematurely.
+static intUNKNOWN_ERROR + +
+          An undeterminable error occurred.
+static intUNKNOWN_SAMPLE_RATE + +
+          The header describes an unknown sample rate.
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  +

+ + + + + + + + +
+Field Detail
+ +

+UNKNOWN_ERROR

+
+static final int UNKNOWN_ERROR
+
+
An undeterminable error occurred. +

+

+
See Also:
Constant Field Values
+
+
+ +

+UNKNOWN_SAMPLE_RATE

+
+static final int UNKNOWN_SAMPLE_RATE
+
+
The header describes an unknown sample rate. +

+

+
See Also:
Constant Field Values
+
+
+ +

+STREAM_ERROR

+
+static final int STREAM_ERROR
+
+
A problem occurred reading from the stream. +

+

+
See Also:
Constant Field Values
+
+
+ +

+UNEXPECTED_EOF

+
+static final int UNEXPECTED_EOF
+
+
The end of the stream was reached prematurely. +

+

+
See Also:
Constant Field Values
+
+
+ +

+STREAM_EOF

+
+static final int STREAM_EOF
+
+
The end of the stream was reached. +

+

+
See Also:
Constant Field Values
+
+
+ +

+INVALIDFRAME

+
+static final int INVALIDFRAME
+
+
Frame data are missing. +

+

+
See Also:
Constant Field Values
+
+
+ +

+BITSTREAM_LAST

+
+static final int BITSTREAM_LAST
+
+
+
See Also:
Constant Field Values
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/BitstreamException.html b/JLayer1.0.1/doc/javazoom/jl/decoder/BitstreamException.html new file mode 100644 index 0000000..29be600 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/BitstreamException.html @@ -0,0 +1,359 @@ + + + + + + +BitstreamException + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class BitstreamException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by javazoom.jl.decoder.JavaLayerException
+              extended by javazoom.jl.decoder.BitstreamException
+
+
+
All Implemented Interfaces:
java.io.Serializable, BitstreamErrors, JavaLayerErrors
+
+
+
+
public class BitstreamException
extends JavaLayerException
implements BitstreamErrors
+ + +

+Instances of BitstreamException are thrown + when operations on a Bitstream fail. +

+ The exception provides details of the exception condition + in two ways: +

  1. + as an error-code describing the nature of the error +


  2. + as the Throwable instance, if any, that was thrown + indicating that an exceptional condition has occurred. +

+

+ +

+

+
Since:
+
0.0.6
+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.BitstreamErrors
BITSTREAM_LAST, INVALIDFRAME, STREAM_EOF, STREAM_ERROR, UNEXPECTED_EOF, UNKNOWN_ERROR, UNKNOWN_SAMPLE_RATE
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  + + + + + + + + + + + + + +
+Constructor Summary
BitstreamException(int errorcode, + java.lang.Throwable t) + +
+           
BitstreamException(java.lang.String msg, + java.lang.Throwable t) + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ intgetErrorCode() + +
+           
+static java.lang.StringgetErrorString(int errorcode) + +
+           
+ + + + + + + +
Methods inherited from class javazoom.jl.decoder.JavaLayerException
getException, printStackTrace, printStackTrace
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BitstreamException

+
+public BitstreamException(java.lang.String msg,
+                          java.lang.Throwable t)
+
+
+
+ +

+BitstreamException

+
+public BitstreamException(int errorcode,
+                          java.lang.Throwable t)
+
+
+ + + + + + + + +
+Method Detail
+ +

+getErrorCode

+
+public int getErrorCode()
+
+
+
+
+
+
+
+
+
+ +

+getErrorString

+
+public static java.lang.String getErrorString(int errorcode)
+
+
+
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Control.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Control.html new file mode 100644 index 0000000..f457c6d --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Control.html @@ -0,0 +1,325 @@ + + + + + + +Control + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface Control

+
+
+
public interface Control
+ + +

+Work in progress. +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ doublegetPosition() + +
+          Retrieves the current position.
+ booleanisPlaying() + +
+           
+ booleanisRandomAccess() + +
+           
+ voidpause() + +
+           
+ voidsetPosition(double d) + +
+           
+ voidstart() + +
+          Starts playback of the media presented by this control.
+ voidstop() + +
+          Stops playback of the media presented by this control.
+  +

+ + + + + + + + +
+Method Detail
+ +

+start

+
+void start()
+
+
Starts playback of the media presented by this control. +

+

+
+
+
+
+ +

+stop

+
+void stop()
+
+
Stops playback of the media presented by this control. +

+

+
+
+
+
+ +

+isPlaying

+
+boolean isPlaying()
+
+
+
+
+
+
+ +

+pause

+
+void pause()
+
+
+
+
+
+
+ +

+isRandomAccess

+
+boolean isRandomAccess()
+
+
+
+
+
+
+ +

+getPosition

+
+double getPosition()
+
+
Retrieves the current position. +

+

+
+
+
+
+ +

+setPosition

+
+void setPosition(double d)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Crc16.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Crc16.html new file mode 100644 index 0000000..7a85bda --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Crc16.html @@ -0,0 +1,279 @@ + + + + + + +Crc16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Crc16

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Crc16
+
+
+
+
public final class Crc16
extends java.lang.Object
+ + +

+16-Bit CRC checksum +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
Crc16() + +
+          Dummy Constructor
+  + + + + + + + + + + + + + + + +
+Method Summary
+ voidadd_bits(int bitstring, + int length) + +
+          Feed a bitstring to the crc calculation (0 < length <= 32).
+ shortchecksum() + +
+          Return the calculated checksum.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Crc16

+
+public Crc16()
+
+
Dummy Constructor +

+

+ + + + + + + + +
+Method Detail
+ +

+add_bits

+
+public void add_bits(int bitstring,
+                     int length)
+
+
Feed a bitstring to the crc calculation (0 < length <= 32). +

+

+
+
+
+
+ +

+checksum

+
+public short checksum()
+
+
Return the calculated checksum. + Erase it for next calls to add_bits(). +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Decoder.Params.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Decoder.Params.html new file mode 100644 index 0000000..22915e8 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Decoder.Params.html @@ -0,0 +1,342 @@ + + + + + + +Decoder.Params + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Decoder.Params

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Decoder.Params
+
+
+
All Implemented Interfaces:
java.lang.Cloneable
+
+
+
Enclosing class:
Decoder
+
+
+
+
public static class Decoder.Params
extends java.lang.Object
implements java.lang.Cloneable
+ + +

+The Params class presents the customizable + aspects of the decoder. +

+ Instances of this class are not thread safe. +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
Decoder.Params() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.lang.Objectclone() + +
+           
+ EqualizergetInitialEqualizerSettings() + +
+          Retrieves the equalizer settings that the decoder's equalizer + will be initialized from.
+ OutputChannelsgetOutputChannels() + +
+           
+ voidsetOutputChannels(OutputChannels out) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Decoder.Params

+
+public Decoder.Params()
+
+
+ + + + + + + + +
+Method Detail
+ +

+clone

+
+public java.lang.Object clone()
+
+
+
Overrides:
clone in class java.lang.Object
+
+
+
+
+
+
+ +

+setOutputChannels

+
+public void setOutputChannels(OutputChannels out)
+
+
+
+
+
+
+
+
+
+ +

+getOutputChannels

+
+public OutputChannels getOutputChannels()
+
+
+
+
+
+
+
+
+
+ +

+getInitialEqualizerSettings

+
+public Equalizer getInitialEqualizerSettings()
+
+
Retrieves the equalizer settings that the decoder's equalizer + will be initialized from. +

+ The Equalizer instance returned + cannot be changed in real time to affect the + decoder output as it is used only to initialize the decoders + EQ settings. To affect the decoder's output in realtime, + use the Equalizer returned from the getEqualizer() method on + the decoder. +

+

+
+
+
+ +
Returns:
The Equalizer used to initialize the + EQ settings of the decoder.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Decoder.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Decoder.html new file mode 100644 index 0000000..cabfc58 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Decoder.html @@ -0,0 +1,575 @@ + + + + + + +Decoder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Decoder

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Decoder
+
+
+
All Implemented Interfaces:
DecoderErrors, JavaLayerErrors
+
+
+
+
public class Decoder
extends java.lang.Object
implements DecoderErrors
+ + +

+The Decoder class encapsulates the details of + decoding an MPEG audio frame. +

+ +

+

+
Since:
+
0.0.5
+
Version:
+
0.0.7 12/12/99
+
+
+ +

+ + + + + + + + + + + +
+Nested Class Summary
+static classDecoder.Params + +
+          The Params class presents the customizable + aspects of the decoder.
+ + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.DecoderErrors
ILLEGAL_SUBBAND_ALLOCATION, UNKNOWN_ERROR, UNSUPPORTED_LAYER
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  + + + + + + + + + + + + + +
+Constructor Summary
Decoder() + +
+          Creates a new Decoder instance with default + parameters.
Decoder(Decoder.Params params0) + +
+          Creates a new Decoder instance with default + parameters.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ ObufferdecodeFrame(Header header, + Bitstream stream) + +
+          Decodes one frame from an MPEG audio bitstream.
+static Decoder.ParamsgetDefaultParams() + +
+           
+ intgetOutputBlockSize() + +
+          Retrieves the maximum number of samples that will be written to + the output buffer when one frame is decoded.
+ intgetOutputChannels() + +
+          Retrieves the number of channels of PCM samples output by + this decoder.
+ intgetOutputFrequency() + +
+          Retrieves the sample frequency of the PCM samples output + by this decoder.
+protected  DecoderExceptionnewDecoderException(int errorcode) + +
+           
+protected  DecoderExceptionnewDecoderException(int errorcode, + java.lang.Throwable throwable) + +
+           
+protected  FrameDecoderretrieveDecoder(Header header, + Bitstream stream, + int layer) + +
+           
+ voidsetEqualizer(Equalizer eq) + +
+           
+ voidsetOutputBuffer(Obuffer out) + +
+          Changes the output buffer.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Decoder

+
+public Decoder()
+
+
Creates a new Decoder instance with default + parameters. +

+

+
+ +

+Decoder

+
+public Decoder(Decoder.Params params0)
+
+
Creates a new Decoder instance with default + parameters. +

+

+
Parameters:
params - The Params instance that describes + the customizable aspects of the decoder.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultParams

+
+public static Decoder.Params getDefaultParams()
+
+
+
+
+
+
+
+
+
+ +

+setEqualizer

+
+public void setEqualizer(Equalizer eq)
+
+
+
+
+
+
+
+
+
+ +

+decodeFrame

+
+public Obuffer decodeFrame(Header header,
+                           Bitstream stream)
+                    throws DecoderException
+
+
Decodes one frame from an MPEG audio bitstream. +

+

+
+
+
+
Parameters:
header - The header describing the frame to decode.
bitstream - The bistream that provides the bits for te body of the frame. +
Returns:
A SampleBuffer containing the decoded samples. +
Throws: +
DecoderException
+
+
+
+ +

+setOutputBuffer

+
+public void setOutputBuffer(Obuffer out)
+
+
Changes the output buffer. This will take effect the next time + decodeFrame() is called. +

+

+
+
+
+
+
+
+
+ +

+getOutputFrequency

+
+public int getOutputFrequency()
+
+
Retrieves the sample frequency of the PCM samples output + by this decoder. This typically corresponds to the sample + rate encoded in the MPEG audio stream. +

+

+
+
+
+
Parameters:
the - sample rate (in Hz) of the samples written to the + output buffer when decoding.
+
+
+
+ +

+getOutputChannels

+
+public int getOutputChannels()
+
+
Retrieves the number of channels of PCM samples output by + this decoder. This usually corresponds to the number of + channels in the MPEG audio stream, although it may differ. +

+

+
+
+
+ +
Returns:
The number of output channels in the decoded samples: 1 + for mono, or 2 for stereo.
+
+
+
+ +

+getOutputBlockSize

+
+public int getOutputBlockSize()
+
+
Retrieves the maximum number of samples that will be written to + the output buffer when one frame is decoded. This can be used to + help calculate the size of other buffers whose size is based upon + the number of samples written to the output buffer. NB: this is + an upper bound and fewer samples may actually be written, depending + upon the sample rate and number of channels. +

+

+
+
+
+ +
Returns:
The maximum number of samples that are written to the + output buffer when decoding a single frame of MPEG audio.
+
+
+
+ +

+newDecoderException

+
+protected DecoderException newDecoderException(int errorcode)
+
+
+
+
+
+
+
+
+
+ +

+newDecoderException

+
+protected DecoderException newDecoderException(int errorcode,
+                                               java.lang.Throwable throwable)
+
+
+
+
+
+
+
+
+
+ +

+retrieveDecoder

+
+protected FrameDecoder retrieveDecoder(Header header,
+                                       Bitstream stream,
+                                       int layer)
+                                throws DecoderException
+
+
+
+
+
+ +
Throws: +
DecoderException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/DecoderErrors.html b/JLayer1.0.1/doc/javazoom/jl/decoder/DecoderErrors.html new file mode 100644 index 0000000..953a9a7 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/DecoderErrors.html @@ -0,0 +1,259 @@ + + + + + + +DecoderErrors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface DecoderErrors

+
+
All Superinterfaces:
JavaLayerErrors
+
+
+
All Known Implementing Classes:
Decoder, DecoderException
+
+
+
+
public interface DecoderErrors
extends JavaLayerErrors
+ + +

+This interface provides constants describing the error + codes used by the Decoder to indicate errors. +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intILLEGAL_SUBBAND_ALLOCATION + +
+          Illegal allocation in subband layer.
+static intUNKNOWN_ERROR + +
+           
+static intUNSUPPORTED_LAYER + +
+          Layer not supported by the decoder.
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  +

+ + + + + + + + +
+Field Detail
+ +

+UNKNOWN_ERROR

+
+static final int UNKNOWN_ERROR
+
+
+
See Also:
Constant Field Values
+
+
+ +

+UNSUPPORTED_LAYER

+
+static final int UNSUPPORTED_LAYER
+
+
Layer not supported by the decoder. +

+

+
See Also:
Constant Field Values
+
+
+ +

+ILLEGAL_SUBBAND_ALLOCATION

+
+static final int ILLEGAL_SUBBAND_ALLOCATION
+
+
Illegal allocation in subband layer. Indicates a corrupt stream. +

+

+
See Also:
Constant Field Values
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/DecoderException.html b/JLayer1.0.1/doc/javazoom/jl/decoder/DecoderException.html new file mode 100644 index 0000000..afbc5fc --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/DecoderException.html @@ -0,0 +1,348 @@ + + + + + + +DecoderException + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class DecoderException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by javazoom.jl.decoder.JavaLayerException
+              extended by javazoom.jl.decoder.DecoderException
+
+
+
All Implemented Interfaces:
java.io.Serializable, DecoderErrors, JavaLayerErrors
+
+
+
+
public class DecoderException
extends JavaLayerException
implements DecoderErrors
+ + +

+The DecoderException represents the class of + errors that can occur when decoding MPEG audio. +

+ +

+

+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.DecoderErrors
ILLEGAL_SUBBAND_ALLOCATION, UNKNOWN_ERROR, UNSUPPORTED_LAYER
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  + + + + + + + + + + + + + +
+Constructor Summary
DecoderException(int errorcode, + java.lang.Throwable t) + +
+           
DecoderException(java.lang.String msg, + java.lang.Throwable t) + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ intgetErrorCode() + +
+           
+static java.lang.StringgetErrorString(int errorcode) + +
+           
+ + + + + + + +
Methods inherited from class javazoom.jl.decoder.JavaLayerException
getException, printStackTrace, printStackTrace
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DecoderException

+
+public DecoderException(java.lang.String msg,
+                        java.lang.Throwable t)
+
+
+
+ +

+DecoderException

+
+public DecoderException(int errorcode,
+                        java.lang.Throwable t)
+
+
+ + + + + + + + +
+Method Detail
+ +

+getErrorCode

+
+public int getErrorCode()
+
+
+
+
+
+
+
+
+
+ +

+getErrorString

+
+public static java.lang.String getErrorString(int errorcode)
+
+
+
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Equalizer.EQFunction.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Equalizer.EQFunction.html new file mode 100644 index 0000000..13a7b4e --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Equalizer.EQFunction.html @@ -0,0 +1,255 @@ + + + + + + +Equalizer.EQFunction + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Equalizer.EQFunction

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Equalizer.EQFunction
+
+
+
Enclosing class:
Equalizer
+
+
+
+
public abstract static class Equalizer.EQFunction
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
Equalizer.EQFunction() + +
+           
+  + + + + + + + + + + + +
+Method Summary
+ floatgetBand(int band) + +
+          Returns the setting of a band in the equalizer.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Equalizer.EQFunction

+
+public Equalizer.EQFunction()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getBand

+
+public float getBand(int band)
+
+
Returns the setting of a band in the equalizer. +

+

+
Parameters:
band - The index of the band to retrieve the setting + for. +
Returns:
the setting of the specified band. This is a value between + -1 and +1.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Equalizer.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Equalizer.html new file mode 100644 index 0000000..39bd1c8 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Equalizer.html @@ -0,0 +1,491 @@ + + + + + + +Equalizer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Equalizer

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Equalizer
+
+
+
+
public final class Equalizer
extends java.lang.Object
+ + +

+The Equalizer class can be used to specify + equalization settings for the MPEG audio decoder. +

+ The equalizer consists of 32 band-pass filters. + Each band of the equalizer can take on a fractional value between + -1.0 and +1.0. + At -1.0, the input signal is attenuated by 6dB, at +1.0 the signal is + amplified by 6dB. +

+ +

+

+
See Also:
Decoder
+
+ +

+ + + + + + + + + + + +
+Nested Class Summary
+static classEqualizer.EQFunction + +
+           
+ + + + + + + + + + + + + + +
+Field Summary
+static floatBAND_NOT_PRESENT + +
+          Equalizer setting to denote that a given band will not be + present in the output signal.
+static EqualizerPASS_THRU_EQ + +
+           
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
Equalizer() + +
+          Creates a new Equalizer instance.
Equalizer(Equalizer.EQFunction eq) + +
+           
Equalizer(float[] settings) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ floatgetBand(int band) + +
+          Retrieves the eq setting for a given band.
+ intgetBandCount() + +
+          Retrieves the number of bands present in this equalizer.
+ voidreset() + +
+          Sets all bands to 0.0
+ floatsetBand(int band, + float neweq) + +
+           
+ voidsetFrom(Equalizer.EQFunction eq) + +
+           
+ voidsetFrom(Equalizer eq) + +
+          Sets the bands of this equalizer to the value the bands of + another equalizer.
+ voidsetFrom(float[] eq) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+BAND_NOT_PRESENT

+
+public static final float BAND_NOT_PRESENT
+
+
Equalizer setting to denote that a given band will not be + present in the output signal. +

+

+
See Also:
Constant Field Values
+
+
+ +

+PASS_THRU_EQ

+
+public static final Equalizer PASS_THRU_EQ
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+Equalizer

+
+public Equalizer()
+
+
Creates a new Equalizer instance. +

+

+
+ +

+Equalizer

+
+public Equalizer(float[] settings)
+
+
+
+ +

+Equalizer

+
+public Equalizer(Equalizer.EQFunction eq)
+
+
+ + + + + + + + +
+Method Detail
+ +

+setFrom

+
+public void setFrom(float[] eq)
+
+
+
+
+
+
+ +

+setFrom

+
+public void setFrom(Equalizer.EQFunction eq)
+
+
+
+
+
+
+ +

+setFrom

+
+public void setFrom(Equalizer eq)
+
+
Sets the bands of this equalizer to the value the bands of + another equalizer. Bands that are not present in both equalizers are ignored. +

+

+
+
+
+
+ +

+reset

+
+public void reset()
+
+
Sets all bands to 0.0 +

+

+
+
+
+
+ +

+getBandCount

+
+public int getBandCount()
+
+
Retrieves the number of bands present in this equalizer. +

+

+
+
+
+
+ +

+setBand

+
+public float setBand(int band,
+                     float neweq)
+
+
+
+
+
+
+ +

+getBand

+
+public float getBand(int band)
+
+
Retrieves the eq setting for a given band. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/FrameDecoder.html b/JLayer1.0.1/doc/javazoom/jl/decoder/FrameDecoder.html new file mode 100644 index 0000000..d3f54dd --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/FrameDecoder.html @@ -0,0 +1,211 @@ + + + + + + +FrameDecoder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface FrameDecoder

+
+
+
public interface FrameDecoder
+ + +

+Implementations of FrameDecoder are responsible for decoding + an MPEG audio frame. +

+ +

+


+ +

+ + + + + + + + + + + + +
+Method Summary
+ voiddecodeFrame() + +
+          Decodes one frame of MPEG audio.
+  +

+ + + + + + + + +
+Method Detail
+ +

+decodeFrame

+
+void decodeFrame()
+                 throws DecoderException
+
+
Decodes one frame of MPEG audio. +

+

+ +
Throws: +
DecoderException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Header.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Header.html new file mode 100644 index 0000000..a922c16 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Header.html @@ -0,0 +1,1202 @@ + + + + + + +Header + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Header

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Header
+
+
+
+
public final class Header
extends java.lang.Object
+ + +

+Class for extracting information from a frame header. +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static java.lang.String[][][]bitrate_str + +
+           
+static int[][][]bitrates + +
+           
+ shortchecksum + +
+           
+static intDUAL_CHANNEL + +
+           
+static intFOURTYEIGHT + +
+           
+static intFOURTYFOUR_POINT_ONE + +
+           
+ intframesize + +
+           
+static int[][]frequencies + +
+           
+static intJOINT_STEREO + +
+           
+static intMPEG1 + +
+          Constant for MPEG-1 version
+static intMPEG2_LSF + +
+          Constant for MPEG-2 LSF version
+static intMPEG25_LSF + +
+           
+ intnSlots + +
+           
+static intSINGLE_CHANNEL + +
+           
+static intSTEREO + +
+           
+static intTHIRTYTWO + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intbitrate_index() + +
+          Returns bitrate index.
+ intbitrate_instant() + +
+          Return Instant Bitrate.
+ java.lang.Stringbitrate_string() + +
+          Return Bitrate.
+ intbitrate() + +
+          Return Bitrate.
+ intcalculate_framesize() + +
+          Calculate Frame size.
+ booleanchecksum_ok() + +
+          Returns Checksum flag.
+ booleanchecksums() + +
+          Returns Protection bit.
+ booleancopyright() + +
+          Returns Copyright.
+ intfrequency() + +
+          Returns Frequency.
+ intgetSyncHeader() + +
+          Returns synchronized header.
+ intintensity_stereo_bound() + +
+          Returns Intensity Stereo.
+ java.lang.Stringlayer_string() + +
+          Return Layer version.
+ intlayer() + +
+          Returns Layer ID.
+ intmax_number_of_frames(int streamsize) + +
+          Returns the maximum number of frames in the stream.
+ intmin_number_of_frames(int streamsize) + +
+          Returns the maximum number of frames in the stream.
+ intmode_extension() + +
+          Returns Mode Extension.
+ java.lang.Stringmode_string() + +
+          Returns Mode.
+ intmode() + +
+          Returns Mode.
+ floatms_per_frame() + +
+          Returns ms/frame.
+ intnumber_of_subbands() + +
+          Returns the number of subbands in the current frame.
+ booleanoriginal() + +
+          Returns Original.
+ booleanpadding() + +
+          Returns Layer III Padding bit.
+ java.lang.Stringsample_frequency_string() + +
+          Returns Frequency
+ intsample_frequency() + +
+          Returns Sample Frequency.
+ intslots() + +
+          Returns Slots.
+ java.lang.StringtoString() + +
+           
+ floattotal_ms(int streamsize) + +
+          Returns total ms.
+ intvbr_scale() + +
+          Return VBR scale.
+ byte[]vbr_toc() + +
+          Return VBR TOC.
+ booleanvbr() + +
+          Return VBR.
+ java.lang.Stringversion_string() + +
+          Returns Version.
+ intversion() + +
+          Returns version.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+frequencies

+
+public static final int[][] frequencies
+
+
+
+
+
+ +

+MPEG2_LSF

+
+public static final int MPEG2_LSF
+
+
Constant for MPEG-2 LSF version +

+

+
See Also:
Constant Field Values
+
+
+ +

+MPEG25_LSF

+
+public static final int MPEG25_LSF
+
+
+
See Also:
Constant Field Values
+
+
+ +

+MPEG1

+
+public static final int MPEG1
+
+
Constant for MPEG-1 version +

+

+
See Also:
Constant Field Values
+
+
+ +

+STEREO

+
+public static final int STEREO
+
+
+
See Also:
Constant Field Values
+
+
+ +

+JOINT_STEREO

+
+public static final int JOINT_STEREO
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DUAL_CHANNEL

+
+public static final int DUAL_CHANNEL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+SINGLE_CHANNEL

+
+public static final int SINGLE_CHANNEL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+FOURTYFOUR_POINT_ONE

+
+public static final int FOURTYFOUR_POINT_ONE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+FOURTYEIGHT

+
+public static final int FOURTYEIGHT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+THIRTYTWO

+
+public static final int THIRTYTWO
+
+
+
See Also:
Constant Field Values
+
+
+ +

+checksum

+
+public short checksum
+
+
+
+
+
+ +

+framesize

+
+public int framesize
+
+
+
+
+
+ +

+nSlots

+
+public int nSlots
+
+
+
+
+
+ +

+bitrates

+
+public static final int[][][] bitrates
+
+
+
+
+
+ +

+bitrate_str

+
+public static final java.lang.String[][][] bitrate_str
+
+
+
+
+ + + + + + + + +
+Method Detail
+ +

+toString

+
+public java.lang.String toString()
+
+
+
Overrides:
toString in class java.lang.Object
+
+
+
+
+
+
+ +

+version

+
+public int version()
+
+
Returns version. +

+

+
+
+
+
+ +

+layer

+
+public int layer()
+
+
Returns Layer ID. +

+

+
+
+
+
+ +

+bitrate_index

+
+public int bitrate_index()
+
+
Returns bitrate index. +

+

+
+
+
+
+ +

+sample_frequency

+
+public int sample_frequency()
+
+
Returns Sample Frequency. +

+

+
+
+
+
+ +

+frequency

+
+public int frequency()
+
+
Returns Frequency. +

+

+
+
+
+
+ +

+mode

+
+public int mode()
+
+
Returns Mode. +

+

+
+
+
+
+ +

+checksums

+
+public boolean checksums()
+
+
Returns Protection bit. +

+

+
+
+
+
+ +

+copyright

+
+public boolean copyright()
+
+
Returns Copyright. +

+

+
+
+
+
+ +

+original

+
+public boolean original()
+
+
Returns Original. +

+

+
+
+
+
+ +

+vbr

+
+public boolean vbr()
+
+
Return VBR. +

+

+ +
Returns:
true if VBR header is found
+
+
+
+ +

+vbr_scale

+
+public int vbr_scale()
+
+
Return VBR scale. +

+

+ +
Returns:
scale of -1 if not available
+
+
+
+ +

+vbr_toc

+
+public byte[] vbr_toc()
+
+
Return VBR TOC. +

+

+ +
Returns:
vbr toc ot null if not available
+
+
+
+ +

+checksum_ok

+
+public boolean checksum_ok()
+
+
Returns Checksum flag. + Compares computed checksum with stream checksum. +

+

+
+
+
+
+ +

+padding

+
+public boolean padding()
+
+
Returns Layer III Padding bit. +

+

+
+
+
+
+ +

+slots

+
+public int slots()
+
+
Returns Slots. +

+

+
+
+
+
+ +

+mode_extension

+
+public int mode_extension()
+
+
Returns Mode Extension. +

+

+
+
+
+
+ +

+calculate_framesize

+
+public int calculate_framesize()
+
+
Calculate Frame size. + Calculates framesize in bytes excluding header size. +

+

+
+
+
+
+ +

+max_number_of_frames

+
+public int max_number_of_frames(int streamsize)
+
+
Returns the maximum number of frames in the stream. +

+

+
Parameters:
streamsize - +
Returns:
number of frames
+
+
+
+ +

+min_number_of_frames

+
+public int min_number_of_frames(int streamsize)
+
+
Returns the maximum number of frames in the stream. +

+

+
Parameters:
streamsize - +
Returns:
number of frames
+
+
+
+ +

+ms_per_frame

+
+public float ms_per_frame()
+
+
Returns ms/frame. +

+

+ +
Returns:
milliseconds per frame
+
+
+
+ +

+total_ms

+
+public float total_ms(int streamsize)
+
+
Returns total ms. +

+

+
Parameters:
streamsize - +
Returns:
total milliseconds
+
+
+
+ +

+getSyncHeader

+
+public int getSyncHeader()
+
+
Returns synchronized header. +

+

+
+
+
+
+ +

+layer_string

+
+public java.lang.String layer_string()
+
+
Return Layer version. +

+

+
+
+
+
+ +

+bitrate_string

+
+public java.lang.String bitrate_string()
+
+
Return Bitrate. +

+

+ +
Returns:
bitrate in bps
+
+
+
+ +

+bitrate

+
+public int bitrate()
+
+
Return Bitrate. +

+

+ +
Returns:
bitrate in bps and average bitrate for VBR header
+
+
+
+ +

+bitrate_instant

+
+public int bitrate_instant()
+
+
Return Instant Bitrate. + Bitrate for VBR is not constant. +

+

+ +
Returns:
bitrate in bps
+
+
+
+ +

+sample_frequency_string

+
+public java.lang.String sample_frequency_string()
+
+
Returns Frequency +

+

+ +
Returns:
frequency string in kHz
+
+
+
+ +

+mode_string

+
+public java.lang.String mode_string()
+
+
Returns Mode. +

+

+
+
+
+
+ +

+version_string

+
+public java.lang.String version_string()
+
+
Returns Version. +

+

+ +
Returns:
MPEG-1 or MPEG-2 LSF or MPEG-2.5 LSF
+
+
+
+ +

+number_of_subbands

+
+public int number_of_subbands()
+
+
Returns the number of subbands in the current frame. +

+

+ +
Returns:
number of subbands
+
+
+
+ +

+intensity_stereo_bound

+
+public int intensity_stereo_bound()
+
+
Returns Intensity Stereo. + (Layer II joint stereo only). + Returns the number of subbands which are in stereo mode, + subbands above that limit are in intensity stereo mode. +

+

+ +
Returns:
intensity
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/InputStreamSource.html b/JLayer1.0.1/doc/javazoom/jl/decoder/InputStreamSource.html new file mode 100644 index 0000000..621d3dc --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/InputStreamSource.html @@ -0,0 +1,396 @@ + + + + + + +InputStreamSource + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class InputStreamSource

+
+java.lang.Object
+  extended by javazoom.jl.decoder.InputStreamSource
+
+
+
All Implemented Interfaces:
Source
+
+
+
+
public class InputStreamSource
extends java.lang.Object
implements Source
+ + +

+Work In Progress. + + An instance of InputStreamSource implements a + Source that provides data from an InputStream + . Seeking functionality is not supported. +

+ +

+


+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.Source
LENGTH_UNKNOWN
+  + + + + + + + + + + +
+Constructor Summary
InputStreamSource(java.io.InputStream in) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanisSeekable() + +
+           
+ longlength() + +
+           
+ intread(byte[] b, + int offs, + int len) + +
+           
+ longseek(long to) + +
+           
+ longtell() + +
+           
+ booleanwillReadBlock() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+InputStreamSource

+
+public InputStreamSource(java.io.InputStream in)
+
+
+ + + + + + + + +
+Method Detail
+ +

+read

+
+public int read(byte[] b,
+                int offs,
+                int len)
+         throws java.io.IOException
+
+
+
Specified by:
read in interface Source
+
+
+ +
Throws: +
java.io.IOException
+
+
+
+ +

+willReadBlock

+
+public boolean willReadBlock()
+
+
+
Specified by:
willReadBlock in interface Source
+
+
+
+
+
+
+ +

+isSeekable

+
+public boolean isSeekable()
+
+
+
Specified by:
isSeekable in interface Source
+
+
+
+
+
+
+ +

+tell

+
+public long tell()
+
+
+
Specified by:
tell in interface Source
+
+
+
+
+
+
+ +

+seek

+
+public long seek(long to)
+
+
+
Specified by:
seek in interface Source
+
+
+
+
+
+
+ +

+length

+
+public long length()
+
+
+
Specified by:
length in interface Source
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerError.html b/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerError.html new file mode 100644 index 0000000..caad212 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerError.html @@ -0,0 +1,242 @@ + + + + + + +JavaLayerError + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class JavaLayerError

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Error
+          extended by javazoom.jl.decoder.JavaLayerError
+
+
+
All Implemented Interfaces:
java.io.Serializable
+
+
+
+
public class JavaLayerError
extends java.lang.Error
+ + +

+Work in progress. + + API usage errors may be handled by throwing an instance of this + class, as per JMF 2.0. +

+ +

+

+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
JavaLayerError() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JavaLayerError

+
+public JavaLayerError()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerErrors.html b/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerErrors.html new file mode 100644 index 0000000..87b559f --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerErrors.html @@ -0,0 +1,233 @@ + + + + + + +JavaLayerErrors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface JavaLayerErrors

+
+
All Known Subinterfaces:
BitstreamErrors, DecoderErrors
+
+
+
All Known Implementing Classes:
Bitstream, BitstreamException, Decoder, DecoderException
+
+
+
+
public interface JavaLayerErrors
+ + +

+Exception erorr codes for components of the JavaLayer API. +

+ +

+


+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+static intBITSTREAM_ERROR + +
+          The first bitstream error code.
+static intDECODER_ERROR + +
+          The first decoder error code.
+  +

+ + + + + + + + +
+Field Detail
+ +

+BITSTREAM_ERROR

+
+static final int BITSTREAM_ERROR
+
+
The first bitstream error code. See the DecoderErrors + interface for other bitstream error codes. +

+

+
See Also:
Constant Field Values
+
+
+ +

+DECODER_ERROR

+
+static final int DECODER_ERROR
+
+
The first decoder error code. See the DecoderErrors + interface for other decoder error codes. +

+

+
See Also:
Constant Field Values
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerException.html b/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerException.html new file mode 100644 index 0000000..5e71fa1 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerException.html @@ -0,0 +1,348 @@ + + + + + + +JavaLayerException + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class JavaLayerException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by javazoom.jl.decoder.JavaLayerException
+
+
+
All Implemented Interfaces:
java.io.Serializable
+
+
+
Direct Known Subclasses:
BitstreamException, DecoderException
+
+
+
+
public class JavaLayerException
extends java.lang.Exception
+ + +

+The JavaLayerException is the base class for all API-level + exceptions thrown by JavaLayer. To facilitate conversion and + common handling of exceptions from other domains, the class + can delegate some functionality to a contained Throwable instance. +

+

+ +

+

+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + +
+Constructor Summary
JavaLayerException() + +
+           
JavaLayerException(java.lang.String msg) + +
+           
JavaLayerException(java.lang.String msg, + java.lang.Throwable t) + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.lang.ThrowablegetException() + +
+           
+ voidprintStackTrace() + +
+           
+ voidprintStackTrace(java.io.PrintStream ps) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JavaLayerException

+
+public JavaLayerException()
+
+
+
+ +

+JavaLayerException

+
+public JavaLayerException(java.lang.String msg)
+
+
+
+ +

+JavaLayerException

+
+public JavaLayerException(java.lang.String msg,
+                          java.lang.Throwable t)
+
+
+ + + + + + + + +
+Method Detail
+ +

+getException

+
+public java.lang.Throwable getException()
+
+
+
+
+
+
+ +

+printStackTrace

+
+public void printStackTrace()
+
+
+
Overrides:
printStackTrace in class java.lang.Throwable
+
+
+
+
+
+
+ +

+printStackTrace

+
+public void printStackTrace(java.io.PrintStream ps)
+
+
+
Overrides:
printStackTrace in class java.lang.Throwable
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerHook.html b/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerHook.html new file mode 100644 index 0000000..cbac229 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerHook.html @@ -0,0 +1,209 @@ + + + + + + +JavaLayerHook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface JavaLayerHook

+
+
+
public interface JavaLayerHook
+ + +

+The JavaLayerHooks class allows developers to change + the way the JavaLayer library uses Resources. +

+ +

+


+ +

+ + + + + + + + + + + + +
+Method Summary
+ java.io.InputStreamgetResourceAsStream(java.lang.String name) + +
+          Retrieves the named resource.
+  +

+ + + + + + + + +
+Method Detail
+ +

+getResourceAsStream

+
+java.io.InputStream getResourceAsStream(java.lang.String name)
+
+
Retrieves the named resource. This allows resources to be + obtained without specifying how they are retrieved. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerUtils.html b/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerUtils.html new file mode 100644 index 0000000..361dec5 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/JavaLayerUtils.html @@ -0,0 +1,436 @@ + + + + + + +JavaLayerUtils + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class JavaLayerUtils

+
+java.lang.Object
+  extended by javazoom.jl.decoder.JavaLayerUtils
+
+
+
+
public class JavaLayerUtils
extends java.lang.Object
+ + +

+The JavaLayerUtils class is not strictly part of the JavaLayer API. + It serves to provide useful methods and system-wide hooks. +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
JavaLayerUtils() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static java.lang.Objectdeserialize(java.io.InputStream in) + +
+          Deserializes an object from the given InputStream.
+static java.lang.Objectdeserialize(java.io.InputStream in, + java.lang.Class cls) + +
+          Deserializes the object contained in the given input stream.
+static java.lang.ObjectdeserializeArray(java.io.InputStream in, + java.lang.Class elemType, + int length) + +
+          Deserializes an array from a given InputStream.
+static java.lang.ObjectdeserializeArrayResource(java.lang.String name, + java.lang.Class elemType, + int length) + +
+           
+static JavaLayerHookgetHook() + +
+           
+static java.io.InputStreamgetResourceAsStream(java.lang.String name) + +
+          Retrieves an InputStream for a named resource.
+static voidserialize(java.io.OutputStream out, + java.lang.Object obj) + +
+           
+static voidsetHook(JavaLayerHook hook0) + +
+          Sets the system-wide JavaLayer hook.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JavaLayerUtils

+
+public JavaLayerUtils()
+
+
+ + + + + + + + +
+Method Detail
+ +

+deserialize

+
+public static java.lang.Object deserialize(java.io.InputStream in,
+                                           java.lang.Class cls)
+                                    throws java.io.IOException
+
+
Deserializes the object contained in the given input stream. +

+

+
Parameters:
in - The input stream to deserialize an object from.
cls - The expected class of the deserialized object. +
Throws: +
java.io.IOException
+
+
+
+ +

+deserialize

+
+public static java.lang.Object deserialize(java.io.InputStream in)
+                                    throws java.io.IOException
+
+
Deserializes an object from the given InputStream. + The deserialization is delegated to an + ObjectInputStream instance. +

+

+
Parameters:
in - The InputStream to deserialize an object + from. +
Returns:
The object deserialized from the stream. +
Throws: +
java.io.IOException - is thrown if there was a problem reading + the underlying stream, or an object could not be deserialized + from the stream.
See Also:
ObjectInputStream
+
+
+
+ +

+deserializeArray

+
+public static java.lang.Object deserializeArray(java.io.InputStream in,
+                                                java.lang.Class elemType,
+                                                int length)
+                                         throws java.io.IOException
+
+
Deserializes an array from a given InputStream. +

+

+
Parameters:
in - The InputStream to + deserialize an object from.
elemType - The class denoting the type of the array + elements.
length - The expected length of the array, or -1 if + any length is expected. +
Throws: +
java.io.IOException
+
+
+
+ +

+deserializeArrayResource

+
+public static java.lang.Object deserializeArrayResource(java.lang.String name,
+                                                        java.lang.Class elemType,
+                                                        int length)
+                                                 throws java.io.IOException
+
+
+ +
Throws: +
java.io.IOException
+
+
+
+ +

+serialize

+
+public static void serialize(java.io.OutputStream out,
+                             java.lang.Object obj)
+                      throws java.io.IOException
+
+
+ +
Throws: +
java.io.IOException
+
+
+
+ +

+setHook

+
+public static void setHook(JavaLayerHook hook0)
+
+
Sets the system-wide JavaLayer hook. +

+

+
+
+
+
+ +

+getHook

+
+public static JavaLayerHook getHook()
+
+
+
+
+
+
+ +

+getResourceAsStream

+
+public static java.io.InputStream getResourceAsStream(java.lang.String name)
+
+
Retrieves an InputStream for a named resource. +

+

+
Parameters:
name - The name of the resource. This must be a simple + name, and not a qualified package name. +
Returns:
The InputStream for the named resource, or null if + the resource has not been found. If a hook has been + provided, its getResourceAsStream() method is called + to retrieve the resource.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Manager.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Manager.html new file mode 100644 index 0000000..4a34d70 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Manager.html @@ -0,0 +1,291 @@ + + + + + + +Manager + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Manager

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Manager
+
+
+
+
public class Manager
extends java.lang.Object
+ + +

+Work in progress. + + Manages a number of controls. +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
Manager() + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddControl(Control c) + +
+           
+ voidremoveAll() + +
+           
+ voidremoveControl(Control c) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Manager

+
+public Manager()
+
+
+ + + + + + + + +
+Method Detail
+ +

+addControl

+
+public void addControl(Control c)
+
+
+
+
+
+
+ +

+removeControl

+
+public void removeControl(Control c)
+
+
+
+
+
+
+ +

+removeAll

+
+public void removeAll()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Obuffer.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Obuffer.html new file mode 100644 index 0000000..38a0993 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Obuffer.html @@ -0,0 +1,417 @@ + + + + + + +Obuffer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Obuffer

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Obuffer
+
+
+
Direct Known Subclasses:
SampleBuffer, WaveFileObuffer
+
+
+
+
public abstract class Obuffer
extends java.lang.Object
+ + +

+Base Class for audio output. +

+ +

+


+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+static intMAXCHANNELS + +
+           
+static intOBUFFERSIZE + +
+           
+  + + + + + + + + + + +
+Constructor Summary
Obuffer() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+abstract  voidappend(int channel, + short value) + +
+          Takes a 16 Bit PCM sample.
+ voidappendSamples(int channel, + float[] f) + +
+          Accepts 32 new PCM samples.
+abstract  voidclear_buffer() + +
+          Clears all data in the buffer (for seeking).
+abstract  voidclose() + +
+           
+abstract  voidset_stop_flag() + +
+          Notify the buffer that the user has stopped the stream.
+abstract  voidwrite_buffer(int val) + +
+          Write the samples to the file or directly to the audio hardware.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+OBUFFERSIZE

+
+public static final int OBUFFERSIZE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+MAXCHANNELS

+
+public static final int MAXCHANNELS
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+Obuffer

+
+public Obuffer()
+
+
+ + + + + + + + +
+Method Detail
+ +

+append

+
+public abstract void append(int channel,
+                            short value)
+
+
Takes a 16 Bit PCM sample. +

+

+
+
+
+
+ +

+appendSamples

+
+public void appendSamples(int channel,
+                          float[] f)
+
+
Accepts 32 new PCM samples. +

+

+
+
+
+
+ +

+write_buffer

+
+public abstract void write_buffer(int val)
+
+
Write the samples to the file or directly to the audio hardware. +

+

+
+
+
+
+ +

+close

+
+public abstract void close()
+
+
+
+
+
+
+ +

+clear_buffer

+
+public abstract void clear_buffer()
+
+
Clears all data in the buffer (for seeking). +

+

+
+
+
+
+ +

+set_stop_flag

+
+public abstract void set_stop_flag()
+
+
Notify the buffer that the user has stopped the stream. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/OutputChannels.html b/JLayer1.0.1/doc/javazoom/jl/decoder/OutputChannels.html new file mode 100644 index 0000000..da35697 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/OutputChannels.html @@ -0,0 +1,496 @@ + + + + + + +OutputChannels + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class OutputChannels

+
+java.lang.Object
+  extended by javazoom.jl.decoder.OutputChannels
+
+
+
+
public class OutputChannels
extends java.lang.Object
+ + +

+A Type-safe representation of the the supported output channel + constants. + + This class is immutable and, hence, is thread safe. +

+ +

+

+
Since:
+
0.0.7
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static OutputChannelsBOTH + +
+           
+static intBOTH_CHANNELS + +
+          Flag to indicate output should include both channels.
+static OutputChannelsDOWNMIX + +
+           
+static intDOWNMIX_CHANNELS + +
+          Flag to indicate output is mono.
+static OutputChannelsLEFT + +
+           
+static intLEFT_CHANNEL + +
+          Flag to indicate output should include the left channel only.
+static OutputChannelsRIGHT + +
+           
+static intRIGHT_CHANNEL + +
+          Flag to indicate output should include the right channel only.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanequals(java.lang.Object o) + +
+           
+static OutputChannelsfromInt(int code) + +
+          Creates an OutputChannels instance + corresponding to the given channel code.
+ intgetChannelCount() + +
+          Retrieves the number of output channels represented + by this channel output type.
+ intgetChannelsOutputCode() + +
+          Retrieves the code representing the desired output channels.
+ inthashCode() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+BOTH_CHANNELS

+
+public static final int BOTH_CHANNELS
+
+
Flag to indicate output should include both channels. +

+

+
See Also:
Constant Field Values
+
+
+ +

+LEFT_CHANNEL

+
+public static final int LEFT_CHANNEL
+
+
Flag to indicate output should include the left channel only. +

+

+
See Also:
Constant Field Values
+
+
+ +

+RIGHT_CHANNEL

+
+public static final int RIGHT_CHANNEL
+
+
Flag to indicate output should include the right channel only. +

+

+
See Also:
Constant Field Values
+
+
+ +

+DOWNMIX_CHANNELS

+
+public static final int DOWNMIX_CHANNELS
+
+
Flag to indicate output is mono. +

+

+
See Also:
Constant Field Values
+
+
+ +

+LEFT

+
+public static final OutputChannels LEFT
+
+
+
+
+
+ +

+RIGHT

+
+public static final OutputChannels RIGHT
+
+
+
+
+
+ +

+BOTH

+
+public static final OutputChannels BOTH
+
+
+
+
+
+ +

+DOWNMIX

+
+public static final OutputChannels DOWNMIX
+
+
+
+
+ + + + + + + + +
+Method Detail
+ +

+fromInt

+
+public static OutputChannels fromInt(int code)
+
+
Creates an OutputChannels instance + corresponding to the given channel code. +

+

+
Parameters:
code - one of the OutputChannels channel code constants. +
Throws: +
java.lang.IllegalArgumentException - if code is not a valid + channel code.
+
+
+
+ +

+getChannelsOutputCode

+
+public int getChannelsOutputCode()
+
+
Retrieves the code representing the desired output channels. + Will be one of LEFT_CHANNEL, RIGHT_CHANNEL, BOTH_CHANNELS + or DOWNMIX_CHANNELS. +

+

+ +
Returns:
the channel code represented by this instance.
+
+
+
+ +

+getChannelCount

+
+public int getChannelCount()
+
+
Retrieves the number of output channels represented + by this channel output type. +

+

+ +
Returns:
The number of output channels for this channel output + type. This will be 2 for BOTH_CHANNELS only, and 1 + for all other types.
+
+
+
+ +

+equals

+
+public boolean equals(java.lang.Object o)
+
+
+
Overrides:
equals in class java.lang.Object
+
+
+
+
+
+
+ +

+hashCode

+
+public int hashCode()
+
+
+
Overrides:
hashCode in class java.lang.Object
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/SampleBuffer.html b/JLayer1.0.1/doc/javazoom/jl/decoder/SampleBuffer.html new file mode 100644 index 0000000..e802e5f --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/SampleBuffer.html @@ -0,0 +1,481 @@ + + + + + + +SampleBuffer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class SampleBuffer

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Obuffer
+      extended by javazoom.jl.decoder.SampleBuffer
+
+
+
+
public class SampleBuffer
extends Obuffer
+ + +

+The SampleBuffer class implements an output buffer + that provides storage for a fixed size block of samples. +

+ +

+


+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class javazoom.jl.decoder.Obuffer
MAXCHANNELS, OBUFFERSIZE
+  + + + + + + + + + + +
+Constructor Summary
SampleBuffer(int sample_frequency, + int number_of_channels) + +
+          Constructor
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidappend(int channel, + short value) + +
+          Takes a 16 Bit PCM sample.
+ voidappendSamples(int channel, + float[] f) + +
+          Accepts 32 new PCM samples.
+ voidclear_buffer() + +
+          Clears all data in the buffer (for seeking).
+ voidclose() + +
+           
+ short[]getBuffer() + +
+           
+ intgetBufferLength() + +
+           
+ intgetChannelCount() + +
+           
+ intgetSampleFrequency() + +
+           
+ voidset_stop_flag() + +
+          Notify the buffer that the user has stopped the stream.
+ voidwrite_buffer(int val) + +
+          Write the samples to the file (Random Acces).
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SampleBuffer

+
+public SampleBuffer(int sample_frequency,
+                    int number_of_channels)
+
+
Constructor +

+

+ + + + + + + + +
+Method Detail
+ +

+getChannelCount

+
+public int getChannelCount()
+
+
+
+
+
+
+ +

+getSampleFrequency

+
+public int getSampleFrequency()
+
+
+
+
+
+
+ +

+getBuffer

+
+public short[] getBuffer()
+
+
+
+
+
+
+ +

+getBufferLength

+
+public int getBufferLength()
+
+
+
+
+
+
+ +

+append

+
+public void append(int channel,
+                   short value)
+
+
Takes a 16 Bit PCM sample. +

+

+
Specified by:
append in class Obuffer
+
+
+
+
+
+
+ +

+appendSamples

+
+public void appendSamples(int channel,
+                          float[] f)
+
+
Description copied from class: Obuffer
+
Accepts 32 new PCM samples. +

+

+
Overrides:
appendSamples in class Obuffer
+
+
+
+
+
+
+ +

+write_buffer

+
+public void write_buffer(int val)
+
+
Write the samples to the file (Random Acces). +

+

+
Specified by:
write_buffer in class Obuffer
+
+
+
+
+
+
+ +

+close

+
+public void close()
+
+
+
Specified by:
close in class Obuffer
+
+
+
+
+
+
+ +

+clear_buffer

+
+public void clear_buffer()
+
+
Description copied from class: Obuffer
+
Clears all data in the buffer (for seeking). +

+

+
Specified by:
clear_buffer in class Obuffer
+
+
+
+
+
+
+ +

+set_stop_flag

+
+public void set_stop_flag()
+
+
Description copied from class: Obuffer
+
Notify the buffer that the user has stopped the stream. +

+

+
Specified by:
set_stop_flag in class Obuffer
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/Source.html b/JLayer1.0.1/doc/javazoom/jl/decoder/Source.html new file mode 100644 index 0000000..7fa2c4f --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/Source.html @@ -0,0 +1,348 @@ + + + + + + +Source + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface Source

+
+
All Known Implementing Classes:
InputStreamSource
+
+
+
+
public interface Source
+ + +

+Work in progress. + + Class to describe a seekable data source. +

+ +

+


+ +

+ + + + + + + + + + + +
+Field Summary
+static longLENGTH_UNKNOWN + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanisSeekable() + +
+           
+ longlength() + +
+           
+ intread(byte[] b, + int offs, + int len) + +
+           
+ longseek(long pos) + +
+           
+ longtell() + +
+           
+ booleanwillReadBlock() + +
+           
+  +

+ + + + + + + + +
+Field Detail
+ +

+LENGTH_UNKNOWN

+
+static final long LENGTH_UNKNOWN
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Method Detail
+ +

+read

+
+int read(byte[] b,
+         int offs,
+         int len)
+         throws java.io.IOException
+
+
+ +
Throws: +
java.io.IOException
+
+
+
+ +

+willReadBlock

+
+boolean willReadBlock()
+
+
+
+
+
+
+ +

+isSeekable

+
+boolean isSeekable()
+
+
+
+
+
+
+ +

+length

+
+long length()
+
+
+
+
+
+
+ +

+tell

+
+long tell()
+
+
+
+
+
+
+ +

+seek

+
+long seek(long pos)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/package-frame.html b/JLayer1.0.1/doc/javazoom/jl/decoder/package-frame.html new file mode 100644 index 0000000..bf35c2a --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/package-frame.html @@ -0,0 +1,105 @@ + + + + + + +javazoom.jl.decoder + + + + + + + + + + + +javazoom.jl.decoder + + + + +
+Interfaces  + +
+BitstreamErrors +
+Control +
+DecoderErrors +
+FrameDecoder +
+JavaLayerErrors +
+JavaLayerHook +
+Source
+ + + + + + +
+Classes  + +
+Bitstream +
+Crc16 +
+Decoder +
+Decoder.Params +
+Equalizer +
+Equalizer.EQFunction +
+Header +
+InputStreamSource +
+JavaLayerUtils +
+Manager +
+Obuffer +
+OutputChannels +
+SampleBuffer
+ + + + + + +
+Exceptions  + +
+BitstreamException +
+DecoderException +
+JavaLayerException
+ + + + + + +
+Errors  + +
+JavaLayerError
+ + + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/package-summary.html b/JLayer1.0.1/doc/javazoom/jl/decoder/package-summary.html new file mode 100644 index 0000000..f5b1c5a --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/package-summary.html @@ -0,0 +1,287 @@ + + + + + + +javazoom.jl.decoder + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package javazoom.jl.decoder +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Interface Summary
BitstreamErrorsThis interface describes all error codes that can be thrown + in BistreamExceptions.
ControlWork in progress.
DecoderErrorsThis interface provides constants describing the error + codes used by the Decoder to indicate errors.
FrameDecoderImplementations of FrameDecoder are responsible for decoding + an MPEG audio frame.
JavaLayerErrorsException erorr codes for components of the JavaLayer API.
JavaLayerHookThe JavaLayerHooks class allows developers to change + the way the JavaLayer library uses Resources.
SourceWork in progress.
+  + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
BitstreamThe Bistream class is responsible for parsing + an MPEG audio bitstream.
Crc1616-Bit CRC checksum
DecoderThe Decoder class encapsulates the details of + decoding an MPEG audio frame.
Decoder.ParamsThe Params class presents the customizable + aspects of the decoder.
EqualizerThe Equalizer class can be used to specify + equalization settings for the MPEG audio decoder.
Equalizer.EQFunction 
HeaderClass for extracting information from a frame header.
InputStreamSourceWork In Progress.
JavaLayerUtilsThe JavaLayerUtils class is not strictly part of the JavaLayer API.
ManagerWork in progress.
ObufferBase Class for audio output.
OutputChannelsA Type-safe representation of the the supported output channel + constants.
SampleBufferThe SampleBuffer class implements an output buffer + that provides storage for a fixed size block of samples.
+  + +

+ + + + + + + + + + + + + + + + + +
+Exception Summary
BitstreamExceptionInstances of BitstreamException are thrown + when operations on a Bitstream fail.
DecoderExceptionThe DecoderException represents the class of + errors that can occur when decoding MPEG audio.
JavaLayerExceptionThe JavaLayerException is the base class for all API-level + exceptions thrown by JavaLayer.
+  + +

+ + + + + + + + + +
+Error Summary
JavaLayerErrorWork in progress.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/decoder/package-tree.html b/JLayer1.0.1/doc/javazoom/jl/decoder/package-tree.html new file mode 100644 index 0000000..cdbcb67 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/decoder/package-tree.html @@ -0,0 +1,171 @@ + + + + + + +javazoom.jl.decoder Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package javazoom.jl.decoder +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/AudioDevice.html b/JLayer1.0.1/doc/javazoom/jl/player/AudioDevice.html new file mode 100644 index 0000000..6757acb --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/AudioDevice.html @@ -0,0 +1,361 @@ + + + + + + +AudioDevice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Interface AudioDevice

+
+
All Known Implementing Classes:
AudioDeviceBase, JavaSoundAudioDevice, NullAudioDevice
+
+
+
+
public interface AudioDevice
+ + +

+The AudioDevice interface provides an abstraction for + a device capable of sounding audio samples. Samples are written to + the device wia the write() method. The device assumes + that these samples are signed 16-bit samples taken at the output frequency + of the decoder. If the decoder outputs more than one channel, the samples for + each channel are assumed to appear consecutively, with the lower numbered + channels preceeding higher-numbered channels. E.g. if there are two + channels, the samples will appear in this order: +


+ 
+                l0, r0, l1, r1, l2, r2...
+ 
+ where 
+        lx indicates the xth sample on channel 0
+  rx indicates the xth sample on channel 1
+ 
+

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          Closes this audio device.
+ voidflush() + +
+          Blocks until all audio samples previously written to this audio device have + been heard.
+ intgetPosition() + +
+          Retrieves the current playback position in milliseconds.
+ booleanisOpen() + +
+          Retrieves the open state of this audio device.
+ voidopen(Decoder decoder) + +
+          Prepares the AudioDevice for playback of audio samples.
+ voidwrite(short[] samples, + int offs, + int len) + +
+          Writes a number of samples to this AudioDevice.
+  +

+ + + + + + + + +
+Method Detail
+ +

+open

+
+void open(Decoder decoder)
+          throws JavaLayerException
+
+
Prepares the AudioDevice for playback of audio samples. +

+

+
Parameters:
decoder - The decoder that will be providing the audio + samples. + + If the audio device is already open, this method returns silently. +
Throws: +
JavaLayerException
+
+
+
+ +

+isOpen

+
+boolean isOpen()
+
+
Retrieves the open state of this audio device. +

+

+ +
Returns:
true if this audio device is open and playing + audio samples, or false otherwise.
+
+
+
+ +

+write

+
+void write(short[] samples,
+           int offs,
+           int len)
+           throws JavaLayerException
+
+
Writes a number of samples to this AudioDevice. +

+

+
Parameters:
samples - The array of signed 16-bit samples to write + to the audio device.
offs - The offset of the first sample.
len - The number of samples to write. + + This method may return prior to the samples actually being played + by the audio device. +
Throws: +
JavaLayerException
+
+
+
+ +

+close

+
+void close()
+
+
Closes this audio device. Any currently playing audio is stopped + as soon as possible. Any previously written audio data that has not been heard + is discarded. + + The implementation should ensure that any threads currently blocking + on the device (e.g. during a write or flush + operation should be unblocked by this method. +

+

+
+
+
+
+ +

+flush

+
+void flush()
+
+
Blocks until all audio samples previously written to this audio device have + been heard. +

+

+
+
+
+
+ +

+getPosition

+
+int getPosition()
+
+
Retrieves the current playback position in milliseconds. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/AudioDeviceBase.html b/JLayer1.0.1/doc/javazoom/jl/player/AudioDeviceBase.html new file mode 100644 index 0000000..ff7ca2d --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/AudioDeviceBase.html @@ -0,0 +1,563 @@ + + + + + + +AudioDeviceBase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class AudioDeviceBase

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceBase
+
+
+
All Implemented Interfaces:
AudioDevice
+
+
+
Direct Known Subclasses:
JavaSoundAudioDevice, NullAudioDevice
+
+
+
+
public abstract class AudioDeviceBase
extends java.lang.Object
implements AudioDevice
+ + +

+The AudioDeviceBase class provides a simple thread-safe + implementation of the AudioDevice interface. + Template methods are provided for subclasses to override and + in doing so provide the implementation for the main operations + of the AudioDevice interface. +

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
AudioDeviceBase() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          Closes this audio device.
+protected  voidcloseImpl() + +
+          Template method to provide the implementation for + closing the audio device.
+ voidflush() + +
+          Waits for any buffered audio samples to be played by the + audio device.
+protected  voidflushImpl() + +
+          Template method to provide the implementation for + flushing any buffered audio data.
+protected  DecodergetDecoder() + +
+          Retrieves the decoder that provides audio data to this + audio device.
+ booleanisOpen() + +
+          Determines if this audio device is open or not.
+ voidopen(Decoder decoder) + +
+          Opens this audio device.
+protected  voidopenImpl() + +
+          Template method to provide the + implementation for the opening of the audio device.
+protected  voidsetOpen(boolean open) + +
+          Sets the open state for this audio device.
+ voidwrite(short[] samples, + int offs, + int len) + +
+          Writes audio data to this audio device.
+protected  voidwriteImpl(short[] samples, + int offs, + int len) + +
+          Template method to provide the implementation for + writing audio samples to the audio device.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+ + + + + + + +
Methods inherited from interface javazoom.jl.player.AudioDevice
getPosition
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+AudioDeviceBase

+
+public AudioDeviceBase()
+
+
+ + + + + + + + +
+Method Detail
+ +

+open

+
+public void open(Decoder decoder)
+          throws JavaLayerException
+
+
Opens this audio device. +

+

+
Specified by:
open in interface AudioDevice
+
+
+
Parameters:
decoder - The decoder that will provide audio data + to this audio device. +
Throws: +
JavaLayerException
+
+
+
+ +

+openImpl

+
+protected void openImpl()
+                 throws JavaLayerException
+
+
Template method to provide the + implementation for the opening of the audio device. +

+

+
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+setOpen

+
+protected void setOpen(boolean open)
+
+
Sets the open state for this audio device. +

+

+
+
+
+
+
+
+
+ +

+isOpen

+
+public boolean isOpen()
+
+
Determines if this audio device is open or not. +

+

+
Specified by:
isOpen in interface AudioDevice
+
+
+ +
Returns:
true if the audio device is open, + false if it is not.
+
+
+
+ +

+close

+
+public void close()
+
+
Closes this audio device. If the device is currently playing + audio, playback is stopped immediately without flushing + any buffered audio data. +

+

+
Specified by:
close in interface AudioDevice
+
+
+
+
+
+
+ +

+closeImpl

+
+protected void closeImpl()
+
+
Template method to provide the implementation for + closing the audio device. +

+

+
+
+
+
+
+
+
+ +

+write

+
+public void write(short[] samples,
+                  int offs,
+                  int len)
+           throws JavaLayerException
+
+
Writes audio data to this audio device. Audio data is + assumed to be in the output format of the decoder. This + method may return before the data has actually been sounded + by the device if the device buffers audio samples. +

+

+
Specified by:
write in interface AudioDevice
+
+
+
Parameters:
samples - The samples to write to the audio device.
offs - The offset into the array of the first sample to write.
len - The number of samples from the array to write. +
Throws: +
JavaLayerException - if the audio data could not be + written to the audio device. + If the audio device is not open, this method does nthing.
+
+
+
+ +

+writeImpl

+
+protected void writeImpl(short[] samples,
+                         int offs,
+                         int len)
+                  throws JavaLayerException
+
+
Template method to provide the implementation for + writing audio samples to the audio device. +

+

+
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+flush

+
+public void flush()
+
+
Waits for any buffered audio samples to be played by the + audio device. This method should only be called prior + to closing the device. +

+

+
Specified by:
flush in interface AudioDevice
+
+
+
+
+
+
+ +

+flushImpl

+
+protected void flushImpl()
+
+
Template method to provide the implementation for + flushing any buffered audio data. +

+

+
+
+
+
+
+
+
+ +

+getDecoder

+
+protected Decoder getDecoder()
+
+
Retrieves the decoder that provides audio data to this + audio device. +

+

+
+
+
+ +
Returns:
The associated decoder.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/AudioDeviceFactory.html b/JLayer1.0.1/doc/javazoom/jl/player/AudioDeviceFactory.html new file mode 100644 index 0000000..035092c --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/AudioDeviceFactory.html @@ -0,0 +1,311 @@ + + + + + + +AudioDeviceFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class AudioDeviceFactory

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceFactory
+
+
+
Direct Known Subclasses:
FactoryRegistry, JavaSoundAudioDeviceFactory
+
+
+
+
public abstract class AudioDeviceFactory
extends java.lang.Object
+ + +

+An AudioDeviceFactory class is responsible for creating + a specific AudioDevice implementation. A factory implementation + can be as simple or complex as desired and may support just one implementation + or may return several implementations depending upon the execution + environment. +

+ When implementing a factory that provides an AudioDevice that uses + class that may not be present, the factory should dynamically link to any + specific implementation classes required to instantiate or test the audio + implementation. This is so that the application as a whole + can run without these classes being present. The audio + device implementation, however, will usually statically link to the classes + required. (See the JavaSound deivce and factory for an example + of this.) +

+ +

+

+
Since:
+
0.0.8
+
See Also:
FactoryRegistry
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
AudioDeviceFactory() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+abstract  AudioDevicecreateAudioDevice() + +
+          Creates a new AudioDevice.
+protected  AudioDeviceinstantiate(java.lang.ClassLoader loader, + java.lang.String name) + +
+          Creates an instance of an AudioDevice implementation.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+AudioDeviceFactory

+
+public AudioDeviceFactory()
+
+
+ + + + + + + + +
+Method Detail
+ +

+createAudioDevice

+
+public abstract AudioDevice createAudioDevice()
+                                       throws JavaLayerException
+
+
Creates a new AudioDevice. +

+

+ +
Returns:
a new instance of a specific class of AudioDevice. +
Throws: +
JavaLayerException - if an instance of AudioDevice could not + be created.
+
+
+
+ +

+instantiate

+
+protected AudioDevice instantiate(java.lang.ClassLoader loader,
+                                  java.lang.String name)
+                           throws java.lang.ClassNotFoundException,
+                                  java.lang.IllegalAccessException,
+                                  java.lang.InstantiationException
+
+
Creates an instance of an AudioDevice implementation. +

+

+
Parameters:
loader - The ClassLoader to use to + load the named class, or null to use the + system class loader.
name - The name of the class to load. +
Returns:
A newly-created instance of the audio device class. +
Throws: +
java.lang.ClassNotFoundException +
java.lang.IllegalAccessException +
java.lang.InstantiationException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/FactoryRegistry.html b/JLayer1.0.1/doc/javazoom/jl/player/FactoryRegistry.html new file mode 100644 index 0000000..794671e --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/FactoryRegistry.html @@ -0,0 +1,433 @@ + + + + + + +FactoryRegistry + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class FactoryRegistry

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceFactory
+      extended by javazoom.jl.player.FactoryRegistry
+
+
+
+
public class FactoryRegistry
extends AudioDeviceFactory
+ + +

+The FactoryRegistry class stores the factories + for all the audio device implementations available in the system. +

+ Instances of this class are thread-safe. +

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + +
+Field Summary
+protected  java.util.Hashtablefactories + +
+           
+  + + + + + + + + + + +
+Constructor Summary
FactoryRegistry() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddFactory(AudioDeviceFactory factory) + +
+          Registers an AudioDeviceFactory instance + with this registry.
+ AudioDevicecreateAudioDevice() + +
+          Creates a new AudioDevice.
+protected  AudioDeviceFactory[]getFactoriesPriority() + +
+           
+protected  voidregisterDefaultFactories() + +
+           
+ voidremoveFactory(AudioDeviceFactory factory) + +
+           
+ voidremoveFactoryType(java.lang.Class cls) + +
+           
+static FactoryRegistrysystemRegistry() + +
+           
+ + + + + + + +
Methods inherited from class javazoom.jl.player.AudioDeviceFactory
instantiate
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+factories

+
+protected java.util.Hashtable factories
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+FactoryRegistry

+
+public FactoryRegistry()
+
+
+ + + + + + + + +
+Method Detail
+ +

+systemRegistry

+
+public static FactoryRegistry systemRegistry()
+
+
+
+
+
+
+ +

+addFactory

+
+public void addFactory(AudioDeviceFactory factory)
+
+
Registers an AudioDeviceFactory instance + with this registry. +

+

+
+
+
+
+ +

+removeFactoryType

+
+public void removeFactoryType(java.lang.Class cls)
+
+
+
+
+
+
+ +

+removeFactory

+
+public void removeFactory(AudioDeviceFactory factory)
+
+
+
+
+
+
+ +

+createAudioDevice

+
+public AudioDevice createAudioDevice()
+                              throws JavaLayerException
+
+
Description copied from class: AudioDeviceFactory
+
Creates a new AudioDevice. +

+

+
Specified by:
createAudioDevice in class AudioDeviceFactory
+
+
+ +
Returns:
a new instance of a specific class of AudioDevice. +
Throws: +
JavaLayerException - if an instance of AudioDevice could not + be created.
+
+
+
+ +

+getFactoriesPriority

+
+protected AudioDeviceFactory[] getFactoriesPriority()
+
+
+
+
+
+
+ +

+registerDefaultFactories

+
+protected void registerDefaultFactories()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/JavaSoundAudioDevice.html b/JLayer1.0.1/doc/javazoom/jl/player/JavaSoundAudioDevice.html new file mode 100644 index 0000000..259b7ac --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/JavaSoundAudioDevice.html @@ -0,0 +1,578 @@ + + + + + + +JavaSoundAudioDevice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class JavaSoundAudioDevice

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceBase
+      extended by javazoom.jl.player.JavaSoundAudioDevice
+
+
+
All Implemented Interfaces:
AudioDevice
+
+
+
+
public class JavaSoundAudioDevice
extends AudioDeviceBase
+ + +

+The JavaSoundAudioDevice implements an audio + device by using the JavaSound API. +

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
JavaSoundAudioDevice() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  voidcloseImpl() + +
+          Template method to provide the implementation for + closing the audio device.
+protected  voidcreateSource() + +
+           
+protected  voidflushImpl() + +
+          Template method to provide the implementation for + flushing any buffered audio data.
+protected  javax.sound.sampled.AudioFormatgetAudioFormat() + +
+           
+protected  byte[]getByteArray(int length) + +
+           
+ intgetPosition() + +
+          Retrieves the current playback position in milliseconds.
+protected  javax.sound.sampled.DataLine.InfogetSourceLineInfo() + +
+           
+ intmillisecondsToBytes(javax.sound.sampled.AudioFormat fmt, + int time) + +
+           
+ voidopen(javax.sound.sampled.AudioFormat fmt) + +
+           
+protected  voidopenImpl() + +
+          Template method to provide the + implementation for the opening of the audio device.
+protected  voidsetAudioFormat(javax.sound.sampled.AudioFormat fmt0) + +
+           
+ voidtest() + +
+          Runs a short test by playing a short silent sound.
+protected  byte[]toByteArray(short[] samples, + int offs, + int len) + +
+           
+protected  voidwriteImpl(short[] samples, + int offs, + int len) + +
+          Template method to provide the implementation for + writing audio samples to the audio device.
+ + + + + + + +
Methods inherited from class javazoom.jl.player.AudioDeviceBase
close, flush, getDecoder, isOpen, open, setOpen, write
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JavaSoundAudioDevice

+
+public JavaSoundAudioDevice()
+
+
+ + + + + + + + +
+Method Detail
+ +

+setAudioFormat

+
+protected void setAudioFormat(javax.sound.sampled.AudioFormat fmt0)
+
+
+
+
+
+
+ +

+getAudioFormat

+
+protected javax.sound.sampled.AudioFormat getAudioFormat()
+
+
+
+
+
+
+ +

+getSourceLineInfo

+
+protected javax.sound.sampled.DataLine.Info getSourceLineInfo()
+
+
+
+
+
+
+ +

+open

+
+public void open(javax.sound.sampled.AudioFormat fmt)
+          throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+openImpl

+
+protected void openImpl()
+                 throws JavaLayerException
+
+
Description copied from class: AudioDeviceBase
+
Template method to provide the + implementation for the opening of the audio device. +

+

+
Overrides:
openImpl in class AudioDeviceBase
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+createSource

+
+protected void createSource()
+                     throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+millisecondsToBytes

+
+public int millisecondsToBytes(javax.sound.sampled.AudioFormat fmt,
+                               int time)
+
+
+
+
+
+
+ +

+closeImpl

+
+protected void closeImpl()
+
+
Description copied from class: AudioDeviceBase
+
Template method to provide the implementation for + closing the audio device. +

+

+
Overrides:
closeImpl in class AudioDeviceBase
+
+
+
+
+
+
+ +

+writeImpl

+
+protected void writeImpl(short[] samples,
+                         int offs,
+                         int len)
+                  throws JavaLayerException
+
+
Description copied from class: AudioDeviceBase
+
Template method to provide the implementation for + writing audio samples to the audio device. +

+

+
Overrides:
writeImpl in class AudioDeviceBase
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+getByteArray

+
+protected byte[] getByteArray(int length)
+
+
+
+
+
+
+ +

+toByteArray

+
+protected byte[] toByteArray(short[] samples,
+                             int offs,
+                             int len)
+
+
+
+
+
+
+ +

+flushImpl

+
+protected void flushImpl()
+
+
Description copied from class: AudioDeviceBase
+
Template method to provide the implementation for + flushing any buffered audio data. +

+

+
Overrides:
flushImpl in class AudioDeviceBase
+
+
+
+
+
+
+ +

+getPosition

+
+public int getPosition()
+
+
Description copied from interface: AudioDevice
+
Retrieves the current playback position in milliseconds. +

+

+
+
+
+
+ +

+test

+
+public void test()
+          throws JavaLayerException
+
+
Runs a short test by playing a short silent sound. +

+

+ +
Throws: +
JavaLayerException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/JavaSoundAudioDeviceFactory.html b/JLayer1.0.1/doc/javazoom/jl/player/JavaSoundAudioDeviceFactory.html new file mode 100644 index 0000000..7893744 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/JavaSoundAudioDeviceFactory.html @@ -0,0 +1,319 @@ + + + + + + +JavaSoundAudioDeviceFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class JavaSoundAudioDeviceFactory

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceFactory
+      extended by javazoom.jl.player.JavaSoundAudioDeviceFactory
+
+
+
+
public class JavaSoundAudioDeviceFactory
extends AudioDeviceFactory
+ + +

+This class is responsible for creating instances of the + JavaSoundAudioDevice. The audio device implementation is loaded + and tested dynamically as not all systems will have support + for JavaSound, or they may have the incorrect version. +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
JavaSoundAudioDeviceFactory() + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ AudioDevicecreateAudioDevice() + +
+          Creates a new AudioDevice.
+protected  JavaSoundAudioDevicecreateAudioDeviceImpl() + +
+           
+ voidtestAudioDevice() + +
+           
+ + + + + + + +
Methods inherited from class javazoom.jl.player.AudioDeviceFactory
instantiate
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JavaSoundAudioDeviceFactory

+
+public JavaSoundAudioDeviceFactory()
+
+
+ + + + + + + + +
+Method Detail
+ +

+createAudioDevice

+
+public AudioDevice createAudioDevice()
+                              throws JavaLayerException
+
+
Description copied from class: AudioDeviceFactory
+
Creates a new AudioDevice. +

+

+
Specified by:
createAudioDevice in class AudioDeviceFactory
+
+
+ +
Returns:
a new instance of a specific class of AudioDevice. +
Throws: +
JavaLayerException - if an instance of AudioDevice could not + be created.
+
+
+
+ +

+createAudioDeviceImpl

+
+protected JavaSoundAudioDevice createAudioDeviceImpl()
+                                              throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+testAudioDevice

+
+public void testAudioDevice()
+                     throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/NullAudioDevice.html b/JLayer1.0.1/doc/javazoom/jl/player/NullAudioDevice.html new file mode 100644 index 0000000..fdafc04 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/NullAudioDevice.html @@ -0,0 +1,272 @@ + + + + + + +NullAudioDevice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class NullAudioDevice

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceBase
+      extended by javazoom.jl.player.NullAudioDevice
+
+
+
All Implemented Interfaces:
AudioDevice
+
+
+
+
public class NullAudioDevice
extends AudioDeviceBase
+ + +

+The NullAudioDevice implements a silent, no-op + audio device. This is useful for testing purposes. +

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
NullAudioDevice() + +
+           
+  + + + + + + + + + + + +
+Method Summary
+ intgetPosition() + +
+          Retrieves the current playback position in milliseconds.
+ + + + + + + +
Methods inherited from class javazoom.jl.player.AudioDeviceBase
close, closeImpl, flush, flushImpl, getDecoder, isOpen, open, openImpl, setOpen, write, writeImpl
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+NullAudioDevice

+
+public NullAudioDevice()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getPosition

+
+public int getPosition()
+
+
Description copied from interface: AudioDevice
+
Retrieves the current playback position in milliseconds. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/Player.html b/JLayer1.0.1/doc/javazoom/jl/player/Player.html new file mode 100644 index 0000000..8cbc263 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/Player.html @@ -0,0 +1,408 @@ + + + + + + +Player + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class Player

+
+java.lang.Object
+  extended by javazoom.jl.player.Player
+
+
+
+
public class Player
extends java.lang.Object
+ + +

+The Player class implements a simple player for playback + of an MPEG audio stream. +

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
Player(java.io.InputStream stream) + +
+          Creates a new Player instance.
Player(java.io.InputStream stream, + AudioDevice device) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          Cloases this player.
+protected  booleandecodeFrame() + +
+          Decodes a single frame.
+ intgetPosition() + +
+          Retrieves the position in milliseconds of the current audio + sample being played.
+ booleanisComplete() + +
+          Returns the completed status of this player.
+ voidplay() + +
+           
+ booleanplay(int frames) + +
+          Plays a number of MPEG audio frames.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Player

+
+public Player(java.io.InputStream stream)
+       throws JavaLayerException
+
+
Creates a new Player instance. +

+

+ +
Throws: +
JavaLayerException
+
+
+ +

+Player

+
+public Player(java.io.InputStream stream,
+              AudioDevice device)
+       throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+ + + + + + + + +
+Method Detail
+ +

+play

+
+public void play()
+          throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+play

+
+public boolean play(int frames)
+             throws JavaLayerException
+
+
Plays a number of MPEG audio frames. +

+

+
Parameters:
frames - The number of frames to play. +
Returns:
true if the last frame was played, or false if there are + more frames. +
Throws: +
JavaLayerException
+
+
+
+ +

+close

+
+public void close()
+
+
Cloases this player. Any audio currently playing is stopped + immediately. +

+

+
+
+
+
+ +

+isComplete

+
+public boolean isComplete()
+
+
Returns the completed status of this player. +

+

+ +
Returns:
true if all available MPEG audio frames have been + decoded, or false otherwise.
+
+
+
+ +

+getPosition

+
+public int getPosition()
+
+
Retrieves the position in milliseconds of the current audio + sample being played. This method delegates to the + AudioDevice that is used by this player to sound + the decoded audio samples. +

+

+
+
+
+
+ +

+decodeFrame

+
+protected boolean decodeFrame()
+                       throws JavaLayerException
+
+
Decodes a single frame. +

+

+ +
Returns:
true if there are no more frames to decode, false otherwise. +
Throws: +
JavaLayerException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/PlayerApplet.html b/JLayer1.0.1/doc/javazoom/jl/player/PlayerApplet.html new file mode 100644 index 0000000..9a55f98 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/PlayerApplet.html @@ -0,0 +1,740 @@ + + + + + + +PlayerApplet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class PlayerApplet

+
+java.lang.Object
+  extended by java.awt.Component
+      extended by java.awt.Container
+          extended by java.awt.Panel
+              extended by java.applet.Applet
+                  extended by javazoom.jl.player.PlayerApplet
+
+
+
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.lang.Runnable, javax.accessibility.Accessible
+
+
+
+
public class PlayerApplet
extends java.applet.Applet
implements java.lang.Runnable
+ + +

+A simple applet that plays an MPEG audio file. + The URL (relative to the document base) + is passed as the "audioURL" parameter. +

+ +

+

+
Since:
+
0.0.8
+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class java.applet.Applet
java.applet.Applet.AccessibleApplet
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Panel
java.awt.Panel.AccessibleAWTPanel
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
+  + + + + + + + + + + + +
+Field Summary
+static java.lang.StringAUDIO_PARAMETER + +
+           
+ + + + + + + +
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
+ + + + + + + +
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
+  + + + + + + + + + + +
+Constructor Summary
PlayerApplet() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  java.lang.ThreadcreatePlayerThread() + +
+          Creates a new thread used to run the audio player.
+ voiddestroy() + +
+           
+protected  AudioDevicegetAudioDevice() + +
+          Retrieves the AudioDevice instance that will + be used to sound the audio data.
+protected  java.lang.StringgetAudioFileName() + +
+           
+protected  java.io.InputStreamgetAudioStream() + +
+          Retrieves the InputStream that provides the MPEG audio + stream data.
+protected  java.net.URLgetAudioURL() + +
+           
+ java.lang.StringgetFileName() + +
+           
+ voidinit() + +
+          Initializes this applet.
+protected  voidplay(java.io.InputStream in, + AudioDevice dev) + +
+          Decompresses audio data from an InputStream and plays it + back through an AudioDevice.
+ voidrun() + +
+          The run method for the audio player thread.
+ voidsetFileName(java.lang.String name) + +
+          Sets the URL of the audio stream to play.
+ voidstart() + +
+          Starts this applet.
+ voidstop() + +
+          Stops this applet.
+protected  voidstopPlayer() + +
+          Stops the audio player.
+ + + + + + + +
Methods inherited from class java.applet.Applet
getAccessibleContext, getAppletContext, getAppletInfo, getAudioClip, getAudioClip, getCodeBase, getDocumentBase, getImage, getImage, getLocale, getParameter, getParameterInfo, isActive, newAudioClip, play, play, resize, resize, setStub, showStatus
+ + + + + + + +
Methods inherited from class java.awt.Panel
addNotify
+ + + + + + + +
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getInsets, getLayout, getListeners, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paint, paintComponents, paramString, preferredSize, print, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, removeNotify, setComponentZOrder, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, setLayout, transferFocusBackward, transferFocusDownCycle, update, validate, validateTree
+ + + + + + + +
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusUpCycle
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+AUDIO_PARAMETER

+
+public static final java.lang.String AUDIO_PARAMETER
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+PlayerApplet

+
+public PlayerApplet()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getAudioDevice

+
+protected AudioDevice getAudioDevice()
+                              throws JavaLayerException
+
+
Retrieves the AudioDevice instance that will + be used to sound the audio data. +

+

+
+
+
+ +
Returns:
an audio device instance that will be used to + sound the audio stream. +
Throws: +
JavaLayerException
+
+
+
+ +

+getAudioStream

+
+protected java.io.InputStream getAudioStream()
+
+
Retrieves the InputStream that provides the MPEG audio + stream data. +

+

+
+
+
+ +
Returns:
an InputStream from which the MPEG audio data + is read, or null if an error occurs.
+
+
+
+ +

+getAudioFileName

+
+protected java.lang.String getAudioFileName()
+
+
+
+
+
+
+
+
+
+ +

+getAudioURL

+
+protected java.net.URL getAudioURL()
+
+
+
+
+
+
+
+
+
+ +

+setFileName

+
+public void setFileName(java.lang.String name)
+
+
Sets the URL of the audio stream to play. +

+

+
+
+
+
+
+
+
+ +

+getFileName

+
+public java.lang.String getFileName()
+
+
+
+
+
+
+
+
+
+ +

+stopPlayer

+
+protected void stopPlayer()
+                   throws JavaLayerException
+
+
Stops the audio player. If the player is already stopped + this method is a no-op. +

+

+
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+play

+
+protected void play(java.io.InputStream in,
+                    AudioDevice dev)
+             throws JavaLayerException
+
+
Decompresses audio data from an InputStream and plays it + back through an AudioDevice. The playback is run on a newly + created thread. +

+

+
+
+
+
Parameters:
in - The InputStream that provides the MPEG audio data.
dev - The AudioDevice to use to sound the decompressed data. +
Throws: +
JavaLayerException - if there was a problem decoding + or playing the audio data.
+
+
+
+ +

+createPlayerThread

+
+protected java.lang.Thread createPlayerThread()
+
+
Creates a new thread used to run the audio player. +

+

+
+
+
+ +
Returns:
A new Thread that, once started, runs the audio player.
+
+
+
+ +

+init

+
+public void init()
+
+
Initializes this applet. +

+

+
Overrides:
init in class java.applet.Applet
+
+
+
+
+
+
+ +

+start

+
+public void start()
+
+
Starts this applet. An input stream and audio device + are created and passed to the play() method. +

+

+
Overrides:
start in class java.applet.Applet
+
+
+
+
+
+
+ +

+stop

+
+public void stop()
+
+
Stops this applet. If audio is currently playing, it is + stopped. +

+

+
Overrides:
stop in class java.applet.Applet
+
+
+
+
+
+
+ +

+destroy

+
+public void destroy()
+
+
+
Overrides:
destroy in class java.applet.Applet
+
+
+
+
+
+
+ +

+run

+
+public void run()
+
+
The run method for the audio player thread. Simply calls + play() on the player to play the entire stream. +

+

+
Specified by:
run in interface java.lang.Runnable
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/advanced/AdvancedPlayer.html b/JLayer1.0.1/doc/javazoom/jl/player/advanced/AdvancedPlayer.html new file mode 100644 index 0000000..f243e68 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/advanced/AdvancedPlayer.html @@ -0,0 +1,471 @@ + + + + + + +AdvancedPlayer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player.advanced +
+Class AdvancedPlayer

+
+java.lang.Object
+  extended by javazoom.jl.player.advanced.AdvancedPlayer
+
+
+
+
public class AdvancedPlayer
extends java.lang.Object
+ + +

+a hybrid of javazoom.jl.player.Player tweeked to include play(startFrame, endFrame) + hopefully this will be included in the api +

+ +

+


+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
AdvancedPlayer(java.io.InputStream stream) + +
+          Creates a new Player instance.
AdvancedPlayer(java.io.InputStream stream, + AudioDevice device) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          Cloases this player.
+protected  booleandecodeFrame() + +
+          Decodes a single frame.
+ PlaybackListenergetPlayBackListener() + +
+          gets the PlaybackListener
+ voidplay() + +
+           
+ booleanplay(int frames) + +
+          Plays a number of MPEG audio frames.
+ booleanplay(int start, + int end) + +
+          Plays a range of MPEG audio frames
+ voidsetPlayBackListener(PlaybackListener listener) + +
+          sets the PlaybackListener
+protected  booleanskipFrame() + +
+          skips over a single frame
+ voidstop() + +
+          closes the player and notifies PlaybackListener
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+AdvancedPlayer

+
+public AdvancedPlayer(java.io.InputStream stream)
+               throws JavaLayerException
+
+
Creates a new Player instance. +

+

+ +
Throws: +
JavaLayerException
+
+
+ +

+AdvancedPlayer

+
+public AdvancedPlayer(java.io.InputStream stream,
+                      AudioDevice device)
+               throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+ + + + + + + + +
+Method Detail
+ +

+play

+
+public void play()
+          throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+play

+
+public boolean play(int frames)
+             throws JavaLayerException
+
+
Plays a number of MPEG audio frames. +

+

+
Parameters:
frames - The number of frames to play. +
Returns:
true if the last frame was played, or false if there are + more frames. +
Throws: +
JavaLayerException
+
+
+
+ +

+close

+
+public void close()
+
+
Cloases this player. Any audio currently playing is stopped + immediately. +

+

+
+
+
+
+ +

+decodeFrame

+
+protected boolean decodeFrame()
+                       throws JavaLayerException
+
+
Decodes a single frame. +

+

+ +
Returns:
true if there are no more frames to decode, false otherwise. +
Throws: +
JavaLayerException
+
+
+
+ +

+skipFrame

+
+protected boolean skipFrame()
+                     throws JavaLayerException
+
+
skips over a single frame +

+

+ +
Returns:
false if there are no more frames to decode, true otherwise. +
Throws: +
JavaLayerException
+
+
+
+ +

+play

+
+public boolean play(int start,
+                    int end)
+             throws JavaLayerException
+
+
Plays a range of MPEG audio frames +

+

+
Parameters:
start - The first frame to play
end - The last frame to play +
Returns:
true if the last frame was played, or false if there are more frames. +
Throws: +
JavaLayerException
+
+
+
+ +

+setPlayBackListener

+
+public void setPlayBackListener(PlaybackListener listener)
+
+
sets the PlaybackListener +

+

+
+
+
+
+ +

+getPlayBackListener

+
+public PlaybackListener getPlayBackListener()
+
+
gets the PlaybackListener +

+

+
+
+
+
+ +

+stop

+
+public void stop()
+
+
closes the player and notifies PlaybackListener +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/advanced/PlaybackEvent.html b/JLayer1.0.1/doc/javazoom/jl/player/advanced/PlaybackEvent.html new file mode 100644 index 0000000..781208e --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/advanced/PlaybackEvent.html @@ -0,0 +1,404 @@ + + + + + + +PlaybackEvent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player.advanced +
+Class PlaybackEvent

+
+java.lang.Object
+  extended by javazoom.jl.player.advanced.PlaybackEvent
+
+
+
+
public class PlaybackEvent
extends java.lang.Object
+ + +

+An event which indicates a Player has performed an 'playback action' +

+ +

+


+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+static intSTARTED + +
+           
+static intSTOPPED + +
+           
+  + + + + + + + + + + +
+Constructor Summary
PlaybackEvent(AdvancedPlayer source, + int id, + int frame) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetFrame() + +
+           
+ intgetId() + +
+           
+ AdvancedPlayergetSource() + +
+           
+ voidsetFrame(int frame) + +
+           
+ voidsetId(int id) + +
+           
+ voidsetSource(AdvancedPlayer source) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+STOPPED

+
+public static int STOPPED
+
+
+
+
+
+ +

+STARTED

+
+public static int STARTED
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+PlaybackEvent

+
+public PlaybackEvent(AdvancedPlayer source,
+                     int id,
+                     int frame)
+
+
+ + + + + + + + +
+Method Detail
+ +

+getId

+
+public int getId()
+
+
+
+
+
+
+ +

+setId

+
+public void setId(int id)
+
+
+
+
+
+
+ +

+getFrame

+
+public int getFrame()
+
+
+
+
+
+
+ +

+setFrame

+
+public void setFrame(int frame)
+
+
+
+
+
+
+ +

+getSource

+
+public AdvancedPlayer getSource()
+
+
+
+
+
+
+ +

+setSource

+
+public void setSource(AdvancedPlayer source)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/advanced/PlaybackListener.html b/JLayer1.0.1/doc/javazoom/jl/player/advanced/PlaybackListener.html new file mode 100644 index 0000000..dcce366 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/advanced/PlaybackListener.html @@ -0,0 +1,273 @@ + + + + + + +PlaybackListener + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player.advanced +
+Class PlaybackListener

+
+java.lang.Object
+  extended by javazoom.jl.player.advanced.PlaybackListener
+
+
+
Direct Known Subclasses:
jlap.InfoListener
+
+
+
+
public abstract class PlaybackListener
extends java.lang.Object
+ + +

+Listener for javalayer Player playback +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
PlaybackListener() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ voidplaybackFinished(PlaybackEvent evt) + +
+           
+ voidplaybackStarted(PlaybackEvent evt) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+PlaybackListener

+
+public PlaybackListener()
+
+
+ + + + + + + + +
+Method Detail
+ +

+playbackStarted

+
+public void playbackStarted(PlaybackEvent evt)
+
+
+
+
+
+
+ +

+playbackFinished

+
+public void playbackFinished(PlaybackEvent evt)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/advanced/jlap.InfoListener.html b/JLayer1.0.1/doc/javazoom/jl/player/advanced/jlap.InfoListener.html new file mode 100644 index 0000000..2a37dec --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/advanced/jlap.InfoListener.html @@ -0,0 +1,276 @@ + + + + + + +jlap.InfoListener + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player.advanced +
+Class jlap.InfoListener

+
+java.lang.Object
+  extended by javazoom.jl.player.advanced.PlaybackListener
+      extended by javazoom.jl.player.advanced.jlap.InfoListener
+
+
+
Enclosing class:
jlap
+
+
+
+
public class jlap.InfoListener
extends PlaybackListener
+ + +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
jlap.InfoListener() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ voidplaybackFinished(PlaybackEvent evt) + +
+           
+ voidplaybackStarted(PlaybackEvent evt) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+jlap.InfoListener

+
+public jlap.InfoListener()
+
+
+ + + + + + + + +
+Method Detail
+ +

+playbackStarted

+
+public void playbackStarted(PlaybackEvent evt)
+
+
+
Overrides:
playbackStarted in class PlaybackListener
+
+
+
+
+
+
+ +

+playbackFinished

+
+public void playbackFinished(PlaybackEvent evt)
+
+
+
Overrides:
playbackFinished in class PlaybackListener
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/advanced/jlap.html b/JLayer1.0.1/doc/javazoom/jl/player/advanced/jlap.html new file mode 100644 index 0000000..5304c1e --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/advanced/jlap.html @@ -0,0 +1,395 @@ + + + + + + +jlap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player.advanced +
+Class jlap

+
+java.lang.Object
+  extended by javazoom.jl.player.advanced.jlap
+
+
+
+
public class jlap
extends java.lang.Object
+ + +

+This class implements a sample player using Playback listener. +

+ +

+


+ +

+ + + + + + + + + + + +
+Nested Class Summary
+ classjlap.InfoListener + +
+           
+  + + + + + + + + + + +
+Constructor Summary
jlap() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static voidmain(java.lang.String[] args) + +
+           
+ voidplay(java.lang.String filename) + +
+           
+static AdvancedPlayerplayMp3(java.io.File mp3, + int start, + int end, + PlaybackListener listener) + +
+           
+static AdvancedPlayerplayMp3(java.io.File mp3, + PlaybackListener listener) + +
+           
+static AdvancedPlayerplayMp3(java.io.InputStream is, + int start, + int end, + PlaybackListener listener) + +
+           
+ voidshowUsage() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+jlap

+
+public jlap()
+
+
+ + + + + + + + +
+Method Detail
+ +

+main

+
+public static void main(java.lang.String[] args)
+
+
+
+
+
+
+ +

+play

+
+public void play(java.lang.String filename)
+          throws JavaLayerException,
+                 java.io.IOException
+
+
+ +
Throws: +
JavaLayerException +
java.io.IOException
+
+
+
+ +

+showUsage

+
+public void showUsage()
+
+
+
+
+
+
+ +

+playMp3

+
+public static AdvancedPlayer playMp3(java.io.File mp3,
+                                     PlaybackListener listener)
+                              throws java.io.IOException,
+                                     JavaLayerException
+
+
+ +
Throws: +
java.io.IOException +
JavaLayerException
+
+
+
+ +

+playMp3

+
+public static AdvancedPlayer playMp3(java.io.File mp3,
+                                     int start,
+                                     int end,
+                                     PlaybackListener listener)
+                              throws java.io.IOException,
+                                     JavaLayerException
+
+
+ +
Throws: +
java.io.IOException +
JavaLayerException
+
+
+
+ +

+playMp3

+
+public static AdvancedPlayer playMp3(java.io.InputStream is,
+                                     int start,
+                                     int end,
+                                     PlaybackListener listener)
+                              throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/advanced/package-frame.html b/JLayer1.0.1/doc/javazoom/jl/player/advanced/package-frame.html new file mode 100644 index 0000000..63df5d9 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/advanced/package-frame.html @@ -0,0 +1,38 @@ + + + + + + +javazoom.jl.player.advanced + + + + + + + + + + + +javazoom.jl.player.advanced + + + + +
+Classes  + +
+AdvancedPlayer +
+jlap +
+PlaybackEvent +
+PlaybackListener
+ + + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/advanced/package-summary.html b/JLayer1.0.1/doc/javazoom/jl/player/advanced/package-summary.html new file mode 100644 index 0000000..cbceab7 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/advanced/package-summary.html @@ -0,0 +1,165 @@ + + + + + + +javazoom.jl.player.advanced + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package javazoom.jl.player.advanced +

+ + + + + + + + + + + + + + + + + + + + + +
+Class Summary
AdvancedPlayera hybrid of javazoom.jl.player.Player tweeked to include play(startFrame, endFrame) + hopefully this will be included in the api
jlapThis class implements a sample player using Playback listener.
PlaybackEventAn event which indicates a Player has performed an 'playback action'
PlaybackListenerListener for javalayer Player playback
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/advanced/package-tree.html b/JLayer1.0.1/doc/javazoom/jl/player/advanced/package-tree.html new file mode 100644 index 0000000..702e8f3 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/advanced/package-tree.html @@ -0,0 +1,149 @@ + + + + + + +javazoom.jl.player.advanced Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package javazoom.jl.player.advanced +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/jlp.html b/JLayer1.0.1/doc/javazoom/jl/player/jlp.html new file mode 100644 index 0000000..a12bb40 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/jlp.html @@ -0,0 +1,420 @@ + + + + + + +jlp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class jlp

+
+java.lang.Object
+  extended by javazoom.jl.player.jlp
+
+
+
+
public class jlp
extends java.lang.Object
+ + +

+The jlp class implements a simple command-line + player for MPEG audio files. +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
jlp(java.lang.String filename) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static jlpcreateInstance(java.lang.String[] args) + +
+           
+protected  AudioDevicegetAudioDevice() + +
+           
+protected  java.io.InputStreamgetInputStream() + +
+          Playing file from FileInputStream.
+protected  java.io.InputStreamgetURLInputStream() + +
+          Playing file from URL (Streaming).
+protected  voidinit(java.lang.String filename) + +
+           
+static voidmain(java.lang.String[] args) + +
+           
+protected  booleanparseArgs(java.lang.String[] args) + +
+           
+ voidplay() + +
+           
+ voidshowUsage() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+jlp

+
+public jlp(java.lang.String filename)
+
+
+ + + + + + + + +
+Method Detail
+ +

+main

+
+public static void main(java.lang.String[] args)
+
+
+
+
+
+
+ +

+createInstance

+
+public static jlp createInstance(java.lang.String[] args)
+
+
+
+
+
+
+ +

+init

+
+protected void init(java.lang.String filename)
+
+
+
+
+
+
+ +

+parseArgs

+
+protected boolean parseArgs(java.lang.String[] args)
+
+
+
+
+
+
+ +

+showUsage

+
+public void showUsage()
+
+
+
+
+
+
+ +

+play

+
+public void play()
+          throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+getURLInputStream

+
+protected java.io.InputStream getURLInputStream()
+                                         throws java.lang.Exception
+
+
Playing file from URL (Streaming). +

+

+ +
Throws: +
java.lang.Exception
+
+
+
+ +

+getInputStream

+
+protected java.io.InputStream getInputStream()
+                                      throws java.io.IOException
+
+
Playing file from FileInputStream. +

+

+ +
Throws: +
java.io.IOException
+
+
+
+ +

+getAudioDevice

+
+protected AudioDevice getAudioDevice()
+                              throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/package-frame.html b/JLayer1.0.1/doc/javazoom/jl/player/package-frame.html new file mode 100644 index 0000000..55c1649 --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/package-frame.html @@ -0,0 +1,59 @@ + + + + + + +javazoom.jl.player + + + + + + + + + + + +javazoom.jl.player + + + + +
+Interfaces  + +
+AudioDevice
+ + + + + + +
+Classes  + +
+AudioDeviceBase +
+AudioDeviceFactory +
+FactoryRegistry +
+JavaSoundAudioDevice +
+JavaSoundAudioDeviceFactory +
+jlp +
+NullAudioDevice +
+Player +
+PlayerApplet
+ + + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/package-summary.html b/JLayer1.0.1/doc/javazoom/jl/player/package-summary.html new file mode 100644 index 0000000..1e4629a --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/package-summary.html @@ -0,0 +1,207 @@ + + + + + + +javazoom.jl.player + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package javazoom.jl.player +

+ + + + + + + + + +
+Interface Summary
AudioDeviceThe AudioDevice interface provides an abstraction for + a device capable of sounding audio samples.
+  + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
AudioDeviceBaseThe AudioDeviceBase class provides a simple thread-safe + implementation of the AudioDevice interface.
AudioDeviceFactoryAn AudioDeviceFactory class is responsible for creating + a specific AudioDevice implementation.
FactoryRegistryThe FactoryRegistry class stores the factories + for all the audio device implementations available in the system.
JavaSoundAudioDeviceThe JavaSoundAudioDevice implements an audio + device by using the JavaSound API.
JavaSoundAudioDeviceFactoryThis class is responsible for creating instances of the + JavaSoundAudioDevice.
jlpThe jlp class implements a simple command-line + player for MPEG audio files.
NullAudioDeviceThe NullAudioDevice implements a silent, no-op + audio device.
PlayerThe Player class implements a simple player for playback + of an MPEG audio stream.
PlayerAppletA simple applet that plays an MPEG audio file.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/javazoom/jl/player/package-tree.html b/JLayer1.0.1/doc/javazoom/jl/player/package-tree.html new file mode 100644 index 0000000..1c1232a --- /dev/null +++ b/JLayer1.0.1/doc/javazoom/jl/player/package-tree.html @@ -0,0 +1,168 @@ + + + + + + +javazoom.jl.player Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package javazoom.jl.player +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/overview-frame.html b/JLayer1.0.1/doc/overview-frame.html new file mode 100644 index 0000000..6b45982 --- /dev/null +++ b/JLayer1.0.1/doc/overview-frame.html @@ -0,0 +1,48 @@ + + + + + + +Overview + + + + + + + + + + + + + + + +
+
+ + + + + +
All Classes +

+ +Packages +
+javazoom.jl.converter +
+javazoom.jl.decoder +
+javazoom.jl.player +
+javazoom.jl.player.advanced +
+

+ +

+  + + diff --git a/JLayer1.0.1/doc/overview-summary.html b/JLayer1.0.1/doc/overview-summary.html new file mode 100644 index 0000000..6569711 --- /dev/null +++ b/JLayer1.0.1/doc/overview-summary.html @@ -0,0 +1,158 @@ + + + + + + +Overview + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +


+ + + + + + + + + + + + + + + + + + + + + +
+Packages
javazoom.jl.converter 
javazoom.jl.decoder 
javazoom.jl.player 
javazoom.jl.player.advanced 
+ +


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/overview-tree.html b/JLayer1.0.1/doc/overview-tree.html new file mode 100644 index 0000000..211f5b2 --- /dev/null +++ b/JLayer1.0.1/doc/overview-tree.html @@ -0,0 +1,191 @@ + + + + + + +Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For All Packages

+
+
+
Package Hierarchies:
javazoom.jl.converter, javazoom.jl.decoder, javazoom.jl.player, javazoom.jl.player.advanced
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/package-list b/JLayer1.0.1/doc/package-list new file mode 100644 index 0000000..b8fb0d7 --- /dev/null +++ b/JLayer1.0.1/doc/package-list @@ -0,0 +1,4 @@ +javazoom.jl.converter +javazoom.jl.decoder +javazoom.jl.player +javazoom.jl.player.advanced diff --git a/JLayer1.0.1/doc/packages.html b/JLayer1.0.1/doc/packages.html new file mode 100644 index 0000000..99d78ad --- /dev/null +++ b/JLayer1.0.1/doc/packages.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+The front page has been relocated.Please see: +
+          Frame version +
+          Non-frame version.
+ + + diff --git a/JLayer1.0.1/doc/resources/inherit.gif b/JLayer1.0.1/doc/resources/inherit.gif new file mode 100644 index 0000000000000000000000000000000000000000..c814867a13deb0ca7ea2156c6ca1d5a03372af7e GIT binary patch literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/doc/serialized-form.html b/JLayer1.0.1/doc/serialized-form.html new file mode 100644 index 0000000..ca1841b --- /dev/null +++ b/JLayer1.0.1/doc/serialized-form.html @@ -0,0 +1,295 @@ + + + + + + +Serialized Form + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Serialized Form

+
+
+ + + + + +
+Package javazoom.jl.decoder
+ +

+ + + + + +
+Class javazoom.jl.decoder.BitstreamException extends JavaLayerException implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+errorcode

+
+int errorcode
+
+
+
+
+ +

+ + + + + +
+Class javazoom.jl.decoder.DecoderException extends JavaLayerException implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+errorcode

+
+int errorcode
+
+
+
+
+ +

+ + + + + +
+Class javazoom.jl.decoder.JavaLayerError extends java.lang.Error implements Serializable
+ +

+ +

+ + + + + +
+Class javazoom.jl.decoder.JavaLayerException extends java.lang.Exception implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+exception

+
+java.lang.Throwable exception
+
+
+
+
+
+ + + + + +
+Package javazoom.jl.player
+ +

+ + + + + +
+Class javazoom.jl.player.PlayerApplet extends java.applet.Applet implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+player

+
+Player player
+
+
The Player used to play the MPEG audio file. +

+

+
+
+
+

+playerThread

+
+java.lang.Thread playerThread
+
+
The thread that runs the player. +

+

+
+
+
+

+fileName

+
+java.lang.String fileName
+
+
+
+
+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/JLayer1.0.1/doc/stylesheet.css b/JLayer1.0.1/doc/stylesheet.css new file mode 100644 index 0000000..6d31fdb --- /dev/null +++ b/JLayer1.0.1/doc/stylesheet.css @@ -0,0 +1,29 @@ +/* Javadoc style sheet */ + +/* Define colors, fonts and other style attributes here to override the defaults */ + +/* Page background color */ +body { background-color: #FFFFFF } + +/* Headings */ +h1 { font-size: 145% } + +/* Table colors */ +.TableHeadingColor { background: #CCCCFF } /* Dark mauve */ +.TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ +.TableRowColor { background: #FFFFFF } /* White */ + +/* Font used in left-hand frame lists */ +.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif } +.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } +.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } + +/* Navigation bar fonts and colors */ +.NavBarCell1 { background-color:#EEEEFF;} /* Light mauve */ +.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */ +.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} +.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} + +.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} +.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} + diff --git a/JLayer1.0.1/jl1.0.1.jar b/JLayer1.0.1/jl1.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..bd5fb8b8eb28746e4a3d7cfee2b54c4fd54f5043 GIT binary patch literal 105363 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

(H>r|Sz$es;n6q4t!9osGU^)b#AiEhi^s}TD` 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

W(94n+m(@89xah6`eR%%`DDLQJ z@Aw-tzAuT|%L0%GK<*i@V2Akr4eM@f3U;=%2Sy>6YsHYQLyEK|Z8bpL11_>F}YRuJ#JGFcwh-A`V6?P`n%x%Z*Y#rY~0twp7PN3*a12I3Y5yr*v}s+&yP&# zdYIT>-6EwD$Pr}w8(TVd>&T)3#c>M-GRIRQf23Zo`6c~Y#_&1s||(pA8~*3 zH#28kbvgk20OTI1CqGl3AHU3>p?~%^eue<^AV9+d*vvnvm*t&I?s~4cgA2&U($mzD zQe0WW#m@NmC5hTx`!yd>GqZpW@@ieWC;u<(>n+>%lU>h*s|M9D?t~>iW#je6v|d1&9s6 zb+vIi{ZG{2RHz)qO?*4R3K@VEt~O5drvIkwpNlI~wVO%^pzLJ;_|>`#acVut_owv?%mQkhV3n_!p>}v!%^%jDUDUniLKw{dqv?zkE9TBjx$I+g?xo?k(vb zEtZOlkrBwwH8o_YNTLDy^l$qz=Z2x#V>0@Kv1(~W13{se_|_;;VMUoS(v(ILJLu#g=v zA`|~57?pf!^x6apPaLUHYdO6%py{b3mX@NKXu4zX2E96*NNae?*%(gN%MRwX#Ln zM4bT8^gy|~I(Kt^_TTX4j(?fvHw_`Ffyo*HAYc->u1;u^>i?SnXH#3Sy(7rd@i&8Z zrykQ_MPN&K=aE` z53(!1MP0ofD-W^*ng4Fa7Khs^nF^qAfWm$ihqQJ*?vE2dT3f%31pvkN|7zs=`fqS9 z&cJX+)B2MXNPQ5^i+>#2XO42b+;s(P|+jc^Xw@A5RJJ6G%& z_U<>#KMc0+Gt#8C;6Ong0lm=GVNo|w%&v2`iie%Eg{hOJ6R@HI^l;ZZyW!OO-5ns~ zguq2|Maf=h=xebc7k1#F%FB}iA={f|vHPEI17j=B4#Qi~UngEcQXx+}`bB*q|8LYQJA)y?kVoqL0@o^D z3%>S%9Y`wV(Hg&~(5lx`Wqy0m1|%ACd-N}KlJye&wkP`%>WUo3JHgdkNgEM0iJ367xW3{UzcK*aUm1zg`JK*mS>V&ZsS%lsKFp(G0nOyi)SRDgfygiuhx J<3Ql2{{u2lHQE3G literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/playerapplet.html b/JLayer1.0.1/playerapplet.html new file mode 100644 index 0000000..47b9e10 --- /dev/null +++ b/JLayer1.0.1/playerapplet.html @@ -0,0 +1,44 @@ + + +MP3 Player - Applet Sample + + +

+ + diff --git a/JLayer1.0.1/setEnvAnt.bat b/JLayer1.0.1/setEnvAnt.bat new file mode 100644 index 0000000..f6bc03d --- /dev/null +++ b/JLayer1.0.1/setEnvAnt.bat @@ -0,0 +1,3 @@ +SET JAVA_HOME=C:\java\jdk1.5.0_15 +SET ANT_HOME=C:\java\ant1.7 +SET PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin diff --git a/JLayer1.0.1/src/javazoom/jl/converter/Converter.java b/JLayer1.0.1/src/javazoom/jl/converter/Converter.java new file mode 100644 index 0000000..845082e --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/converter/Converter.java @@ -0,0 +1,411 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 12/12/99 Original verion. mdm@techie.com. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.converter; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; + +import javazoom.jl.decoder.Bitstream; +import javazoom.jl.decoder.Decoder; +import javazoom.jl.decoder.Header; +import javazoom.jl.decoder.JavaLayerException; +import javazoom.jl.decoder.Obuffer; + +/** + * The Converter class implements the conversion of + * an MPEG audio file to a .WAV file. To convert an MPEG audio stream, + * just create an instance of this class and call the convert() + * method, passing in the names of the input and output files. You can + * pass in optional ProgressListener and + * Decoder.Params objects also to customize the conversion. + * + * @author MDM 12/12/99 + * @since 0.0.7 + */ +public class Converter +{ + /** + * Creates a new converter instance. + */ + public Converter() + { + } + + public synchronized void convert(String sourceName, String destName) + throws JavaLayerException + { + convert(sourceName, destName, null, null); + } + + public synchronized void convert(String sourceName, String destName, + ProgressListener progressListener) + throws JavaLayerException + { + convert(sourceName, destName, progressListener, null); + } + + + public void convert(String sourceName, String destName, + ProgressListener progressListener, Decoder.Params decoderParams) + throws JavaLayerException + { + if (destName.length()==0) + destName = null; + try { + InputStream in = openInput(sourceName); + convert(in, destName, progressListener, decoderParams); + in.close(); + } catch(IOException ioe) { + throw new JavaLayerException(ioe.getLocalizedMessage(), ioe); + } + } + + 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 (; frameupdateID parameter can take these values: + * + * UPDATE_FRAME_COUNT: param1 is the frame count, or -1 if not known. + * UPDATE_CONVERT_COMPLETE: param1 is the conversion time, param2 + * is the number of frames converted. + */ + public void converterUpdate(int updateID, int param1, int param2); + + /** + * If the converter wishes to make a first pass over the + * audio frames, this is called as each frame is parsed. + */ + public void parsedFrame(int frameNo, Header header); + + /** + * This method is called after each frame has been read, + * but before it has been decoded. + * + * @param frameNo The 0-based sequence number of the frame. + * @param header The Header rerpesenting the frame just read. + */ + public void readFrame(int frameNo, Header header); + + /** + * This method is called after a frame has been decoded. + * + * @param frameNo The 0-based sequence number of the frame. + * @param header The Header rerpesenting the frame just read. + * @param o The Obuffer the deocded data was written to. + */ + public void decodedFrame(int frameNo, Header header, Obuffer o); + + /** + * Called when an exception is thrown during while converting + * a frame. + * + * @param t The Throwable instance that + * was thrown. + * + * @return true to continue processing, or false + * to abort conversion. + * + * If this method returns false, the exception + * is propagated to the caller of the convert() method. If + * true is returned, the exception is silently + * ignored and the converter moves onto the next frame. + */ + public boolean converterException(Throwable t); + + } + + + /** + * Implementation of ProgressListener that writes + * notification text to a PrintWriter. + */ + // REVIEW: i18n of text and order required. + static public class PrintWriterProgressListener implements ProgressListener + { + static public final int NO_DETAIL = 0; + + /** + * Level of detail typically expected of expert + * users. + */ + static public final int EXPERT_DETAIL = 1; + + /** + * Verbose detail. + */ + static public final int VERBOSE_DETAIL = 2; + + /** + * Debug detail. All frame read notifications are shown. + */ + static public final int DEBUG_DETAIL = 7; + + static public final int MAX_DETAIL = 10; + + private PrintWriter pw; + + private int detailLevel; + + static public PrintWriterProgressListener newStdOut(int detail) + { + return new PrintWriterProgressListener( + new PrintWriter(System.out, true), detail); + } + + public PrintWriterProgressListener(PrintWriter writer, int detailLevel) + { + this.pw = writer; + this.detailLevel = detailLevel; + } + + + public boolean isDetail(int detail) + { + return (this.detailLevel >= detail); + } + + public void converterUpdate(int updateID, int param1, int param2) + { + if (isDetail(VERBOSE_DETAIL)) + { + switch (updateID) + { + case UPDATE_CONVERT_COMPLETE: + // catch divide by zero errors. + if (param2==0) + param2 = 1; + + pw.println(); + pw.println("Converted "+param2+" frames in "+param1+" ms ("+ + (param1/param2)+" ms per frame.)"); + } + } + } + + public void parsedFrame(int frameNo, Header header) + { + if ((frameNo==0) && isDetail(VERBOSE_DETAIL)) + { + String headerString = header.toString(); + pw.println("File is a "+headerString); + } + else if (isDetail(MAX_DETAIL)) + { + String headerString = header.toString(); + pw.println("Prased frame "+frameNo+": "+headerString); + } + } + + public void readFrame(int frameNo, Header header) + { + if ((frameNo==0) && isDetail(VERBOSE_DETAIL)) + { + String headerString = header.toString(); + pw.println("File is a "+headerString); + } + else if (isDetail(MAX_DETAIL)) + { + String headerString = header.toString(); + pw.println("Read frame "+frameNo+": "+headerString); + } + } + + public void decodedFrame(int frameNo, Header header, Obuffer o) + { + if (isDetail(MAX_DETAIL)) + { + String headerString = header.toString(); + pw.println("Decoded frame "+frameNo+": "+headerString); + pw.println("Output: "+o); + } + else if (isDetail(VERBOSE_DETAIL)) + { + if (frameNo==0) + { + pw.print("Converting."); + pw.flush(); + } + + if ((frameNo % 10)==0) + { + pw.print('.'); + pw.flush(); + } + } + } + + public boolean converterException(Throwable t) + { + if (this.detailLevel>NO_DETAIL) + { + t.printStackTrace(pw); + pw.flush(); + } + return false; + } + + } + + +} \ No newline at end of file diff --git a/JLayer1.0.1/src/javazoom/jl/converter/RiffFile.java b/JLayer1.0.1/src/javazoom/jl/converter/RiffFile.java new file mode 100644 index 0000000..fb5d9e5 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/converter/RiffFile.java @@ -0,0 +1,495 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 02/23/99 JavaConversion by E.B + * Don Cross, April 1993. + * RIFF file format classes. + * See Chapter 8 of "Multimedia Programmer's Reference" in + * the Microsoft Windows SDK. + * + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.converter; + +import java.io.IOException; +import java.io.RandomAccessFile; + + +/** + * Class to manage RIFF files + */ +public class RiffFile +{ + class RiffChunkHeader + { + public int ckID = 0; // Four-character chunk ID + public int ckSize = 0; // Length of data in chunk + public RiffChunkHeader() + {} + } + + + // DDCRET + public static final int DDC_SUCCESS = 0; // The operation succeded + public static final int DDC_FAILURE = 1; // The operation failed for unspecified reasons + public static final int DDC_OUT_OF_MEMORY = 2; // Operation failed due to running out of memory + public static final int DDC_FILE_ERROR = 3; // Operation encountered file I/O error + public static final int DDC_INVALID_CALL = 4; // Operation was called with invalid parameters + public static final int DDC_USER_ABORT = 5; // Operation was aborted by the user + public static final int DDC_INVALID_FILE = 6; // File format does not match + + // RiffFileMode + public static final int RFM_UNKNOWN = 0; // undefined type (can use to mean "N/A" or "not open") + public static final int RFM_WRITE = 1; // open for write + public static final int RFM_READ = 2; // open for read + + private RiffChunkHeader riff_header; // header for whole file + protected int fmode; // current file I/O mode + protected RandomAccessFile file; // I/O stream to use + + /** + * Dummy Constructor + */ + public RiffFile() + { + file = null; + fmode = RFM_UNKNOWN; + riff_header = new RiffChunkHeader(); + + riff_header.ckID = FourCC("RIFF"); + riff_header.ckSize = 0; + } + + /** + * Return File Mode. + */ + public int CurrentFileMode() + {return fmode;} + + /** + * Open a RIFF file. + */ + public int Open(String Filename, int NewMode) + { + int retcode = DDC_SUCCESS; + + if ( fmode != RFM_UNKNOWN ) + { + retcode = Close(); + } + + if ( retcode == DDC_SUCCESS ) + { + switch ( NewMode ) + { + case RFM_WRITE: + try + { + file = new RandomAccessFile(Filename,"rw"); + + try + { + // Write the RIFF header... + // We will have to come back later and patch it! + byte[] br = new byte[8]; + br[0] = (byte) ((riff_header.ckID >>> 24) & 0x000000FF); + br[1] = (byte) ((riff_header.ckID >>> 16) & 0x000000FF); + br[2] = (byte) ((riff_header.ckID >>> 8) & 0x000000FF); + br[3] = (byte) (riff_header.ckID & 0x000000FF); + + byte br4 = (byte) ((riff_header.ckSize >>> 24)& 0x000000FF); + byte br5 = (byte) ((riff_header.ckSize >>> 16)& 0x000000FF); + byte br6 = (byte) ((riff_header.ckSize >>> 8)& 0x000000FF); + byte br7 = (byte) (riff_header.ckSize & 0x000000FF); + + br[4] = br7; + br[5] = br6; + br[6] = br5; + br[7] = br4; + + file.write(br,0,8); + fmode = RFM_WRITE; + } catch (IOException ioe) + { + file.close(); + fmode = RFM_UNKNOWN; + } + } catch (IOException ioe) + { + fmode = RFM_UNKNOWN; + retcode = DDC_FILE_ERROR; + } + break; + + case RFM_READ: + try + { + file = new RandomAccessFile(Filename,"r"); + try + { + // Try to read the RIFF header... + byte[] br = new byte[8]; + file.read(br,0,8); + fmode = RFM_READ; + riff_header.ckID = ((br[0]<<24)& 0xFF000000) | ((br[1]<<16)&0x00FF0000) | ((br[2]<<8)&0x0000FF00) | (br[3]&0x000000FF); + riff_header.ckSize = ((br[4]<<24)& 0xFF000000) | ((br[5]<<16)&0x00FF0000) | ((br[6]<<8)&0x0000FF00) | (br[7]&0x000000FF); + } catch (IOException ioe) + { + file.close(); + fmode = RFM_UNKNOWN; + } + } catch (IOException ioe) + { + fmode = RFM_UNKNOWN; + retcode = DDC_FILE_ERROR; + } + break; + default: + retcode = DDC_INVALID_CALL; + } + } + return retcode; + } + + /** + * Write NumBytes data. + */ + public int Write(byte[] Data, int NumBytes ) + { + if ( fmode != RFM_WRITE ) + { + return DDC_INVALID_CALL; + } + try + { + file.write(Data,0,NumBytes); + fmode = RFM_WRITE; + } + catch (IOException ioe) + { + return DDC_FILE_ERROR; + } + riff_header.ckSize += NumBytes; + return DDC_SUCCESS; + } + + + + /** + * Write NumBytes data. + */ + public int Write(short[] Data, int NumBytes ) + { + byte[] theData = new byte[NumBytes]; + int yc = 0; + for (int y = 0;y>> 8) & 0x00FF); + } + if ( fmode != RFM_WRITE ) + { + return DDC_INVALID_CALL; + } + try + { + file.write(theData,0,NumBytes); + fmode = RFM_WRITE; + } + catch (IOException ioe) + { + return DDC_FILE_ERROR; + } + riff_header.ckSize += NumBytes; + return DDC_SUCCESS; + } + + /** + * Write NumBytes data. + */ + public int Write(RiffChunkHeader Triff_header, int NumBytes ) + { + byte[] br = new byte[8]; + br[0] = (byte) ((Triff_header.ckID >>> 24) & 0x000000FF); + br[1] = (byte) ((Triff_header.ckID >>> 16) & 0x000000FF); + br[2] = (byte) ((Triff_header.ckID >>> 8) & 0x000000FF); + br[3] = (byte) (Triff_header.ckID & 0x000000FF); + + byte br4 = (byte) ((Triff_header.ckSize >>> 24)& 0x000000FF); + byte br5 = (byte) ((Triff_header.ckSize >>> 16)& 0x000000FF); + byte br6 = (byte) ((Triff_header.ckSize >>> 8)& 0x000000FF); + byte br7 = (byte) (Triff_header.ckSize & 0x000000FF); + + br[4] = br7; + br[5] = br6; + br[6] = br5; + br[7] = br4; + + if ( fmode != RFM_WRITE ) + { + return DDC_INVALID_CALL; + } + try + { + file.write(br,0,NumBytes); + fmode = RFM_WRITE; + } catch (IOException ioe) + { + return DDC_FILE_ERROR; + } + riff_header.ckSize += NumBytes; + return DDC_SUCCESS; + } + + /** + * Write NumBytes data. + */ + public int Write(short Data, int NumBytes ) + { + short theData = (short) ( ((Data>>>8)&0x00FF) | ((Data<<8)&0xFF00) ); + if ( fmode != RFM_WRITE ) + { + return DDC_INVALID_CALL; + } + try + { + file.writeShort(theData); + fmode = RFM_WRITE; + } catch (IOException ioe) + { + return DDC_FILE_ERROR; + } + riff_header.ckSize += NumBytes; + return DDC_SUCCESS; + } + /** + * Write NumBytes data. + */ + public int Write(int Data, int NumBytes ) + { + short theDataL = (short) ((Data>>>16)&0x0000FFFF); + short theDataR = (short) (Data&0x0000FFFF); + short theDataLI = (short) ( ((theDataL>>>8)&0x00FF) | ((theDataL<<8)&0xFF00) ); + short theDataRI = (short) ( ((theDataR>>>8)&0x00FF) | ((theDataR<<8)&0xFF00) ); + int theData = ((theDataRI<<16)&0xFFFF0000) | (theDataLI&0x0000FFFF); + if ( fmode != RFM_WRITE ) + { + return DDC_INVALID_CALL; + } + try + { + file.writeInt(theData); + fmode = RFM_WRITE; + } catch (IOException ioe) + { + return DDC_FILE_ERROR; + } + riff_header.ckSize += NumBytes; + return DDC_SUCCESS; + } + + + + /** + * Read NumBytes data. + */ + public int Read (byte[] Data, int NumBytes) + { + int retcode = DDC_SUCCESS; + try + { + file.read(Data,0,NumBytes); + } catch (IOException ioe) + { + retcode = DDC_FILE_ERROR; + } + return retcode; + } + + /** + * Expect NumBytes data. + */ + public int Expect(String Data, int NumBytes ) + { + byte target = 0; + int cnt = 0; + try + { + while ((NumBytes--) != 0) + { + target = file.readByte(); + if (target != Data.charAt(cnt++)) return DDC_FILE_ERROR; + } + } catch (IOException ioe) + { + return DDC_FILE_ERROR; + } + return DDC_SUCCESS; + } + + /** + * Close Riff File. + * Length is written too. + */ + public int Close() + { + int retcode = DDC_SUCCESS; + + switch ( fmode ) + { + case RFM_WRITE: + try + { + file.seek(0); + try + { + byte[] br = new byte[8]; + br[0] = (byte) ((riff_header.ckID >>> 24) & 0x000000FF); + br[1] = (byte) ((riff_header.ckID >>> 16) & 0x000000FF); + br[2] = (byte) ((riff_header.ckID >>> 8) & 0x000000FF); + br[3] = (byte) (riff_header.ckID & 0x000000FF); + + br[7] = (byte) ((riff_header.ckSize >>> 24)& 0x000000FF); + br[6] = (byte) ((riff_header.ckSize >>> 16)& 0x000000FF); + br[5] = (byte) ((riff_header.ckSize >>> 8)& 0x000000FF); + br[4] = (byte) (riff_header.ckSize & 0x000000FF); + file.write(br,0,8); + file.close(); + } catch (IOException ioe) + { + retcode = DDC_FILE_ERROR; + } + } catch (IOException ioe) + { + retcode = DDC_FILE_ERROR; + } + break; + + case RFM_READ: + try + { + file.close(); + } catch (IOException ioe) + { + retcode = DDC_FILE_ERROR; + } + break; + } + file = null; + fmode = RFM_UNKNOWN; + return retcode; + } + + /** + * Return File Position. + */ + public long CurrentFilePosition() + { + long position; + try + { + position = file.getFilePointer(); + } catch (IOException ioe) + { + position = -1; + } + return position; + } + + /** + * Write Data to specified offset. + */ + public int Backpatch (long FileOffset, RiffChunkHeader Data, int NumBytes ) + { + if (file == null) + { + return DDC_INVALID_CALL; + } + try + { + file.seek(FileOffset); + } catch (IOException ioe) + { + return DDC_FILE_ERROR; + } + return Write ( Data, NumBytes ); + } + + public int Backpatch (long FileOffset, byte[] Data, int NumBytes ) + { + if (file == null) + { + return DDC_INVALID_CALL; + } + try + { + file.seek(FileOffset); + } catch (IOException ioe) + { + return DDC_FILE_ERROR; + } + return Write ( Data, NumBytes ); + } + + + /** + * Seek in the File. + */ + protected int Seek(long offset) + { + int rc; + try + { + file.seek(offset); + rc = DDC_SUCCESS; + } catch (IOException ioe) + { + rc = DDC_FILE_ERROR; + } + return rc; + } + + /** + * Error Messages. + */ + private String DDCRET_String(int retcode) + { + switch ( retcode ) + { + case DDC_SUCCESS: return "DDC_SUCCESS"; + case DDC_FAILURE: return "DDC_FAILURE"; + case DDC_OUT_OF_MEMORY: return "DDC_OUT_OF_MEMORY"; + case DDC_FILE_ERROR: return "DDC_FILE_ERROR"; + case DDC_INVALID_CALL: return "DDC_INVALID_CALL"; + case DDC_USER_ABORT: return "DDC_USER_ABORT"; + case DDC_INVALID_FILE: return "DDC_INVALID_FILE"; + } + return "Unknown Error"; + } + + /** + * Fill the header. + */ + public static int FourCC(String ChunkName) + { + byte[] p = {0x20,0x20,0x20,0x20}; + ChunkName.getBytes(0,4,p,0); + int ret = (((p[0] << 24)& 0xFF000000) | ((p[1] << 16)&0x00FF0000) | ((p[2] << 8)&0x0000FF00) | (p[3]&0x000000FF)); + return ret; + } + +} diff --git a/JLayer1.0.1/src/javazoom/jl/converter/WaveFile.java b/JLayer1.0.1/src/javazoom/jl/converter/WaveFile.java new file mode 100644 index 0000000..f158d7a --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/converter/WaveFile.java @@ -0,0 +1,522 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 02/23/99 JavaConversion by E.B + * Don Cross, April 1993. + * RIFF file format classes. + * See Chapter 8 of "Multimedia Programmer's Reference" in + * the Microsoft Windows SDK. + * + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.converter; + +/** + * Class allowing WaveFormat Access + */ +public class WaveFile extends RiffFile +{ + public static final int MAX_WAVE_CHANNELS = 2; + + class WaveFormat_ChunkData + { + public short wFormatTag = 0; // Format category (PCM=1) + public short nChannels = 0; // Number of channels (mono=1, stereo=2) + public int nSamplesPerSec = 0; // Sampling rate [Hz] + public int nAvgBytesPerSec = 0; + public short nBlockAlign = 0; + public short nBitsPerSample = 0; + + public WaveFormat_ChunkData() + { + wFormatTag = 1; // PCM + Config(44100,(short)16,(short)1); + } + + public void Config (int NewSamplingRate, short NewBitsPerSample, short NewNumChannels) + { + nSamplesPerSec = NewSamplingRate; + nChannels = NewNumChannels; + nBitsPerSample = NewBitsPerSample; + nAvgBytesPerSec = (nChannels * nSamplesPerSec * nBitsPerSample) / 8; + nBlockAlign = (short) ((nChannels * nBitsPerSample) / 8); + } + } + + + class WaveFormat_Chunk + { + public RiffChunkHeader header; + public WaveFormat_ChunkData data; + + public WaveFormat_Chunk() + { + header = new RiffChunkHeader(); + data = new WaveFormat_ChunkData(); + header.ckID = FourCC("fmt "); + header.ckSize = 16; + } + + public int VerifyValidity() + { + boolean ret = header.ckID == FourCC("fmt ") && + + (data.nChannels == 1 || data.nChannels == 2) && + + data.nAvgBytesPerSec == ( data.nChannels * + data.nSamplesPerSec * + data.nBitsPerSample ) / 8 && + + data.nBlockAlign == ( data.nChannels * + data.nBitsPerSample ) / 8; + if (ret == true) return 1; + else return 0; + } + } + + public class WaveFileSample + { + public short[] chan; + + public WaveFileSample() + {chan = new short[WaveFile.MAX_WAVE_CHANNELS];} + } + + private WaveFormat_Chunk wave_format; + private RiffChunkHeader pcm_data; + private long pcm_data_offset = 0; // offset of 'pcm_data' in output file + private int num_samples = 0; + + + /** + * Constructs a new WaveFile instance. + */ + public WaveFile() + { + pcm_data = new RiffChunkHeader(); + wave_format = new WaveFormat_Chunk(); + pcm_data.ckID = FourCC("data"); + pcm_data.ckSize = 0; + num_samples = 0; + } + + /** + * + * + public int OpenForRead (String Filename) + { + // Verify filename parameter as best we can... + if (Filename == null) + { + return DDC_INVALID_CALL; + } + int retcode = Open ( Filename, RFM_READ ); + + if ( retcode == DDC_SUCCESS ) + { + retcode = Expect ( "WAVE", 4 ); + + if ( retcode == DDC_SUCCESS ) + { + retcode = Read(wave_format,24); + + if ( retcode == DDC_SUCCESS && !wave_format.VerifyValidity() ) + { + // This isn't standard PCM, so we don't know what it is! + retcode = DDC_FILE_ERROR; + } + + if ( retcode == DDC_SUCCESS ) + { + pcm_data_offset = CurrentFilePosition(); + + // Figure out number of samples from + // file size, current file position, and + // WAVE header. + retcode = Read (pcm_data, 8 ); + num_samples = filelength(fileno(file)) - CurrentFilePosition(); + num_samples /= NumChannels(); + num_samples /= (BitsPerSample() / 8); + } + } + } + return retcode; + }*/ + + /** + * + */ + public int OpenForWrite (String Filename, int SamplingRate, short BitsPerSample, short NumChannels) + { + // Verify parameters... + if ( (Filename==null) || + (BitsPerSample != 8 && BitsPerSample != 16) || + NumChannels < 1 || NumChannels > 2 ) + { + return DDC_INVALID_CALL; + } + + wave_format.data.Config ( SamplingRate, BitsPerSample, NumChannels ); + + int retcode = Open ( Filename, RFM_WRITE ); + + if ( retcode == DDC_SUCCESS ) + { + byte [] theWave = {(byte)'W',(byte)'A',(byte)'V',(byte)'E'}; + retcode = Write ( theWave, 4 ); + + if ( retcode == DDC_SUCCESS ) + { + // Ecriture de wave_format + retcode = Write (wave_format.header, 8); + retcode = Write (wave_format.data.wFormatTag, 2); + retcode = Write (wave_format.data.nChannels, 2); + retcode = Write (wave_format.data.nSamplesPerSec, 4); + retcode = Write (wave_format.data.nAvgBytesPerSec, 4); + retcode = Write (wave_format.data.nBlockAlign, 2); + retcode = Write (wave_format.data.nBitsPerSample, 2); + /* byte[] br = new byte[16]; + br[0] = (byte) ((wave_format.data.wFormatTag >> 8) & 0x00FF); + br[1] = (byte) (wave_format.data.wFormatTag & 0x00FF); + + br[2] = (byte) ((wave_format.data.nChannels >> 8) & 0x00FF); + br[3] = (byte) (wave_format.data.nChannels & 0x00FF); + + br[4] = (byte) ((wave_format.data.nSamplesPerSec >> 24)& 0x000000FF); + br[5] = (byte) ((wave_format.data.nSamplesPerSec >> 16)& 0x000000FF); + br[6] = (byte) ((wave_format.data.nSamplesPerSec >> 8)& 0x000000FF); + br[7] = (byte) (wave_format.data.nSamplesPerSec & 0x000000FF); + + br[8] = (byte) ((wave_format.data.nAvgBytesPerSec>> 24)& 0x000000FF); + br[9] = (byte) ((wave_format.data.nAvgBytesPerSec >> 16)& 0x000000FF); + br[10] = (byte) ((wave_format.data.nAvgBytesPerSec >> 8)& 0x000000FF); + br[11] = (byte) (wave_format.data.nAvgBytesPerSec & 0x000000FF); + + br[12] = (byte) ((wave_format.data.nBlockAlign >> 8) & 0x00FF); + br[13] = (byte) (wave_format.data.nBlockAlign & 0x00FF); + + br[14] = (byte) ((wave_format.data.nBitsPerSample >> 8) & 0x00FF); + br[15] = (byte) (wave_format.data.nBitsPerSample & 0x00FF); + retcode = Write (br, 16); */ + + + if ( retcode == DDC_SUCCESS ) + { + pcm_data_offset = CurrentFilePosition(); + retcode = Write ( pcm_data, 8 ); + } + } + } + + return retcode; + } + + /** + * + * + public int ReadSample ( short[] Sample ) + { + + }*/ + + /** + * + * + public int WriteSample( short[] Sample ) + { + int retcode = DDC_SUCCESS; + switch ( wave_format.data.nChannels ) + { + case 1: + switch ( wave_format.data.nBitsPerSample ) + { + case 8: + pcm_data.ckSize += 1; + retcode = Write ( Sample, 1 ); + break; + + case 16: + pcm_data.ckSize += 2; + retcode = Write ( Sample, 2 ); + break; + + default: + retcode = DDC_INVALID_CALL; + } + break; + + case 2: + switch ( wave_format.data.nBitsPerSample ) + { + case 8: + retcode = Write ( Sample, 1 ); + if ( retcode == DDC_SUCCESS ) + { + // &Sample[1] + retcode = Write (Sample, 1 ); + if ( retcode == DDC_SUCCESS ) + { + pcm_data.ckSize += 2; + } + } + break; + + case 16: + retcode = Write ( Sample, 2 ); + if ( retcode == DDC_SUCCESS ) + { + // &Sample[1] + retcode = Write (Sample, 2 ); + if ( retcode == DDC_SUCCESS ) + { + pcm_data.ckSize += 4; + } + } + break; + + default: + retcode = DDC_INVALID_CALL; + } + break; + + default: + retcode = DDC_INVALID_CALL; + } + + return retcode; + }*/ + + /** + * + * + public int SeekToSample ( long SampleIndex ) + { + if ( SampleIndex >= NumSamples() ) + { + return DDC_INVALID_CALL; + } + int SampleSize = (BitsPerSample() + 7) / 8; + int rc = Seek ( pcm_data_offset + 8 + + SampleSize * NumChannels() * SampleIndex ); + return rc; + }*/ + + /** + * Write 16-bit audio + */ + public int WriteData ( short[] data, int numData ) + { + int extraBytes = numData * 2; + pcm_data.ckSize += extraBytes; + return super.Write ( data, extraBytes ); + } + + /** + * Read 16-bit audio. + * + public int ReadData (short[] data, int numData) + {return super.Read ( data, numData * 2);} */ + + /** + * Write 8-bit audio. + * + public int WriteData ( byte[] data, int numData ) + { + pcm_data.ckSize += numData; + return super.Write ( data, numData ); + }*/ + + /** + * Read 8-bit audio. + * + public int ReadData ( byte[] data, int numData ) + {return super.Read ( data, numData );} */ + + + /** + * + * + public int ReadSamples (int num, int [] WaveFileSample) + { + + }*/ + + /** + * + * + public int WriteMonoSample ( short[] SampleData ) + { + switch ( wave_format.data.nBitsPerSample ) + { + case 8: + pcm_data.ckSize += 1; + return Write ( SampleData, 1 ); + + case 16: + pcm_data.ckSize += 2; + return Write ( SampleData, 2 ); + } + return DDC_INVALID_CALL; + }*/ + + /** + * + * + public int WriteStereoSample ( short[] LeftSample, short[] RightSample ) + { + int retcode = DDC_SUCCESS; + switch ( wave_format.data.nBitsPerSample ) + { + case 8: + retcode = Write ( LeftSample, 1 ); + if ( retcode == DDC_SUCCESS ) + { + retcode = Write ( RightSample, 1 ); + if ( retcode == DDC_SUCCESS ) + { + pcm_data.ckSize += 2; + } + } + break; + + case 16: + retcode = Write ( LeftSample, 2 ); + if ( retcode == DDC_SUCCESS ) + { + retcode = Write ( RightSample, 2 ); + if ( retcode == DDC_SUCCESS ) + { + pcm_data.ckSize += 4; + } + } + break; + + default: + retcode = DDC_INVALID_CALL; + } + return retcode; + }*/ + + /** + * + * + public int ReadMonoSample ( short[] Sample ) + { + int retcode = DDC_SUCCESS; + switch ( wave_format.data.nBitsPerSample ) + { + case 8: + byte[] x = {0}; + retcode = Read ( x, 1 ); + Sample[0] = (short)(x[0]); + break; + + case 16: + retcode = Read ( Sample, 2 ); + break; + + default: + retcode = DDC_INVALID_CALL; + } + return retcode; + }*/ + + /** + * + * + public int ReadStereoSample ( short[] LeftSampleData, short[] RightSampleData ) + { + int retcode = DDC_SUCCESS; + byte[] x = new byte[2]; + short[] y = new short[2]; + switch ( wave_format.data.nBitsPerSample ) + { + case 8: + retcode = Read ( x, 2 ); + L[0] = (short) ( x[0] ); + R[0] = (short) ( x[1] ); + break; + + case 16: + retcode = Read ( y, 4 ); + L[0] = (short) ( y[0] ); + R[0] = (short) ( y[1] ); + break; + + default: + retcode = DDC_INVALID_CALL; + } + return retcode; + }*/ + + + /** + * + */ + public int Close() + { + int rc = DDC_SUCCESS; + + if ( fmode == RFM_WRITE ) + rc = Backpatch ( pcm_data_offset, pcm_data, 8 ); + if ( rc == DDC_SUCCESS ) + rc = super.Close(); + return rc; + } + + // [Hz] + public int SamplingRate() + {return wave_format.data.nSamplesPerSec;} + + public short BitsPerSample() + {return wave_format.data.nBitsPerSample;} + + public short NumChannels() + {return wave_format.data.nChannels;} + + public int NumSamples() + {return num_samples;} + + + /** + * Open for write using another wave file's parameters... + */ + public int OpenForWrite (String Filename, WaveFile OtherWave ) + { + return OpenForWrite ( Filename, + OtherWave.SamplingRate(), + OtherWave.BitsPerSample(), + OtherWave.NumChannels() ); + } + + /** + * + */ + public long CurrentFilePosition() + { + return super.CurrentFilePosition(); + } + + /* public int FourCC(String ChunkName) + { + byte[] p = {0x20,0x20,0x20,0x20}; + ChunkName.getBytes(0,4,p,0); + int ret = (((p[0] << 24)& 0xFF000000) | ((p[1] << 16)&0x00FF0000) | ((p[2] << 8)&0x0000FF00) | (p[3]&0x000000FF)); + return ret; + }*/ + +} \ No newline at end of file diff --git a/JLayer1.0.1/src/javazoom/jl/converter/WaveFileObuffer.java b/JLayer1.0.1/src/javazoom/jl/converter/WaveFileObuffer.java new file mode 100644 index 0000000..eaa1dd4 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/converter/WaveFileObuffer.java @@ -0,0 +1,141 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * + * 12/12/99 0.0.7 Renamed class, additional constructor arguments + * and larger write buffers. mdm@techie.com. + * + * 15/02/99 Java Conversion by E.B ,javalayer@javazoom.net + * + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.converter; + +import javazoom.jl.decoder.Obuffer; + +/** + * Implements an Obuffer by writing the data to + * a file in RIFF WAVE format. + * + * @since 0.0 + */ + + +public class WaveFileObuffer extends Obuffer +{ + private short[] buffer; + private short[] bufferp; + private int channels; + private WaveFile outWave; + + /** + * Creates a new WareFileObuffer instance. + * + * @param number_of_channels + * The number of channels of audio data + * this buffer will receive. + * + * @param freq The sample frequency of the samples in the buffer. + * + * @param fileName The filename to write the data to. + */ + public WaveFileObuffer(int number_of_channels, int freq, String FileName) + { + if (FileName==null) + throw new NullPointerException("FileName"); + + buffer = new short[OBUFFERSIZE]; + bufferp = new short[MAXCHANNELS]; + channels = number_of_channels; + + for (int i = 0; i < number_of_channels; ++i) + bufferp[i] = (short)i; + + outWave = new WaveFile(); + + int rc = outWave.OpenForWrite (FileName,freq,(short)16,(short)channels); + } + + /** + * Takes a 16 Bit PCM sample. + */ + public void append(int channel, short value) + { + buffer[bufferp[channel]] = value; + bufferp[channel] += channels; + } + + /** + * Write the samples to the file (Random Acces). + */ + short[] myBuffer = new short[2]; + public void write_buffer(int val) + { + + int k = 0; + int rc = 0; + + rc = outWave.WriteData(buffer, bufferp[0]); + // REVIEW: handle RiffFile errors. + /* + for (int j=0;j>8)&0x000000FF) | ((buffer[j]<<8)&0x0000FF00)); + //myBuffer[1] = (short) (((buffer[j+1]>>8)&0x000000FF) | ((buffer[j+1]<<8)&0x0000FF00)); + myBuffer[0] = buffer[j]; + myBuffer[1] = buffer[j+1]; + rc = outWave.WriteData (myBuffer,2); + } + */ + for (int i = 0; i < channels; ++i) bufferp[i] = (short)i; + } + + public void close() + { + outWave.Close(); + } + + /** + * + */ + public void clear_buffer() + {} + + /** + * + */ + public void set_stop_flag() + {} + + /* + * Create STDOUT buffer + * + * + public static Obuffer create_stdout_obuffer(MPEG_Args maplay_args) + { + Obuffer thebuffer = null; + int mode = maplay_args.MPEGheader.mode(); + int which_channels = maplay_args.which_c; + if (mode == Header.single_channel || which_channels != MPEG_Args.both) + thebuffer = new FileObuffer(1,maplay_args.output_filename); + else + thebuffer = new FileObuffer(2,maplay_args.output_filename); + return(thebuffer); + } + */ +} diff --git a/JLayer1.0.1/src/javazoom/jl/converter/jlc.java b/JLayer1.0.1/src/javazoom/jl/converter/jlc.java new file mode 100644 index 0000000..57c84eb --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/converter/jlc.java @@ -0,0 +1,216 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * + * 29/01/00 Initial version. mdm@techie.com + * + * 12/12/99 JavaLayer 0.0.7 mdm@techie.com + * + * 14/02/99 MPEG_Args Based Class - E.B + * Adapted from javalayer and MPEG_Args. + * Doc'ed and integerated with JL converter. Removed + * Win32 specifics from original Maplay code. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.converter; + +import java.io.PrintWriter; + +import javazoom.jl.decoder.Crc16; +import javazoom.jl.decoder.JavaLayerException; +import javazoom.jl.decoder.OutputChannels; + +/** + * The jlc class presents the JavaLayer + * Conversion functionality as a command-line program. + * + * @since 0.0.7 + */ +public class jlc +{ + + static public void main(String args[]) + { + String[] argv; + long start = System.currentTimeMillis(); + int argc = args.length + 1; + argv = new String[argc]; + argv[0] = "jlc"; + for(int i=0;i2) + { + try + { + String level = argv[i].substring(2); + verbose_level = Integer.parseInt(level); + } + catch (NumberFormatException ex) + { + System.err.println("Invalid verbose level. Using default."); + } + } + System.out.println("Verbose Activated (level "+verbose_level+")"); + } + /* else if (argv[i].equals("-s")) + ma.stdout_mode = true; */ + else if (argv[i].equals("-p")) + { + if (++i == argc) + { + System.out.println("Please specify an output filename after the -p option!"); + System.exit (1); + } + //output_mode = O_WAVEFILE; + output_filename = argv[i]; + } + /*else if (argv[i].equals("-f")) + { + if (++i == argc) + { + System.out.println("Please specify a new scalefactor after the -f option!"); + System.exit(1); + } + ma.use_own_scalefactor = true; + // ma.scalefactor = argv[i]; + }*/ + else return Usage(); + } + else + { + filename = argv[i]; + System.out.println("FileName = "+argv[i]); + if (filename == null) return Usage(); + } + i++; + } + if (filename == null) + return Usage(); + + return true; + } + + + /** + * Usage of JavaLayer. + */ + public boolean Usage() + { + System.out.println("JavaLayer Converter :"); + System.out.println(" -v[x] verbose mode. "); + System.out.println(" default = 2"); + /* System.out.println(" -s write u-law samples at 8 kHz rate to stdout"); + System.out.println(" -l decode only the left channel"); + System.out.println(" -r decode only the right channel"); + System.out.println(" -d downmix mode (layer III only)"); + System.out.println(" -s write pcm samples to stdout"); + System.out.println(" -d downmix mode (layer III only)");*/ + System.out.println(" -p name output as a PCM wave file"); + System.out.println(""); + System.out.println(" More info on http://www.javazoom.net"); + /* System.out.println(" -f ushort use this scalefactor instead of the default value 32768");*/ + return false; + } + }; +}; \ No newline at end of file diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/BitReserve.java b/JLayer1.0.1/src/javazoom/jl/decoder/BitReserve.java new file mode 100644 index 0000000..a5d3056 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/BitReserve.java @@ -0,0 +1,223 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * + * 12/12/99 0.0.7 Implementation stores single bits + * as ints for better performance. mdm@techie.com. + * + * 02/28/99 0.0 Java Conversion by E.B, javalayer@javazoom.net + * + * Adapted from the public c code by Jeff Tsay. + * + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * Implementation of Bit Reservoir for Layer III. + *

+ * The implementation stores single bits as a word in the buffer. If + * a bit is set, the corresponding word in the buffer will be non-zero. + * If a bit is clear, the corresponding word is zero. Although this + * may seem waseful, this can be a factor of two quicker than + * packing 8 bits to a byte and extracting. + *

+ */ + +// REVIEW: there is no range checking, so buffer underflow or overflow +// can silently occur. +final class BitReserve +{ + /** + * Size of the internal buffer to store the reserved bits. + * Must be a power of 2. And x8, as each bit is stored as a single + * entry. + */ + private static final int BUFSIZE = 4096*8; + + /** + * Mask that can be used to quickly implement the + * modulus operation on BUFSIZE. + */ + private static final int BUFSIZE_MASK = BUFSIZE-1; + + private int offset, totbit, buf_byte_idx; + private final int[] buf = new int[BUFSIZE]; + private int buf_bit_idx; + + BitReserve() + { + + offset = 0; + totbit = 0; + buf_byte_idx = 0; + } + + + /** + * Return totbit Field. + */ + public int hsstell() + { + return(totbit); + } + + /** + * Read a number bits from the bit stream. + * @param N the number of + */ + public int hgetbits(int N) + { + totbit += N; + + int val = 0; + + int pos = buf_byte_idx; + if (pos+N < BUFSIZE) + { + while (N-- > 0) + { + val <<= 1; + val |= ((buf[pos++]!=0) ? 1 : 0); + } + } + else + { + while (N-- > 0) + { + val <<= 1; + val |= ((buf[pos]!=0) ? 1 : 0); + pos = (pos+1) & BUFSIZE_MASK; + } + } + buf_byte_idx = pos; + return val; + } + + + + /** + * Read 1 bit from the bit stream. + */ +/* + public int hget1bit_old() + { + int val; + totbit++; + if (buf_bit_idx == 0) + { + buf_bit_idx = 8; + buf_byte_idx++; + } + // BUFSIZE = 4096 = 2^12, so + // buf_byte_idx%BUFSIZE == buf_byte_idx & 0xfff + val = buf[buf_byte_idx & BUFSIZE_MASK] & putmask[buf_bit_idx]; + buf_bit_idx--; + val = val >>> buf_bit_idx; + return val; + } + */ + /** + * Returns next bit from reserve. + * @returns 0 if next bit is reset, or 1 if next bit is set. + */ + public int hget1bit() + { + totbit++; + int val = buf[buf_byte_idx]; + buf_byte_idx = (buf_byte_idx+1) & BUFSIZE_MASK; + return val; + } + + /** + * Retrieves bits from the reserve. + */ +/* + public int readBits(int[] out, int len) + { + if (buf_bit_idx == 0) + { + buf_bit_idx = 8; + buf_byte_idx++; + current = buf[buf_byte_idx & BUFSIZE_MASK]; + } + + + + // save total number of bits returned + len = buf_bit_idx; + buf_bit_idx = 0; + + int b = current; + int count = len-1; + + while (count >= 0) + { + out[count--] = (b & 0x1); + b >>>= 1; + } + + totbit += len; + return len; + } + */ + + /** + * Write 8 bits into the bit stream. + */ + public void hputbuf(int val) + { + int ofs = offset; + buf[ofs++] = val & 0x80; + buf[ofs++] = val & 0x40; + buf[ofs++] = val & 0x20; + buf[ofs++] = val & 0x10; + buf[ofs++] = val & 0x08; + buf[ofs++] = val & 0x04; + buf[ofs++] = val & 0x02; + buf[ofs++] = val & 0x01; + + if (ofs==BUFSIZE) + offset = 0; + else + offset = ofs; + + } + + /** + * Rewind N bits in Stream. + */ + public void rewindNbits(int N) + { + totbit -= N; + buf_byte_idx -= N; + if (buf_byte_idx<0) + buf_byte_idx += BUFSIZE; + } + + /** + * Rewind N bytes in Stream. + */ + public void rewindNbytes(int N) + { + int bits = (N << 3); + totbit -= bits; + buf_byte_idx -= bits; + if (buf_byte_idx<0) + buf_byte_idx += BUFSIZE; + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/Bitstream.java b/JLayer1.0.1/src/javazoom/jl/decoder/Bitstream.java new file mode 100644 index 0000000..cebbd5b --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/Bitstream.java @@ -0,0 +1,655 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * + * 11/17/04 Uncomplete frames discarded. E.B, javalayer@javazoom.net + * + * 12/05/03 ID3v2 tag returned. E.B, javalayer@javazoom.net + * + * 12/12/99 Based on Ibitstream. Exceptions thrown on errors, + * Temporary removed seek functionality. mdm@techie.com + * + * 02/12/99 : Java Conversion by E.B , javalayer@javazoom.net + * + * 04/14/97 : Added function prototypes for new syncing and seeking + * mechanisms. Also made this file portable. Changes made by Jeff Tsay + * + * @(#) ibitstream.h 1.5, last edit: 6/15/94 16:55:34 + * @(#) Copyright (C) 1993, 1994 Tobias Bading (bading@cs.tu-berlin.de) + * @(#) Berlin University of Technology + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PushbackInputStream; + + +/** + * The Bistream class is responsible for parsing + * an MPEG audio bitstream. + * + * REVIEW: much of the parsing currently occurs in the + * various decoders. This should be moved into this class and associated + * inner classes. + */ +public final class Bitstream implements BitstreamErrors +{ + /** + * Synchronization control constant for the initial + * synchronization to the start of a frame. + */ + static byte INITIAL_SYNC = 0; + + /** + * Synchronization control constant for non-initial frame + * synchronizations. + */ + static byte STRICT_SYNC = 1; + + // max. 1730 bytes per frame: 144 * 384kbit/s / 32000 Hz + 2 Bytes CRC + /** + * Maximum size of the frame buffer. + */ + private static final int BUFFER_INT_SIZE = 433; + + /** + * The frame buffer that holds the data for the current frame. + */ + private final int[] framebuffer = new int[BUFFER_INT_SIZE]; + + /** + * Number of valid bytes in the frame buffer. + */ + private int framesize; + + /** + * The bytes read from the stream. + */ + private byte[] frame_bytes = new byte[BUFFER_INT_SIZE*4]; + + /** + * Index into framebuffer where the next bits are + * retrieved. + */ + private int wordpointer; + + /** + * Number (0-31, from MSB to LSB) of next bit for get_bits() + */ + private int bitindex; + + /** + * The current specified syncword + */ + private int syncword; + + /** + * Audio header position in stream. + */ + private int header_pos = 0; + + /** + * + */ + private boolean single_ch_mode; + //private int current_frame_number; + //private int last_frame_number; + + private final int bitmask[] = {0, // dummy + 0x00000001, 0x00000003, 0x00000007, 0x0000000F, + 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF, + 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF, + 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF, + 0x0001FFFF }; + + private final PushbackInputStream source; + + private final Header header = new Header(); + + private final byte syncbuf[] = new byte[4]; + + private Crc16[] crc = new Crc16[1]; + + private byte[] rawid3v2 = null; + + private boolean firstframe = true; + + + /** + * Construct a IBitstream that reads data from a + * given InputStream. + * + * @param in The InputStream to read from. + */ + public Bitstream(InputStream in) + { + if (in==null) throw new NullPointerException("in"); + in = new BufferedInputStream(in); + loadID3v2(in); + firstframe = true; + //source = new PushbackInputStream(in, 1024); + source = new PushbackInputStream(in, BUFFER_INT_SIZE*4); + + closeFrame(); + //current_frame_number = -1; + //last_frame_number = -1; + } + + /** + * Return position of the first audio header. + * @return size of ID3v2 tag frames. + */ + public int header_pos() + { + return header_pos; + } + + /** + * Load ID3v2 frames. + * @param in MP3 InputStream. + * @author JavaZOOM + */ + private void loadID3v2(InputStream in) + { + int size = -1; + try + { + // Read ID3v2 header (10 bytes). + in.mark(10); + size = readID3v2Header(in); + header_pos = size; + } + catch (IOException e) + {} + finally + { + try + { + // Unread ID3v2 header (10 bytes). + in.reset(); + } + catch (IOException e) + {} + } + // Load ID3v2 tags. + try + { + if (size > 0) + { + rawid3v2 = new byte[size]; + in.read(rawid3v2,0,rawid3v2.length); + } + } + catch (IOException e) + {} + } + + /** + * Parse ID3v2 tag header to find out size of ID3v2 frames. + * @param in MP3 InputStream + * @return size of ID3v2 frames + header + * @throws IOException + * @author JavaZOOM + */ + private int readID3v2Header(InputStream in) throws IOException + { + byte[] id3header = new byte[4]; + int size = -10; + in.read(id3header,0,3); + // Look for ID3v2 + if ( (id3header[0]=='I') && (id3header[1]=='D') && (id3header[2]=='3')) + { + in.read(id3header,0,3); + int majorVersion = id3header[0]; + int revision = id3header[1]; + in.read(id3header,0,4); + size = (int) (id3header[0] << 21) + (id3header[1] << 14) + (id3header[2] << 7) + (id3header[3]); + } + return (size+10); + } + + /** + * Return raw ID3v2 frames + header. + * @return ID3v2 InputStream or null if ID3v2 frames are not available. + */ + public InputStream getRawID3v2() + { + if (rawid3v2 == null) return null; + else + { + ByteArrayInputStream bain = new ByteArrayInputStream(rawid3v2); + return bain; + } + } + + /** + * Close the Bitstream. + * @throws BitstreamException + */ + public void close() throws BitstreamException + { + try + { + source.close(); + } + catch (IOException ex) + { + throw newBitstreamException(STREAM_ERROR, ex); + } + } + + /** + * Reads and parses the next frame from the input source. + * @return the Header describing details of the frame read, + * or null if the end of the stream has been reached. + */ + public Header readFrame() throws BitstreamException + { + Header result = null; + try + { + result = readNextFrame(); + // E.B, Parse VBR (if any) first frame. + if (firstframe == true) + { + result.parseVBR(frame_bytes); + firstframe = false; + } + } + catch (BitstreamException ex) + { + if ((ex.getErrorCode()==INVALIDFRAME)) + { + // Try to skip this frame. + //System.out.println("INVALIDFRAME"); + try + { + closeFrame(); + result = readNextFrame(); + } + catch (BitstreamException e) + { + if ((e.getErrorCode()!=STREAM_EOF)) + { + // wrap original exception so stack trace is maintained. + throw newBitstreamException(e.getErrorCode(), e); + } + } + } + else if ((ex.getErrorCode()!=STREAM_EOF)) + { + // wrap original exception so stack trace is maintained. + throw newBitstreamException(ex.getErrorCode(), ex); + } + } + return result; + } + + /** + * Read next MP3 frame. + * @return MP3 frame header. + * @throws BitstreamException + */ + private Header readNextFrame() throws BitstreamException + { + if (framesize == -1) + { + nextFrame(); + } + return header; + } + + + /** + * Read next MP3 frame. + * @throws BitstreamException + */ + private void nextFrame() throws BitstreamException + { + // entire frame is read by the header class. + header.read_header(this, crc); + } + + /** + * Unreads the bytes read from the frame. + * @throws BitstreamException + */ + // REVIEW: add new error codes for this. + public void unreadFrame() throws BitstreamException + { + if (wordpointer==-1 && bitindex==-1 && (framesize>0)) + { + try + { + source.unread(frame_bytes, 0, framesize); + } + catch (IOException ex) + { + throw newBitstreamException(STREAM_ERROR); + } + } + } + + /** + * Close MP3 frame. + */ + public void closeFrame() + { + framesize = -1; + wordpointer = -1; + bitindex = -1; + } + + /** + * Determines if the next 4 bytes of the stream represent a + * frame header. + */ + public boolean isSyncCurrentPosition(int syncmode) throws BitstreamException + { + int read = readBytes(syncbuf, 0, 4); + int headerstring = ((syncbuf[0] << 24) & 0xFF000000) | ((syncbuf[1] << 16) & 0x00FF0000) | ((syncbuf[2] << 8) & 0x0000FF00) | ((syncbuf[3] << 0) & 0x000000FF); + + try + { + source.unread(syncbuf, 0, read); + } + catch (IOException ex) + { + } + + boolean sync = false; + switch (read) + { + case 0: + sync = true; + break; + case 4: + sync = isSyncMark(headerstring, syncmode, syncword); + break; + } + + return sync; + } + + + // REVIEW: this class should provide inner classes to + // parse the frame contents. Eventually, readBits will + // be removed. + public int readBits(int n) + { + return get_bits(n); + } + + public int readCheckedBits(int n) + { + // REVIEW: implement CRC check. + return get_bits(n); + } + + protected BitstreamException newBitstreamException(int errorcode) + { + return new BitstreamException(errorcode, null); + } + protected BitstreamException newBitstreamException(int errorcode, Throwable throwable) + { + return new BitstreamException(errorcode, throwable); + } + + /** + * Get next 32 bits from bitstream. + * They are stored in the headerstring. + * syncmod allows Synchro flag ID + * The returned value is False at the end of stream. + */ + + int syncHeader(byte syncmode) throws BitstreamException + { + boolean sync; + int headerstring; + // read additional 2 bytes + int bytesRead = readBytes(syncbuf, 0, 3); + + if (bytesRead!=3) throw newBitstreamException(STREAM_EOF, null); + + headerstring = ((syncbuf[0] << 16) & 0x00FF0000) | ((syncbuf[1] << 8) & 0x0000FF00) | ((syncbuf[2] << 0) & 0x000000FF); + + do + { + headerstring <<= 8; + + if (readBytes(syncbuf, 3, 1)!=1) + throw newBitstreamException(STREAM_EOF, null); + + headerstring |= (syncbuf[3] & 0x000000FF); + + sync = isSyncMark(headerstring, syncmode, syncword); + } + while (!sync); + + //current_frame_number++; + //if (last_frame_number < current_frame_number) last_frame_number = current_frame_number; + + return headerstring; + } + + public boolean isSyncMark(int headerstring, int syncmode, int word) + { + boolean sync = false; + + if (syncmode == INITIAL_SYNC) + { + //sync = ((headerstring & 0xFFF00000) == 0xFFF00000); + sync = ((headerstring & 0xFFE00000) == 0xFFE00000); // SZD: MPEG 2.5 + } + else + { + sync = ((headerstring & 0xFFF80C00) == word) && + (((headerstring & 0x000000C0) == 0x000000C0) == single_ch_mode); + } + + // filter out invalid sample rate + if (sync) + sync = (((headerstring >>> 10) & 3)!=3); + // filter out invalid layer + if (sync) + sync = (((headerstring >>> 17) & 3)!=0); + // filter out invalid version + if (sync) + sync = (((headerstring >>> 19) & 3)!=1); + + return sync; + } + + /** + * Reads the data for the next frame. The frame is not parsed + * until parse frame is called. + */ + int read_frame_data(int bytesize) throws BitstreamException + { + int numread = 0; + numread = readFully(frame_bytes, 0, bytesize); + framesize = bytesize; + wordpointer = -1; + bitindex = -1; + return numread; + } + + /** + * Parses the data previously read with read_frame_data(). + */ + void parse_frame() throws BitstreamException + { + // Convert Bytes read to int + int b=0; + byte[] byteread = frame_bytes; + int bytesize = framesize; + + // Check ID3v1 TAG (True only if last frame). + //for (int t=0;t<(byteread.length)-2;t++) + //{ + // if ((byteread[t]=='T') && (byteread[t+1]=='A') && (byteread[t+2]=='G')) + // { + // System.out.println("ID3v1 detected at offset "+t); + // throw newBitstreamException(INVALIDFRAME, null); + // } + //} + + for (int k=0;k>> (32 - sum)) & bitmask[number_of_bits]; + // returnvalue = (wordpointer[0] >> (32 - sum)) & bitmask[number_of_bits]; + if ((bitindex += number_of_bits) == 32) + { + bitindex = 0; + wordpointer++; // added by me! + } + return returnvalue; + } + + // E.B : Check that ? + //((short[])&returnvalue)[0] = ((short[])wordpointer + 1)[0]; + //wordpointer++; // Added by me! + //((short[])&returnvalue + 1)[0] = ((short[])wordpointer)[0]; + int Right = (framebuffer[wordpointer] & 0x0000FFFF); + wordpointer++; + int Left = (framebuffer[wordpointer] & 0xFFFF0000); + returnvalue = ((Right << 16) & 0xFFFF0000) | ((Left >>> 16)& 0x0000FFFF); + + returnvalue >>>= 48 - sum; // returnvalue >>= 16 - (number_of_bits - (32 - bitindex)) + returnvalue &= bitmask[number_of_bits]; + bitindex = sum - 32; + return returnvalue; +} + + /** + * Set the word we want to sync the header to. + * In Big-Endian byte order + */ + void set_syncword(int syncword0) + { + syncword = syncword0 & 0xFFFFFF3F; + single_ch_mode = ((syncword0 & 0x000000C0) == 0x000000C0); + } + /** + * Reads the exact number of bytes from the source + * input stream into a byte array. + * + * @param b The byte array to read the specified number + * of bytes into. + * @param offs The index in the array where the first byte + * read should be stored. + * @param len the number of bytes to read. + * + * @exception BitstreamException is thrown if the specified + * number of bytes could not be read from the stream. + */ + private int readFully(byte[] b, int offs, int len) + throws BitstreamException + { + int nRead = 0; + try + { + while (len > 0) + { + int bytesread = source.read(b, offs, len); + if (bytesread == -1) + { + while (len-->0) + { + b[offs++] = 0; + } + break; + //throw newBitstreamException(UNEXPECTED_EOF, new EOFException()); + } + nRead = nRead + bytesread; + offs += bytesread; + len -= bytesread; + } + } + catch (IOException ex) + { + throw newBitstreamException(STREAM_ERROR, ex); + } + return nRead; + } + + /** + * Simlar to readFully, but doesn't throw exception when + * EOF is reached. + */ + private int readBytes(byte[] b, int offs, int len) + throws BitstreamException + { + int totalBytesRead = 0; + try + { + while (len > 0) + { + int bytesread = source.read(b, offs, len); + if (bytesread == -1) + { + break; + } + totalBytesRead += bytesread; + offs += bytesread; + len -= bytesread; + } + } + catch (IOException ex) + { + throw newBitstreamException(STREAM_ERROR, ex); + } + return totalBytesRead; + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/BitstreamErrors.java b/JLayer1.0.1/src/javazoom/jl/decoder/BitstreamErrors.java new file mode 100644 index 0000000..2bdee6d --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/BitstreamErrors.java @@ -0,0 +1,72 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 11/17/04 INVALIDFRAME code added. javalayer@javazoom.net + * 12/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * This interface describes all error codes that can be thrown + * in BistreamExceptions. + * + * @see BitstreamException + * + * @author MDM 12/12/99 + * @since 0.0.6 + */ + +public interface BitstreamErrors extends JavaLayerErrors +{ + + /** + * An undeterminable error occurred. + */ + static public final int UNKNOWN_ERROR = BITSTREAM_ERROR + 0; + + /** + * The header describes an unknown sample rate. + */ + static public final int UNKNOWN_SAMPLE_RATE = BITSTREAM_ERROR + 1; + + /** + * A problem occurred reading from the stream. + */ + static public final int STREAM_ERROR = BITSTREAM_ERROR + 2; + + /** + * The end of the stream was reached prematurely. + */ + static public final int UNEXPECTED_EOF = BITSTREAM_ERROR + 3; + + /** + * The end of the stream was reached. + */ + static public final int STREAM_EOF = BITSTREAM_ERROR + 4; + + /** + * Frame data are missing. + */ + static public final int INVALIDFRAME = BITSTREAM_ERROR + 5; + + /** + * + */ + static public final int BITSTREAM_LAST = 0x1ff; + +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/BitstreamException.java b/JLayer1.0.1/src/javazoom/jl/decoder/BitstreamException.java new file mode 100644 index 0000000..99faa89 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/BitstreamException.java @@ -0,0 +1,71 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 12/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * Instances of BitstreamException are thrown + * when operations on a Bitstream fail. + *

+ * The exception provides details of the exception condition + * in two ways: + *

  1. + * as an error-code describing the nature of the error + *


  2. + * as the Throwable instance, if any, that was thrown + * indicating that an exceptional condition has occurred. + *

+ * + * @since 0.0.6 + * @author MDM 12/12/99 + */ + +public class BitstreamException extends JavaLayerException + implements BitstreamErrors +{ + private int errorcode = UNKNOWN_ERROR; + + public BitstreamException(String msg, Throwable t) + { + super(msg, t); + } + + public BitstreamException(int errorcode, Throwable t) + { + this(getErrorString(errorcode), t); + this.errorcode = errorcode; + } + + public int getErrorCode() + { + return errorcode; + } + + + static public String getErrorString(int errorcode) + { + // REVIEW: use resource bundle to map error codes + // to locale-sensitive strings. + + return "Bitstream errorcode "+Integer.toHexString(errorcode); + } + + +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/Control.java b/JLayer1.0.1/src/javazoom/jl/decoder/Control.java new file mode 100644 index 0000000..080ed52 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/Control.java @@ -0,0 +1,57 @@ +/* + * 11/19/04 1.0 moved to LGPL. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * Work in progress. + */ + +public interface Control +{ + + /** + * Starts playback of the media presented by this control. + */ + public void start(); + + /** + * Stops playback of the media presented by this control. + */ + public void stop(); + + public boolean isPlaying(); + + public void pause(); + + + public boolean isRandomAccess(); + + /** + * Retrieves the current position. + */ + public double getPosition(); + + /** + * + */ + public void setPosition(double d); + + +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/Crc16.java b/JLayer1.0.1/src/javazoom/jl/decoder/Crc16.java new file mode 100644 index 0000000..c35cc19 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/Crc16.java @@ -0,0 +1,70 @@ +/* + * 11/19/04 : 1.0 moved to LGPL. + * + * 02/12/99 : Java Conversion by E.B , javalayer@javazoom.net + * + * @(#) crc.h 1.5, last edit: 6/15/94 16:55:32 + * @(#) Copyright (C) 1993, 1994 Tobias Bading (bading@cs.tu-berlin.de) + * @(#) Berlin University of Technology + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ +package javazoom.jl.decoder; + +/** + * 16-Bit CRC checksum + */ +public final class Crc16 +{ + private static short polynomial=(short)0x8005; + private short crc; + + /** + * Dummy Constructor + */ + public Crc16() + { + crc = (short) 0xFFFF; + } + + /** + * Feed a bitstring to the crc calculation (0 < length <= 32). + */ + public void add_bits (int bitstring, int length) + { + int bitmask = 1 << (length - 1); + do + if (((crc & 0x8000) == 0) ^ ((bitstring & bitmask) == 0 )) + { + crc <<= 1; + crc ^= polynomial; + } + else + crc <<= 1; + while ((bitmask >>>= 1) != 0); + } + + /** + * Return the calculated checksum. + * Erase it for next calls to add_bits(). + */ + public short checksum() + { + short sum = crc; + crc = (short) 0xFFFF; + return sum; + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/Decoder.java b/JLayer1.0.1/src/javazoom/jl/decoder/Decoder.java new file mode 100644 index 0000000..076f9de --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/Decoder.java @@ -0,0 +1,357 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 01/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * The Decoder class encapsulates the details of + * decoding an MPEG audio frame. + * + * @author MDM + * @version 0.0.7 12/12/99 + * @since 0.0.5 + */ +public class Decoder implements DecoderErrors +{ + static private final Params DEFAULT_PARAMS = new Params(); + + /** + * The Bistream from which the MPEG audio frames are read. + */ + //private Bitstream stream; + + /** + * The Obuffer instance that will receive the decoded + * PCM samples. + */ + private Obuffer output; + + /** + * Synthesis filter for the left channel. + */ + private SynthesisFilter filter1; + + /** + * Sythesis filter for the right channel. + */ + private SynthesisFilter filter2; + + /** + * The decoder used to decode layer III frames. + */ + private LayerIIIDecoder l3decoder; + private LayerIIDecoder l2decoder; + private LayerIDecoder l1decoder; + + private int outputFrequency; + private int outputChannels; + + private Equalizer equalizer = new Equalizer(); + + private Params params; + + private boolean initialized; + + + /** + * Creates a new Decoder instance with default + * parameters. + */ + + public Decoder() + { + this(null); + } + + /** + * Creates a new Decoder instance with default + * parameters. + * + * @param params The Params instance that describes + * the customizable aspects of the decoder. + */ + public Decoder(Params params0) + { + if (params0==null) + params0 = DEFAULT_PARAMS; + + params = params0; + + Equalizer eq = params.getInitialEqualizerSettings(); + if (eq!=null) + { + equalizer.setFrom(eq); + } + } + + static public Params getDefaultParams() + { + return (Params)DEFAULT_PARAMS.clone(); + } + + public void setEqualizer(Equalizer eq) + { + if (eq==null) + eq = Equalizer.PASS_THRU_EQ; + + equalizer.setFrom(eq); + + float[] factors = equalizer.getBandFactors(); + + if (filter1!=null) + filter1.setEQ(factors); + + if (filter2!=null) + filter2.setEQ(factors); + } + + /** + * Decodes one frame from an MPEG audio bitstream. + * + * @param header The header describing the frame to decode. + * @param bitstream The bistream that provides the bits for te body of the frame. + * + * @return A SampleBuffer containing the decoded samples. + */ + public Obuffer decodeFrame(Header header, Bitstream stream) + throws DecoderException + { + if (!initialized) + { + initialize(header); + } + + int layer = header.layer(); + + output.clear_buffer(); + + FrameDecoder decoder = retrieveDecoder(header, stream, layer); + + decoder.decodeFrame(); + + output.write_buffer(1); + + return output; + } + + /** + * Changes the output buffer. This will take effect the next time + * decodeFrame() is called. + */ + public void setOutputBuffer(Obuffer out) + { + output = out; + } + + /** + * Retrieves the sample frequency of the PCM samples output + * by this decoder. This typically corresponds to the sample + * rate encoded in the MPEG audio stream. + * + * @param the sample rate (in Hz) of the samples written to the + * output buffer when decoding. + */ + public int getOutputFrequency() + { + return outputFrequency; + } + + /** + * Retrieves the number of channels of PCM samples output by + * this decoder. This usually corresponds to the number of + * channels in the MPEG audio stream, although it may differ. + * + * @return The number of output channels in the decoded samples: 1 + * for mono, or 2 for stereo. + * + */ + public int getOutputChannels() + { + return outputChannels; + } + + /** + * Retrieves the maximum number of samples that will be written to + * the output buffer when one frame is decoded. This can be used to + * help calculate the size of other buffers whose size is based upon + * the number of samples written to the output buffer. NB: this is + * an upper bound and fewer samples may actually be written, depending + * upon the sample rate and number of channels. + * + * @return The maximum number of samples that are written to the + * output buffer when decoding a single frame of MPEG audio. + */ + public int getOutputBlockSize() + { + return Obuffer.OBUFFERSIZE; + } + + + protected DecoderException newDecoderException(int errorcode) + { + return new DecoderException(errorcode, null); + } + + protected DecoderException newDecoderException(int errorcode, Throwable throwable) + { + return new DecoderException(errorcode, throwable); + } + + protected FrameDecoder retrieveDecoder(Header header, Bitstream stream, int layer) + throws DecoderException + { + FrameDecoder decoder = null; + + // REVIEW: allow channel output selection type + // (LEFT, RIGHT, BOTH, DOWNMIX) + switch (layer) + { + case 3: + if (l3decoder==null) + { + l3decoder = new LayerIIIDecoder(stream, + header, filter1, filter2, + output, OutputChannels.BOTH_CHANNELS); + } + + decoder = l3decoder; + break; + case 2: + if (l2decoder==null) + { + l2decoder = new LayerIIDecoder(); + l2decoder.create(stream, + header, filter1, filter2, + output, OutputChannels.BOTH_CHANNELS); + } + decoder = l2decoder; + break; + case 1: + if (l1decoder==null) + { + l1decoder = new LayerIDecoder(); + l1decoder.create(stream, + header, filter1, filter2, + output, OutputChannels.BOTH_CHANNELS); + } + decoder = l1decoder; + break; + } + + if (decoder==null) + { + throw newDecoderException(UNSUPPORTED_LAYER, null); + } + + return decoder; + } + + private void initialize(Header header) + throws DecoderException + { + + // REVIEW: allow customizable scale factor + float scalefactor = 32700.0f; + + int mode = header.mode(); + int layer = header.layer(); + int channels = mode==Header.SINGLE_CHANNEL ? 1 : 2; + + + // set up output buffer if not set up by client. + if (output==null) + output = new SampleBuffer(header.frequency(), channels); + + float[] factors = equalizer.getBandFactors(); + filter1 = new SynthesisFilter(0, scalefactor, factors); + + // REVIEW: allow mono output for stereo + if (channels==2) + filter2 = new SynthesisFilter(1, scalefactor, factors); + + outputChannels = channels; + outputFrequency = header.frequency(); + + initialized = true; + } + + /** + * The Params class presents the customizable + * aspects of the decoder. + *

+ * Instances of this class are not thread safe. + */ + public static class Params implements Cloneable + { + private OutputChannels outputChannels = OutputChannels.BOTH; + + private Equalizer equalizer = new Equalizer(); + + public Params() + { + } + + public Object clone() + { + try + { + return super.clone(); + } + catch (CloneNotSupportedException ex) + { + throw new InternalError(this+": "+ex); + } + } + + public void setOutputChannels(OutputChannels out) + { + if (out==null) + throw new NullPointerException("out"); + + outputChannels = out; + } + + public OutputChannels getOutputChannels() + { + return outputChannels; + } + + /** + * Retrieves the equalizer settings that the decoder's equalizer + * will be initialized from. + *

+ * The Equalizer instance returned + * cannot be changed in real time to affect the + * decoder output as it is used only to initialize the decoders + * EQ settings. To affect the decoder's output in realtime, + * use the Equalizer returned from the getEqualizer() method on + * the decoder. + * + * @return The Equalizer used to initialize the + * EQ settings of the decoder. + */ + public Equalizer getInitialEqualizerSettings() + { + return equalizer; + } + + }; +} + diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/DecoderErrors.java b/JLayer1.0.1/src/javazoom/jl/decoder/DecoderErrors.java new file mode 100644 index 0000000..dfa2f08 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/DecoderErrors.java @@ -0,0 +1,45 @@ +/* + * 09/26/08 throw exception on subbband alloc error: Christopher G. Jennings (cjennings@acm.org) + * 11/19/04 1.0 moved to LGPL. + * 01/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * This interface provides constants describing the error + * codes used by the Decoder to indicate errors. + * + * @author MDM + */ +public interface DecoderErrors extends JavaLayerErrors +{ + + static public final int UNKNOWN_ERROR = DECODER_ERROR + 0; + + /** + * Layer not supported by the decoder. + */ + static public final int UNSUPPORTED_LAYER = DECODER_ERROR + 1; + + /** + * Illegal allocation in subband layer. Indicates a corrupt stream. + */ + static public final int ILLEGAL_SUBBAND_ALLOCATION = DECODER_ERROR + 2; + +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/DecoderException.java b/JLayer1.0.1/src/javazoom/jl/decoder/DecoderException.java new file mode 100644 index 0000000..b757108 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/DecoderException.java @@ -0,0 +1,61 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 01/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * The DecoderException represents the class of + * errors that can occur when decoding MPEG audio. + * + * @author MDM + */ +public class DecoderException extends JavaLayerException + implements DecoderErrors +{ + private int errorcode = UNKNOWN_ERROR; + + public DecoderException(String msg, Throwable t) + { + super(msg, t); + } + + public DecoderException(int errorcode, Throwable t) + { + this(getErrorString(errorcode), t); + this.errorcode = errorcode; + } + + public int getErrorCode() + { + return errorcode; + } + + + static public String getErrorString(int errorcode) + { + // REVIEW: use resource file to map error codes + // to locale-sensitive strings. + + return "Decoder errorcode "+Integer.toHexString(errorcode); + } + + +} + diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/Equalizer.java b/JLayer1.0.1/src/javazoom/jl/decoder/Equalizer.java new file mode 100644 index 0000000..57545a9 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/Equalizer.java @@ -0,0 +1,227 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 12/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + + +package javazoom.jl.decoder; + +/** + * The Equalizer class can be used to specify + * equalization settings for the MPEG audio decoder. + *

+ * The equalizer consists of 32 band-pass filters. + * Each band of the equalizer can take on a fractional value between + * -1.0 and +1.0. + * At -1.0, the input signal is attenuated by 6dB, at +1.0 the signal is + * amplified by 6dB. + * + * @see Decoder + * + * @author MDM + */ +public final class Equalizer +{ + /** + * Equalizer setting to denote that a given band will not be + * present in the output signal. + */ + static public final float BAND_NOT_PRESENT = Float.NEGATIVE_INFINITY; + + static public final Equalizer PASS_THRU_EQ = new Equalizer(); + + private static final int BANDS = 32; + + private final float[] settings = new float[BANDS]; + + /** + * Creates a new Equalizer instance. + */ + public Equalizer() + { + } + +// private Equalizer(float b1, float b2, float b3, float b4, float b5, +// float b6, float b7, float b8, float b9, float b10, float b11, +// float b12, float b13, float b14, float b15, float b16, +// float b17, float b18, float b19, float b20); + + public Equalizer(float[] settings) + { + setFrom(settings); + } + + public Equalizer(EQFunction eq) + { + setFrom(eq); + } + + public void setFrom(float[] eq) + { + reset(); + int max = (eq.length > BANDS) ? BANDS : eq.length; + + for (int i=0; i=0) && (band=0) && (band 1.0f) + return 1.0f; + if (eq < -1.0f) + return -1.0f; + + return eq; + } + + /** + * Retrieves an array of floats whose values represent a + * scaling factor that can be applied to linear samples + * in each band to provide the equalization represented by + * this instance. + * + * @return an array of factors that can be applied to the + * subbands. + */ + float[] getBandFactors() + { + float[] factors = new float[BANDS]; + for (int i=0, maxCount=BANDS; i>> 19) & 1); + if (((headerstring >>> 20) & 1) == 0) // SZD: MPEG2.5 detection + if (h_version == MPEG2_LSF) + h_version = MPEG25_LSF; + else + throw stream.newBitstreamException(Bitstream.UNKNOWN_ERROR); + if ((h_sample_frequency = ((headerstring >>> 10) & 3)) == 3) + { + throw stream.newBitstreamException(Bitstream.UNKNOWN_ERROR); + } + } + h_layer = 4 - (headerstring >>> 17) & 3; + h_protection_bit = (headerstring >>> 16) & 1; + h_bitrate_index = (headerstring >>> 12) & 0xF; + h_padding_bit = (headerstring >>> 9) & 1; + h_mode = ((headerstring >>> 6) & 3); + h_mode_extension = (headerstring >>> 4) & 3; + if (h_mode == JOINT_STEREO) + h_intensity_stereo_bound = (h_mode_extension << 2) + 4; + else + h_intensity_stereo_bound = 0; // should never be used + if (((headerstring >>> 3) & 1) == 1) + h_copyright = true; + if (((headerstring >>> 2) & 1) == 1) + h_original = true; + // calculate number of subbands: + if (h_layer == 1) + h_number_of_subbands = 32; + else + { + channel_bitrate = h_bitrate_index; + // calculate bitrate per channel: + if (h_mode != SINGLE_CHANNEL) + if (channel_bitrate == 4) + channel_bitrate = 1; + else + channel_bitrate -= 4; + if ((channel_bitrate == 1) || (channel_bitrate == 2)) + if (h_sample_frequency == THIRTYTWO) + h_number_of_subbands = 12; + else + h_number_of_subbands = 8; + else if ((h_sample_frequency == FOURTYEIGHT) || ((channel_bitrate >= 3) && (channel_bitrate <= 5))) + h_number_of_subbands = 27; + else + h_number_of_subbands = 30; + } + if (h_intensity_stereo_bound > h_number_of_subbands) + h_intensity_stereo_bound = h_number_of_subbands; + // calculate framesize and nSlots + calculate_framesize(); + // read framedata: + int framesizeloaded = stream.read_frame_data(framesize); + if ((framesize >=0) && (framesizeloaded != framesize)) + { + // Data loaded does not match to expected framesize, + // it might be an ID3v1 TAG. (Fix 11/17/04). + throw stream.newBitstreamException(Bitstream.INVALIDFRAME); + } + if (stream.isSyncCurrentPosition(syncmode)) + { + if (syncmode == Bitstream.INITIAL_SYNC) + { + syncmode = Bitstream.STRICT_SYNC; + stream.set_syncword(headerstring & 0xFFF80CC0); + } + sync = true; + } + else + { + stream.unreadFrame(); + } + } + while (!sync); + stream.parse_frame(); + if (h_protection_bit == 0) + { + // frame contains a crc checksum + checksum = (short) stream.get_bits(16); + if (crc == null) + crc = new Crc16(); + crc.add_bits(headerstring, 16); + crcp[0] = crc; + } + else + crcp[0] = null; + if (h_sample_frequency == FOURTYFOUR_POINT_ONE) + { + /* + if (offset == null) + { + int max = max_number_of_frames(stream); + offset = new int[max]; + for(int i=0; i 0) && (cf == lf)) + { + offset[cf] = offset[cf-1] + h_padding_bit; + } + else + { + offset[0] = h_padding_bit; + } + */ + } + } + + /** + * Parse frame to extract optionnal VBR frame. + * @param firstframe + * @author E.B (javalayer@javazoom.net) + */ + void parseVBR(byte[] firstframe) throws BitstreamException + { + // Trying Xing header. + String xing = "Xing"; + byte tmp[] = new byte[4]; + int offset = 0; + // Compute "Xing" offset depending on MPEG version and channels. + if (h_version == MPEG1) + { + if (h_mode == SINGLE_CHANNEL) offset=21-4; + else offset=36-4; + } + else + { + if (h_mode == SINGLE_CHANNEL) offset=13-4; + else offset = 21-4; + } + try + { + System.arraycopy(firstframe, offset, tmp, 0, 4); + // Is "Xing" ? + if (xing.equals(new String(tmp))) + { + //Yes. + h_vbr = true; + h_vbr_frames = -1; + h_vbr_bytes = -1; + h_vbr_scale = -1; + h_vbr_toc = new byte[100]; + + int length = 4; + // Read flags. + byte flags[] = new byte[4]; + System.arraycopy(firstframe, offset + length, flags, 0, flags.length); + length += flags.length; + // Read number of frames (if available). + if ((flags[3] & (byte) (1 << 0)) != 0) + { + System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length); + h_vbr_frames = (tmp[0] << 24)&0xFF000000 | (tmp[1] << 16)&0x00FF0000 | (tmp[2] << 8)&0x0000FF00 | tmp[3]&0x000000FF; + length += 4; + } + // Read size (if available). + if ((flags[3] & (byte) (1 << 1)) != 0) + { + System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length); + h_vbr_bytes = (tmp[0] << 24)&0xFF000000 | (tmp[1] << 16)&0x00FF0000 | (tmp[2] << 8)&0x0000FF00 | tmp[3]&0x000000FF; + length += 4; + } + // Read TOC (if available). + if ((flags[3] & (byte) (1 << 2)) != 0) + { + System.arraycopy(firstframe, offset + length, h_vbr_toc, 0, h_vbr_toc.length); + length += h_vbr_toc.length; + } + // Read scale (if available). + if ((flags[3] & (byte) (1 << 3)) != 0) + { + System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length); + h_vbr_scale = (tmp[0] << 24)&0xFF000000 | (tmp[1] << 16)&0x00FF0000 | (tmp[2] << 8)&0x0000FF00 | tmp[3]&0x000000FF; + length += 4; + } + //System.out.println("VBR:"+xing+" Frames:"+ h_vbr_frames +" Size:"+h_vbr_bytes); + } + } + catch (ArrayIndexOutOfBoundsException e) + { + throw new BitstreamException("XingVBRHeader Corrupted",e); + } + + // Trying VBRI header. + String vbri = "VBRI"; + offset = 36-4; + try + { + System.arraycopy(firstframe, offset, tmp, 0, 4); + // Is "VBRI" ? + if (vbri.equals(new String(tmp))) + { + //Yes. + h_vbr = true; + h_vbr_frames = -1; + h_vbr_bytes = -1; + h_vbr_scale = -1; + h_vbr_toc = new byte[100]; + // Bytes. + int length = 4 + 6; + System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length); + h_vbr_bytes = (tmp[0] << 24)&0xFF000000 | (tmp[1] << 16)&0x00FF0000 | (tmp[2] << 8)&0x0000FF00 | tmp[3]&0x000000FF; + length += 4; + // Frames. + System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length); + h_vbr_frames = (tmp[0] << 24)&0xFF000000 | (tmp[1] << 16)&0x00FF0000 | (tmp[2] << 8)&0x0000FF00 | tmp[3]&0x000000FF; + length += 4; + //System.out.println("VBR:"+vbri+" Frames:"+ h_vbr_frames +" Size:"+h_vbr_bytes); + // TOC + // TODO + } + } + catch (ArrayIndexOutOfBoundsException e) + { + throw new BitstreamException("VBRIVBRHeader Corrupted",e); + } + } + + // Functions to query header contents: + /** + * Returns version. + */ + public int version() { return h_version; } + + /** + * Returns Layer ID. + */ + public int layer() { return h_layer; } + + /** + * Returns bitrate index. + */ + public int bitrate_index() { return h_bitrate_index; } + + /** + * Returns Sample Frequency. + */ + public int sample_frequency() { return h_sample_frequency; } + + /** + * Returns Frequency. + */ + public int frequency() {return frequencies[h_version][h_sample_frequency];} + + /** + * Returns Mode. + */ + public int mode() { return h_mode; } + + /** + * Returns Protection bit. + */ + public boolean checksums() + { + if (h_protection_bit == 0) return true; + else return false; + } + + /** + * Returns Copyright. + */ + public boolean copyright() { return h_copyright; } + + /** + * Returns Original. + */ + public boolean original() { return h_original; } + + /** + * Return VBR. + * @return true if VBR header is found + */ + public boolean vbr() { return h_vbr; } + + /** + * Return VBR scale. + * @return scale of -1 if not available + */ + public int vbr_scale() { return h_vbr_scale; } + + /** + * Return VBR TOC. + * @return vbr toc ot null if not available + */ + public byte[] vbr_toc() { return h_vbr_toc; } + + /** + * Returns Checksum flag. + * Compares computed checksum with stream checksum. + */ + public boolean checksum_ok () { return (checksum == crc.checksum()); } + + // Seeking and layer III stuff + /** + * Returns Layer III Padding bit. + */ + public boolean padding() + { + if (h_padding_bit == 0) return false; + else return true; + } + + /** + * Returns Slots. + */ + public int slots() { return nSlots; } + + /** + * Returns Mode Extension. + */ + public int mode_extension() { return h_mode_extension; } + + // E.B -> private to public + public static final int bitrates[][][] = { + {{0 /*free format*/, 32000, 48000, 56000, 64000, 80000, 96000, + 112000, 128000, 144000, 160000, 176000, 192000 ,224000, 256000, 0}, + {0 /*free format*/, 8000, 16000, 24000, 32000, 40000, 48000, + 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 0}, + {0 /*free format*/, 8000, 16000, 24000, 32000, 40000, 48000, + 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 0}}, + + {{0 /*free format*/, 32000, 64000, 96000, 128000, 160000, 192000, + 224000, 256000, 288000, 320000, 352000, 384000, 416000, 448000, 0}, + {0 /*free format*/, 32000, 48000, 56000, 64000, 80000, 96000, + 112000, 128000, 160000, 192000, 224000, 256000, 320000, 384000, 0}, + {0 /*free format*/, 32000, 40000, 48000, 56000, 64000, 80000, + 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000, 0}}, + // SZD: MPEG2.5 + {{0 /*free format*/, 32000, 48000, 56000, 64000, 80000, 96000, + 112000, 128000, 144000, 160000, 176000, 192000 ,224000, 256000, 0}, + {0 /*free format*/, 8000, 16000, 24000, 32000, 40000, 48000, + 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 0}, + {0 /*free format*/, 8000, 16000, 24000, 32000, 40000, 48000, + 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 0}}, + + }; + + // E.B -> private to public + /** + * Calculate Frame size. + * Calculates framesize in bytes excluding header size. + */ + public int calculate_framesize() + { + + if (h_layer == 1) + { + framesize = (12 * bitrates[h_version][0][h_bitrate_index]) / + frequencies[h_version][h_sample_frequency]; + if (h_padding_bit != 0 ) framesize++; + framesize <<= 2; // one slot is 4 bytes long + nSlots = 0; + } + else + { + framesize = (144 * bitrates[h_version][h_layer - 1][h_bitrate_index]) / + frequencies[h_version][h_sample_frequency]; + if (h_version == MPEG2_LSF || h_version == MPEG25_LSF) framesize >>= 1; // SZD + if (h_padding_bit != 0) framesize++; + // Layer III slots + if (h_layer == 3) + { + if (h_version == MPEG1) + { + nSlots = framesize - ((h_mode == SINGLE_CHANNEL) ? 17 : 32) // side info size + - ((h_protection_bit!=0) ? 0 : 2) // CRC size + - 4; // header size + } + else + { // MPEG-2 LSF, SZD: MPEG-2.5 LSF + nSlots = framesize - ((h_mode == SINGLE_CHANNEL) ? 9 : 17) // side info size + - ((h_protection_bit!=0) ? 0 : 2) // CRC size + - 4; // header size + } + } + else + { + nSlots = 0; + } + } + framesize -= 4; // subtract header size + return framesize; + } + + /** + * Returns the maximum number of frames in the stream. + * @param streamsize + * @return number of frames + */ + public int max_number_of_frames(int streamsize) // E.B + { + if (h_vbr == true) return h_vbr_frames; + else + { + if ((framesize + 4 - h_padding_bit) == 0) return 0; + else return(streamsize / (framesize + 4 - h_padding_bit)); + } + } + + /** + * Returns the maximum number of frames in the stream. + * @param streamsize + * @return number of frames + */ + public int min_number_of_frames(int streamsize) // E.B + { + if (h_vbr == true) return h_vbr_frames; + else + { + if ((framesize + 5 - h_padding_bit) == 0) return 0; + else return(streamsize / (framesize + 5 - h_padding_bit)); + } + } + + + /** + * Returns ms/frame. + * @return milliseconds per frame + */ + public float ms_per_frame() // E.B + { + if (h_vbr == true) + { + double tpf = h_vbr_time_per_frame[layer()] / frequency(); + if ((h_version == MPEG2_LSF) || (h_version == MPEG25_LSF)) tpf /= 2; + return ((float) (tpf * 1000)); + } + else + { + float ms_per_frame_array[][] = {{8.707483f, 8.0f, 12.0f}, + {26.12245f, 24.0f, 36.0f}, + {26.12245f, 24.0f, 36.0f}}; + return(ms_per_frame_array[h_layer-1][h_sample_frequency]); + } + } + + /** + * Returns total ms. + * @param streamsize + * @return total milliseconds + */ + public float total_ms(int streamsize) // E.B + { + return(max_number_of_frames(streamsize) * ms_per_frame()); + } + + /** + * Returns synchronized header. + */ + public int getSyncHeader() // E.B + { + return _headerstring; + } + + // functions which return header informations as strings: + /** + * Return Layer version. + */ + public String layer_string() + { + switch (h_layer) + { + case 1: + return "I"; + case 2: + return "II"; + case 3: + return "III"; + } + return null; + } + + // E.B -> private to public + public static final String bitrate_str[][][] = { + {{"free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", + "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", + "160 kbit/s", "176 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", + "forbidden"}, + {"free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", + "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", + "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", + "forbidden"}, + {"free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", + "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", + "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", + "forbidden"}}, + + {{"free format", "32 kbit/s", "64 kbit/s", "96 kbit/s", "128 kbit/s", + "160 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", "288 kbit/s", + "320 kbit/s", "352 kbit/s", "384 kbit/s", "416 kbit/s", "448 kbit/s", + "forbidden"}, + {"free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", + "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "160 kbit/s", + "192 kbit/s", "224 kbit/s", "256 kbit/s", "320 kbit/s", "384 kbit/s", + "forbidden"}, + {"free format", "32 kbit/s", "40 kbit/s", "48 kbit/s", "56 kbit/s", + "64 kbit/s", "80 kbit/s" , "96 kbit/s", "112 kbit/s", "128 kbit/s", + "160 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", "320 kbit/s", + "forbidden"}}, + // SZD: MPEG2.5 + {{"free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", + "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", + "160 kbit/s", "176 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", + "forbidden"}, + {"free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", + "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", + "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", + "forbidden"}, + {"free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", + "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", + "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", + "forbidden"}}, + }; + + /** + * Return Bitrate. + * @return bitrate in bps + */ + public String bitrate_string() + { + if (h_vbr == true) + { + return Integer.toString(bitrate()/1000)+" kb/s"; + } + else return bitrate_str[h_version][h_layer - 1][h_bitrate_index]; + } + + /** + * Return Bitrate. + * @return bitrate in bps and average bitrate for VBR header + */ + public int bitrate() + { + if (h_vbr == true) + { + return ((int) ((h_vbr_bytes * 8) / (ms_per_frame() * h_vbr_frames)))*1000; + } + else return bitrates[h_version][h_layer - 1][h_bitrate_index]; + } + + /** + * Return Instant Bitrate. + * Bitrate for VBR is not constant. + * @return bitrate in bps + */ + public int bitrate_instant() + { + return bitrates[h_version][h_layer - 1][h_bitrate_index]; + } + + /** + * Returns Frequency + * @return frequency string in kHz + */ + public String sample_frequency_string() + { + switch (h_sample_frequency) + { + case THIRTYTWO: + if (h_version == MPEG1) + return "32 kHz"; + else if (h_version == MPEG2_LSF) + return "16 kHz"; + else // SZD + return "8 kHz"; + case FOURTYFOUR_POINT_ONE: + if (h_version == MPEG1) + return "44.1 kHz"; + else if (h_version == MPEG2_LSF) + return "22.05 kHz"; + else // SZD + return "11.025 kHz"; + case FOURTYEIGHT: + if (h_version == MPEG1) + return "48 kHz"; + else if (h_version == MPEG2_LSF) + return "24 kHz"; + else // SZD + return "12 kHz"; + } + return(null); + } + + /** + * Returns Mode. + */ + public String mode_string() + { + switch (h_mode) + { + case STEREO: + return "Stereo"; + case JOINT_STEREO: + return "Joint stereo"; + case DUAL_CHANNEL: + return "Dual channel"; + case SINGLE_CHANNEL: + return "Single channel"; + } + return null; + } + + /** + * Returns Version. + * @return MPEG-1 or MPEG-2 LSF or MPEG-2.5 LSF + */ + public String version_string() + { + switch (h_version) + { + case MPEG1: + return "MPEG-1"; + case MPEG2_LSF: + return "MPEG-2 LSF"; + case MPEG25_LSF: // SZD + return "MPEG-2.5 LSF"; + } + return(null); + } + + /** + * Returns the number of subbands in the current frame. + * @return number of subbands + */ + public int number_of_subbands() {return h_number_of_subbands;} + + /** + * Returns Intensity Stereo. + * (Layer II joint stereo only). + * Returns the number of subbands which are in stereo mode, + * subbands above that limit are in intensity stereo mode. + * @return intensity + */ + public int intensity_stereo_bound() {return h_intensity_stereo_bound;} +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/InputStreamSource.java b/JLayer1.0.1/src/javazoom/jl/decoder/InputStreamSource.java new file mode 100644 index 0000000..5c62947 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/InputStreamSource.java @@ -0,0 +1,80 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 12/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Work In Progress. + * + * An instance of InputStreamSource implements a + * Source that provides data from an InputStream + * . Seeking functionality is not supported. + * + * @author MDM + */ +public class InputStreamSource implements Source +{ + private final InputStream in; + + public InputStreamSource(InputStream in) + { + if (in==null) + throw new NullPointerException("in"); + + this.in = in; + } + + public int read(byte[] b, int offs, int len) + throws IOException + { + int read = in.read(b, offs, len); + return read; + } + + public boolean willReadBlock() + { + return true; + //boolean block = (in.available()==0); + //return block; + } + + public boolean isSeekable() + { + return false; + } + + public long tell() + { + return -1; + } + + public long seek(long to) + { + return -1; + } + + public long length() + { + return -1; + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerError.java b/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerError.java new file mode 100644 index 0000000..d9910bc --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerError.java @@ -0,0 +1,31 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 12/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * Work in progress. + * + * API usage errors may be handled by throwing an instance of this + * class, as per JMF 2.0. + */ +public class JavaLayerError extends Error +{ +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerErrors.java b/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerErrors.java new file mode 100644 index 0000000..3b9c2ff --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerErrors.java @@ -0,0 +1,40 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 12/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * Exception erorr codes for components of the JavaLayer API. + */ +public interface JavaLayerErrors +{ + /** + * The first bitstream error code. See the {@link DecoderErrors DecoderErrors} + * interface for other bitstream error codes. + */ + static public final int BITSTREAM_ERROR = 0x100; + + /** + * The first decoder error code. See the {@link DecoderErrors DecoderErrors} + * interface for other decoder error codes. + */ + static public final int DECODER_ERROR = 0x200; + +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerException.java b/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerException.java new file mode 100644 index 0000000..e7a50a8 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerException.java @@ -0,0 +1,80 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 12/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +import java.io.PrintStream; + + +/** + * The JavaLayerException is the base class for all API-level + * exceptions thrown by JavaLayer. To facilitate conversion and + * common handling of exceptions from other domains, the class + * can delegate some functionality to a contained Throwable instance. + *

+ * + * @author MDM + */ +public class JavaLayerException extends Exception +{ + + private Throwable exception; + + + public JavaLayerException() + { + } + + public JavaLayerException(String msg) + { + super(msg); + } + + public JavaLayerException(String msg, Throwable t) + { + super(msg); + exception = t; + } + + public Throwable getException() + { + return exception; + } + + + public void printStackTrace() + { + printStackTrace(System.err); + } + + public void printStackTrace(PrintStream ps) + { + if (this.exception==null) + { + super.printStackTrace(ps); + } + else + { + exception.printStackTrace(); + } + } + + +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerHook.java b/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerHook.java new file mode 100644 index 0000000..3520594 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerHook.java @@ -0,0 +1,36 @@ +/* + * 11/19/04 1.0 moved to LGPL. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +import java.io.InputStream; + +/** + * The JavaLayerHooks class allows developers to change + * the way the JavaLayer library uses Resources. + */ + +public interface JavaLayerHook +{ + /** + * Retrieves the named resource. This allows resources to be + * obtained without specifying how they are retrieved. + */ + public InputStream getResourceAsStream(String name); +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerUtils.java b/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerUtils.java new file mode 100644 index 0000000..c9ce383 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/JavaLayerUtils.java @@ -0,0 +1,207 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 12/12/99 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InvalidClassException; +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.OutputStream; +import java.lang.reflect.Array; + +/** + * The JavaLayerUtils class is not strictly part of the JavaLayer API. + * It serves to provide useful methods and system-wide hooks. + * + * @author MDM + */ +public class JavaLayerUtils +{ + static private JavaLayerHook hook = null; + + /** + * Deserializes the object contained in the given input stream. + * @param in The input stream to deserialize an object from. + * @param cls The expected class of the deserialized object. + */ + static public Object deserialize(InputStream in, Class cls) + throws IOException + { + if (cls==null) + throw new NullPointerException("cls"); + + Object obj = deserialize(in, cls); + if (!cls.isInstance(obj)) + { + throw new InvalidObjectException("type of deserialized instance not of required class."); + } + + return obj; + } + + /** + * Deserializes an object from the given InputStream. + * The deserialization is delegated to an + * ObjectInputStream instance. + * + * @param in The InputStream to deserialize an object + * from. + * + * @return The object deserialized from the stream. + * @exception IOException is thrown if there was a problem reading + * the underlying stream, or an object could not be deserialized + * from the stream. + * + * @see java.io.ObjectInputStream + */ + static public Object deserialize(InputStream in) + throws IOException + { + if (in==null) + throw new NullPointerException("in"); + + ObjectInputStream objIn = new ObjectInputStream(in); + + Object obj; + + try + { + obj = objIn.readObject(); + } + catch (ClassNotFoundException ex) + { + throw new InvalidClassException(ex.toString()); + } + + return obj; + } + + /** + * Deserializes an array from a given InputStream. + * + * @param in The InputStream to + * deserialize an object from. + * + * @param elemType The class denoting the type of the array + * elements. + * @param length The expected length of the array, or -1 if + * any length is expected. + */ + static public Object deserializeArray(InputStream in, Class elemType, int length) + throws IOException + { + if (elemType==null) + throw new NullPointerException("elemType"); + + if (length<-1) + throw new IllegalArgumentException("length"); + + Object obj = deserialize(in); + + Class cls = obj.getClass(); + + + if (!cls.isArray()) + throw new InvalidObjectException("object is not an array"); + + Class arrayElemType = cls.getComponentType(); + if (arrayElemType!=elemType) + throw new InvalidObjectException("unexpected array component type"); + + if (length != -1) + { + int arrayLength = Array.getLength(obj); + if (arrayLength!=length) + throw new InvalidObjectException("array length mismatch"); + } + + return obj; + } + + static public Object deserializeArrayResource(String name, Class elemType, int length) + throws IOException + { + InputStream str = getResourceAsStream(name); + if (str==null) + throw new IOException("unable to load resource '"+name+"'"); + + Object obj = deserializeArray(str, elemType, length); + + return obj; + } + + static public void serialize(OutputStream out, Object obj) + throws IOException + { + if (out==null) + throw new NullPointerException("out"); + + if (obj==null) + throw new NullPointerException("obj"); + + ObjectOutputStream objOut = new ObjectOutputStream(out); + objOut.writeObject(obj); + + } + + /** + * Sets the system-wide JavaLayer hook. + */ + static synchronized public void setHook(JavaLayerHook hook0) + { + hook = hook0; + } + + static synchronized public JavaLayerHook getHook() + { + return hook; + } + + /** + * Retrieves an InputStream for a named resource. + * + * @param name The name of the resource. This must be a simple + * name, and not a qualified package name. + * + * @return The InputStream for the named resource, or null if + * the resource has not been found. If a hook has been + * provided, its getResourceAsStream() method is called + * to retrieve the resource. + */ + static synchronized public InputStream getResourceAsStream(String name) + { + InputStream is = null; + + if (hook!=null) + { + is = hook.getResourceAsStream(name); + } + else + { + Class cls = JavaLayerUtils.class; + is = cls.getResourceAsStream(name); + } + + return is; + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/LayerIDecoder.java b/JLayer1.0.1/src/javazoom/jl/decoder/LayerIDecoder.java new file mode 100644 index 0000000..fb936d2 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/LayerIDecoder.java @@ -0,0 +1,448 @@ +/* + * 09/26/08 throw exception on subbband alloc error: Christopher G. Jennings (cjennings@acm.org) + * + * 11/19/04 1.0 moved to LGPL. + * + * 12/12/99 Initial version. Adapted from javalayer.java + * and Subband*.java. mdm@techie.com + * + * 02/28/99 Initial version : javalayer.java by E.B + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * Implements decoding of MPEG Audio Layer I frames. + */ +class LayerIDecoder implements FrameDecoder +{ + protected Bitstream stream; + protected Header header; + protected SynthesisFilter filter1, filter2; + protected Obuffer buffer; + protected int which_channels; + protected int mode; + + protected int num_subbands; + protected Subband[] subbands; + protected Crc16 crc = null; // new Crc16[1] to enable CRC checking. + + public LayerIDecoder() + { + crc = new Crc16(); + } + + public void create(Bitstream stream0, Header header0, + SynthesisFilter filtera, SynthesisFilter filterb, + Obuffer buffer0, int which_ch0) + { + stream = stream0; + header = header0; + filter1 = filtera; + filter2 = filterb; + buffer = buffer0; + which_channels = which_ch0; + + } + + public void decodeFrame() throws DecoderException + { + + num_subbands = header.number_of_subbands(); + subbands = new Subband[32]; + mode = header.mode(); + + createSubbands(); + + readAllocation(); + readScaleFactorSelection(); + + if ((crc != null) || header.checksum_ok()) + { + readScaleFactors(); + + readSampleData(); + } + + } + + protected void createSubbands() + { + int i; + if (mode == Header.SINGLE_CHANNEL) + for (i = 0; i < num_subbands; ++i) + subbands[i] = new SubbandLayer1(i); + else if (mode == Header.JOINT_STEREO) + { + for (i = 0; i < header.intensity_stereo_bound(); ++i) + subbands[i] = new SubbandLayer1Stereo(i); + for (; i < num_subbands; ++i) + subbands[i] = new SubbandLayer1IntensityStereo(i); + } + else + { + for (i = 0; i < num_subbands; ++i) + subbands[i] = new SubbandLayer1Stereo(i); + } + } + + protected void readAllocation() throws DecoderException + { + // start to read audio data: + for (int i = 0; i < num_subbands; ++i) + subbands[i].read_allocation(stream, header, crc); + + } + + protected void readScaleFactorSelection() + { + // scale factor selection not present for layer I. + } + + protected void readScaleFactors() + { + for (int i = 0; i < num_subbands; ++i) + subbands[i].read_scalefactor(stream, header); + } + + protected void readSampleData() + { + boolean read_ready = false; + boolean write_ready = false; + int mode = header.mode(); + int i; + do + { + for (i = 0; i < num_subbands; ++i) + read_ready = subbands[i].read_sampledata(stream); + do + { + for (i = 0; i < num_subbands; ++i) + write_ready = subbands[i].put_next_sample(which_channels,filter1, filter2); + + filter1.calculate_pcm_samples(buffer); + if ((which_channels == OutputChannels.BOTH_CHANNELS) && (mode != Header.SINGLE_CHANNEL)) + filter2.calculate_pcm_samples(buffer); + } while (!write_ready); + } while (!read_ready); + + } + + /** + * Abstract base class for subband classes of layer I and II + */ + static abstract class Subband + { + /* + * Changes from version 1.1 to 1.2: + * - array size increased by one, although a scalefactor with index 63 + * is illegal (to prevent segmentation faults) + */ + // Scalefactors for layer I and II, Annex 3-B.1 in ISO/IEC DIS 11172: + public static final float scalefactors[] = + { + 2.00000000000000f, 1.58740105196820f, 1.25992104989487f, 1.00000000000000f, + 0.79370052598410f, 0.62996052494744f, 0.50000000000000f, 0.39685026299205f, + 0.31498026247372f, 0.25000000000000f, 0.19842513149602f, 0.15749013123686f, + 0.12500000000000f, 0.09921256574801f, 0.07874506561843f, 0.06250000000000f, + 0.04960628287401f, 0.03937253280921f, 0.03125000000000f, 0.02480314143700f, + 0.01968626640461f, 0.01562500000000f, 0.01240157071850f, 0.00984313320230f, + 0.00781250000000f, 0.00620078535925f, 0.00492156660115f, 0.00390625000000f, + 0.00310039267963f, 0.00246078330058f, 0.00195312500000f, 0.00155019633981f, + 0.00123039165029f, 0.00097656250000f, 0.00077509816991f, 0.00061519582514f, + 0.00048828125000f, 0.00038754908495f, 0.00030759791257f, 0.00024414062500f, + 0.00019377454248f, 0.00015379895629f, 0.00012207031250f, 0.00009688727124f, + 0.00007689947814f, 0.00006103515625f, 0.00004844363562f, 0.00003844973907f, + 0.00003051757813f, 0.00002422181781f, 0.00001922486954f, 0.00001525878906f, + 0.00001211090890f, 0.00000961243477f, 0.00000762939453f, 0.00000605545445f, + 0.00000480621738f, 0.00000381469727f, 0.00000302772723f, 0.00000240310869f, + 0.00000190734863f, 0.00000151386361f, 0.00000120155435f, 0.00000000000000f /* illegal scalefactor */ + }; + + public abstract void read_allocation (Bitstream stream, Header header, Crc16 crc) throws DecoderException; + public abstract void read_scalefactor (Bitstream stream, Header header); + public abstract boolean read_sampledata (Bitstream stream); + public abstract boolean put_next_sample (int channels, SynthesisFilter filter1, SynthesisFilter filter2); + }; + + /** + * Class for layer I subbands in single channel mode. + * Used for single channel mode + * and in derived class for intensity stereo mode + */ + static class SubbandLayer1 extends Subband + { + + // Factors and offsets for sample requantization + public static final float table_factor[] = { + 0.0f, (1.0f/2.0f) * (4.0f/3.0f), (1.0f/4.0f) * (8.0f/7.0f), (1.0f/8.0f) * (16.0f/15.0f), + (1.0f/16.0f) * (32.0f/31.0f), (1.0f/32.0f) * (64.0f/63.0f), (1.0f/64.0f) * (128.0f/127.0f), + (1.0f/128.0f) * (256.0f/255.0f), (1.0f/256.0f) * (512.0f/511.0f), + (1.0f/512.0f) * (1024.0f/1023.0f), (1.0f/1024.0f) * (2048.0f/2047.0f), + (1.0f/2048.0f) * (4096.0f/4095.0f), (1.0f/4096.0f) * (8192.0f/8191.0f), + (1.0f/8192.0f) * (16384.0f/16383.0f), (1.0f/16384.0f) * (32768.0f/32767.0f) + }; + + public static final float table_offset[] = { + 0.0f, ((1.0f/2.0f)-1.0f) * (4.0f/3.0f), ((1.0f/4.0f)-1.0f) * (8.0f/7.0f), ((1.0f/8.0f)-1.0f) * (16.0f/15.0f), + ((1.0f/16.0f)-1.0f) * (32.0f/31.0f), ((1.0f/32.0f)-1.0f) * (64.0f/63.0f), ((1.0f/64.0f)-1.0f) * (128.0f/127.0f), + ((1.0f/128.0f)-1.0f) * (256.0f/255.0f), ((1.0f/256.0f)-1.0f) * (512.0f/511.0f), + ((1.0f/512.0f)-1.0f) * (1024.0f/1023.0f), ((1.0f/1024.0f)-1.0f) * (2048.0f/2047.0f), + ((1.0f/2048.0f)-1.0f) * (4096.0f/4095.0f), ((1.0f/4096.0f)-1.0f) * (8192.0f/8191.0f), + ((1.0f/8192.0f)-1.0f) * (16384.0f/16383.0f), ((1.0f/16384.0f)-1.0f) * (32768.0f/32767.0f) + }; + + protected int subbandnumber; + protected int samplenumber; + protected int allocation; + protected float scalefactor; + protected int samplelength; + protected float sample; + protected float factor, offset; + + /** + * Construtor. + */ + public SubbandLayer1(int subbandnumber) + { + this.subbandnumber = subbandnumber; + samplenumber = 0; + } + + /** + * + */ + public void read_allocation(Bitstream stream, Header header, Crc16 crc) throws DecoderException + { + if ((allocation = stream.get_bits (4)) == 15) + { + // CGJ: catch this condition and throw appropriate exception + throw new DecoderException(DecoderErrors.ILLEGAL_SUBBAND_ALLOCATION, null); + // cerr << "WARNING: stream contains an illegal allocation!\n"; + // MPEG-stream is corrupted! + } + + if (crc != null) crc.add_bits (allocation, 4); + if (allocation != 0) + { + samplelength = allocation + 1; + factor = table_factor[allocation]; + offset = table_offset[allocation]; + } + } + + /** + * + */ + public void read_scalefactor(Bitstream stream, Header header) + { + if (allocation != 0) scalefactor = scalefactors[stream.get_bits(6)]; + } + + /** + * + */ + public boolean read_sampledata(Bitstream stream) + { + if (allocation != 0) + { + sample = (float) (stream.get_bits(samplelength)); + } + if (++samplenumber == 12) + { + samplenumber = 0; + return true; + } + return false; + } + + /** + * + */ + public boolean put_next_sample(int channels, SynthesisFilter filter1, SynthesisFilter filter2) + { + if ((allocation !=0) && (channels != OutputChannels.RIGHT_CHANNEL)) + { + float scaled_sample = (sample * factor + offset) * scalefactor; + filter1.input_sample (scaled_sample, subbandnumber); + } + return true; + } + }; + + /** + * Class for layer I subbands in joint stereo mode. + */ + static class SubbandLayer1IntensityStereo extends SubbandLayer1 + { + protected float channel2_scalefactor; + + /** + * Constructor + */ + public SubbandLayer1IntensityStereo(int subbandnumber) + { + super(subbandnumber); + } + + /** + * + */ + public void read_allocation(Bitstream stream, Header header, Crc16 crc) throws DecoderException + { + super.read_allocation (stream, header, crc); + } + + /** + * + */ + public void read_scalefactor (Bitstream stream, Header header) + { + if (allocation != 0) + { + scalefactor = scalefactors[stream.get_bits(6)]; + channel2_scalefactor = scalefactors[stream.get_bits(6)]; + } + } + + /** + * + */ + public boolean read_sampledata(Bitstream stream) + { + return super.read_sampledata (stream); + } + + /** + * + */ + public boolean put_next_sample (int channels, SynthesisFilter filter1, SynthesisFilter filter2) + { + if (allocation !=0 ) + { + sample = sample * factor + offset; // requantization + if (channels == OutputChannels.BOTH_CHANNELS) + { + float sample1 = sample * scalefactor, + sample2 = sample * channel2_scalefactor; + filter1.input_sample(sample1, subbandnumber); + filter2.input_sample(sample2, subbandnumber); + } + else if (channels == OutputChannels.LEFT_CHANNEL) + { + float sample1 = sample * scalefactor; + filter1.input_sample(sample1, subbandnumber); + } + else + { + float sample2 = sample * channel2_scalefactor; + filter1.input_sample(sample2, subbandnumber); + } + } + return true; + } + }; + + /** + * Class for layer I subbands in stereo mode. + */ + static class SubbandLayer1Stereo extends SubbandLayer1 + { + protected int channel2_allocation; + protected float channel2_scalefactor; + protected int channel2_samplelength; + protected float channel2_sample; + protected float channel2_factor, channel2_offset; + + + /** + * Constructor + */ + public SubbandLayer1Stereo(int subbandnumber) + { + super(subbandnumber); + } + + /** + * + */ + public void read_allocation (Bitstream stream, Header header, Crc16 crc) throws DecoderException + { + allocation = stream.get_bits(4); + channel2_allocation = stream.get_bits(4); + if (crc != null) + { + crc.add_bits (allocation, 4); + crc.add_bits (channel2_allocation, 4); + } + if (allocation != 0) + { + samplelength = allocation + 1; + factor = table_factor[allocation]; + offset = table_offset[allocation]; + } + if (channel2_allocation != 0) + { + channel2_samplelength = channel2_allocation + 1; + channel2_factor = table_factor[channel2_allocation]; + channel2_offset = table_offset[channel2_allocation]; + } + } + + /** + * + */ + public void read_scalefactor(Bitstream stream, Header header) + { + if (allocation != 0) scalefactor = scalefactors[stream.get_bits(6)]; + if (channel2_allocation != 0) channel2_scalefactor = scalefactors[stream.get_bits(6)]; + } + + /** + * + */ + public boolean read_sampledata (Bitstream stream) + { + boolean returnvalue = super.read_sampledata(stream); + if (channel2_allocation != 0) + { + channel2_sample = (float) (stream.get_bits(channel2_samplelength)); + } + return(returnvalue); + } + + /** + * + */ + public boolean put_next_sample(int channels, SynthesisFilter filter1, SynthesisFilter filter2) + { + super.put_next_sample (channels, filter1, filter2); + if ((channel2_allocation != 0) && (channels != OutputChannels.LEFT_CHANNEL)) + { + float sample2 = (channel2_sample * channel2_factor + channel2_offset) * + channel2_scalefactor; + if (channels == OutputChannels.BOTH_CHANNELS) + filter2.input_sample (sample2, subbandnumber); + else + filter1.input_sample (sample2, subbandnumber); + } + return true; + } + }; + +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/LayerIIDecoder.java b/JLayer1.0.1/src/javazoom/jl/decoder/LayerIIDecoder.java new file mode 100644 index 0000000..7265b1f --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/LayerIIDecoder.java @@ -0,0 +1,1064 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * + * 29/05/01 Michael Scheerer, Fixed some C++ to Java porting bugs. + * + * 16/07/01 Michael Scheerer, Catched a bug in method + * read_sampledata, which causes an outOfIndexException. + * + * 12/12/99 Initial version. Adapted from javalayer.java + * and Subband*.java. mdm@techie.com + * + * 02/28/99 Initial version : javalayer.java by E.B + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * Implements decoding of MPEG Audio Layer II frames. + */ +class LayerIIDecoder extends LayerIDecoder implements FrameDecoder +{ + + public LayerIIDecoder() + { + } + + + protected void createSubbands() + { + int i; + if (mode == Header.SINGLE_CHANNEL) + for (i = 0; i < num_subbands; ++i) + subbands[i] = new SubbandLayer2(i); + else if (mode == Header.JOINT_STEREO) + { + for (i = 0; i < header.intensity_stereo_bound(); ++i) + subbands[i] = new SubbandLayer2Stereo(i); + for (; i < num_subbands; ++i) + subbands[i] = new SubbandLayer2IntensityStereo(i); + } + else + { + for (i = 0; i < num_subbands; ++i) + subbands[i] = new SubbandLayer2Stereo(i); + } + + } + + protected void readScaleFactorSelection() + { + for (int i = 0; i < num_subbands; ++i) + ((SubbandLayer2)subbands[i]).read_scalefactor_selection(stream, crc); + } + + + + /** + * Class for layer II subbands in single channel mode. + */ + static class SubbandLayer2 extends Subband + { + // this table contains 3 requantized samples for each legal codeword + // when grouped in 5 bits, i.e. 3 quantizationsteps per sample + public static final float grouping_5bits[] = new float[] + { + -2.0f/3.0f, -2.0f/3.0f, -2.0f/3.0f, + 0.0f, -2.0f/3.0f, -2.0f/3.0f, + 2.0f/3.0f, -2.0f/3.0f, -2.0f/3.0f, + -2.0f/3.0f, 0.0f, -2.0f/3.0f, + 0.0f, 0.0f, -2.0f/3.0f, + 2.0f/3.0f, 0.0f, -2.0f/3.0f, + -2.0f/3.0f, 2.0f/3.0f, -2.0f/3.0f, + 0.0f, 2.0f/3.0f, -2.0f/3.0f, + 2.0f/3.0f, 2.0f/3.0f, -2.0f/3.0f, + -2.0f/3.0f, -2.0f/3.0f, 0.0f, + 0.0f, -2.0f/3.0f, 0.0f, + 2.0f/3.0f, -2.0f/3.0f, 0.0f, + -2.0f/3.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 2.0f/3.0f, 0.0f, 0.0f, + -2.0f/3.0f, 2.0f/3.0f, 0.0f, + 0.0f, 2.0f/3.0f, 0.0f, + 2.0f/3.0f, 2.0f/3.0f, 0.0f, + -2.0f/3.0f, -2.0f/3.0f, 2.0f/3.0f, + 0.0f, -2.0f/3.0f, 2.0f/3.0f, + 2.0f/3.0f, -2.0f/3.0f, 2.0f/3.0f, + -2.0f/3.0f, 0.0f, 2.0f/3.0f, + 0.0f, 0.0f, 2.0f/3.0f, + 2.0f/3.0f, 0.0f, 2.0f/3.0f, + -2.0f/3.0f, 2.0f/3.0f, 2.0f/3.0f, + 0.0f, 2.0f/3.0f, 2.0f/3.0f, + 2.0f/3.0f, 2.0f/3.0f, 2.0f/3.0f + }; + + // this table contains 3 requantized samples for each legal codeword + // when grouped in 7 bits, i.e. 5 quantizationsteps per sample + public static final float grouping_7bits[] = new float[] + { + -0.8f, -0.8f, -0.8f, -0.4f, -0.8f, -0.8f, 0.0f, -0.8f, -0.8f, 0.4f, -0.8f, -0.8f, 0.8f, -0.8f, -0.8f, + -0.8f, -0.4f, -0.8f, -0.4f, -0.4f, -0.8f, 0.0f, -0.4f, -0.8f, 0.4f, -0.4f, -0.8f, 0.8f, -0.4f, -0.8f, + -0.8f, 0.0f, -0.8f, -0.4f, 0.0f, -0.8f, 0.0f, 0.0f, -0.8f, 0.4f, 0.0f, -0.8f, 0.8f, 0.0f, -0.8f, + -0.8f, 0.4f, -0.8f, -0.4f, 0.4f, -0.8f, 0.0f, 0.4f, -0.8f, 0.4f, 0.4f, -0.8f, 0.8f, 0.4f, -0.8f, + -0.8f, 0.8f, -0.8f, -0.4f, 0.8f, -0.8f, 0.0f, 0.8f, -0.8f, 0.4f, 0.8f, -0.8f, 0.8f, 0.8f, -0.8f, + -0.8f, -0.8f, -0.4f, -0.4f, -0.8f, -0.4f, 0.0f, -0.8f, -0.4f, 0.4f, -0.8f, -0.4f, 0.8f, -0.8f, -0.4f, + -0.8f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.0f, -0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.8f, -0.4f, -0.4f, + -0.8f, 0.0f, -0.4f, -0.4f, 0.0f, -0.4f, 0.0f, 0.0f, -0.4f, 0.4f, 0.0f, -0.4f, 0.8f, 0.0f, -0.4f, + -0.8f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.0f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, 0.8f, 0.4f, -0.4f, + -0.8f, 0.8f, -0.4f, -0.4f, 0.8f, -0.4f, 0.0f, 0.8f, -0.4f, 0.4f, 0.8f, -0.4f, 0.8f, 0.8f, -0.4f, + -0.8f, -0.8f, 0.0f, -0.4f, -0.8f, 0.0f, 0.0f, -0.8f, 0.0f, 0.4f, -0.8f, 0.0f, 0.8f, -0.8f, 0.0f, + -0.8f, -0.4f, 0.0f, -0.4f, -0.4f, 0.0f, 0.0f, -0.4f, 0.0f, 0.4f, -0.4f, 0.0f, 0.8f, -0.4f, 0.0f, + -0.8f, 0.0f, 0.0f, -0.4f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.4f, 0.0f, 0.0f, 0.8f, 0.0f, 0.0f, + -0.8f, 0.4f, 0.0f, -0.4f, 0.4f, 0.0f, 0.0f, 0.4f, 0.0f, 0.4f, 0.4f, 0.0f, 0.8f, 0.4f, 0.0f, + -0.8f, 0.8f, 0.0f, -0.4f, 0.8f, 0.0f, 0.0f, 0.8f, 0.0f, 0.4f, 0.8f, 0.0f, 0.8f, 0.8f, 0.0f, + -0.8f, -0.8f, 0.4f, -0.4f, -0.8f, 0.4f, 0.0f, -0.8f, 0.4f, 0.4f, -0.8f, 0.4f, 0.8f, -0.8f, 0.4f, + -0.8f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.0f, -0.4f, 0.4f, 0.4f, -0.4f, 0.4f, 0.8f, -0.4f, 0.4f, + -0.8f, 0.0f, 0.4f, -0.4f, 0.0f, 0.4f, 0.0f, 0.0f, 0.4f, 0.4f, 0.0f, 0.4f, 0.8f, 0.0f, 0.4f, + -0.8f, 0.4f, 0.4f, -0.4f, 0.4f, 0.4f, 0.0f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.8f, 0.4f, 0.4f, + -0.8f, 0.8f, 0.4f, -0.4f, 0.8f, 0.4f, 0.0f, 0.8f, 0.4f, 0.4f, 0.8f, 0.4f, 0.8f, 0.8f, 0.4f, + -0.8f, -0.8f, 0.8f, -0.4f, -0.8f, 0.8f, 0.0f, -0.8f, 0.8f, 0.4f, -0.8f, 0.8f, 0.8f, -0.8f, 0.8f, + -0.8f, -0.4f, 0.8f, -0.4f, -0.4f, 0.8f, 0.0f, -0.4f, 0.8f, 0.4f, -0.4f, 0.8f, 0.8f, -0.4f, 0.8f, + -0.8f, 0.0f, 0.8f, -0.4f, 0.0f, 0.8f, 0.0f, 0.0f, 0.8f, 0.4f, 0.0f, 0.8f, 0.8f, 0.0f, 0.8f, + -0.8f, 0.4f, 0.8f, -0.4f, 0.4f, 0.8f, 0.0f, 0.4f, 0.8f, 0.4f, 0.4f, 0.8f, 0.8f, 0.4f, 0.8f, + -0.8f, 0.8f, 0.8f, -0.4f, 0.8f, 0.8f, 0.0f, 0.8f, 0.8f, 0.4f, 0.8f, 0.8f, 0.8f, 0.8f, 0.8f + }; + + // this table contains 3 requantized samples for each legal codeword + // when grouped in 10 bits, i.e. 9 quantizationsteps per sample + public static final float grouping_10bits[] = + { + -8.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, + -2.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, 0.0f, -8.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, + 4.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f, + -8.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, + -2.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, 0.0f, -6.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, + 4.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, + -8.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, + -2.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, 0.0f, -4.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, + 4.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, + -8.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f, + -2.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f, 0.0f, -2.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f, + 4.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f, + -8.0f/9.0f, 0.0f, -8.0f/9.0f, -6.0f/9.0f, 0.0f, -8.0f/9.0f, -4.0f/9.0f, 0.0f, -8.0f/9.0f, + -2.0f/9.0f, 0.0f, -8.0f/9.0f, 0.0f, 0.0f, -8.0f/9.0f, 2.0f/9.0f, 0.0f, -8.0f/9.0f, + 4.0f/9.0f, 0.0f, -8.0f/9.0f, 6.0f/9.0f, 0.0f, -8.0f/9.0f, 8.0f/9.0f, 0.0f, -8.0f/9.0f, + -8.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, + -2.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, 0.0f, 2.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, + 4.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, + -8.0f/9.0f, 4.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, -8.0f/9.0f, + -2.0f/9.0f, 4.0f/9.0f, -8.0f/9.0f, 0.0f, 4.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, -8.0f/9.0f, + 4.0f/9.0f, 4.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, -8.0f/9.0f, + -8.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, + -2.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, 0.0f, 6.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, + 4.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, + -8.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, + -2.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, 0.0f, 8.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, + 4.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, + -8.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, + -2.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, 0.0f, -8.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, + 4.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f, + -8.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, + -2.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 0.0f, -6.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, + 4.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, + -8.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, + -2.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 0.0f, -4.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, + 4.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, + -8.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, + -2.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, 0.0f, -2.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, + 4.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, + -8.0f/9.0f, 0.0f, -6.0f/9.0f, -6.0f/9.0f, 0.0f, -6.0f/9.0f, -4.0f/9.0f, 0.0f, -6.0f/9.0f, + -2.0f/9.0f, 0.0f, -6.0f/9.0f, 0.0f, 0.0f, -6.0f/9.0f, 2.0f/9.0f, 0.0f, -6.0f/9.0f, + 4.0f/9.0f, 0.0f, -6.0f/9.0f, 6.0f/9.0f, 0.0f, -6.0f/9.0f, 8.0f/9.0f, 0.0f, -6.0f/9.0f, + -8.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, + -2.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 0.0f, 2.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, + 4.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, + -8.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, + -2.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, 0.0f, 4.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, + 4.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, + -8.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, + -2.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 0.0f, 6.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, + 4.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, + -8.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, + -2.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 0.0f, 8.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, + 4.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, + -8.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, + -2.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, 0.0f, -8.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, + 4.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f, + -8.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, + -2.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 0.0f, -6.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, + 4.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, + -8.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, + -2.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 0.0f, -4.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, + 4.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, + -8.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, + -2.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, 0.0f, -2.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, + 4.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, + -8.0f/9.0f, 0.0f, -4.0f/9.0f, -6.0f/9.0f, 0.0f, -4.0f/9.0f, -4.0f/9.0f, 0.0f, -4.0f/9.0f, + -2.0f/9.0f, 0.0f, -4.0f/9.0f, 0.0f, 0.0f, -4.0f/9.0f, 2.0f/9.0f, 0.0f, -4.0f/9.0f, + 4.0f/9.0f, 0.0f, -4.0f/9.0f, 6.0f/9.0f, 0.0f, -4.0f/9.0f, 8.0f/9.0f, 0.0f, -4.0f/9.0f, + -8.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, + -2.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 0.0f, 2.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, + 4.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, + -8.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, + -2.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, 0.0f, 4.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, + 4.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, + -8.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, + -2.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 0.0f, 6.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, + 4.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, + -8.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, + -2.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 0.0f, 8.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, + 4.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, + -8.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f, + -2.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f, 0.0f, -8.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f, + 4.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f, + -8.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, + -2.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, 0.0f, -6.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, + 4.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, + -8.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, + -2.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, 0.0f, -4.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, + 4.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, + -8.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f, + -2.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f, 0.0f, -2.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f, + 4.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f, + -8.0f/9.0f, 0.0f, -2.0f/9.0f, -6.0f/9.0f, 0.0f, -2.0f/9.0f, -4.0f/9.0f, 0.0f, -2.0f/9.0f, + -2.0f/9.0f, 0.0f, -2.0f/9.0f, 0.0f, 0.0f, -2.0f/9.0f, 2.0f/9.0f, 0.0f, -2.0f/9.0f, + 4.0f/9.0f, 0.0f, -2.0f/9.0f, 6.0f/9.0f, 0.0f, -2.0f/9.0f, 8.0f/9.0f, 0.0f, -2.0f/9.0f, + -8.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, + -2.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, 0.0f, 2.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, + 4.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, + -8.0f/9.0f, 4.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, -2.0f/9.0f, + -2.0f/9.0f, 4.0f/9.0f, -2.0f/9.0f, 0.0f, 4.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, -2.0f/9.0f, + 4.0f/9.0f, 4.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, -2.0f/9.0f, + -8.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, + -2.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, 0.0f, 6.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, + 4.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, + -8.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, + -2.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, 0.0f, 8.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, + 4.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, + -8.0f/9.0f, -8.0f/9.0f, 0.0f, -6.0f/9.0f, -8.0f/9.0f, 0.0f, -4.0f/9.0f, -8.0f/9.0f, 0.0f, + -2.0f/9.0f, -8.0f/9.0f, 0.0f, 0.0f, -8.0f/9.0f, 0.0f, 2.0f/9.0f, -8.0f/9.0f, 0.0f, + 4.0f/9.0f, -8.0f/9.0f, 0.0f, 6.0f/9.0f, -8.0f/9.0f, 0.0f, 8.0f/9.0f, -8.0f/9.0f, 0.0f, + -8.0f/9.0f, -6.0f/9.0f, 0.0f, -6.0f/9.0f, -6.0f/9.0f, 0.0f, -4.0f/9.0f, -6.0f/9.0f, 0.0f, + -2.0f/9.0f, -6.0f/9.0f, 0.0f, 0.0f, -6.0f/9.0f, 0.0f, 2.0f/9.0f, -6.0f/9.0f, 0.0f, + 4.0f/9.0f, -6.0f/9.0f, 0.0f, 6.0f/9.0f, -6.0f/9.0f, 0.0f, 8.0f/9.0f, -6.0f/9.0f, 0.0f, + -8.0f/9.0f, -4.0f/9.0f, 0.0f, -6.0f/9.0f, -4.0f/9.0f, 0.0f, -4.0f/9.0f, -4.0f/9.0f, 0.0f, + -2.0f/9.0f, -4.0f/9.0f, 0.0f, 0.0f, -4.0f/9.0f, 0.0f, 2.0f/9.0f, -4.0f/9.0f, 0.0f, + 4.0f/9.0f, -4.0f/9.0f, 0.0f, 6.0f/9.0f, -4.0f/9.0f, 0.0f, 8.0f/9.0f, -4.0f/9.0f, 0.0f, + -8.0f/9.0f, -2.0f/9.0f, 0.0f, -6.0f/9.0f, -2.0f/9.0f, 0.0f, -4.0f/9.0f, -2.0f/9.0f, 0.0f, + -2.0f/9.0f, -2.0f/9.0f, 0.0f, 0.0f, -2.0f/9.0f, 0.0f, 2.0f/9.0f, -2.0f/9.0f, 0.0f, + 4.0f/9.0f, -2.0f/9.0f, 0.0f, 6.0f/9.0f, -2.0f/9.0f, 0.0f, 8.0f/9.0f, -2.0f/9.0f, 0.0f, + -8.0f/9.0f, 0.0f, 0.0f, -6.0f/9.0f, 0.0f, 0.0f, -4.0f/9.0f, 0.0f, 0.0f, + -2.0f/9.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f/9.0f, 0.0f, 0.0f, + 4.0f/9.0f, 0.0f, 0.0f, 6.0f/9.0f, 0.0f, 0.0f, 8.0f/9.0f, 0.0f, 0.0f, + -8.0f/9.0f, 2.0f/9.0f, 0.0f, -6.0f/9.0f, 2.0f/9.0f, 0.0f, -4.0f/9.0f, 2.0f/9.0f, 0.0f, + -2.0f/9.0f, 2.0f/9.0f, 0.0f, 0.0f, 2.0f/9.0f, 0.0f, 2.0f/9.0f, 2.0f/9.0f, 0.0f, + 4.0f/9.0f, 2.0f/9.0f, 0.0f, 6.0f/9.0f, 2.0f/9.0f, 0.0f, 8.0f/9.0f, 2.0f/9.0f, 0.0f, + -8.0f/9.0f, 4.0f/9.0f, 0.0f, -6.0f/9.0f, 4.0f/9.0f, 0.0f, -4.0f/9.0f, 4.0f/9.0f, 0.0f, + -2.0f/9.0f, 4.0f/9.0f, 0.0f, 0.0f, 4.0f/9.0f, 0.0f, 2.0f/9.0f, 4.0f/9.0f, 0.0f, + 4.0f/9.0f, 4.0f/9.0f, 0.0f, 6.0f/9.0f, 4.0f/9.0f, 0.0f, 8.0f/9.0f, 4.0f/9.0f, 0.0f, + -8.0f/9.0f, 6.0f/9.0f, 0.0f, -6.0f/9.0f, 6.0f/9.0f, 0.0f, -4.0f/9.0f, 6.0f/9.0f, 0.0f, + -2.0f/9.0f, 6.0f/9.0f, 0.0f, 0.0f, 6.0f/9.0f, 0.0f, 2.0f/9.0f, 6.0f/9.0f, 0.0f, + 4.0f/9.0f, 6.0f/9.0f, 0.0f, 6.0f/9.0f, 6.0f/9.0f, 0.0f, 8.0f/9.0f, 6.0f/9.0f, 0.0f, + -8.0f/9.0f, 8.0f/9.0f, 0.0f, -6.0f/9.0f, 8.0f/9.0f, 0.0f, -4.0f/9.0f, 8.0f/9.0f, 0.0f, + -2.0f/9.0f, 8.0f/9.0f, 0.0f, 0.0f, 8.0f/9.0f, 0.0f, 2.0f/9.0f, 8.0f/9.0f, 0.0f, + 4.0f/9.0f, 8.0f/9.0f, 0.0f, 6.0f/9.0f, 8.0f/9.0f, 0.0f, 8.0f/9.0f, 8.0f/9.0f, 0.0f, + -8.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, + -2.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, 0.0f, -8.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, + 4.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, 2.0f/9.0f, + -8.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, + -2.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 0.0f, -6.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, + 4.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, + -8.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, + -2.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 0.0f, -4.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, + 4.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, + -8.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, + -2.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, 0.0f, -2.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, + 4.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, 2.0f/9.0f, + -8.0f/9.0f, 0.0f, 2.0f/9.0f, -6.0f/9.0f, 0.0f, 2.0f/9.0f, -4.0f/9.0f, 0.0f, 2.0f/9.0f, + -2.0f/9.0f, 0.0f, 2.0f/9.0f, 0.0f, 0.0f, 2.0f/9.0f, 2.0f/9.0f, 0.0f, 2.0f/9.0f, + 4.0f/9.0f, 0.0f, 2.0f/9.0f, 6.0f/9.0f, 0.0f, 2.0f/9.0f, 8.0f/9.0f, 0.0f, 2.0f/9.0f, + -8.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, + -2.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 0.0f, 2.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, + 4.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, + -8.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, + -2.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, 0.0f, 4.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, + 4.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, + -8.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, + -2.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 0.0f, 6.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, + 4.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, + -8.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, + -2.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 0.0f, 8.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, + 4.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, + -8.0f/9.0f, -8.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, 4.0f/9.0f, + -2.0f/9.0f, -8.0f/9.0f, 4.0f/9.0f, 0.0f, -8.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, 4.0f/9.0f, + 4.0f/9.0f, -8.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, 4.0f/9.0f, + -8.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, + -2.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, 0.0f, -6.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, + 4.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, + -8.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, + -2.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, 0.0f, -4.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, + 4.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, + -8.0f/9.0f, -2.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, 4.0f/9.0f, + -2.0f/9.0f, -2.0f/9.0f, 4.0f/9.0f, 0.0f, -2.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, 4.0f/9.0f, + 4.0f/9.0f, -2.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, 4.0f/9.0f, + -8.0f/9.0f, 0.0f, 4.0f/9.0f, -6.0f/9.0f, 0.0f, 4.0f/9.0f, -4.0f/9.0f, 0.0f, 4.0f/9.0f, + -2.0f/9.0f, 0.0f, 4.0f/9.0f, 0.0f, 0.0f, 4.0f/9.0f, 2.0f/9.0f, 0.0f, 4.0f/9.0f, + 4.0f/9.0f, 0.0f, 4.0f/9.0f, 6.0f/9.0f, 0.0f, 4.0f/9.0f, 8.0f/9.0f, 0.0f, 4.0f/9.0f, + -8.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, + -2.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, 0.0f, 2.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, + 4.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, + -8.0f/9.0f, 4.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, 4.0f/9.0f, + -2.0f/9.0f, 4.0f/9.0f, 4.0f/9.0f, 0.0f, 4.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, 4.0f/9.0f, + 4.0f/9.0f, 4.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, 4.0f/9.0f, + -8.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, + -2.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, 0.0f, 6.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, + 4.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, + -8.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, + -2.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, 0.0f, 8.0f/9.0f, 4.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, + 4.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, + -8.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, + -2.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, 0.0f, -8.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, + 4.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, 6.0f/9.0f, + -8.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, + -2.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 0.0f, -6.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, + 4.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, + -8.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, + -2.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 0.0f, -4.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, + 4.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, + -8.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, + -2.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, 0.0f, -2.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, + 4.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, 6.0f/9.0f, + -8.0f/9.0f, 0.0f, 6.0f/9.0f, -6.0f/9.0f, 0.0f, 6.0f/9.0f, -4.0f/9.0f, 0.0f, 6.0f/9.0f, + -2.0f/9.0f, 0.0f, 6.0f/9.0f, 0.0f, 0.0f, 6.0f/9.0f, 2.0f/9.0f, 0.0f, 6.0f/9.0f, + 4.0f/9.0f, 0.0f, 6.0f/9.0f, 6.0f/9.0f, 0.0f, 6.0f/9.0f, 8.0f/9.0f, 0.0f, 6.0f/9.0f, + -8.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, + -2.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 0.0f, 2.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, + 4.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, + -8.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, + -2.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, 0.0f, 4.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, + 4.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, 6.0f/9.0f, + -8.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, + -2.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 0.0f, 6.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, + 4.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, + -8.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, + -2.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 0.0f, 8.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, + 4.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, + -8.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, + -2.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, 0.0f, -8.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, + 4.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, -8.0f/9.0f, 8.0f/9.0f, + -8.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, + -2.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 0.0f, -6.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, + 4.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, + -8.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, + -2.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 0.0f, -4.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, + 4.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, + -8.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, + -2.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, 0.0f, -2.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, + 4.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, -2.0f/9.0f, 8.0f/9.0f, + -8.0f/9.0f, 0.0f, 8.0f/9.0f, -6.0f/9.0f, 0.0f, 8.0f/9.0f, -4.0f/9.0f, 0.0f, 8.0f/9.0f, + -2.0f/9.0f, 0.0f, 8.0f/9.0f, 0.0f, 0.0f, 8.0f/9.0f, 2.0f/9.0f, 0.0f, 8.0f/9.0f, + 4.0f/9.0f, 0.0f, 8.0f/9.0f, 6.0f/9.0f, 0.0f, 8.0f/9.0f, 8.0f/9.0f, 0.0f, 8.0f/9.0f, + -8.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, + -2.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 0.0f, 2.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, + 4.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, + -8.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, + -2.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, 0.0f, 4.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, + 4.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 4.0f/9.0f, 8.0f/9.0f, + -8.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, + -2.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 0.0f, 6.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, + 4.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, + -8.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, -6.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, -4.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, + -2.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 0.0f, 8.0f/9.0f, 8.0f/9.0f, 2.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, + 4.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 6.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f, 8.0f/9.0f + }; + + // data taken from ISO/IEC DIS 11172, Annexes 3-B.2[abcd] and 3-B.4: + + // subbands 0-2 in tables 3-B.2a and 2b: (index is allocation) + public static final int table_ab1_codelength[] = + // bits per codeword + { 0, 5, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; + + public static final float table_ab1_groupingtables[][] = + // pointer to sample grouping table, or NULL-pointer if ungrouped + { null, grouping_5bits, null, null, null, null, null, null, null, null, null, null, null, null, null, null }; + + public static final float table_ab1_factor[] = + // factor for requantization: (real)sample * factor - 1.0 gives requantized sample + { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32.0f, 1.0f/64.0f, + 1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f, 1.0f/1024.0f, 1.0f/2048.0f, + 1.0f/4096.0f, 1.0f/8192.0f, 1.0f/16384.0f, 1.0f/32768.0f }; + + public static final float table_ab1_c[] = + // factor c for requantization from table 3-B.4 + { 0.0f, 1.33333333333f, 1.14285714286f, 1.06666666666f, 1.03225806452f, + 1.01587301587f, 1.00787401575f, 1.00392156863f, 1.00195694716f, 1.00097751711f, + 1.00048851979f, 1.00024420024f, 1.00012208522f, 1.00006103888f, 1.00003051851f, + 1.00001525902f }; + + public static final float table_ab1_d[] = + // addend d for requantization from table 3-B.4 + { 0.0f, 0.50000000000f, 0.25000000000f, 0.12500000000f, 0.06250000000f, + 0.03125000000f, 0.01562500000f, 0.00781250000f, 0.00390625000f, 0.00195312500f, + 0.00097656250f, 0.00048828125f, 0.00024414063f, 0.00012207031f, 0.00006103516f, + 0.00003051758f }; + + // subbands 3-... tables 3-B.2a and 2b: + public static final float[] table_ab234_groupingtables[] = + { null, grouping_5bits, grouping_7bits, null, grouping_10bits, null, null, null, null, null, null, null, null, null, null, null }; + + // subbands 3-10 in tables 3-B.2a and 2b: + public static final int table_ab2_codelength[] = + { 0, 5, 7, 3, 10, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16 }; + public static final float table_ab2_factor[] = + { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f, + 1.0f/32.0f, 1.0f/64.0f, 1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f, + 1.0f/1024.0f, 1.0f/2048.0f, 1.0f/4096.0f, 1.0f/32768.0f }; + public static final float table_ab2_c[] = + { 0.0f, 1.33333333333f, 1.60000000000f, 1.14285714286f, 1.77777777777f, + 1.06666666666f, 1.03225806452f, 1.01587301587f, 1.00787401575f, 1.00392156863f, + 1.00195694716f, 1.00097751711f, 1.00048851979f, 1.00024420024f, 1.00012208522f, + 1.00001525902f }; + public static final float table_ab2_d[] = + { 0.0f, 0.50000000000f, 0.50000000000f, 0.25000000000f, 0.50000000000f, + 0.12500000000f, 0.06250000000f, 0.03125000000f, 0.01562500000f, 0.00781250000f, + 0.00390625000f, 0.00195312500f, 0.00097656250f, 0.00048828125f, 0.00024414063f, + 0.00003051758f }; + + // subbands 11-22 in tables 3-B.2a and 2b: + public static final int table_ab3_codelength[] = { 0, 5, 7, 3, 10, 4, 5, 16 }; + public static final float table_ab3_factor[] = + { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32768.0f }; + public static final float table_ab3_c[] = + { 0.0f, 1.33333333333f, 1.60000000000f, 1.14285714286f, 1.77777777777f, + 1.06666666666f, 1.03225806452f, 1.00001525902f }; + public static final float table_ab3_d[] = + { 0.0f, 0.50000000000f, 0.50000000000f, 0.25000000000f, 0.50000000000f, + 0.12500000000f, 0.06250000000f, 0.00003051758f }; + + // subbands 23-... in tables 3-B.2a and 2b: + public static final int table_ab4_codelength[] = { 0, 5, 7, 16 }; + public static final float table_ab4_factor[] = { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/32768.0f }; + public static final float table_ab4_c[] = { 0.0f, 1.33333333333f, 1.60000000000f, 1.00001525902f }; + public static final float table_ab4_d[] = { 0.0f, 0.50000000000f, 0.50000000000f, 0.00003051758f }; + + // subbands in tables 3-B.2c and 2d: + public static final int table_cd_codelength[] = + { 0, 5, 7, 10, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + public static final float table_cd_groupingtables[][] = + { null, grouping_5bits, grouping_7bits, grouping_10bits, null, null, null, null, null, null, null, null, null, null, null, null }; + public static final float table_cd_factor[] = + { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32.0f, 1.0f/64.0f, + 1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f, 1.0f/1024.0f, 1.0f/2048.0f, 1.0f/4096.0f, + 1.0f/8192.0f, 1.0f/16384.0f }; + public static final float table_cd_c[] = + { 0.0f, 1.33333333333f, 1.60000000000f, 1.77777777777f, 1.06666666666f, + 1.03225806452f, 1.01587301587f, 1.00787401575f, 1.00392156863f, 1.00195694716f, + 1.00097751711f, 1.00048851979f, 1.00024420024f, 1.00012208522f, 1.00006103888f, + 1.00003051851f }; + public static final float table_cd_d[] = + { 0.0f, 0.50000000000f, 0.50000000000f, 0.50000000000f, 0.12500000000f, + 0.06250000000f, 0.03125000000f, 0.01562500000f, 0.00781250000f, 0.00390625000f, + 0.00195312500f, 0.00097656250f, 0.00048828125f, 0.00024414063f, 0.00012207031f, + 0.00006103516f }; + + + + protected int subbandnumber; + protected int allocation; + protected int scfsi; + protected float scalefactor1, scalefactor2, scalefactor3; + protected int[] codelength = {0}; + protected float groupingtable[][] = new float[2][]; + //protected float[][] groupingtable = {{0},{0}} ; + protected float[] factor = {0.0f}; + protected int groupnumber; + protected int samplenumber; + protected float[] samples = new float[3]; + protected float[] c = {0}; + protected float[] d = {0}; + /** + * Constructor + */ + public SubbandLayer2(int subbandnumber) + { + this.subbandnumber = subbandnumber; + groupnumber = samplenumber = 0; + } + + + /** + * + */ + protected int get_allocationlength (Header header) + { + if (header.version() == Header.MPEG1) + { + int channel_bitrate = header.bitrate_index(); + + // calculate bitrate per channel: + if (header.mode() != Header.SINGLE_CHANNEL) + if (channel_bitrate == 4) + channel_bitrate = 1; + else + channel_bitrate -= 4; + + if (channel_bitrate == 1 || channel_bitrate == 2) + // table 3-B.2c or 3-B.2d + if (subbandnumber <= 1) + return 4; + else + return 3; + else + // tables 3-B.2a or 3-B.2b + if (subbandnumber <= 10) + return 4; + else if (subbandnumber <= 22) + return 3; + else + return 2; + } + else + { // MPEG-2 LSF -- Jeff + + // table B.1 of ISO/IEC 13818-3 + if (subbandnumber <= 3) + return 4; + else if (subbandnumber <= 10) + return 3; + else + return 2; + } + } + + /** + * + */ + protected void prepare_sample_reading(Header header, int allocation, + //float[][] groupingtable, + int channel, + float[] factor, int[] codelength, + float[] c, float[] d) + { + int channel_bitrate = header.bitrate_index(); + // calculate bitrate per channel: + if (header.mode() != Header.SINGLE_CHANNEL) + if (channel_bitrate == 4) + channel_bitrate = 1; + else + channel_bitrate -= 4; + + if (channel_bitrate == 1 || channel_bitrate == 2) + { + // table 3-B.2c or 3-B.2d + groupingtable[channel] = table_cd_groupingtables[allocation]; + factor[0] = table_cd_factor[allocation]; + codelength[0] = table_cd_codelength[allocation]; + c[0] = table_cd_c[allocation]; + d[0] = table_cd_d[allocation]; + } + else + { + // tables 3-B.2a or 3-B.2b + if (subbandnumber <= 2) + { + groupingtable[channel] = table_ab1_groupingtables[allocation]; + factor[0] = table_ab1_factor[allocation]; + codelength[0] = table_ab1_codelength[allocation]; + c[0] = table_ab1_c[allocation]; + d[0] = table_ab1_d[allocation]; + } + else + { + groupingtable[channel] = table_ab234_groupingtables[allocation]; + if (subbandnumber <= 10) + { + factor[0] = table_ab2_factor[allocation]; + codelength[0] = table_ab2_codelength[allocation]; + c[0] = table_ab2_c[allocation]; + d[0] = table_ab2_d[allocation]; + } + else if (subbandnumber <= 22) + { + factor[0] = table_ab3_factor[allocation]; + codelength[0] = table_ab3_codelength[allocation]; + c[0] = table_ab3_c[allocation]; + d[0] = table_ab3_d[allocation]; + } + else + { + factor[0] = table_ab4_factor[allocation]; + codelength[0] = table_ab4_codelength[allocation]; + c[0] = table_ab4_c[allocation]; + d[0] = table_ab4_d[allocation]; + } + } + } + } + + + /** + * + */ + public void read_allocation(Bitstream stream, Header header, Crc16 crc) + { + int length = get_allocationlength(header); + allocation = stream.get_bits(length); + if (crc != null) + crc.add_bits(allocation, length); + } + + /** + * + */ + public void read_scalefactor_selection (Bitstream stream, Crc16 crc) + { + if (allocation != 0) + { + scfsi = stream.get_bits(2); + if (crc != null) crc.add_bits(scfsi, 2); + } + } + + /** + * + */ + public void read_scalefactor (Bitstream stream, Header header) + { + if (allocation != 0) + { + switch (scfsi) + { + case 0: + scalefactor1 = scalefactors[stream.get_bits(6)]; + scalefactor2 = scalefactors[stream.get_bits(6)]; + scalefactor3 = scalefactors[stream.get_bits(6)]; + break; + case 1: + scalefactor1 = scalefactor2 = scalefactors[stream.get_bits(6)]; + scalefactor3 = scalefactors[stream.get_bits(6)]; + break; + case 2: + scalefactor1 = scalefactor2 = scalefactor3 = scalefactors[stream.get_bits(6)]; + break; + case 3: + scalefactor1 = scalefactors[stream.get_bits(6)]; + scalefactor2 = scalefactor3 = scalefactors[stream.get_bits(6)]; + break; + } + prepare_sample_reading(header, allocation, 0, + factor, codelength, c, d); + } + } + + /** + * + */ + public boolean read_sampledata (Bitstream stream) + { + if (allocation != 0) + if (groupingtable[0] != null) + { + int samplecode = stream.get_bits(codelength[0]); + // create requantized samples: + samplecode += samplecode << 1; + float[] target = samples; + float[] source = groupingtable[0]; + /* + int tmp = 0; + int temp = 0; + target[tmp++] = source[samplecode + temp]; + temp++; + target[tmp++] = source[samplecode + temp]; + temp++; + target[tmp] = source[samplecode + temp]; + */ + //Bugfix: + int tmp = 0; + int temp = samplecode; + + if(temp > source.length - 3) temp = source.length - 3; + + target[tmp] = source[temp]; + temp++;tmp++; + target[tmp] = source[temp]; + temp++;tmp++; + target[tmp] = source[temp]; + + // memcpy (samples, groupingtable + samplecode, 3 * sizeof (real)); + } + else + { + samples[0] = (float) ((stream.get_bits(codelength[0])) * factor[0] - 1.0); + samples[1] = (float) ((stream.get_bits(codelength[0])) * factor[0] - 1.0); + samples[2] = (float) ((stream.get_bits(codelength[0])) * factor[0] - 1.0); + } + + samplenumber = 0; + if (++groupnumber == 12) + return true; + else + return false; + } + + /** + * + */ + public boolean put_next_sample(int channels, SynthesisFilter filter1, SynthesisFilter filter2) + { + if ((allocation != 0) && (channels != OutputChannels.RIGHT_CHANNEL)) + { + float sample = samples[samplenumber]; + + if (groupingtable[0] == null) + sample = (sample + d[0]) * c[0]; + if (groupnumber <= 4) + sample *= scalefactor1; + else if (groupnumber <= 8) + sample *= scalefactor2; + else + sample *= scalefactor3; + filter1.input_sample(sample, subbandnumber); + } + + if (++samplenumber == 3) + return true; + else + return false; + } + }; + + /** + * Class for layer II subbands in joint stereo mode. + */ + static class SubbandLayer2IntensityStereo extends SubbandLayer2 + { + protected int channel2_scfsi; + protected float channel2_scalefactor1, channel2_scalefactor2, channel2_scalefactor3; + + /** + * Constructor + */ + public SubbandLayer2IntensityStereo (int subbandnumber) + { + super(subbandnumber); + } + + /** + * + */ + public void read_allocation(Bitstream stream, Header header, Crc16 crc) + { + super.read_allocation (stream, header, crc); + } + + /** + * + */ + public void read_scalefactor_selection(Bitstream stream, Crc16 crc) + { + if (allocation != 0) + { + scfsi = stream.get_bits(2); + channel2_scfsi = stream.get_bits(2); + if (crc != null) + { + crc.add_bits(scfsi, 2); + crc.add_bits(channel2_scfsi, 2); + } + } + } + + /** + * + */ + public void read_scalefactor(Bitstream stream, Header header) + { + if (allocation != 0) + { + super.read_scalefactor(stream, header); + switch (channel2_scfsi) + { + case 0: + channel2_scalefactor1 = scalefactors[stream.get_bits(6)]; + channel2_scalefactor2 = scalefactors[stream.get_bits(6)]; + channel2_scalefactor3 = scalefactors[stream.get_bits(6)]; + break; + + case 1: + channel2_scalefactor1 = channel2_scalefactor2 = scalefactors[stream.get_bits (6)]; + channel2_scalefactor3 = scalefactors[stream.get_bits(6)]; + break; + + case 2: + channel2_scalefactor1 = channel2_scalefactor2 = + channel2_scalefactor3 = scalefactors[stream.get_bits(6)]; + break; + + case 3: + channel2_scalefactor1 = scalefactors[stream.get_bits(6)]; + channel2_scalefactor2 = channel2_scalefactor3 = scalefactors[stream.get_bits (6)]; + break; + } + } + + } + + /** + * + */ + public boolean read_sampledata(Bitstream stream) + { + return super.read_sampledata (stream); + } + + /** + * + */ + public boolean put_next_sample(int channels, SynthesisFilter filter1, SynthesisFilter filter2) + { + if (allocation != 0) + { + float sample = samples[samplenumber]; + + if (groupingtable[0] == null) + sample = (sample + d[0]) * c[0]; + if (channels == OutputChannels.BOTH_CHANNELS) + { + float sample2 = sample; + if (groupnumber <= 4) + { + sample *= scalefactor1; + sample2 *= channel2_scalefactor1; + } + else if (groupnumber <= 8) + { + sample *= scalefactor2; + sample2 *= channel2_scalefactor2; + } + else + { + sample *= scalefactor3; + sample2 *= channel2_scalefactor3; + } + filter1.input_sample(sample, subbandnumber); + filter2.input_sample(sample2, subbandnumber); + } + else if (channels == OutputChannels.LEFT_CHANNEL) + { + if (groupnumber <= 4) + sample *= scalefactor1; + else if (groupnumber <= 8) + sample *= scalefactor2; + else + sample *= scalefactor3; + filter1.input_sample(sample, subbandnumber); + } + else + { + if (groupnumber <= 4) + sample *= channel2_scalefactor1; + else if (groupnumber <= 8) + sample *= channel2_scalefactor2; + else + sample *= channel2_scalefactor3; + filter1.input_sample(sample, subbandnumber); + } + } + + if (++samplenumber == 3) + return true; + else + return false; + } + }; + + /** + * Class for layer II subbands in stereo mode. + */ + static class SubbandLayer2Stereo extends SubbandLayer2 + { + protected int channel2_allocation; + protected int channel2_scfsi; + protected float channel2_scalefactor1, channel2_scalefactor2, channel2_scalefactor3; + //protected boolean channel2_grouping; ???? Never used! + protected int[] channel2_codelength = {0}; + //protected float[][] channel2_groupingtable = {{0},{0}}; + protected float[] channel2_factor = {0}; + protected float[] channel2_samples; + protected float[] channel2_c = {0}; + protected float[] channel2_d = {0}; + + /** + * Constructor + */ + public SubbandLayer2Stereo(int subbandnumber) + { + super(subbandnumber); + channel2_samples = new float[3]; + } + + /** + * + */ + public void read_allocation (Bitstream stream, Header header, Crc16 crc) + { + int length = get_allocationlength(header); + allocation = stream.get_bits(length); + channel2_allocation = stream.get_bits(length); + if (crc != null) + { + crc.add_bits(allocation, length); + crc.add_bits(channel2_allocation, length); + } + } + + /** + * + */ + public void read_scalefactor_selection(Bitstream stream, Crc16 crc) + { + if (allocation != 0) + { + scfsi = stream.get_bits(2); + if (crc != null) + crc.add_bits(scfsi, 2); + } + if (channel2_allocation != 0) + { + channel2_scfsi = stream.get_bits(2); + if (crc != null) + crc.add_bits(channel2_scfsi, 2); + } + } + + /** + * + */ + public void read_scalefactor(Bitstream stream, Header header) + { + super.read_scalefactor(stream, header); + if (channel2_allocation != 0) + { + switch (channel2_scfsi) + { + case 0: + channel2_scalefactor1 = scalefactors[stream.get_bits(6)]; + channel2_scalefactor2 = scalefactors[stream.get_bits(6)]; + channel2_scalefactor3 = scalefactors[stream.get_bits(6)]; + break; + + case 1: + channel2_scalefactor1 = channel2_scalefactor2 = + scalefactors[stream.get_bits(6)]; + channel2_scalefactor3 = scalefactors[stream.get_bits(6)]; + break; + + case 2: + channel2_scalefactor1 = channel2_scalefactor2 = + channel2_scalefactor3 = scalefactors[stream.get_bits(6)]; + break; + + case 3: + channel2_scalefactor1 = scalefactors[stream.get_bits(6)]; + channel2_scalefactor2 = channel2_scalefactor3 = + scalefactors[stream.get_bits(6)]; + break; + } + prepare_sample_reading(header, channel2_allocation, 1, + channel2_factor, channel2_codelength, channel2_c, + channel2_d); + } + } + + /** + * + */ + public boolean read_sampledata (Bitstream stream) + { + boolean returnvalue = super.read_sampledata(stream); + + if (channel2_allocation != 0) + if (groupingtable[1] != null) + { + int samplecode = stream.get_bits(channel2_codelength[0]); + // create requantized samples: + samplecode += samplecode << 1; + /* + float[] target = channel2_samples; + float[] source = channel2_groupingtable[0]; + int tmp = 0; + int temp = 0; + target[tmp++] = source[samplecode + temp]; + temp++; + target[tmp++] = source[samplecode + temp]; + temp++; + target[tmp] = source[samplecode + temp]; + // memcpy (channel2_samples, channel2_groupingtable + samplecode, 3 * sizeof (real)); + */ + float[] target = channel2_samples; + float[] source = groupingtable[1]; + int tmp = 0; + int temp = samplecode; + target[tmp] = source[temp]; + temp++;tmp++; + target[tmp] = source[temp]; + temp++;tmp++; + target[tmp] = source[temp]; + + } + else + { + channel2_samples[0] = (float) ((stream.get_bits(channel2_codelength[0])) * + channel2_factor[0] - 1.0); + channel2_samples[1] = (float) ((stream.get_bits(channel2_codelength[0])) * + channel2_factor[0] - 1.0); + channel2_samples[2] = (float) ((stream.get_bits(channel2_codelength[0])) * + channel2_factor[0] - 1.0); + } + return returnvalue; + } + + /** + * + */ + public boolean put_next_sample(int channels, SynthesisFilter filter1, SynthesisFilter filter2) + { + boolean returnvalue = super.put_next_sample(channels, filter1, filter2); + if ((channel2_allocation != 0) && (channels != OutputChannels.LEFT_CHANNEL)) + { + float sample = channel2_samples[samplenumber - 1]; + + if (groupingtable[1] == null) + sample = (sample + channel2_d[0]) * channel2_c[0]; + + if (groupnumber <= 4) + sample *= channel2_scalefactor1; + else if (groupnumber <= 8) + sample *= channel2_scalefactor2; + else + sample *= channel2_scalefactor3; + if (channels == OutputChannels.BOTH_CHANNELS) + filter2.input_sample(sample, subbandnumber); + else + filter1.input_sample(sample, subbandnumber); + } + return returnvalue; + } + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/LayerIIIDecoder.java b/JLayer1.0.1/src/javazoom/jl/decoder/LayerIIIDecoder.java new file mode 100644 index 0000000..602badf --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/LayerIIIDecoder.java @@ -0,0 +1,2439 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * + * 18/06/01 Michael Scheerer, Fixed bugs which causes + * negative indexes in method huffmann_decode and in method + * dequanisize_sample. + * + * 16/07/01 Michael Scheerer, Catched a bug in method + * huffmann_decode, which causes an outOfIndexException. + * Cause : Indexnumber of 24 at SfBandIndex, + * which has only a length of 22. I have simply and dirty + * fixed the index to <= 22, because I'm not really be able + * to fix the bug. The Indexnumber is taken from the MP3 + * file and the origin Ma-Player with the same code works + * well. + * + * 02/19/99 Java Conversion by E.B, javalayer@javazoom.net + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * Class Implementing Layer 3 Decoder. + * + * @since 0.0 + */ +final class LayerIIIDecoder implements FrameDecoder +{ + final double d43 = (4.0/3.0); + + public int[] scalefac_buffer; + + // MDM: removed, as this wasn't being used. + //private float CheckSumOut1d = 0.0f; + private int CheckSumHuff = 0; + private int[] is_1d; + private float[][][] ro; + private float[][][] lr; + private float[] out_1d; + private float[][] prevblck; + private float[][] k; + private int[] nonzero; + private Bitstream stream; + private Header header; + private SynthesisFilter filter1, filter2; + private Obuffer buffer; + private int which_channels; + private BitReserve br; + private III_side_info_t si; + + private temporaire2[] III_scalefac_t; + private temporaire2[] scalefac; + // private III_scalefac_t scalefac; + + private int max_gr; + private int frame_start; + private int part2_start; + private int channels; + private int first_channel; + private int last_channel; + private int sfreq; + + + /** + * Constructor. + */ + // REVIEW: these constructor arguments should be moved to the + // decodeFrame() method, where possible, so that one + public LayerIIIDecoder(Bitstream stream0, Header header0, + SynthesisFilter filtera, SynthesisFilter filterb, + Obuffer buffer0, int which_ch0) + { + huffcodetab.inithuff(); + is_1d = new int[SBLIMIT*SSLIMIT+4]; + ro = new float[2][SBLIMIT][SSLIMIT]; + lr = new float[2][SBLIMIT][SSLIMIT]; + out_1d = new float[SBLIMIT*SSLIMIT]; + prevblck = new float[2][SBLIMIT*SSLIMIT]; + k = new float[2][SBLIMIT*SSLIMIT]; + nonzero = new int[2]; + + //III_scalefact_t + III_scalefac_t = new temporaire2[2]; + III_scalefac_t[0] = new temporaire2(); + III_scalefac_t[1] = new temporaire2(); + scalefac = III_scalefac_t; + // L3TABLE INIT + + sfBandIndex = new SBI[9]; // SZD: MPEG2.5 +3 indices + int[] l0 = {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}; + int[] s0 = {0,4,8,12,18,24,32,42,56,74,100,132,174,192}; + int[] l1 = {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576}; + int[] s1 = {0,4,8,12,18,26,36,48,62,80,104,136,180,192}; + int[] l2 = {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}; + int[] s2 = {0,4,8,12,18,26,36,48,62,80,104,134,174,192}; + + int[] l3 = {0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576}; + int[] s3 = {0,4,8,12,16,22,30,40,52,66,84,106,136,192}; + int[] l4 = {0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576}; + int[] s4 = {0,4,8,12,16,22,28,38,50,64,80,100,126,192}; + int[] l5 = {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576}; + int[] s5 = {0,4,8,12,16,22,30,42,58,78,104,138,180,192}; + // SZD: MPEG2.5 + int[] l6 = {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}; + int[] s6 = {0,4,8,12,18,26,36,48,62,80,104,134,174,192}; + int[] l7 = {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}; + int[] s7 = {0,4,8,12,18,26,36,48,62,80,104,134,174,192}; + int[] l8 = {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576}; + int[] s8 = {0,8,16,24,36,52,72,96,124,160,162,164,166,192}; + + sfBandIndex[0]= new SBI(l0,s0); + sfBandIndex[1]= new SBI(l1,s1); + sfBandIndex[2]= new SBI(l2,s2); + + sfBandIndex[3]= new SBI(l3,s3); + sfBandIndex[4]= new SBI(l4,s4); + sfBandIndex[5]= new SBI(l5,s5); + //SZD: MPEG2.5 + sfBandIndex[6]= new SBI(l6,s6); + sfBandIndex[7]= new SBI(l7,s7); + sfBandIndex[8]= new SBI(l8,s8); + // END OF L3TABLE INIT + + if(reorder_table == null) { // SZD: generate LUT + reorder_table = new int[9][]; + for(int i = 0; i < 9; i++) + reorder_table[i] = reorder(sfBandIndex[i].s); + } + + // Sftable + int[] ll0 = {0, 6, 11, 16, 21}; + int[] ss0 = {0, 6, 12}; + sftable = new Sftable(ll0,ss0); + // END OF Sftable + + // scalefac_buffer + scalefac_buffer = new int[54]; + // END OF scalefac_buffer + + stream = stream0; + header = header0; + filter1 = filtera; + filter2 = filterb; + buffer = buffer0; + which_channels = which_ch0; + + frame_start = 0; + channels = (header.mode() == Header.SINGLE_CHANNEL) ? 1 : 2; + max_gr = (header.version() == Header.MPEG1) ? 2 : 1; + + sfreq = header.sample_frequency() + + ((header.version() == Header.MPEG1) ? 3 : + (header.version() == Header.MPEG25_LSF) ? 6 : 0); // SZD + + if (channels == 2) + { + switch (which_channels) + { + case OutputChannels.LEFT_CHANNEL: + case OutputChannels.DOWNMIX_CHANNELS: + first_channel = last_channel = 0; + break; + + case OutputChannels.RIGHT_CHANNEL: + first_channel = last_channel = 1; + break; + + case OutputChannels.BOTH_CHANNELS: + default: + first_channel = 0; + last_channel = 1; + break; + } + } + else + { + first_channel = last_channel = 0; + } + + for(int ch=0;ch<2;ch++) + for (int j=0; j<576; j++) + prevblck[ch][j] = 0.0f; + + nonzero[0] = nonzero[1] = 576; + + br = new BitReserve(); + si = new III_side_info_t(); + } + + /** + * Notify decoder that a seek is being made. + */ + public void seek_notify() + { + frame_start = 0; + for(int ch=0;ch<2;ch++) + for (int j=0; j<576; j++) + prevblck[ch][j] = 0.0f; + br = new BitReserve(); + } + + public void decodeFrame() + { + decode(); + } + + /** + * Decode one frame, filling the buffer with the output samples. + */ + + // subband samples are buffered and passed to the + // SynthesisFilter in one go. + private float[] samples1 = new float[32]; + private float[] samples2 = new float[32]; + + public void decode() + { + int nSlots = header.slots(); + int flush_main; + int gr, ch, ss, sb, sb18; + int main_data_end; + int bytes_to_discard; + int i; + + get_side_info(); + + for (i=0; i>> 3; // of previous frame + + if ((flush_main = (br.hsstell() & 7)) != 0) { + br.hgetbits(8 - flush_main); + main_data_end++; + } + + bytes_to_discard = frame_start - main_data_end + - si.main_data_begin; + + frame_start += nSlots; + + if (bytes_to_discard < 0) + return; + + if (main_data_end > 4096) { + frame_start -= 4096; + br.rewindNbytes(4096); + } + + for (; bytes_to_discard > 0; bytes_to_discard--) + br.hgetbits(8); + + for (gr=0;gr>> 4) / 5 ; + new_slen[1] = (scalefac_comp >>> 4) % 5 ; + new_slen[2] = (scalefac_comp & 0xF) >>> 2 ; + new_slen[3] = (scalefac_comp & 3); + si.ch[ch].gr[gr].preflag = 0; + blocknumber = 0; + + } else if (scalefac_comp < 500) { + + new_slen[0] = ((scalefac_comp - 400) >>> 2) / 5 ; + new_slen[1] = ((scalefac_comp - 400) >>> 2) % 5 ; + new_slen[2] = (scalefac_comp - 400 ) & 3 ; + new_slen[3] = 0; + si.ch[ch].gr[gr].preflag = 0; + blocknumber = 1; + + } else if (scalefac_comp < 512) { + + new_slen[0] = (scalefac_comp - 500 ) / 3 ; + new_slen[1] = (scalefac_comp - 500) % 3 ; + new_slen[2] = 0; + new_slen[3] = 0; + si.ch[ch].gr[gr].preflag = 1; + blocknumber = 2; + } + } + + if((((mode_ext == 1) || (mode_ext == 3)) && (ch == 1))) + { + int_scalefac_comp = scalefac_comp >>> 1; + + if (int_scalefac_comp < 180) + { + new_slen[0] = int_scalefac_comp / 36 ; + new_slen[1] = (int_scalefac_comp % 36 ) / 6 ; + new_slen[2] = (int_scalefac_comp % 36) % 6; + new_slen[3] = 0; + si.ch[ch].gr[gr].preflag = 0; + blocknumber = 3; + } else if (int_scalefac_comp < 244) { + new_slen[0] = ((int_scalefac_comp - 180 ) & 0x3F) >>> 4 ; + new_slen[1] = ((int_scalefac_comp - 180) & 0xF) >>> 2 ; + new_slen[2] = (int_scalefac_comp - 180 ) & 3 ; + new_slen[3] = 0; + si.ch[ch].gr[gr].preflag = 0; + blocknumber = 4; + } else if (int_scalefac_comp < 255) { + new_slen[0] = (int_scalefac_comp - 244 ) / 3 ; + new_slen[1] = (int_scalefac_comp - 244 ) % 3 ; + new_slen[2] = 0 ; + new_slen[3] = 0; + si.ch[ch].gr[gr].preflag = 0; + blocknumber = 5; + } + } + + for (int x=0; x<45; x++) // why 45, not 54? + scalefac_buffer[x] = 0; + + m = 0; + for (int i=0; i<4;i++) { + for (int j = 0; j < nr_of_sfb_block[blocknumber][blocktypenumber][i]; + j++) + { + scalefac_buffer[m] = (new_slen[i] == 0) ? 0 : + br.hgetbits(new_slen[i]); + m++; + + } // for (unint32 j ... + } // for (uint32 i ... + } + + /** + * + */ + private void get_LSF_scale_factors(int ch, int gr) + { + int m = 0; + int sfb, window; + gr_info_s gr_info = (si.ch[ch].gr[gr]); + + get_LSF_scale_data(ch, gr); + + if ((gr_info.window_switching_flag != 0) && (gr_info.block_type == 2)) { + if (gr_info.mixed_block_flag != 0) { // MIXED + for (sfb = 0; sfb < 8; sfb++) + { + scalefac[ch].l[sfb] = scalefac_buffer[m]; + m++; + } + for (sfb = 3; sfb < 12; sfb++) { + for (window=0; window<3; window++) + { + scalefac[ch].s[window][sfb] = scalefac_buffer[m]; + m++; + } + } + for (window=0; window<3; window++) + scalefac[ch].s[window][12] = 0; + + } else { // SHORT + + for (sfb = 0; sfb < 12; sfb++) { + for (window=0; window<3; window++) + { + scalefac[ch].s[window][sfb] = scalefac_buffer[m]; + m++; + } + } + + for (window=0; window<3; window++) + scalefac[ch].s[window][12] = 0; + } + } else { // LONG types 0,1,3 + + for (sfb = 0; sfb < 21; sfb++) { + scalefac[ch].l[sfb] = scalefac_buffer[m]; + m++; + } + scalefac[ch].l[21] = 0; // Jeff + scalefac[ch].l[22] = 0; + } + } + + /** + * + */ + int[] x = {0}; + int[] y = {0}; + int[] v = {0}; + int[] w = {0}; + private void huffman_decode(int ch, int gr) + { + x[0] = 0; + y[0] = 0; + v[0] = 0; + w[0] = 0; + + int part2_3_end = part2_start + si.ch[ch].gr[gr].part2_3_length; + int num_bits; + int region1Start; + int region2Start; + int index; + + int buf, buf1; + + huffcodetab h; + + // Find region boundary for short block case + + if ( ((si.ch[ch].gr[gr].window_switching_flag) != 0) && + (si.ch[ch].gr[gr].block_type == 2) ) { + + // Region2. + //MS: Extrahandling for 8KHZ + region1Start = (sfreq == 8) ? 72 : 36; // sfb[9/3]*3=36 or in case 8KHZ = 72 + region2Start = 576; // No Region2 for short block case + + } else { // Find region boundary for long block case + + buf = si.ch[ch].gr[gr].region0_count + 1; + buf1 = buf + si.ch[ch].gr[gr].region1_count + 1; + + if(buf1 > sfBandIndex[sfreq].l.length - 1) buf1 = sfBandIndex[sfreq].l.length - 1; + + region1Start = sfBandIndex[sfreq].l[buf]; + region2Start = sfBandIndex[sfreq].l[buf1]; /* MI */ + } + + index = 0; + // Read bigvalues area + for (int i=0; i<(si.ch[ch].gr[gr].big_values<<1); i+=2) { + if (i= is_1d.length) System.out.println("i0="+i+"/"+(si.ch[ch].gr[gr].big_values<<1)+" Index="+index+" is_1d="+is_1d.length); + + is_1d[index++] = x[0]; + is_1d[index++] = y[0]; + + CheckSumHuff = CheckSumHuff + x[0] + y[0]; + // System.out.println("x = "+x[0]+" y = "+y[0]); + } + + // Read count1 area + h = huffcodetab.ht[si.ch[ch].gr[gr].count1table_select+32]; + num_bits = br.hsstell(); + + while ((num_bits < part2_3_end) && (index < 576)) { + + huffcodetab.huffman_decoder(h, x, y, v, w, br); + + is_1d[index++] = v[0]; + is_1d[index++] = w[0]; + is_1d[index++] = x[0]; + is_1d[index++] = y[0]; + CheckSumHuff = CheckSumHuff + v[0] + w[0] + x[0] + y[0]; + // System.out.println("v = "+v[0]+" w = "+w[0]); + // System.out.println("x = "+x[0]+" y = "+y[0]); + num_bits = br.hsstell(); + } + + if (num_bits > part2_3_end) { + br.rewindNbits(num_bits - part2_3_end); + index-=4; + } + + num_bits = br.hsstell(); + + // Dismiss stuffing bits + if (num_bits < part2_3_end) + br.hgetbits(part2_3_end - num_bits); + + // Zero out rest + + if (index < 576) + nonzero[ch] = index; + else + nonzero[ch] = 576; + + if (index < 0) index = 0; + + // may not be necessary + for (; index<576; index++) + is_1d[index] = 0; + } + + /** + * + */ + private void i_stereo_k_values(int is_pos, int io_type, int i) + { + if (is_pos == 0) { + k[0][i] = 1.0f; + k[1][i] = 1.0f; + } else if ((is_pos & 1) != 0) { + k[0][i] = io[io_type][(is_pos + 1) >>> 1]; + k[1][i] = 1.0f; + } else { + k[0][i] = 1.0f; + k[1][i] = io[io_type][is_pos >>> 1]; + } + } + + /** + * + */ + private void dequantize_sample(float xr[][], int ch, int gr) + { + gr_info_s gr_info = (si.ch[ch].gr[gr]); + int cb=0; + int next_cb_boundary; + int cb_begin = 0; + int cb_width = 0; + int index=0, t_index, j; + float g_gain; + float[][] xr_1d = xr; + + // choose correct scalefactor band per block type, initalize boundary + + if ((gr_info.window_switching_flag !=0 ) && (gr_info.block_type == 2) ) { + if (gr_info.mixed_block_flag != 0) + next_cb_boundary=sfBandIndex[sfreq].l[1]; // LONG blocks: 0,1,3 + else { + cb_width = sfBandIndex[sfreq].s[1]; + next_cb_boundary = (cb_width << 2) - cb_width; + cb_begin = 0; + } + } else { + next_cb_boundary=sfBandIndex[sfreq].l[1]; // LONG blocks: 0,1,3 + } + + // Compute overall (global) scaling. + + g_gain = (float) Math.pow(2.0 , (0.25 * (gr_info.global_gain - 210.0))); + + for (j=0; j 0) xr_1d[quotien][reste] = g_gain * t_43[abv]; + else + { + if (-abv < t_43.length) xr_1d[quotien][reste] = -g_gain * t_43[-abv]; + else xr_1d[quotien][reste] = -g_gain * (float)Math.pow(-abv, d43); + } + } + else + { + if (is_1d[j] > 0) xr_1d[quotien][reste] = g_gain * (float)Math.pow(abv, d43); + else xr_1d[quotien][reste] = -g_gain * (float)Math.pow(-abv, d43); + } + } + } + + // apply formula per block type + for (j=0; j= 36)) )) + { + + t_index = (index - cb_begin) / cb_width; + /* xr[sb][ss] *= pow(2.0, ((-2.0 * gr_info.subblock_gain[t_index]) + -(0.5 * (1.0 + gr_info.scalefac_scale) + * scalefac[ch].s[t_index][cb]))); */ + int idx = scalefac[ch].s[t_index][cb] + << gr_info.scalefac_scale; + idx += (gr_info.subblock_gain[t_index] << 2); + + xr_1d[quotien][reste] *= two_to_negative_half_pow[idx]; + + } else { // LONG block types 0,1,3 & 1st 2 subbands of switched blocks + /* xr[sb][ss] *= pow(2.0, -0.5 * (1.0+gr_info.scalefac_scale) + * (scalefac[ch].l[cb] + + gr_info.preflag * pretab[cb])); */ + int idx = scalefac[ch].l[cb]; + + if (gr_info.preflag != 0) + idx += pretab[cb]; + + idx = idx << gr_info.scalefac_scale; + xr_1d[quotien][reste] *= two_to_negative_half_pow[idx]; + } + index++; + } + + for (j=nonzero[ch]; j<576; j++) + { + // Modif E.B 02/22/99 + int reste = j % SSLIMIT; + int quotien = (int) ((j-reste)/SSLIMIT); + if(reste < 0) reste = 0; + if(quotien < 0) quotien = 0; + xr_1d[quotien][reste] = 0.0f; + } + + return; + } + + /** + * + */ + private void reorder(float xr[][], int ch, int gr) + { + gr_info_s gr_info = (si.ch[ch].gr[gr]); + int freq, freq3; + int index; + int sfb, sfb_start, sfb_lines; + int src_line, des_line; + float[][] xr_1d = xr; + + if ((gr_info.window_switching_flag !=0) && (gr_info.block_type == 2)) { + + for(index=0; index<576; index++) + out_1d[index] = 0.0f; + + if (gr_info.mixed_block_flag !=0 ) { + // NO REORDER FOR LOW 2 SUBBANDS + for (index = 0; index < 36; index++) + { + // Modif E.B 02/22/99 + int reste = index % SSLIMIT; + int quotien = (int) ((index-reste)/SSLIMIT); + out_1d[index] = xr_1d[quotien][reste]; + } + // REORDERING FOR REST SWITCHED SHORT + /*for( sfb=3,sfb_start=sfBandIndex[sfreq].s[3], + sfb_lines=sfBandIndex[sfreq].s[4] - sfb_start; + sfb < 13; sfb++,sfb_start = sfBandIndex[sfreq].s[sfb], + sfb_lines = sfBandIndex[sfreq].s[sfb+1] - sfb_start ) + {*/ + for( sfb=3; sfb < 13; sfb++) + { + //System.out.println("sfreq="+sfreq+" sfb="+sfb+" sfBandIndex="+sfBandIndex.length+" sfBandIndex[sfreq].s="+sfBandIndex[sfreq].s.length); + sfb_start = sfBandIndex[sfreq].s[sfb]; + sfb_lines = sfBandIndex[sfreq].s[sfb+1] - sfb_start; + + int sfb_start3 = (sfb_start << 2) - sfb_start; + + for(freq=0, freq3=0; freq=3; sfb-- ) { + i = sfBandIndex[sfreq].s[sfb]; + lines = sfBandIndex[sfreq].s[sfb+1] - i; + i = (i << 2) - i + (j+1) * lines - 1; + + while (lines > 0) { + if (ro[1][i/18][i%18] != 0.0f) { + // MDM: in java, array access is very slow. + // Is quicker to compute div and mod values. + //if (ro[1][ss_div[i]][ss_mod[i]] != 0.0f) { + sfbcnt = sfb; + sfb = -10; + lines = -10; + } + + lines--; + i--; + + } // while (lines > 0) + + } // for (sfb=12 ... + sfb = sfbcnt + 1; + + if (sfb > max_sfb) + max_sfb = sfb; + + while(sfb < 12) { + temp = sfBandIndex[sfreq].s[sfb]; + sb = sfBandIndex[sfreq].s[sfb+1] - temp; + i = (temp << 2) - temp + j * sb; + + for ( ; sb > 0; sb--) { + is_pos[i] = scalefac[1].s[j][sfb]; + if (is_pos[i] != 7) + if (lsf) + i_stereo_k_values(is_pos[i], io_type, i); + else + is_ratio[i] = TAN12[is_pos[i]]; + + i++; + } // for (; sb>0... + sfb++; + } // while (sfb < 12) + sfb = sfBandIndex[sfreq].s[10]; + sb = sfBandIndex[sfreq].s[11] - sfb; + sfb = (sfb << 2) - sfb + j * sb; + temp = sfBandIndex[sfreq].s[11]; + sb = sfBandIndex[sfreq].s[12] - temp; + i = (temp << 2) - temp + j * sb; + + for (; sb > 0; sb--) { + is_pos[i] = is_pos[sfb]; + + if (lsf) { + k[0][i] = k[0][sfb]; + k[1][i] = k[1][sfb]; + } else { + is_ratio[i] = is_ratio[sfb]; + } + i++; + } // for (; sb > 0 ... + } + if (max_sfb <= 3) { + i = 2; + ss = 17; + sb = -1; + while (i >= 0) { + if (ro[1][i][ss] != 0.0f) { + sb = (i<<4) + (i<<1) + ss; + i = -1; + } else { + ss--; + if (ss < 0) { + i--; + ss = 17; + } + } // if (ro ... + } // while (i>=0) + i = 0; + while (sfBandIndex[sfreq].l[i] <= sb) + i++; + sfb = i; + i = sfBandIndex[sfreq].l[i]; + for (; sfb<8; sfb++) { + sb = sfBandIndex[sfreq].l[sfb+1]-sfBandIndex[sfreq].l[sfb]; + for (; sb>0; sb--) { + is_pos[i] = scalefac[1].l[sfb]; + if (is_pos[i] != 7) + if (lsf) + i_stereo_k_values(is_pos[i], io_type, i); + else + is_ratio[i] = TAN12[is_pos[i]]; + i++; + } // for (; sb>0 ... + } // for (; sfb<8 ... + } // for (j=0 ... + } else { // if (gr_info.mixed_block_flag) + for (int j=0; j<3; j++) { + int sfbcnt; + sfbcnt = -1; + for( sfb=12; sfb >=0; sfb-- ) + { + temp = sfBandIndex[sfreq].s[sfb]; + lines = sfBandIndex[sfreq].s[sfb+1] - temp; + i = (temp << 2) - temp + (j+1) * lines - 1; + + while (lines > 0) { + if (ro[1][i/18][i%18] != 0.0f) { + // MDM: in java, array access is very slow. + // Is quicker to compute div and mod values. + //if (ro[1][ss_div[i]][ss_mod[i]] != 0.0f) { + sfbcnt = sfb; + sfb = -10; + lines = -10; + } + lines--; + i--; + } // while (lines > 0) */ + + } // for (sfb=12 ... + sfb = sfbcnt + 1; + while(sfb<12) { + temp = sfBandIndex[sfreq].s[sfb]; + sb = sfBandIndex[sfreq].s[sfb+1] - temp; + i = (temp << 2) - temp + j * sb; + for ( ; sb > 0; sb--) { + is_pos[i] = scalefac[1].s[j][sfb]; + if (is_pos[i] != 7) + if (lsf) + i_stereo_k_values(is_pos[i], io_type, i); + else + is_ratio[i] = TAN12[is_pos[i]]; + i++; + } // for (; sb>0 ... + sfb++; + } // while (sfb<12) + + temp = sfBandIndex[sfreq].s[10]; + temp2= sfBandIndex[sfreq].s[11]; + sb = temp2 - temp; + sfb = (temp << 2) - temp + j * sb; + sb = sfBandIndex[sfreq].s[12] - temp2; + i = (temp2 << 2) - temp2 + j * sb; + + for (; sb>0; sb--) { + is_pos[i] = is_pos[sfb]; + + if (lsf) { + k[0][i] = k[0][sfb]; + k[1][i] = k[1][sfb]; + } else { + is_ratio[i] = is_ratio[sfb]; + } + i++; + } // for (; sb>0 ... + } // for (sfb=12 + } // for (j=0 ... + } else { // if (gr_info.window_switching_flag ... + i = 31; + ss = 17; + sb = 0; + while (i >= 0) { + if (ro[1][i][ss] != 0.0f) { + sb = (i<<4) + (i<<1) + ss; + i = -1; + } else { + ss--; + if (ss < 0) { + i--; + ss = 17; + } + } + } + i = 0; + while (sfBandIndex[sfreq].l[i] <= sb) + i++; + + sfb = i; + i = sfBandIndex[sfreq].l[i]; + for (; sfb<21; sfb++) { + sb = sfBandIndex[sfreq].l[sfb+1] - sfBandIndex[sfreq].l[sfb]; + for (; sb > 0; sb--) { + is_pos[i] = scalefac[1].l[sfb]; + if (is_pos[i] != 7) + if (lsf) + i_stereo_k_values(is_pos[i], io_type, i); + else + is_ratio[i] = TAN12[is_pos[i]]; + i++; + } + } + sfb = sfBandIndex[sfreq].l[20]; + for (sb = 576 - sfBandIndex[sfreq].l[21]; (sb > 0) && (i<576); sb--) + { + is_pos[i] = is_pos[sfb]; // error here : i >=576 + + if (lsf) { + k[0][i] = k[0][sfb]; + k[1][i] = k[1][sfb]; + } else { + is_ratio[i] = is_ratio[sfb]; + } + i++; + } // if (gr_info.mixed_block_flag) + } // if (gr_info.window_switching_flag ... + } // if (i_stereo) + + i = 0; + for(sb=0;sb 32767.0f) ? 32767 : + ((sample < -32768.0f) ? -32768 : + (short) sample)); + } + + /** + * Write the samples to the file or directly to the audio hardware. + */ + public abstract void write_buffer(int val); + public abstract void close(); + + /** + * Clears all data in the buffer (for seeking). + */ + public abstract void clear_buffer(); + + /** + * Notify the buffer that the user has stopped the stream. + */ + public abstract void set_stop_flag(); +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/OutputChannels.java b/JLayer1.0.1/src/javazoom/jl/decoder/OutputChannels.java new file mode 100644 index 0000000..58c8310 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/OutputChannels.java @@ -0,0 +1,143 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 12/12/99 Initial implementation. mdm@techie.com. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + + +/** + * A Type-safe representation of the the supported output channel + * constants. + * + * This class is immutable and, hence, is thread safe. + * + * @author Mat McGowan 12/12/99 + * @since 0.0.7 + */ +public class OutputChannels +{ + /** + * Flag to indicate output should include both channels. + */ + public static final int BOTH_CHANNELS = 0; + + /** + * Flag to indicate output should include the left channel only. + */ + public static final int LEFT_CHANNEL = 1; + + /** + * Flag to indicate output should include the right channel only. + */ + public static final int RIGHT_CHANNEL = 2; + + /** + * Flag to indicate output is mono. + */ + public static final int DOWNMIX_CHANNELS = 3; + + + public static final OutputChannels LEFT = new OutputChannels(LEFT_CHANNEL); + public static final OutputChannels RIGHT = new OutputChannels(RIGHT_CHANNEL); + public static final OutputChannels BOTH = new OutputChannels(BOTH_CHANNELS); + public static final OutputChannels DOWNMIX = new OutputChannels(DOWNMIX_CHANNELS); + + + private /*final*/ int outputChannels; + + /** + * Creates an OutputChannels instance + * corresponding to the given channel code. + * + * @param code one of the OutputChannels channel code constants. + * + * @throws IllegalArgumentException if code is not a valid + * channel code. + */ + static public OutputChannels fromInt(int code) + { + switch (code) + { + case LEFT_CHANNEL: + return LEFT; + case RIGHT_CHANNEL: + return RIGHT; + case BOTH_CHANNELS: + return BOTH; + case DOWNMIX_CHANNELS: + return DOWNMIX; + default: + throw new IllegalArgumentException("Invalid channel code: "+code); + } + } + + private OutputChannels(int channels) + { + outputChannels = channels; + + if (channels<0 || channels>3) + throw new IllegalArgumentException("channels"); + } + + /** + * Retrieves the code representing the desired output channels. + * Will be one of LEFT_CHANNEL, RIGHT_CHANNEL, BOTH_CHANNELS + * or DOWNMIX_CHANNELS. + * + * @return the channel code represented by this instance. + */ + public int getChannelsOutputCode() + { + return outputChannels; + } + + /** + * Retrieves the number of output channels represented + * by this channel output type. + * + * @return The number of output channels for this channel output + * type. This will be 2 for BOTH_CHANNELS only, and 1 + * for all other types. + */ + public int getChannelCount() + { + int count = (outputChannels==BOTH_CHANNELS) ? 2 : 1; + return count; + } + + + public boolean equals(Object o) + { + boolean equals = false; + + if (o instanceof OutputChannels) + { + OutputChannels oc = (OutputChannels)o; + equals = (oc.outputChannels == outputChannels); + } + + return equals; + } + + public int hashCode() + { + return outputChannels; + } + +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/SampleBuffer.java b/JLayer1.0.1/src/javazoom/jl/decoder/SampleBuffer.java new file mode 100644 index 0000000..ba4bfa0 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/SampleBuffer.java @@ -0,0 +1,132 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * + * 12/12/99 Initial Version based on FileObuffer. mdm@techie.com. + * + * FileObuffer: + * 15/02/99 Java Conversion by E.B ,javalayer@javazoom.net + * + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * The SampleBuffer class implements an output buffer + * that provides storage for a fixed size block of samples. + */ +public class SampleBuffer extends Obuffer +{ + private short[] buffer; + private int[] bufferp; + private int channels; + private int frequency; + + /** + * Constructor + */ + public SampleBuffer(int sample_frequency, int number_of_channels) + { + buffer = new short[OBUFFERSIZE]; + bufferp = new int[MAXCHANNELS]; + channels = number_of_channels; + frequency = sample_frequency; + + for (int i = 0; i < number_of_channels; ++i) + bufferp[i] = (short)i; + + } + + public int getChannelCount() + { + return this.channels; + } + + public int getSampleFrequency() + { + return this.frequency; + } + + public short[] getBuffer() + { + return this.buffer; + } + + public int getBufferLength() + { + return bufferp[0]; + } + + /** + * Takes a 16 Bit PCM sample. + */ + public void append(int channel, short value) + { + buffer[bufferp[channel]] = value; + bufferp[channel] += channels; + } + + public void appendSamples(int channel, float[] f) + { + int pos = bufferp[channel]; + + short s; + float fs; + for (int i=0; i<32;) + { + fs = f[i++]; + fs = (fs>32767.0f ? 32767.0f + : (fs < -32767.0f ? -32767.0f : fs)); + + s = (short)fs; + buffer[pos] = s; + pos += channels; + } + + bufferp[channel] = pos; + } + + + /** + * Write the samples to the file (Random Acces). + */ + public void write_buffer(int val) + { + + //for (int i = 0; i < channels; ++i) + // bufferp[i] = (short)i; + + } + + public void close() + {} + + /** + * + */ + public void clear_buffer() + { + for (int i = 0; i < channels; ++i) + bufferp[i] = (short)i; + } + + /** + * + */ + public void set_stop_flag() + {} +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/Source.java b/JLayer1.0.1/src/javazoom/jl/decoder/Source.java new file mode 100644 index 0000000..9d6a5d7 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/Source.java @@ -0,0 +1,49 @@ +/* + * 11/19/04 1.0 moved to LGPL. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +import java.io.IOException; + +/** + * Work in progress. + * + * Class to describe a seekable data source. + * + */ +public interface Source +{ + + public static final long LENGTH_UNKNOWN = -1; + + public int read(byte[] b, int offs, int len) + throws IOException; + + + public boolean willReadBlock(); + + public boolean isSeekable(); + + public long length(); + + public long tell(); + + public long seek(long pos); + +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/SynthesisFilter.java b/JLayer1.0.1/src/javazoom/jl/decoder/SynthesisFilter.java new file mode 100644 index 0000000..581ab03 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/SynthesisFilter.java @@ -0,0 +1,1817 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * + * 04/01/00 Fixes for running under build 23xx Microsoft JVM. mdm. + * + * 19/12/99 Performance improvements to compute_pcm_samples(). + * Mat McGowan. mdm@techie.com. + * + * 16/02/99 Java Conversion by E.B , javalayer@javazoom.net + * + * @(#) synthesis_filter.h 1.8, last edit: 6/15/94 16:52:00 + * @(#) Copyright (C) 1993, 1994 Tobias Bading (bading@cs.tu-berlin.de) + * @(#) Berlin University of Technology + * + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ +package javazoom.jl.decoder; + +import java.io.IOException; + +/** + * A class for the synthesis filter bank. + * This class does a fast downsampling from 32, 44.1 or 48 kHz to 8 kHz, if ULAW is defined. + * Frequencies above 4 kHz are removed by ignoring higher subbands. + */ +final class SynthesisFilter +{ + private float[] v1; + private float[] v2; + private float[] actual_v; // v1 or v2 + private int actual_write_pos; // 0-15 + private float[] samples; // 32 new subband samples + private int channel; + private float scalefactor; + private float[] eq; + + /** + * Quality value for controlling CPU usage/quality tradeoff. + */ + /* + private int quality; + + private int v_inc; + + + + public static final int HIGH_QUALITY = 1; + public static final int MEDIUM_QUALITY = 2; + public static final int LOW_QUALITY = 4; + */ + + /** + * Contructor. + * The scalefactor scales the calculated float pcm samples to short values + * (raw pcm samples are in [-1.0, 1.0], if no violations occur). + */ + public SynthesisFilter(int channelnumber, float factor, float[] eq0) + { + if (d==null) + { + d = load_d(); + d16 = splitArray(d, 16); + } + + v1 = new float[512]; + v2 = new float[512]; + samples = new float[32]; + channel = channelnumber; + scalefactor = factor; + setEQ(eq); + //setQuality(HIGH_QUALITY); + + reset(); + } + + public void setEQ(float[] eq0) + { + this.eq = eq0; + if (eq==null) + { + eq = new float[32]; + for (int i=0; i<32; i++) + eq[i] = 1.0f; + } + if (eq.length<32) + { + throw new IllegalArgumentException("eq0"); + } + + } + + /* + private void setQuality(int quality0) + { + switch (quality0) + { + case HIGH_QUALITY: + case MEDIUM_QUALITY: + case LOW_QUALITY: + v_inc = 16 * quality0; + quality = quality0; + break; + default : + throw new IllegalArgumentException("Unknown quality value"); + } + } + + public int getQuality() + { + return quality; + } + */ + + /** + * Reset the synthesis filter. + */ + public void reset() + { + //float[] floatp; + // float[] floatp2; + + // initialize v1[] and v2[]: + //for (floatp = v1 + 512, floatp2 = v2 + 512; floatp > v1; ) + // *--floatp = *--floatp2 = 0.0; + for (int p=0;p<512;p++) + v1[p] = v2[p] = 0.0f; + + // initialize samples[]: + //for (floatp = samples + 32; floatp > samples; ) + // *--floatp = 0.0; + for (int p2=0;p2<32;p2++) + samples[p2] = 0.0f; + + actual_v = v1; + actual_write_pos = 15; + } + + + /** + * Inject Sample. + */ + public void input_sample(float sample, int subbandnumber) + { + samples[subbandnumber] = eq[subbandnumber]*sample; + } + + public void input_samples(float[] s) + { + for (int i=31; i>=0; i--) + { + samples[i] = s[i]*eq[i]; + } + } + + /** + * Compute new values via a fast cosine transform. + */ + private void compute_new_v() + { + // p is fully initialized from x1 + //float[] p = _p; + // pp is fully initialized from p + //float[] pp = _pp; + + //float[] new_v = _new_v; + + //float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure 3-A.2 in ISO DIS 11172-3 + //float[] p = new float[16]; + //float[] pp = new float[16]; + + /* + for (int i=31; i>=0; i--) + { + new_v[i] = 0.0f; + } + */ + + float new_v0, new_v1, new_v2, new_v3, new_v4, new_v5, new_v6, new_v7, new_v8, new_v9; + float new_v10, new_v11, new_v12, new_v13, new_v14, new_v15, new_v16, new_v17, new_v18, new_v19; + float new_v20, new_v21, new_v22, new_v23, new_v24, new_v25, new_v26, new_v27, new_v28, new_v29; + float new_v30, new_v31; + + new_v0 = new_v1 = new_v2 = new_v3 = new_v4 = new_v5 = new_v6 = new_v7 = new_v8 = new_v9 = + new_v10 = new_v11 = new_v12 = new_v13 = new_v14 = new_v15 = new_v16 = new_v17 = new_v18 = new_v19 = + new_v20 = new_v21 = new_v22 = new_v23 = new_v24 = new_v25 = new_v26 = new_v27 = new_v28 = new_v29 = + new_v30 = new_v31 = 0.0f; + + +// float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure 3-A.2 in ISO DIS 11172-3 +// float[] p = new float[16]; +// float[] pp = new float[16]; + + float[] s = samples; + + float s0 = s[0]; + float s1 = s[1]; + float s2 = s[2]; + float s3 = s[3]; + float s4 = s[4]; + float s5 = s[5]; + float s6 = s[6]; + float s7 = s[7]; + float s8 = s[8]; + float s9 = s[9]; + float s10 = s[10]; + float s11 = s[11]; + float s12 = s[12]; + float s13 = s[13]; + float s14 = s[14]; + float s15 = s[15]; + float s16 = s[16]; + float s17 = s[17]; + float s18 = s[18]; + float s19 = s[19]; + float s20 = s[20]; + float s21 = s[21]; + float s22 = s[22]; + float s23 = s[23]; + float s24 = s[24]; + float s25 = s[25]; + float s26 = s[26]; + float s27 = s[27]; + float s28 = s[28]; + float s29 = s[29]; + float s30 = s[30]; + float s31 = s[31]; + + float p0 = s0 + s31; + float p1 = s1 + s30; + float p2 = s2 + s29; + float p3 = s3 + s28; + float p4 = s4 + s27; + float p5 = s5 + s26; + float p6 = s6 + s25; + float p7 = s7 + s24; + float p8 = s8 + s23; + float p9 = s9 + s22; + float p10 = s10 + s21; + float p11 = s11 + s20; + float p12 = s12 + s19; + float p13 = s13 + s18; + float p14 = s14 + s17; + float p15 = s15 + s16; + + float pp0 = p0 + p15; + float pp1 = p1 + p14; + float pp2 = p2 + p13; + float pp3 = p3 + p12; + float pp4 = p4 + p11; + float pp5 = p5 + p10; + float pp6 = p6 + p9; + float pp7 = p7 + p8; + float pp8 = (p0 - p15) * cos1_32; + float pp9 = (p1 - p14) * cos3_32; + float pp10 = (p2 - p13) * cos5_32; + float pp11 = (p3 - p12) * cos7_32; + float pp12 = (p4 - p11) * cos9_32; + float pp13 = (p5 - p10) * cos11_32; + float pp14 = (p6 - p9) * cos13_32; + float pp15 = (p7 - p8) * cos15_32; + + p0 = pp0 + pp7; + p1 = pp1 + pp6; + p2 = pp2 + pp5; + p3 = pp3 + pp4; + p4 = (pp0 - pp7) * cos1_16; + p5 = (pp1 - pp6) * cos3_16; + p6 = (pp2 - pp5) * cos5_16; + p7 = (pp3 - pp4) * cos7_16; + p8 = pp8 + pp15; + p9 = pp9 + pp14; + p10 = pp10 + pp13; + p11 = pp11 + pp12; + p12 = (pp8 - pp15) * cos1_16; + p13 = (pp9 - pp14) * cos3_16; + p14 = (pp10 - pp13) * cos5_16; + p15 = (pp11 - pp12) * cos7_16; + + + pp0 = p0 + p3; + pp1 = p1 + p2; + pp2 = (p0 - p3) * cos1_8; + pp3 = (p1 - p2) * cos3_8; + pp4 = p4 + p7; + pp5 = p5 + p6; + pp6 = (p4 - p7) * cos1_8; + pp7 = (p5 - p6) * cos3_8; + pp8 = p8 + p11; + pp9 = p9 + p10; + pp10 = (p8 - p11) * cos1_8; + pp11 = (p9 - p10) * cos3_8; + pp12 = p12 + p15; + pp13 = p13 + p14; + pp14 = (p12 - p15) * cos1_8; + pp15 = (p13 - p14) * cos3_8; + + p0 = pp0 + pp1; + p1 = (pp0 - pp1) * cos1_4; + p2 = pp2 + pp3; + p3 = (pp2 - pp3) * cos1_4; + p4 = pp4 + pp5; + p5 = (pp4 - pp5) * cos1_4; + p6 = pp6 + pp7; + p7 = (pp6 - pp7) * cos1_4; + p8 = pp8 + pp9; + p9 = (pp8 - pp9) * cos1_4; + p10 = pp10 + pp11; + p11 = (pp10 - pp11) * cos1_4; + p12 = pp12 + pp13; + p13 = (pp12 - pp13) * cos1_4; + p14 = pp14 + pp15; + p15 = (pp14 - pp15) * cos1_4; + + // this is pretty insane coding + float tmp1; + new_v19/*36-17*/ = -(new_v4 = (new_v12 = p7) + p5) - p6; + new_v27/*44-17*/ = -p6 - p7 - p4; + new_v6 = (new_v10 = (new_v14 = p15) + p11) + p13; + new_v17/*34-17*/ = -(new_v2 = p15 + p13 + p9) - p14; + new_v21/*38-17*/ = (tmp1 = -p14 - p15 - p10 - p11) - p13; + new_v29/*46-17*/ = -p14 - p15 - p12 - p8; + new_v25/*42-17*/ = tmp1 - p12; + new_v31/*48-17*/ = -p0; + new_v0 = p1; + new_v23/*40-17*/ = -(new_v8 = p3) - p2; + + p0 = (s0 - s31) * cos1_64; + p1 = (s1 - s30) * cos3_64; + p2 = (s2 - s29) * cos5_64; + p3 = (s3 - s28) * cos7_64; + p4 = (s4 - s27) * cos9_64; + p5 = (s5 - s26) * cos11_64; + p6 = (s6 - s25) * cos13_64; + p7 = (s7 - s24) * cos15_64; + p8 = (s8 - s23) * cos17_64; + p9 = (s9 - s22) * cos19_64; + p10 = (s10 - s21) * cos21_64; + p11 = (s11 - s20) * cos23_64; + p12 = (s12 - s19) * cos25_64; + p13 = (s13 - s18) * cos27_64; + p14 = (s14 - s17) * cos29_64; + p15 = (s15 - s16) * cos31_64; + + + pp0 = p0 + p15; + pp1 = p1 + p14; + pp2 = p2 + p13; + pp3 = p3 + p12; + pp4 = p4 + p11; + pp5 = p5 + p10; + pp6 = p6 + p9; + pp7 = p7 + p8; + pp8 = (p0 - p15) * cos1_32; + pp9 = (p1 - p14) * cos3_32; + pp10 = (p2 - p13) * cos5_32; + pp11 = (p3 - p12) * cos7_32; + pp12 = (p4 - p11) * cos9_32; + pp13 = (p5 - p10) * cos11_32; + pp14 = (p6 - p9) * cos13_32; + pp15 = (p7 - p8) * cos15_32; + + + p0 = pp0 + pp7; + p1 = pp1 + pp6; + p2 = pp2 + pp5; + p3 = pp3 + pp4; + p4 = (pp0 - pp7) * cos1_16; + p5 = (pp1 - pp6) * cos3_16; + p6 = (pp2 - pp5) * cos5_16; + p7 = (pp3 - pp4) * cos7_16; + p8 = pp8 + pp15; + p9 = pp9 + pp14; + p10 = pp10 + pp13; + p11 = pp11 + pp12; + p12 = (pp8 - pp15) * cos1_16; + p13 = (pp9 - pp14) * cos3_16; + p14 = (pp10 - pp13) * cos5_16; + p15 = (pp11 - pp12) * cos7_16; + + + pp0 = p0 + p3; + pp1 = p1 + p2; + pp2 = (p0 - p3) * cos1_8; + pp3 = (p1 - p2) * cos3_8; + pp4 = p4 + p7; + pp5 = p5 + p6; + pp6 = (p4 - p7) * cos1_8; + pp7 = (p5 - p6) * cos3_8; + pp8 = p8 + p11; + pp9 = p9 + p10; + pp10 = (p8 - p11) * cos1_8; + pp11 = (p9 - p10) * cos3_8; + pp12 = p12 + p15; + pp13 = p13 + p14; + pp14 = (p12 - p15) * cos1_8; + pp15 = (p13 - p14) * cos3_8; + + + p0 = pp0 + pp1; + p1 = (pp0 - pp1) * cos1_4; + p2 = pp2 + pp3; + p3 = (pp2 - pp3) * cos1_4; + p4 = pp4 + pp5; + p5 = (pp4 - pp5) * cos1_4; + p6 = pp6 + pp7; + p7 = (pp6 - pp7) * cos1_4; + p8 = pp8 + pp9; + p9 = (pp8 - pp9) * cos1_4; + p10 = pp10 + pp11; + p11 = (pp10 - pp11) * cos1_4; + p12 = pp12 + pp13; + p13 = (pp12 - pp13) * cos1_4; + p14 = pp14 + pp15; + p15 = (pp14 - pp15) * cos1_4; + + + // manually doing something that a compiler should handle sucks + // coding like this is hard to read + float tmp2; + new_v5 = (new_v11 = (new_v13 = (new_v15 = p15) + p7) + p11) + + p5 + p13; + new_v7 = (new_v9 = p15 + p11 + p3) + p13; + new_v16/*33-17*/ = -(new_v1 = (tmp1 = p13 + p15 + p9) + p1) - p14; + new_v18/*35-17*/ = -(new_v3 = tmp1 + p5 + p7) - p6 - p14; + + new_v22/*39-17*/ = (tmp1 = -p10 - p11 - p14 - p15) + - p13 - p2 - p3; + new_v20/*37-17*/ = tmp1 - p13 - p5 - p6 - p7; + new_v24/*41-17*/ = tmp1 - p12 - p2 - p3; + new_v26/*43-17*/ = tmp1 - p12 - (tmp2 = p4 + p6 + p7); + new_v30/*47-17*/ = (tmp1 = -p8 - p12 - p14 - p15) - p0; + new_v28/*45-17*/ = tmp1 - tmp2; + + // insert V[0-15] (== new_v[0-15]) into actual v: + // float[] x2 = actual_v + actual_write_pos; + float dest[] = actual_v; + + int pos = actual_write_pos; + + dest[0 + pos] = new_v0; + dest[16 + pos] = new_v1; + dest[32 + pos] = new_v2; + dest[48 + pos] = new_v3; + dest[64 + pos] = new_v4; + dest[80 + pos] = new_v5; + dest[96 + pos] = new_v6; + dest[112 + pos] = new_v7; + dest[128 + pos] = new_v8; + dest[144 + pos] = new_v9; + dest[160 + pos] = new_v10; + dest[176 + pos] = new_v11; + dest[192 + pos] = new_v12; + dest[208 + pos] = new_v13; + dest[224 + pos] = new_v14; + dest[240 + pos] = new_v15; + + // V[16] is always 0.0: + dest[256 + pos] = 0.0f; + + // insert V[17-31] (== -new_v[15-1]) into actual v: + dest[272 + pos] = -new_v15; + dest[288 + pos] = -new_v14; + dest[304 + pos] = -new_v13; + dest[320 + pos] = -new_v12; + dest[336 + pos] = -new_v11; + dest[352 + pos] = -new_v10; + dest[368 + pos] = -new_v9; + dest[384 + pos] = -new_v8; + dest[400 + pos] = -new_v7; + dest[416 + pos] = -new_v6; + dest[432 + pos] = -new_v5; + dest[448 + pos] = -new_v4; + dest[464 + pos] = -new_v3; + dest[480 + pos] = -new_v2; + dest[496 + pos] = -new_v1; + + // insert V[32] (== -new_v[0]) into other v: + dest = (actual_v==v1) ? v2 : v1; + + dest[0 + pos] = -new_v0; + // insert V[33-48] (== new_v[16-31]) into other v: + dest[16 + pos] = new_v16; + dest[32 + pos] = new_v17; + dest[48 + pos] = new_v18; + dest[64 + pos] = new_v19; + dest[80 + pos] = new_v20; + dest[96 + pos] = new_v21; + dest[112 + pos] = new_v22; + dest[128 + pos] = new_v23; + dest[144 + pos] = new_v24; + dest[160 + pos] = new_v25; + dest[176 + pos] = new_v26; + dest[192 + pos] = new_v27; + dest[208 + pos] = new_v28; + dest[224 + pos] = new_v29; + dest[240 + pos] = new_v30; + dest[256 + pos] = new_v31; + + // insert V[49-63] (== new_v[30-16]) into other v: + dest[272 + pos] = new_v30; + dest[288 + pos] = new_v29; + dest[304 + pos] = new_v28; + dest[320 + pos] = new_v27; + dest[336 + pos] = new_v26; + dest[352 + pos] = new_v25; + dest[368 + pos] = new_v24; + dest[384 + pos] = new_v23; + dest[400 + pos] = new_v22; + dest[416 + pos] = new_v21; + dest[432 + pos] = new_v20; + dest[448 + pos] = new_v19; + dest[464 + pos] = new_v18; + dest[480 + pos] = new_v17; + dest[496 + pos] = new_v16; +/* + } + else + { + v1[0 + actual_write_pos] = -new_v0; + // insert V[33-48] (== new_v[16-31]) into other v: + v1[16 + actual_write_pos] = new_v16; + v1[32 + actual_write_pos] = new_v17; + v1[48 + actual_write_pos] = new_v18; + v1[64 + actual_write_pos] = new_v19; + v1[80 + actual_write_pos] = new_v20; + v1[96 + actual_write_pos] = new_v21; + v1[112 + actual_write_pos] = new_v22; + v1[128 + actual_write_pos] = new_v23; + v1[144 + actual_write_pos] = new_v24; + v1[160 + actual_write_pos] = new_v25; + v1[176 + actual_write_pos] = new_v26; + v1[192 + actual_write_pos] = new_v27; + v1[208 + actual_write_pos] = new_v28; + v1[224 + actual_write_pos] = new_v29; + v1[240 + actual_write_pos] = new_v30; + v1[256 + actual_write_pos] = new_v31; + + // insert V[49-63] (== new_v[30-16]) into other v: + v1[272 + actual_write_pos] = new_v30; + v1[288 + actual_write_pos] = new_v29; + v1[304 + actual_write_pos] = new_v28; + v1[320 + actual_write_pos] = new_v27; + v1[336 + actual_write_pos] = new_v26; + v1[352 + actual_write_pos] = new_v25; + v1[368 + actual_write_pos] = new_v24; + v1[384 + actual_write_pos] = new_v23; + v1[400 + actual_write_pos] = new_v22; + v1[416 + actual_write_pos] = new_v21; + v1[432 + actual_write_pos] = new_v20; + v1[448 + actual_write_pos] = new_v19; + v1[464 + actual_write_pos] = new_v18; + v1[480 + actual_write_pos] = new_v17; + v1[496 + actual_write_pos] = new_v16; + } +*/ + } + + /** + * Compute new values via a fast cosine transform. + */ + private void compute_new_v_old() + { + // p is fully initialized from x1 + //float[] p = _p; + // pp is fully initialized from p + //float[] pp = _pp; + + //float[] new_v = _new_v; + + float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure 3-A.2 in ISO DIS 11172-3 + float[] p = new float[16]; + float[] pp = new float[16]; + + + for (int i=31; i>=0; i--) + { + new_v[i] = 0.0f; + } + +// float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure 3-A.2 in ISO DIS 11172-3 +// float[] p = new float[16]; +// float[] pp = new float[16]; + + float[] x1 = samples; + + p[0] = x1[0] + x1[31]; + p[1] = x1[1] + x1[30]; + p[2] = x1[2] + x1[29]; + p[3] = x1[3] + x1[28]; + p[4] = x1[4] + x1[27]; + p[5] = x1[5] + x1[26]; + p[6] = x1[6] + x1[25]; + p[7] = x1[7] + x1[24]; + p[8] = x1[8] + x1[23]; + p[9] = x1[9] + x1[22]; + p[10] = x1[10] + x1[21]; + p[11] = x1[11] + x1[20]; + p[12] = x1[12] + x1[19]; + p[13] = x1[13] + x1[18]; + p[14] = x1[14] + x1[17]; + p[15] = x1[15] + x1[16]; + + pp[0] = p[0] + p[15]; + pp[1] = p[1] + p[14]; + pp[2] = p[2] + p[13]; + pp[3] = p[3] + p[12]; + pp[4] = p[4] + p[11]; + pp[5] = p[5] + p[10]; + pp[6] = p[6] + p[9]; + pp[7] = p[7] + p[8]; + pp[8] = (p[0] - p[15]) * cos1_32; + pp[9] = (p[1] - p[14]) * cos3_32; + pp[10] = (p[2] - p[13]) * cos5_32; + pp[11] = (p[3] - p[12]) * cos7_32; + pp[12] = (p[4] - p[11]) * cos9_32; + pp[13] = (p[5] - p[10]) * cos11_32; + pp[14] = (p[6] - p[9]) * cos13_32; + pp[15] = (p[7] - p[8]) * cos15_32; + + p[0] = pp[0] + pp[7]; + p[1] = pp[1] + pp[6]; + p[2] = pp[2] + pp[5]; + p[3] = pp[3] + pp[4]; + p[4] = (pp[0] - pp[7]) * cos1_16; + p[5] = (pp[1] - pp[6]) * cos3_16; + p[6] = (pp[2] - pp[5]) * cos5_16; + p[7] = (pp[3] - pp[4]) * cos7_16; + p[8] = pp[8] + pp[15]; + p[9] = pp[9] + pp[14]; + p[10] = pp[10] + pp[13]; + p[11] = pp[11] + pp[12]; + p[12] = (pp[8] - pp[15]) * cos1_16; + p[13] = (pp[9] - pp[14]) * cos3_16; + p[14] = (pp[10] - pp[13]) * cos5_16; + p[15] = (pp[11] - pp[12]) * cos7_16; + + + pp[0] = p[0] + p[3]; + pp[1] = p[1] + p[2]; + pp[2] = (p[0] - p[3]) * cos1_8; + pp[3] = (p[1] - p[2]) * cos3_8; + pp[4] = p[4] + p[7]; + pp[5] = p[5] + p[6]; + pp[6] = (p[4] - p[7]) * cos1_8; + pp[7] = (p[5] - p[6]) * cos3_8; + pp[8] = p[8] + p[11]; + pp[9] = p[9] + p[10]; + pp[10] = (p[8] - p[11]) * cos1_8; + pp[11] = (p[9] - p[10]) * cos3_8; + pp[12] = p[12] + p[15]; + pp[13] = p[13] + p[14]; + pp[14] = (p[12] - p[15]) * cos1_8; + pp[15] = (p[13] - p[14]) * cos3_8; + + p[0] = pp[0] + pp[1]; + p[1] = (pp[0] - pp[1]) * cos1_4; + p[2] = pp[2] + pp[3]; + p[3] = (pp[2] - pp[3]) * cos1_4; + p[4] = pp[4] + pp[5]; + p[5] = (pp[4] - pp[5]) * cos1_4; + p[6] = pp[6] + pp[7]; + p[7] = (pp[6] - pp[7]) * cos1_4; + p[8] = pp[8] + pp[9]; + p[9] = (pp[8] - pp[9]) * cos1_4; + p[10] = pp[10] + pp[11]; + p[11] = (pp[10] - pp[11]) * cos1_4; + p[12] = pp[12] + pp[13]; + p[13] = (pp[12] - pp[13]) * cos1_4; + p[14] = pp[14] + pp[15]; + p[15] = (pp[14] - pp[15]) * cos1_4; + + // this is pretty insane coding + float tmp1; + new_v[36-17] = -(new_v[4] = (new_v[12] = p[7]) + p[5]) - p[6]; + new_v[44-17] = -p[6] - p[7] - p[4]; + new_v[6] = (new_v[10] = (new_v[14] = p[15]) + p[11]) + p[13]; + new_v[34-17] = -(new_v[2] = p[15] + p[13] + p[9]) - p[14]; + new_v[38-17] = (tmp1 = -p[14] - p[15] - p[10] - p[11]) - p[13]; + new_v[46-17] = -p[14] - p[15] - p[12] - p[8]; + new_v[42-17] = tmp1 - p[12]; + new_v[48-17] = -p[0]; + new_v[0] = p[1]; + new_v[40-17] = -(new_v[8] = p[3]) - p[2]; + + p[0] = (x1[0] - x1[31]) * cos1_64; + p[1] = (x1[1] - x1[30]) * cos3_64; + p[2] = (x1[2] - x1[29]) * cos5_64; + p[3] = (x1[3] - x1[28]) * cos7_64; + p[4] = (x1[4] - x1[27]) * cos9_64; + p[5] = (x1[5] - x1[26]) * cos11_64; + p[6] = (x1[6] - x1[25]) * cos13_64; + p[7] = (x1[7] - x1[24]) * cos15_64; + p[8] = (x1[8] - x1[23]) * cos17_64; + p[9] = (x1[9] - x1[22]) * cos19_64; + p[10] = (x1[10] - x1[21]) * cos21_64; + p[11] = (x1[11] - x1[20]) * cos23_64; + p[12] = (x1[12] - x1[19]) * cos25_64; + p[13] = (x1[13] - x1[18]) * cos27_64; + p[14] = (x1[14] - x1[17]) * cos29_64; + p[15] = (x1[15] - x1[16]) * cos31_64; + + + pp[0] = p[0] + p[15]; + pp[1] = p[1] + p[14]; + pp[2] = p[2] + p[13]; + pp[3] = p[3] + p[12]; + pp[4] = p[4] + p[11]; + pp[5] = p[5] + p[10]; + pp[6] = p[6] + p[9]; + pp[7] = p[7] + p[8]; + pp[8] = (p[0] - p[15]) * cos1_32; + pp[9] = (p[1] - p[14]) * cos3_32; + pp[10] = (p[2] - p[13]) * cos5_32; + pp[11] = (p[3] - p[12]) * cos7_32; + pp[12] = (p[4] - p[11]) * cos9_32; + pp[13] = (p[5] - p[10]) * cos11_32; + pp[14] = (p[6] - p[9]) * cos13_32; + pp[15] = (p[7] - p[8]) * cos15_32; + + + p[0] = pp[0] + pp[7]; + p[1] = pp[1] + pp[6]; + p[2] = pp[2] + pp[5]; + p[3] = pp[3] + pp[4]; + p[4] = (pp[0] - pp[7]) * cos1_16; + p[5] = (pp[1] - pp[6]) * cos3_16; + p[6] = (pp[2] - pp[5]) * cos5_16; + p[7] = (pp[3] - pp[4]) * cos7_16; + p[8] = pp[8] + pp[15]; + p[9] = pp[9] + pp[14]; + p[10] = pp[10] + pp[13]; + p[11] = pp[11] + pp[12]; + p[12] = (pp[8] - pp[15]) * cos1_16; + p[13] = (pp[9] - pp[14]) * cos3_16; + p[14] = (pp[10] - pp[13]) * cos5_16; + p[15] = (pp[11] - pp[12]) * cos7_16; + + + pp[0] = p[0] + p[3]; + pp[1] = p[1] + p[2]; + pp[2] = (p[0] - p[3]) * cos1_8; + pp[3] = (p[1] - p[2]) * cos3_8; + pp[4] = p[4] + p[7]; + pp[5] = p[5] + p[6]; + pp[6] = (p[4] - p[7]) * cos1_8; + pp[7] = (p[5] - p[6]) * cos3_8; + pp[8] = p[8] + p[11]; + pp[9] = p[9] + p[10]; + pp[10] = (p[8] - p[11]) * cos1_8; + pp[11] = (p[9] - p[10]) * cos3_8; + pp[12] = p[12] + p[15]; + pp[13] = p[13] + p[14]; + pp[14] = (p[12] - p[15]) * cos1_8; + pp[15] = (p[13] - p[14]) * cos3_8; + + + p[0] = pp[0] + pp[1]; + p[1] = (pp[0] - pp[1]) * cos1_4; + p[2] = pp[2] + pp[3]; + p[3] = (pp[2] - pp[3]) * cos1_4; + p[4] = pp[4] + pp[5]; + p[5] = (pp[4] - pp[5]) * cos1_4; + p[6] = pp[6] + pp[7]; + p[7] = (pp[6] - pp[7]) * cos1_4; + p[8] = pp[8] + pp[9]; + p[9] = (pp[8] - pp[9]) * cos1_4; + p[10] = pp[10] + pp[11]; + p[11] = (pp[10] - pp[11]) * cos1_4; + p[12] = pp[12] + pp[13]; + p[13] = (pp[12] - pp[13]) * cos1_4; + p[14] = pp[14] + pp[15]; + p[15] = (pp[14] - pp[15]) * cos1_4; + + + // manually doing something that a compiler should handle sucks + // coding like this is hard to read + float tmp2; + new_v[5] = (new_v[11] = (new_v[13] = (new_v[15] = p[15]) + p[7]) + p[11]) + + p[5] + p[13]; + new_v[7] = (new_v[9] = p[15] + p[11] + p[3]) + p[13]; + new_v[33-17] = -(new_v[1] = (tmp1 = p[13] + p[15] + p[9]) + p[1]) - p[14]; + new_v[35-17] = -(new_v[3] = tmp1 + p[5] + p[7]) - p[6] - p[14]; + + new_v[39-17] = (tmp1 = -p[10] - p[11] - p[14] - p[15]) + - p[13] - p[2] - p[3]; + new_v[37-17] = tmp1 - p[13] - p[5] - p[6] - p[7]; + new_v[41-17] = tmp1 - p[12] - p[2] - p[3]; + new_v[43-17] = tmp1 - p[12] - (tmp2 = p[4] + p[6] + p[7]); + new_v[47-17] = (tmp1 = -p[8] - p[12] - p[14] - p[15]) - p[0]; + new_v[45-17] = tmp1 - tmp2; + + // insert V[0-15] (== new_v[0-15]) into actual v: + x1 = new_v; + // float[] x2 = actual_v + actual_write_pos; + float[] dest = actual_v; + + dest[0 + actual_write_pos] = x1[0]; + dest[16 + actual_write_pos] = x1[1]; + dest[32 + actual_write_pos] = x1[2]; + dest[48 + actual_write_pos] = x1[3]; + dest[64 + actual_write_pos] = x1[4]; + dest[80 + actual_write_pos] = x1[5]; + dest[96 + actual_write_pos] = x1[6]; + dest[112 + actual_write_pos] = x1[7]; + dest[128 + actual_write_pos] = x1[8]; + dest[144 + actual_write_pos] = x1[9]; + dest[160 + actual_write_pos] = x1[10]; + dest[176 + actual_write_pos] = x1[11]; + dest[192 + actual_write_pos] = x1[12]; + dest[208 + actual_write_pos] = x1[13]; + dest[224 + actual_write_pos] = x1[14]; + dest[240 + actual_write_pos] = x1[15]; + + // V[16] is always 0.0: + dest[256 + actual_write_pos] = 0.0f; + + // insert V[17-31] (== -new_v[15-1]) into actual v: + dest[272 + actual_write_pos] = -x1[15]; + dest[288 + actual_write_pos] = -x1[14]; + dest[304 + actual_write_pos] = -x1[13]; + dest[320 + actual_write_pos] = -x1[12]; + dest[336 + actual_write_pos] = -x1[11]; + dest[352 + actual_write_pos] = -x1[10]; + dest[368 + actual_write_pos] = -x1[9]; + dest[384 + actual_write_pos] = -x1[8]; + dest[400 + actual_write_pos] = -x1[7]; + dest[416 + actual_write_pos] = -x1[6]; + dest[432 + actual_write_pos] = -x1[5]; + dest[448 + actual_write_pos] = -x1[4]; + dest[464 + actual_write_pos] = -x1[3]; + dest[480 + actual_write_pos] = -x1[2]; + dest[496 + actual_write_pos] = -x1[1]; + + // insert V[32] (== -new_v[0]) into other v: + + } + + /** + * Compute PCM Samples. + */ + + private float[] _tmpOut = new float[32]; + + + private void compute_pcm_samples0(Obuffer buffer) + { + final float[] vp = actual_v; + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + float pcm_sample; + final float[] dp = d16[i]; + pcm_sample = (float)(((vp[0 + dvp] * dp[0]) + + (vp[15 + dvp] * dp[1]) + + (vp[14 + dvp] * dp[2]) + + (vp[13 + dvp] * dp[3]) + + (vp[12 + dvp] * dp[4]) + + (vp[11 + dvp] * dp[5]) + + (vp[10 + dvp] * dp[6]) + + (vp[9 + dvp] * dp[7]) + + (vp[8 + dvp] * dp[8]) + + (vp[7 + dvp] * dp[9]) + + (vp[6 + dvp] * dp[10]) + + (vp[5 + dvp] * dp[11]) + + (vp[4 + dvp] * dp[12]) + + (vp[3 + dvp] * dp[13]) + + (vp[2 + dvp] * dp[14]) + + (vp[1 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + + private void compute_pcm_samples1(Obuffer buffer) + { + final float[] vp = actual_v; + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[1 + dvp] * dp[0]) + + (vp[0 + dvp] * dp[1]) + + (vp[15 + dvp] * dp[2]) + + (vp[14 + dvp] * dp[3]) + + (vp[13 + dvp] * dp[4]) + + (vp[12 + dvp] * dp[5]) + + (vp[11 + dvp] * dp[6]) + + (vp[10 + dvp] * dp[7]) + + (vp[9 + dvp] * dp[8]) + + (vp[8 + dvp] * dp[9]) + + (vp[7 + dvp] * dp[10]) + + (vp[6 + dvp] * dp[11]) + + (vp[5 + dvp] * dp[12]) + + (vp[4 + dvp] * dp[13]) + + (vp[3 + dvp] * dp[14]) + + (vp[2 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + private void compute_pcm_samples2(Obuffer buffer) + { + final float[] vp = actual_v; + + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[2 + dvp] * dp[0]) + + (vp[1 + dvp] * dp[1]) + + (vp[0 + dvp] * dp[2]) + + (vp[15 + dvp] * dp[3]) + + (vp[14 + dvp] * dp[4]) + + (vp[13 + dvp] * dp[5]) + + (vp[12 + dvp] * dp[6]) + + (vp[11 + dvp] * dp[7]) + + (vp[10 + dvp] * dp[8]) + + (vp[9 + dvp] * dp[9]) + + (vp[8 + dvp] * dp[10]) + + (vp[7 + dvp] * dp[11]) + + (vp[6 + dvp] * dp[12]) + + (vp[5 + dvp] * dp[13]) + + (vp[4 + dvp] * dp[14]) + + (vp[3 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + + private void compute_pcm_samples3(Obuffer buffer) + { + final float[] vp = actual_v; + + int idx = 0; + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[3 + dvp] * dp[0]) + + (vp[2 + dvp] * dp[1]) + + (vp[1 + dvp] * dp[2]) + + (vp[0 + dvp] * dp[3]) + + (vp[15 + dvp] * dp[4]) + + (vp[14 + dvp] * dp[5]) + + (vp[13 + dvp] * dp[6]) + + (vp[12 + dvp] * dp[7]) + + (vp[11 + dvp] * dp[8]) + + (vp[10 + dvp] * dp[9]) + + (vp[9 + dvp] * dp[10]) + + (vp[8 + dvp] * dp[11]) + + (vp[7 + dvp] * dp[12]) + + (vp[6 + dvp] * dp[13]) + + (vp[5 + dvp] * dp[14]) + + (vp[4 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + + private void compute_pcm_samples4(Obuffer buffer) + { + final float[] vp = actual_v; + + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[4 + dvp] * dp[0]) + + (vp[3 + dvp] * dp[1]) + + (vp[2 + dvp] * dp[2]) + + (vp[1 + dvp] * dp[3]) + + (vp[0 + dvp] * dp[4]) + + (vp[15 + dvp] * dp[5]) + + (vp[14 + dvp] * dp[6]) + + (vp[13 + dvp] * dp[7]) + + (vp[12 + dvp] * dp[8]) + + (vp[11 + dvp] * dp[9]) + + (vp[10 + dvp] * dp[10]) + + (vp[9 + dvp] * dp[11]) + + (vp[8 + dvp] * dp[12]) + + (vp[7 + dvp] * dp[13]) + + (vp[6 + dvp] * dp[14]) + + (vp[5 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + + private void compute_pcm_samples5(Obuffer buffer) + { + final float[] vp = actual_v; + + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[5 + dvp] * dp[0]) + + (vp[4 + dvp] * dp[1]) + + (vp[3 + dvp] * dp[2]) + + (vp[2 + dvp] * dp[3]) + + (vp[1 + dvp] * dp[4]) + + (vp[0 + dvp] * dp[5]) + + (vp[15 + dvp] * dp[6]) + + (vp[14 + dvp] * dp[7]) + + (vp[13 + dvp] * dp[8]) + + (vp[12 + dvp] * dp[9]) + + (vp[11 + dvp] * dp[10]) + + (vp[10 + dvp] * dp[11]) + + (vp[9 + dvp] * dp[12]) + + (vp[8 + dvp] * dp[13]) + + (vp[7 + dvp] * dp[14]) + + (vp[6 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + + private void compute_pcm_samples6(Obuffer buffer) + { + final float[] vp = actual_v; + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[6 + dvp] * dp[0]) + + (vp[5 + dvp] * dp[1]) + + (vp[4 + dvp] * dp[2]) + + (vp[3 + dvp] * dp[3]) + + (vp[2 + dvp] * dp[4]) + + (vp[1 + dvp] * dp[5]) + + (vp[0 + dvp] * dp[6]) + + (vp[15 + dvp] * dp[7]) + + (vp[14 + dvp] * dp[8]) + + (vp[13 + dvp] * dp[9]) + + (vp[12 + dvp] * dp[10]) + + (vp[11 + dvp] * dp[11]) + + (vp[10 + dvp] * dp[12]) + + (vp[9 + dvp] * dp[13]) + + (vp[8 + dvp] * dp[14]) + + (vp[7 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + + private void compute_pcm_samples7(Obuffer buffer) + { + final float[] vp = actual_v; + + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[7 + dvp] * dp[0]) + + (vp[6 + dvp] * dp[1]) + + (vp[5 + dvp] * dp[2]) + + (vp[4 + dvp] * dp[3]) + + (vp[3 + dvp] * dp[4]) + + (vp[2 + dvp] * dp[5]) + + (vp[1 + dvp] * dp[6]) + + (vp[0 + dvp] * dp[7]) + + (vp[15 + dvp] * dp[8]) + + (vp[14 + dvp] * dp[9]) + + (vp[13 + dvp] * dp[10]) + + (vp[12 + dvp] * dp[11]) + + (vp[11 + dvp] * dp[12]) + + (vp[10 + dvp] * dp[13]) + + (vp[9 + dvp] * dp[14]) + + (vp[8 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + private void compute_pcm_samples8(Obuffer buffer) + { + final float[] vp = actual_v; + + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[8 + dvp] * dp[0]) + + (vp[7 + dvp] * dp[1]) + + (vp[6 + dvp] * dp[2]) + + (vp[5 + dvp] * dp[3]) + + (vp[4 + dvp] * dp[4]) + + (vp[3 + dvp] * dp[5]) + + (vp[2 + dvp] * dp[6]) + + (vp[1 + dvp] * dp[7]) + + (vp[0 + dvp] * dp[8]) + + (vp[15 + dvp] * dp[9]) + + (vp[14 + dvp] * dp[10]) + + (vp[13 + dvp] * dp[11]) + + (vp[12 + dvp] * dp[12]) + + (vp[11 + dvp] * dp[13]) + + (vp[10 + dvp] * dp[14]) + + (vp[9 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + + private void compute_pcm_samples9(Obuffer buffer) + { + final float[] vp = actual_v; + + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[9 + dvp] * dp[0]) + + (vp[8 + dvp] * dp[1]) + + (vp[7 + dvp] * dp[2]) + + (vp[6 + dvp] * dp[3]) + + (vp[5 + dvp] * dp[4]) + + (vp[4 + dvp] * dp[5]) + + (vp[3 + dvp] * dp[6]) + + (vp[2 + dvp] * dp[7]) + + (vp[1 + dvp] * dp[8]) + + (vp[0 + dvp] * dp[9]) + + (vp[15 + dvp] * dp[10]) + + (vp[14 + dvp] * dp[11]) + + (vp[13 + dvp] * dp[12]) + + (vp[12 + dvp] * dp[13]) + + (vp[11 + dvp] * dp[14]) + + (vp[10 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + + private void compute_pcm_samples10(Obuffer buffer) + { + final float[] vp = actual_v; + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[10 + dvp] * dp[0]) + + (vp[9 + dvp] * dp[1]) + + (vp[8 + dvp] * dp[2]) + + (vp[7 + dvp] * dp[3]) + + (vp[6 + dvp] * dp[4]) + + (vp[5 + dvp] * dp[5]) + + (vp[4 + dvp] * dp[6]) + + (vp[3 + dvp] * dp[7]) + + (vp[2 + dvp] * dp[8]) + + (vp[1 + dvp] * dp[9]) + + (vp[0 + dvp] * dp[10]) + + (vp[15 + dvp] * dp[11]) + + (vp[14 + dvp] * dp[12]) + + (vp[13 + dvp] * dp[13]) + + (vp[12 + dvp] * dp[14]) + + (vp[11 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + private void compute_pcm_samples11(Obuffer buffer) + { + final float[] vp = actual_v; + + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[11 + dvp] * dp[0]) + + (vp[10 + dvp] * dp[1]) + + (vp[9 + dvp] * dp[2]) + + (vp[8 + dvp] * dp[3]) + + (vp[7 + dvp] * dp[4]) + + (vp[6 + dvp] * dp[5]) + + (vp[5 + dvp] * dp[6]) + + (vp[4 + dvp] * dp[7]) + + (vp[3 + dvp] * dp[8]) + + (vp[2 + dvp] * dp[9]) + + (vp[1 + dvp] * dp[10]) + + (vp[0 + dvp] * dp[11]) + + (vp[15 + dvp] * dp[12]) + + (vp[14 + dvp] * dp[13]) + + (vp[13 + dvp] * dp[14]) + + (vp[12 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + private void compute_pcm_samples12(Obuffer buffer) + { + final float[] vp = actual_v; + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[12 + dvp] * dp[0]) + + (vp[11 + dvp] * dp[1]) + + (vp[10 + dvp] * dp[2]) + + (vp[9 + dvp] * dp[3]) + + (vp[8 + dvp] * dp[4]) + + (vp[7 + dvp] * dp[5]) + + (vp[6 + dvp] * dp[6]) + + (vp[5 + dvp] * dp[7]) + + (vp[4 + dvp] * dp[8]) + + (vp[3 + dvp] * dp[9]) + + (vp[2 + dvp] * dp[10]) + + (vp[1 + dvp] * dp[11]) + + (vp[0 + dvp] * dp[12]) + + (vp[15 + dvp] * dp[13]) + + (vp[14 + dvp] * dp[14]) + + (vp[13 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + private void compute_pcm_samples13(Obuffer buffer) + { + final float[] vp = actual_v; + + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[13 + dvp] * dp[0]) + + (vp[12 + dvp] * dp[1]) + + (vp[11 + dvp] * dp[2]) + + (vp[10 + dvp] * dp[3]) + + (vp[9 + dvp] * dp[4]) + + (vp[8 + dvp] * dp[5]) + + (vp[7 + dvp] * dp[6]) + + (vp[6 + dvp] * dp[7]) + + (vp[5 + dvp] * dp[8]) + + (vp[4 + dvp] * dp[9]) + + (vp[3 + dvp] * dp[10]) + + (vp[2 + dvp] * dp[11]) + + (vp[1 + dvp] * dp[12]) + + (vp[0 + dvp] * dp[13]) + + (vp[15 + dvp] * dp[14]) + + (vp[14 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + private void compute_pcm_samples14(Obuffer buffer) + { + final float[] vp = actual_v; + + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + final float[] dp = d16[i]; + float pcm_sample; + + pcm_sample = (float)(((vp[14 + dvp] * dp[0]) + + (vp[13 + dvp] * dp[1]) + + (vp[12 + dvp] * dp[2]) + + (vp[11 + dvp] * dp[3]) + + (vp[10 + dvp] * dp[4]) + + (vp[9 + dvp] * dp[5]) + + (vp[8 + dvp] * dp[6]) + + (vp[7 + dvp] * dp[7]) + + (vp[6 + dvp] * dp[8]) + + (vp[5 + dvp] * dp[9]) + + (vp[4 + dvp] * dp[10]) + + (vp[3 + dvp] * dp[11]) + + (vp[2 + dvp] * dp[12]) + + (vp[1 + dvp] * dp[13]) + + (vp[0 + dvp] * dp[14]) + + (vp[15 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + + dvp += 16; + } // for + } + private void compute_pcm_samples15(Obuffer buffer) + { + final float[] vp = actual_v; + + //int inc = v_inc; + final float[] tmpOut = _tmpOut; + int dvp =0; + + // fat chance of having this loop unroll + for( int i=0; i<32; i++) + { + float pcm_sample; + final float dp[] = d16[i]; + pcm_sample = (float)(((vp[15 + dvp] * dp[0]) + + (vp[14 + dvp] * dp[1]) + + (vp[13 + dvp] * dp[2]) + + (vp[12 + dvp] * dp[3]) + + (vp[11 + dvp] * dp[4]) + + (vp[10 + dvp] * dp[5]) + + (vp[9 + dvp] * dp[6]) + + (vp[8 + dvp] * dp[7]) + + (vp[7 + dvp] * dp[8]) + + (vp[6 + dvp] * dp[9]) + + (vp[5 + dvp] * dp[10]) + + (vp[4 + dvp] * dp[11]) + + (vp[3 + dvp] * dp[12]) + + (vp[2 + dvp] * dp[13]) + + (vp[1 + dvp] * dp[14]) + + (vp[0 + dvp] * dp[15]) + ) * scalefactor); + + tmpOut[i] = pcm_sample; + dvp += 16; + } // for + } + +private void compute_pcm_samples(Obuffer buffer) +{ + + switch (actual_write_pos) + { + case 0: + compute_pcm_samples0(buffer); + break; + case 1: + compute_pcm_samples1(buffer); + break; + case 2: + compute_pcm_samples2(buffer); + break; + case 3: + compute_pcm_samples3(buffer); + break; + case 4: + compute_pcm_samples4(buffer); + break; + case 5: + compute_pcm_samples5(buffer); + break; + case 6: + compute_pcm_samples6(buffer); + break; + case 7: + compute_pcm_samples7(buffer); + break; + case 8: + compute_pcm_samples8(buffer); + break; + case 9: + compute_pcm_samples9(buffer); + break; + case 10: + compute_pcm_samples10(buffer); + break; + case 11: + compute_pcm_samples11(buffer); + break; + case 12: + compute_pcm_samples12(buffer); + break; + case 13: + compute_pcm_samples13(buffer); + break; + case 14: + compute_pcm_samples14(buffer); + break; + case 15: + compute_pcm_samples15(buffer); + break; + } + + if (buffer!=null) + { + buffer.appendSamples(channel, _tmpOut); + } + +/* + // MDM: I was considering putting in quality control for + // low-spec CPUs, but the performance gain (about 10-15%) + // did not justify the considerable drop in audio quality. + switch (inc) + { + case 16: + buffer.appendSamples(channel, tmpOut); + break; + case 32: + for (int i=0; i<16; i++) + { + buffer.append(channel, (short)tmpOut[i]); + buffer.append(channel, (short)tmpOut[i]); + } + break; + case 64: + for (int i=0; i<8; i++) + { + buffer.append(channel, (short)tmpOut[i]); + buffer.append(channel, (short)tmpOut[i]); + buffer.append(channel, (short)tmpOut[i]); + buffer.append(channel, (short)tmpOut[i]); + } + break; + + } +*/ + } + + /** + * Calculate 32 PCM samples and put the into the Obuffer-object. + */ + + public void calculate_pcm_samples(Obuffer buffer) + { + compute_new_v(); + compute_pcm_samples(buffer); + + actual_write_pos = (actual_write_pos + 1) & 0xf; + actual_v = (actual_v == v1) ? v2 : v1; + + // initialize samples[]: + //for (register float *floatp = samples + 32; floatp > samples; ) + // *--floatp = 0.0f; + + // MDM: this may not be necessary. The Layer III decoder always + // outputs 32 subband samples, but I haven't checked layer I & II. + for (int p=0;p<32;p++) + samples[p] = 0.0f; + } + + + private static final double MY_PI = 3.14159265358979323846; + private static final float cos1_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI / 64.0))); + private static final float cos3_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0 / 64.0))); + private static final float cos5_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 5.0 / 64.0))); + private static final float cos7_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 7.0 / 64.0))); + private static final float cos9_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 9.0 / 64.0))); + private static final float cos11_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 11.0 / 64.0))); + private static final float cos13_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 13.0 / 64.0))); + private static final float cos15_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 15.0 / 64.0))); + private static final float cos17_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 17.0 / 64.0))); + private static final float cos19_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 19.0 / 64.0))); + private static final float cos21_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 21.0 / 64.0))); + private static final float cos23_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 23.0 / 64.0))); + private static final float cos25_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 25.0 / 64.0))); + private static final float cos27_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 27.0 / 64.0))); + private static final float cos29_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 29.0 / 64.0))); + private static final float cos31_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 31.0 / 64.0))); + private static final float cos1_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI / 32.0))); + private static final float cos3_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0 / 32.0))); + private static final float cos5_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 5.0 / 32.0))); + private static final float cos7_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 7.0 / 32.0))); + private static final float cos9_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 9.0 / 32.0))); + private static final float cos11_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 11.0 / 32.0))); + private static final float cos13_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 13.0 / 32.0))); + private static final float cos15_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 15.0 / 32.0))); + private static final float cos1_16 =(float) (1.0 / (2.0 * Math.cos(MY_PI / 16.0))); + private static final float cos3_16 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0 / 16.0))); + private static final float cos5_16 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 5.0 / 16.0))); + private static final float cos7_16 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 7.0 / 16.0))); + private static final float cos1_8 =(float) (1.0 / (2.0 * Math.cos(MY_PI / 8.0))); + private static final float cos3_8 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0 / 8.0))); + private static final float cos1_4 =(float) (1.0 / (2.0 * Math.cos(MY_PI / 4.0))); + + // Note: These values are not in the same order + // as in Annex 3-B.3 of the ISO/IEC DIS 11172-3 + // private float d[] = {0.000000000, -4.000442505}; + + private static float d[] = null; + + /** + * d[] split into subarrays of length 16. This provides for + * more faster access by allowing a block of 16 to be addressed + * with constant offset. + **/ + private static float d16[][] = null; + + /** + * Loads the data for the d[] from the resource SFd.ser. + * @return the loaded values for d[]. + */ + static private float[] load_d() + { + try + { + Class elemType = Float.TYPE; + Object o = JavaLayerUtils.deserializeArrayResource("sfd.ser", elemType, 512); + return (float[])o; + } + catch (IOException ex) + { + throw new ExceptionInInitializerError(ex); + } + } + + /** + * Converts a 1D array into a number of smaller arrays. This is used + * to achieve offset + constant indexing into an array. Each sub-array + * represents a block of values of the original array. + * @param array The array to split up into blocks. + * @param blockSize The size of the blocks to split the array + * into. This must be an exact divisor of + * the length of the array, or some data + * will be lost from the main array. + * + * @return An array of arrays in which each element in the returned + * array will be of length blockSize. + */ + static private float[][] splitArray(final float[] array, final int blockSize) + { + int size = array.length / blockSize; + float[][] split = new float[size][]; + for (int i=0; i array.length) + { + len = array.length-offs; + } + + if (len < 0) + len = 0; + + float[] subarray = new float[len]; + for (int i=0; i}_?=j-U~>Fw(7>+kIF?eXsO@AUAr@ipgn^*Qyr_B!^v z_dEBz_&oTX_}%#(`Cj>+`QG{-`d|8=`rrE>`(XQ^`{4W_{9*i&{IUGe{PFz}{WASh z{c`=1{j&Yi{qp`2{xkkl{&W6|{+s@*{=5Fm{@ecR{`>z6{~Z4;|2+Rp|6KoU|9t<5 z|B(Nf|DgY<|FHkK|G@vq|Iq)~|KR`V|M36#004dfdHi+warABPY3pU@VdGujS=v?B zQPNG$Ny$aULBT%0JiI!&IJY*nG_x|XFt0AHEUPN0D5fT)B%&gqAf6u_9vdAR92pxJ z8W$NB7!?;3784Z`6cG~;5)Tm#5DX7Y4$BTp4ayBl49N^g3&;yc3dagY3C0OU2*n6Q z2gCa0Hgqv0E7T|0B`_k d0AK)E08ju(06+jZ05AY303ZMu01yBO001A}1w;S< literal 0 HcmV?d00001 diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/huffcodetab.java b/JLayer1.0.1/src/javazoom/jl/decoder/huffcodetab.java new file mode 100644 index 0000000..8697564 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/decoder/huffcodetab.java @@ -0,0 +1,600 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 16/11/99 Renamed class, added javadoc, and changed table + * name from String to 3 chars. mdm@techie.com + * 02/15/99 Java Conversion by E.B, javalayer@javazoom.net + * + * 04/19/97 : Adapted from the ISO MPEG Audio Subgroup Software Simulation + * Group's public c source for its MPEG audio decoder. Miscellaneous + * changes by Jeff Tsay (ctsay@pasteur.eecs.berkeley.edu). + *----------------------------------------------------------------------- + * Copyright (c) 1991 MPEG/audio software simulation group, All Rights Reserved + * MPEG/audio coding/decoding software, work in progress + * NOT for public distribution until verified and approved by the + * MPEG/audio committee. For further information, please contact + * Davis Pan, 508-493-2241, e-mail: pan@3d.enet.dec.com + * + * VERSION 4.1 + * changes made since last update: + * date programmers comment + * 27.2.92 F.O.Witte (ITT Intermetall) + * 8/24/93 M. Iwadare Changed for 1 pass decoding. + * 7/14/94 J. Koller useless 'typedef' before huffcodetab removed + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +/** + * Class to implements Huffman decoder. + */ +final class huffcodetab +{ + private static final int MXOFF=250; + private static final int HTN=34; + + private char tablename0 = ' '; /* string, containing table_description */ + private char tablename1 = ' '; /* string, containing table_description */ + private char tablename2 = ' '; /* string, containing table_description */ + + private int xlen; /* max. x-index+ */ + private int ylen; /* max. y-index+ */ + private int linbits; /* number of linbits */ + private int linmax; /* max number to be stored in linbits */ + private int ref; /* a positive value indicates a reference */ + private int[] table=null; /* pointer to array[xlen][ylen] */ + private int[] hlen=null; /* pointer to array[xlen][ylen] */ + private int[][] val=null; /* decoder tree */ + private int treelen; /* length of decoder tree */ + + private static int ValTab0[][] = { + {0,0} // dummy + }; + + private static int ValTab1[][] = { + {2,1},{0,0},{2,1},{0,16},{2,1},{0,1},{0,17}, + }; + + private static int ValTab2[][] = { + {2,1},{0,0},{4,1},{2,1},{0,16},{0,1},{2,1},{0,17},{4,1},{2,1}, + {0,32},{0,33},{2,1},{0,18},{2,1},{0,2},{0,34}, + }; + + private static int ValTab3[][] = { + {4,1},{2,1},{0,0},{0,1},{2,1},{0,17},{2,1},{0,16},{4,1},{2,1}, + {0,32},{0,33},{2,1},{0,18},{2,1},{0,2},{0,34}, + }; + + private static int ValTab4[][] = {{0,0}}; // dummy + + private static int ValTab5[][] = { + {2,1},{0,0},{4,1},{2,1},{0,16},{0,1},{2,1},{0,17},{8,1},{4,1}, + {2,1},{0,32},{0,2},{2,1},{0,33},{0,18},{8,1},{4,1},{2,1},{0,34}, + {0,48},{2,1},{0,3},{0,19},{2,1},{0,49},{2,1},{0,50},{2,1},{0,35}, + {0,51}, + }; + + private static int ValTab6[][] = { + {6,1},{4,1},{2,1},{0,0},{0,16},{0,17},{6,1},{2,1},{0,1},{2,1}, + {0,32},{0,33},{6,1},{2,1},{0,18},{2,1},{0,2},{0,34},{4,1},{2,1}, + {0,49},{0,19},{4,1},{2,1},{0,48},{0,50},{2,1},{0,35},{2,1},{0,3}, + {0,51}, + }; + + private static int ValTab7[][] = { + {2,1},{0,0},{4,1},{2,1},{0,16},{0,1},{8,1},{2,1},{0,17},{4,1}, + {2,1},{0,32},{0,2},{0,33},{18,1},{6,1},{2,1},{0,18},{2,1},{0,34}, + {0,48},{4,1},{2,1},{0,49},{0,19},{4,1},{2,1},{0,3},{0,50},{2,1}, + {0,35},{0,4},{10,1},{4,1},{2,1},{0,64},{0,65},{2,1},{0,20},{2,1}, + {0,66},{0,36},{12,1},{6,1},{4,1},{2,1},{0,51},{0,67},{0,80},{4,1}, + {2,1},{0,52},{0,5},{0,81},{6,1},{2,1},{0,21},{2,1},{0,82},{0,37}, + {4,1},{2,1},{0,68},{0,53},{4,1},{2,1},{0,83},{0,84},{2,1},{0,69}, + {0,85}, + }; + + private static int ValTab8[][] = { + {6,1},{2,1},{0,0},{2,1},{0,16},{0,1},{2,1},{0,17},{4,1},{2,1}, + {0,33},{0,18},{14,1},{4,1},{2,1},{0,32},{0,2},{2,1},{0,34},{4,1}, + {2,1},{0,48},{0,3},{2,1},{0,49},{0,19},{14,1},{8,1},{4,1},{2,1}, + {0,50},{0,35},{2,1},{0,64},{0,4},{2,1},{0,65},{2,1},{0,20},{0,66}, + {12,1},{6,1},{2,1},{0,36},{2,1},{0,51},{0,80},{4,1},{2,1},{0,67}, + {0,52},{0,81},{6,1},{2,1},{0,21},{2,1},{0,5},{0,82},{6,1},{2,1}, + {0,37},{2,1},{0,68},{0,53},{2,1},{0,83},{2,1},{0,69},{2,1},{0,84}, + {0,85}, + }; + + private static int ValTab9[][] = { + {8,1},{4,1},{2,1},{0,0},{0,16},{2,1},{0,1},{0,17},{10,1},{4,1}, + {2,1},{0,32},{0,33},{2,1},{0,18},{2,1},{0,2},{0,34},{12,1},{6,1}, + {4,1},{2,1},{0,48},{0,3},{0,49},{2,1},{0,19},{2,1},{0,50},{0,35}, + {12,1},{4,1},{2,1},{0,65},{0,20},{4,1},{2,1},{0,64},{0,51},{2,1}, + {0,66},{0,36},{10,1},{6,1},{4,1},{2,1},{0,4},{0,80},{0,67},{2,1}, + {0,52},{0,81},{8,1},{4,1},{2,1},{0,21},{0,82},{2,1},{0,37},{0,68}, + {6,1},{4,1},{2,1},{0,5},{0,84},{0,83},{2,1},{0,53},{2,1},{0,69}, + {0,85}, + }; + + private static int ValTab10[][] = { + {2,1},{0,0},{4,1},{2,1},{0,16},{0,1},{10,1},{2,1},{0,17},{4,1}, + {2,1},{0,32},{0,2},{2,1},{0,33},{0,18},{28,1},{8,1},{4,1},{2,1}, + {0,34},{0,48},{2,1},{0,49},{0,19},{8,1},{4,1},{2,1},{0,3},{0,50}, + {2,1},{0,35},{0,64},{4,1},{2,1},{0,65},{0,20},{4,1},{2,1},{0,4}, + {0,51},{2,1},{0,66},{0,36},{28,1},{10,1},{6,1},{4,1},{2,1},{0,80}, + {0,5},{0,96},{2,1},{0,97},{0,22},{12,1},{6,1},{4,1},{2,1},{0,67}, + {0,52},{0,81},{2,1},{0,21},{2,1},{0,82},{0,37},{4,1},{2,1},{0,38}, + {0,54},{0,113},{20,1},{8,1},{2,1},{0,23},{4,1},{2,1},{0,68},{0,83}, + {0,6},{6,1},{4,1},{2,1},{0,53},{0,69},{0,98},{2,1},{0,112},{2,1}, + {0,7},{0,100},{14,1},{4,1},{2,1},{0,114},{0,39},{6,1},{2,1},{0,99}, + {2,1},{0,84},{0,85},{2,1},{0,70},{0,115},{8,1},{4,1},{2,1},{0,55}, + {0,101},{2,1},{0,86},{0,116},{6,1},{2,1},{0,71},{2,1},{0,102},{0,117}, + {4,1},{2,1},{0,87},{0,118},{2,1},{0,103},{0,119}, + }; + + private static int ValTab11[][] = { + {6,1},{2,1},{0,0},{2,1},{0,16},{0,1},{8,1},{2,1},{0,17},{4,1}, + {2,1},{0,32},{0,2},{0,18},{24,1},{8,1},{2,1},{0,33},{2,1},{0,34}, + {2,1},{0,48},{0,3},{4,1},{2,1},{0,49},{0,19},{4,1},{2,1},{0,50}, + {0,35},{4,1},{2,1},{0,64},{0,4},{2,1},{0,65},{0,20},{30,1},{16,1}, + {10,1},{4,1},{2,1},{0,66},{0,36},{4,1},{2,1},{0,51},{0,67},{0,80}, + {4,1},{2,1},{0,52},{0,81},{0,97},{6,1},{2,1},{0,22},{2,1},{0,6}, + {0,38},{2,1},{0,98},{2,1},{0,21},{2,1},{0,5},{0,82},{16,1},{10,1}, + {6,1},{4,1},{2,1},{0,37},{0,68},{0,96},{2,1},{0,99},{0,54},{4,1}, + {2,1},{0,112},{0,23},{0,113},{16,1},{6,1},{4,1},{2,1},{0,7},{0,100}, + {0,114},{2,1},{0,39},{4,1},{2,1},{0,83},{0,53},{2,1},{0,84},{0,69}, + {10,1},{4,1},{2,1},{0,70},{0,115},{2,1},{0,55},{2,1},{0,101},{0,86}, + {10,1},{6,1},{4,1},{2,1},{0,85},{0,87},{0,116},{2,1},{0,71},{0,102}, + {4,1},{2,1},{0,117},{0,118},{2,1},{0,103},{0,119}, + }; + + private static int ValTab12[][] = { + {12,1},{4,1},{2,1},{0,16},{0,1},{2,1},{0,17},{2,1},{0,0},{2,1}, + {0,32},{0,2},{16,1},{4,1},{2,1},{0,33},{0,18},{4,1},{2,1},{0,34}, + {0,49},{2,1},{0,19},{2,1},{0,48},{2,1},{0,3},{0,64},{26,1},{8,1}, + {4,1},{2,1},{0,50},{0,35},{2,1},{0,65},{0,51},{10,1},{4,1},{2,1}, + {0,20},{0,66},{2,1},{0,36},{2,1},{0,4},{0,80},{4,1},{2,1},{0,67}, + {0,52},{2,1},{0,81},{0,21},{28,1},{14,1},{8,1},{4,1},{2,1},{0,82}, + {0,37},{2,1},{0,83},{0,53},{4,1},{2,1},{0,96},{0,22},{0,97},{4,1}, + {2,1},{0,98},{0,38},{6,1},{4,1},{2,1},{0,5},{0,6},{0,68},{2,1}, + {0,84},{0,69},{18,1},{10,1},{4,1},{2,1},{0,99},{0,54},{4,1},{2,1}, + {0,112},{0,7},{0,113},{4,1},{2,1},{0,23},{0,100},{2,1},{0,70},{0,114}, + {10,1},{6,1},{2,1},{0,39},{2,1},{0,85},{0,115},{2,1},{0,55},{0,86}, + {8,1},{4,1},{2,1},{0,101},{0,116},{2,1},{0,71},{0,102},{4,1},{2,1}, + {0,117},{0,87},{2,1},{0,118},{2,1},{0,103},{0,119}, + }; + + private static int ValTab13[][] = { + {2,1},{0,0},{6,1},{2,1},{0,16},{2,1},{0,1},{0,17},{28,1},{8,1}, + {4,1},{2,1},{0,32},{0,2},{2,1},{0,33},{0,18},{8,1},{4,1},{2,1}, + {0,34},{0,48},{2,1},{0,3},{0,49},{6,1},{2,1},{0,19},{2,1},{0,50}, + {0,35},{4,1},{2,1},{0,64},{0,4},{0,65},{70,1},{28,1},{14,1},{6,1}, + {2,1},{0,20},{2,1},{0,51},{0,66},{4,1},{2,1},{0,36},{0,80},{2,1}, + {0,67},{0,52},{4,1},{2,1},{0,81},{0,21},{4,1},{2,1},{0,5},{0,82}, + {2,1},{0,37},{2,1},{0,68},{0,83},{14,1},{8,1},{4,1},{2,1},{0,96}, + {0,6},{2,1},{0,97},{0,22},{4,1},{2,1},{0,128},{0,8},{0,129},{16,1}, + {8,1},{4,1},{2,1},{0,53},{0,98},{2,1},{0,38},{0,84},{4,1},{2,1}, + {0,69},{0,99},{2,1},{0,54},{0,112},{6,1},{4,1},{2,1},{0,7},{0,85}, + {0,113},{2,1},{0,23},{2,1},{0,39},{0,55},{72,1},{24,1},{12,1},{4,1}, + {2,1},{0,24},{0,130},{2,1},{0,40},{4,1},{2,1},{0,100},{0,70},{0,114}, + {8,1},{4,1},{2,1},{0,132},{0,72},{2,1},{0,144},{0,9},{2,1},{0,145}, + {0,25},{24,1},{14,1},{8,1},{4,1},{2,1},{0,115},{0,101},{2,1},{0,86}, + {0,116},{4,1},{2,1},{0,71},{0,102},{0,131},{6,1},{2,1},{0,56},{2,1}, + {0,117},{0,87},{2,1},{0,146},{0,41},{14,1},{8,1},{4,1},{2,1},{0,103}, + {0,133},{2,1},{0,88},{0,57},{2,1},{0,147},{2,1},{0,73},{0,134},{6,1}, + {2,1},{0,160},{2,1},{0,104},{0,10},{2,1},{0,161},{0,26},{68,1},{24,1}, + {12,1},{4,1},{2,1},{0,162},{0,42},{4,1},{2,1},{0,149},{0,89},{2,1}, + {0,163},{0,58},{8,1},{4,1},{2,1},{0,74},{0,150},{2,1},{0,176},{0,11}, + {2,1},{0,177},{0,27},{20,1},{8,1},{2,1},{0,178},{4,1},{2,1},{0,118}, + {0,119},{0,148},{6,1},{4,1},{2,1},{0,135},{0,120},{0,164},{4,1},{2,1}, + {0,105},{0,165},{0,43},{12,1},{6,1},{4,1},{2,1},{0,90},{0,136},{0,179}, + {2,1},{0,59},{2,1},{0,121},{0,166},{6,1},{4,1},{2,1},{0,106},{0,180}, + {0,192},{4,1},{2,1},{0,12},{0,152},{0,193},{60,1},{22,1},{10,1},{6,1}, + {2,1},{0,28},{2,1},{0,137},{0,181},{2,1},{0,91},{0,194},{4,1},{2,1}, + {0,44},{0,60},{4,1},{2,1},{0,182},{0,107},{2,1},{0,196},{0,76},{16,1}, + {8,1},{4,1},{2,1},{0,168},{0,138},{2,1},{0,208},{0,13},{2,1},{0,209}, + {2,1},{0,75},{2,1},{0,151},{0,167},{12,1},{6,1},{2,1},{0,195},{2,1}, + {0,122},{0,153},{4,1},{2,1},{0,197},{0,92},{0,183},{4,1},{2,1},{0,29}, + {0,210},{2,1},{0,45},{2,1},{0,123},{0,211},{52,1},{28,1},{12,1},{4,1}, + {2,1},{0,61},{0,198},{4,1},{2,1},{0,108},{0,169},{2,1},{0,154},{0,212}, + {8,1},{4,1},{2,1},{0,184},{0,139},{2,1},{0,77},{0,199},{4,1},{2,1}, + {0,124},{0,213},{2,1},{0,93},{0,224},{10,1},{4,1},{2,1},{0,225},{0,30}, + {4,1},{2,1},{0,14},{0,46},{0,226},{8,1},{4,1},{2,1},{0,227},{0,109}, + {2,1},{0,140},{0,228},{4,1},{2,1},{0,229},{0,186},{0,240},{38,1},{16,1}, + {4,1},{2,1},{0,241},{0,31},{6,1},{4,1},{2,1},{0,170},{0,155},{0,185}, + {2,1},{0,62},{2,1},{0,214},{0,200},{12,1},{6,1},{2,1},{0,78},{2,1}, + {0,215},{0,125},{2,1},{0,171},{2,1},{0,94},{0,201},{6,1},{2,1},{0,15}, + {2,1},{0,156},{0,110},{2,1},{0,242},{0,47},{32,1},{16,1},{6,1},{4,1}, + {2,1},{0,216},{0,141},{0,63},{6,1},{2,1},{0,243},{2,1},{0,230},{0,202}, + {2,1},{0,244},{0,79},{8,1},{4,1},{2,1},{0,187},{0,172},{2,1},{0,231}, + {0,245},{4,1},{2,1},{0,217},{0,157},{2,1},{0,95},{0,232},{30,1},{12,1}, + {6,1},{2,1},{0,111},{2,1},{0,246},{0,203},{4,1},{2,1},{0,188},{0,173}, + {0,218},{8,1},{2,1},{0,247},{4,1},{2,1},{0,126},{0,127},{0,142},{6,1}, + {4,1},{2,1},{0,158},{0,174},{0,204},{2,1},{0,248},{0,143},{18,1},{8,1}, + {4,1},{2,1},{0,219},{0,189},{2,1},{0,234},{0,249},{4,1},{2,1},{0,159}, + {0,235},{2,1},{0,190},{2,1},{0,205},{0,250},{14,1},{4,1},{2,1},{0,221}, + {0,236},{6,1},{4,1},{2,1},{0,233},{0,175},{0,220},{2,1},{0,206},{0,251}, + {8,1},{4,1},{2,1},{0,191},{0,222},{2,1},{0,207},{0,238},{4,1},{2,1}, + {0,223},{0,239},{2,1},{0,255},{2,1},{0,237},{2,1},{0,253},{2,1},{0,252}, + {0,254}, + }; + + private static int ValTab14[][] = { + {0,0} // dummy + }; + + private static int ValTab15[][] = { + {16,1},{6,1},{2,1},{0,0},{2,1},{0,16},{0,1},{2,1},{0,17},{4,1}, + {2,1},{0,32},{0,2},{2,1},{0,33},{0,18},{50,1},{16,1},{6,1},{2,1}, + {0,34},{2,1},{0,48},{0,49},{6,1},{2,1},{0,19},{2,1},{0,3},{0,64}, + {2,1},{0,50},{0,35},{14,1},{6,1},{4,1},{2,1},{0,4},{0,20},{0,65}, + {4,1},{2,1},{0,51},{0,66},{2,1},{0,36},{0,67},{10,1},{6,1},{2,1}, + {0,52},{2,1},{0,80},{0,5},{2,1},{0,81},{0,21},{4,1},{2,1},{0,82}, + {0,37},{4,1},{2,1},{0,68},{0,83},{0,97},{90,1},{36,1},{18,1},{10,1}, + {6,1},{2,1},{0,53},{2,1},{0,96},{0,6},{2,1},{0,22},{0,98},{4,1}, + {2,1},{0,38},{0,84},{2,1},{0,69},{0,99},{10,1},{6,1},{2,1},{0,54}, + {2,1},{0,112},{0,7},{2,1},{0,113},{0,85},{4,1},{2,1},{0,23},{0,100}, + {2,1},{0,114},{0,39},{24,1},{16,1},{8,1},{4,1},{2,1},{0,70},{0,115}, + {2,1},{0,55},{0,101},{4,1},{2,1},{0,86},{0,128},{2,1},{0,8},{0,116}, + {4,1},{2,1},{0,129},{0,24},{2,1},{0,130},{0,40},{16,1},{8,1},{4,1}, + {2,1},{0,71},{0,102},{2,1},{0,131},{0,56},{4,1},{2,1},{0,117},{0,87}, + {2,1},{0,132},{0,72},{6,1},{4,1},{2,1},{0,144},{0,25},{0,145},{4,1}, + {2,1},{0,146},{0,118},{2,1},{0,103},{0,41},{92,1},{36,1},{18,1},{10,1}, + {4,1},{2,1},{0,133},{0,88},{4,1},{2,1},{0,9},{0,119},{0,147},{4,1}, + {2,1},{0,57},{0,148},{2,1},{0,73},{0,134},{10,1},{6,1},{2,1},{0,104}, + {2,1},{0,160},{0,10},{2,1},{0,161},{0,26},{4,1},{2,1},{0,162},{0,42}, + {2,1},{0,149},{0,89},{26,1},{14,1},{6,1},{2,1},{0,163},{2,1},{0,58}, + {0,135},{4,1},{2,1},{0,120},{0,164},{2,1},{0,74},{0,150},{6,1},{4,1}, + {2,1},{0,105},{0,176},{0,177},{4,1},{2,1},{0,27},{0,165},{0,178},{14,1}, + {8,1},{4,1},{2,1},{0,90},{0,43},{2,1},{0,136},{0,151},{2,1},{0,179}, + {2,1},{0,121},{0,59},{8,1},{4,1},{2,1},{0,106},{0,180},{2,1},{0,75}, + {0,193},{4,1},{2,1},{0,152},{0,137},{2,1},{0,28},{0,181},{80,1},{34,1}, + {16,1},{6,1},{4,1},{2,1},{0,91},{0,44},{0,194},{6,1},{4,1},{2,1}, + {0,11},{0,192},{0,166},{2,1},{0,167},{0,122},{10,1},{4,1},{2,1},{0,195}, + {0,60},{4,1},{2,1},{0,12},{0,153},{0,182},{4,1},{2,1},{0,107},{0,196}, + {2,1},{0,76},{0,168},{20,1},{10,1},{4,1},{2,1},{0,138},{0,197},{4,1}, + {2,1},{0,208},{0,92},{0,209},{4,1},{2,1},{0,183},{0,123},{2,1},{0,29}, + {2,1},{0,13},{0,45},{12,1},{4,1},{2,1},{0,210},{0,211},{4,1},{2,1}, + {0,61},{0,198},{2,1},{0,108},{0,169},{6,1},{4,1},{2,1},{0,154},{0,184}, + {0,212},{4,1},{2,1},{0,139},{0,77},{2,1},{0,199},{0,124},{68,1},{34,1}, + {18,1},{10,1},{4,1},{2,1},{0,213},{0,93},{4,1},{2,1},{0,224},{0,14}, + {0,225},{4,1},{2,1},{0,30},{0,226},{2,1},{0,170},{0,46},{8,1},{4,1}, + {2,1},{0,185},{0,155},{2,1},{0,227},{0,214},{4,1},{2,1},{0,109},{0,62}, + {2,1},{0,200},{0,140},{16,1},{8,1},{4,1},{2,1},{0,228},{0,78},{2,1}, + {0,215},{0,125},{4,1},{2,1},{0,229},{0,186},{2,1},{0,171},{0,94},{8,1}, + {4,1},{2,1},{0,201},{0,156},{2,1},{0,241},{0,31},{6,1},{4,1},{2,1}, + {0,240},{0,110},{0,242},{2,1},{0,47},{0,230},{38,1},{18,1},{8,1},{4,1}, + {2,1},{0,216},{0,243},{2,1},{0,63},{0,244},{6,1},{2,1},{0,79},{2,1}, + {0,141},{0,217},{2,1},{0,187},{0,202},{8,1},{4,1},{2,1},{0,172},{0,231}, + {2,1},{0,126},{0,245},{8,1},{4,1},{2,1},{0,157},{0,95},{2,1},{0,232}, + {0,142},{2,1},{0,246},{0,203},{34,1},{18,1},{10,1},{6,1},{4,1},{2,1}, + {0,15},{0,174},{0,111},{2,1},{0,188},{0,218},{4,1},{2,1},{0,173},{0,247}, + {2,1},{0,127},{0,233},{8,1},{4,1},{2,1},{0,158},{0,204},{2,1},{0,248}, + {0,143},{4,1},{2,1},{0,219},{0,189},{2,1},{0,234},{0,249},{16,1},{8,1}, + {4,1},{2,1},{0,159},{0,220},{2,1},{0,205},{0,235},{4,1},{2,1},{0,190}, + {0,250},{2,1},{0,175},{0,221},{14,1},{6,1},{4,1},{2,1},{0,236},{0,206}, + {0,251},{4,1},{2,1},{0,191},{0,237},{2,1},{0,222},{0,252},{6,1},{4,1}, + {2,1},{0,207},{0,253},{0,238},{4,1},{2,1},{0,223},{0,254},{2,1},{0,239}, + {0,255}, + }; + + private static int ValTab16[][] = { + {2,1},{0,0},{6,1},{2,1},{0,16},{2,1},{0,1},{0,17},{42,1},{8,1}, + {4,1},{2,1},{0,32},{0,2},{2,1},{0,33},{0,18},{10,1},{6,1},{2,1}, + {0,34},{2,1},{0,48},{0,3},{2,1},{0,49},{0,19},{10,1},{4,1},{2,1}, + {0,50},{0,35},{4,1},{2,1},{0,64},{0,4},{0,65},{6,1},{2,1},{0,20}, + {2,1},{0,51},{0,66},{4,1},{2,1},{0,36},{0,80},{2,1},{0,67},{0,52}, + {138,1},{40,1},{16,1},{6,1},{4,1},{2,1},{0,5},{0,21},{0,81},{4,1}, + {2,1},{0,82},{0,37},{4,1},{2,1},{0,68},{0,53},{0,83},{10,1},{6,1}, + {4,1},{2,1},{0,96},{0,6},{0,97},{2,1},{0,22},{0,98},{8,1},{4,1}, + {2,1},{0,38},{0,84},{2,1},{0,69},{0,99},{4,1},{2,1},{0,54},{0,112}, + {0,113},{40,1},{18,1},{8,1},{2,1},{0,23},{2,1},{0,7},{2,1},{0,85}, + {0,100},{4,1},{2,1},{0,114},{0,39},{4,1},{2,1},{0,70},{0,101},{0,115}, + {10,1},{6,1},{2,1},{0,55},{2,1},{0,86},{0,8},{2,1},{0,128},{0,129}, + {6,1},{2,1},{0,24},{2,1},{0,116},{0,71},{2,1},{0,130},{2,1},{0,40}, + {0,102},{24,1},{14,1},{8,1},{4,1},{2,1},{0,131},{0,56},{2,1},{0,117}, + {0,132},{4,1},{2,1},{0,72},{0,144},{0,145},{6,1},{2,1},{0,25},{2,1}, + {0,9},{0,118},{2,1},{0,146},{0,41},{14,1},{8,1},{4,1},{2,1},{0,133}, + {0,88},{2,1},{0,147},{0,57},{4,1},{2,1},{0,160},{0,10},{0,26},{8,1}, + {2,1},{0,162},{2,1},{0,103},{2,1},{0,87},{0,73},{6,1},{2,1},{0,148}, + {2,1},{0,119},{0,134},{2,1},{0,161},{2,1},{0,104},{0,149},{220,1},{126,1}, + {50,1},{26,1},{12,1},{6,1},{2,1},{0,42},{2,1},{0,89},{0,58},{2,1}, + {0,163},{2,1},{0,135},{0,120},{8,1},{4,1},{2,1},{0,164},{0,74},{2,1}, + {0,150},{0,105},{4,1},{2,1},{0,176},{0,11},{0,177},{10,1},{4,1},{2,1}, + {0,27},{0,178},{2,1},{0,43},{2,1},{0,165},{0,90},{6,1},{2,1},{0,179}, + {2,1},{0,166},{0,106},{4,1},{2,1},{0,180},{0,75},{2,1},{0,12},{0,193}, + {30,1},{14,1},{6,1},{4,1},{2,1},{0,181},{0,194},{0,44},{4,1},{2,1}, + {0,167},{0,195},{2,1},{0,107},{0,196},{8,1},{2,1},{0,29},{4,1},{2,1}, + {0,136},{0,151},{0,59},{4,1},{2,1},{0,209},{0,210},{2,1},{0,45},{0,211}, + {18,1},{6,1},{4,1},{2,1},{0,30},{0,46},{0,226},{6,1},{4,1},{2,1}, + {0,121},{0,152},{0,192},{2,1},{0,28},{2,1},{0,137},{0,91},{14,1},{6,1}, + {2,1},{0,60},{2,1},{0,122},{0,182},{4,1},{2,1},{0,76},{0,153},{2,1}, + {0,168},{0,138},{6,1},{2,1},{0,13},{2,1},{0,197},{0,92},{4,1},{2,1}, + {0,61},{0,198},{2,1},{0,108},{0,154},{88,1},{86,1},{36,1},{16,1},{8,1}, + {4,1},{2,1},{0,139},{0,77},{2,1},{0,199},{0,124},{4,1},{2,1},{0,213}, + {0,93},{2,1},{0,224},{0,14},{8,1},{2,1},{0,227},{4,1},{2,1},{0,208}, + {0,183},{0,123},{6,1},{4,1},{2,1},{0,169},{0,184},{0,212},{2,1},{0,225}, + {2,1},{0,170},{0,185},{24,1},{10,1},{6,1},{4,1},{2,1},{0,155},{0,214}, + {0,109},{2,1},{0,62},{0,200},{6,1},{4,1},{2,1},{0,140},{0,228},{0,78}, + {4,1},{2,1},{0,215},{0,229},{2,1},{0,186},{0,171},{12,1},{4,1},{2,1}, + {0,156},{0,230},{4,1},{2,1},{0,110},{0,216},{2,1},{0,141},{0,187},{8,1}, + {4,1},{2,1},{0,231},{0,157},{2,1},{0,232},{0,142},{4,1},{2,1},{0,203}, + {0,188},{0,158},{0,241},{2,1},{0,31},{2,1},{0,15},{0,47},{66,1},{56,1}, + {2,1},{0,242},{52,1},{50,1},{20,1},{8,1},{2,1},{0,189},{2,1},{0,94}, + {2,1},{0,125},{0,201},{6,1},{2,1},{0,202},{2,1},{0,172},{0,126},{4,1}, + {2,1},{0,218},{0,173},{0,204},{10,1},{6,1},{2,1},{0,174},{2,1},{0,219}, + {0,220},{2,1},{0,205},{0,190},{6,1},{4,1},{2,1},{0,235},{0,237},{0,238}, + {6,1},{4,1},{2,1},{0,217},{0,234},{0,233},{2,1},{0,222},{4,1},{2,1}, + {0,221},{0,236},{0,206},{0,63},{0,240},{4,1},{2,1},{0,243},{0,244},{2,1}, + {0,79},{2,1},{0,245},{0,95},{10,1},{2,1},{0,255},{4,1},{2,1},{0,246}, + {0,111},{2,1},{0,247},{0,127},{12,1},{6,1},{2,1},{0,143},{2,1},{0,248}, + {0,249},{4,1},{2,1},{0,159},{0,250},{0,175},{8,1},{4,1},{2,1},{0,251}, + {0,191},{2,1},{0,252},{0,207},{4,1},{2,1},{0,253},{0,223},{2,1},{0,254}, + {0,239}, + }; + + private static int ValTab24[][] = { + {60,1},{8,1},{4,1},{2,1},{0,0},{0,16},{2,1},{0,1},{0,17},{14,1}, + {6,1},{4,1},{2,1},{0,32},{0,2},{0,33},{2,1},{0,18},{2,1},{0,34}, + {2,1},{0,48},{0,3},{14,1},{4,1},{2,1},{0,49},{0,19},{4,1},{2,1}, + {0,50},{0,35},{4,1},{2,1},{0,64},{0,4},{0,65},{8,1},{4,1},{2,1}, + {0,20},{0,51},{2,1},{0,66},{0,36},{6,1},{4,1},{2,1},{0,67},{0,52}, + {0,81},{6,1},{4,1},{2,1},{0,80},{0,5},{0,21},{2,1},{0,82},{0,37}, + {250,1},{98,1},{34,1},{18,1},{10,1},{4,1},{2,1},{0,68},{0,83},{2,1}, + {0,53},{2,1},{0,96},{0,6},{4,1},{2,1},{0,97},{0,22},{2,1},{0,98}, + {0,38},{8,1},{4,1},{2,1},{0,84},{0,69},{2,1},{0,99},{0,54},{4,1}, + {2,1},{0,113},{0,85},{2,1},{0,100},{0,70},{32,1},{14,1},{6,1},{2,1}, + {0,114},{2,1},{0,39},{0,55},{2,1},{0,115},{4,1},{2,1},{0,112},{0,7}, + {0,23},{10,1},{4,1},{2,1},{0,101},{0,86},{4,1},{2,1},{0,128},{0,8}, + {0,129},{4,1},{2,1},{0,116},{0,71},{2,1},{0,24},{0,130},{16,1},{8,1}, + {4,1},{2,1},{0,40},{0,102},{2,1},{0,131},{0,56},{4,1},{2,1},{0,117}, + {0,87},{2,1},{0,132},{0,72},{8,1},{4,1},{2,1},{0,145},{0,25},{2,1}, + {0,146},{0,118},{4,1},{2,1},{0,103},{0,41},{2,1},{0,133},{0,88},{92,1}, + {34,1},{16,1},{8,1},{4,1},{2,1},{0,147},{0,57},{2,1},{0,148},{0,73}, + {4,1},{2,1},{0,119},{0,134},{2,1},{0,104},{0,161},{8,1},{4,1},{2,1}, + {0,162},{0,42},{2,1},{0,149},{0,89},{4,1},{2,1},{0,163},{0,58},{2,1}, + {0,135},{2,1},{0,120},{0,74},{22,1},{12,1},{4,1},{2,1},{0,164},{0,150}, + {4,1},{2,1},{0,105},{0,177},{2,1},{0,27},{0,165},{6,1},{2,1},{0,178}, + {2,1},{0,90},{0,43},{2,1},{0,136},{0,179},{16,1},{10,1},{6,1},{2,1}, + {0,144},{2,1},{0,9},{0,160},{2,1},{0,151},{0,121},{4,1},{2,1},{0,166}, + {0,106},{0,180},{12,1},{6,1},{2,1},{0,26},{2,1},{0,10},{0,176},{2,1}, + {0,59},{2,1},{0,11},{0,192},{4,1},{2,1},{0,75},{0,193},{2,1},{0,152}, + {0,137},{67,1},{34,1},{16,1},{8,1},{4,1},{2,1},{0,28},{0,181},{2,1}, + {0,91},{0,194},{4,1},{2,1},{0,44},{0,167},{2,1},{0,122},{0,195},{10,1}, + {6,1},{2,1},{0,60},{2,1},{0,12},{0,208},{2,1},{0,182},{0,107},{4,1}, + {2,1},{0,196},{0,76},{2,1},{0,153},{0,168},{16,1},{8,1},{4,1},{2,1}, + {0,138},{0,197},{2,1},{0,92},{0,209},{4,1},{2,1},{0,183},{0,123},{2,1}, + {0,29},{0,210},{9,1},{4,1},{2,1},{0,45},{0,211},{2,1},{0,61},{0,198}, + {85,250},{4,1},{2,1},{0,108},{0,169},{2,1},{0,154},{0,212},{32,1},{16,1}, + {8,1},{4,1},{2,1},{0,184},{0,139},{2,1},{0,77},{0,199},{4,1},{2,1}, + {0,124},{0,213},{2,1},{0,93},{0,225},{8,1},{4,1},{2,1},{0,30},{0,226}, + {2,1},{0,170},{0,185},{4,1},{2,1},{0,155},{0,227},{2,1},{0,214},{0,109}, + {20,1},{10,1},{6,1},{2,1},{0,62},{2,1},{0,46},{0,78},{2,1},{0,200}, + {0,140},{4,1},{2,1},{0,228},{0,215},{4,1},{2,1},{0,125},{0,171},{0,229}, + {10,1},{4,1},{2,1},{0,186},{0,94},{2,1},{0,201},{2,1},{0,156},{0,110}, + {8,1},{2,1},{0,230},{2,1},{0,13},{2,1},{0,224},{0,14},{4,1},{2,1}, + {0,216},{0,141},{2,1},{0,187},{0,202},{74,1},{2,1},{0,255},{64,1},{58,1}, + {32,1},{16,1},{8,1},{4,1},{2,1},{0,172},{0,231},{2,1},{0,126},{0,217}, + {4,1},{2,1},{0,157},{0,232},{2,1},{0,142},{0,203},{8,1},{4,1},{2,1}, + {0,188},{0,218},{2,1},{0,173},{0,233},{4,1},{2,1},{0,158},{0,204},{2,1}, + {0,219},{0,189},{16,1},{8,1},{4,1},{2,1},{0,234},{0,174},{2,1},{0,220}, + {0,205},{4,1},{2,1},{0,235},{0,190},{2,1},{0,221},{0,236},{8,1},{4,1}, + {2,1},{0,206},{0,237},{2,1},{0,222},{0,238},{0,15},{4,1},{2,1},{0,240}, + {0,31},{0,241},{4,1},{2,1},{0,242},{0,47},{2,1},{0,243},{0,63},{18,1}, + {8,1},{4,1},{2,1},{0,244},{0,79},{2,1},{0,245},{0,95},{4,1},{2,1}, + {0,246},{0,111},{2,1},{0,247},{2,1},{0,127},{0,143},{10,1},{4,1},{2,1}, + {0,248},{0,249},{4,1},{2,1},{0,159},{0,175},{0,250},{8,1},{4,1},{2,1}, + {0,251},{0,191},{2,1},{0,252},{0,207},{4,1},{2,1},{0,253},{0,223},{2,1}, + {0,254},{0,239}, + }; + + private static int ValTab32[][] = { + {2,1},{0,0},{8,1},{4,1},{2,1},{0,8},{0,4},{2,1},{0,1},{0,2}, + {8,1},{4,1},{2,1},{0,12},{0,10},{2,1},{0,3},{0,6},{6,1},{2,1}, + {0,9},{2,1},{0,5},{0,7},{4,1},{2,1},{0,14},{0,13},{2,1},{0,15}, + {0,11}, + }; + + private static int ValTab33[][] = { + {16,1},{8,1},{4,1},{2,1},{0,0},{0,1},{2,1},{0,2},{0,3},{4,1}, + {2,1},{0,4},{0,5},{2,1},{0,6},{0,7},{8,1},{4,1},{2,1},{0,8}, + {0,9},{2,1},{0,10},{0,11},{4,1},{2,1},{0,12},{0,13},{2,1},{0,14}, + {0,15}, + }; + + + public static huffcodetab[] ht = null; /* Simulate extern struct */ + + private static int[] bitbuf = new int[32]; + + /** + * Big Constructor : Computes all Huffman Tables. + */ + private huffcodetab(String S,int XLEN, int YLEN, int LINBITS, int LINMAX, int REF, + int[] TABLE, int[] HLEN, int[][] VAL, int TREELEN) + { + tablename0 = S.charAt(0); + tablename1 = S.charAt(1); + tablename2 = S.charAt(2); + xlen = XLEN; + ylen = YLEN; + linbits = LINBITS; + linmax = LINMAX; + ref = REF; + table = TABLE; + hlen = HLEN; + val = VAL; + treelen = TREELEN; + } + + + + /** + * Do the huffman-decoding. + * note! for counta,countb -the 4 bit value is returned in y, + * discard x. + */ + public static int huffman_decoder(huffcodetab h, int[] x, int[] y, int[] v, int[] w, BitReserve br) + { + // array of all huffcodtable headers + // 0..31 Huffman code table 0..31 + // 32,33 count1-tables + + int dmask = 1 << ((4 * 8) - 1); + int hs = 4 * 8; + int level; + int point = 0; + int error = 1; + level = dmask; + + if (h.val == null) return 2; + + /* table 0 needs no bits */ + if ( h.treelen == 0) + { + x[0] = y[0] = 0; + return 0; + } + + /* Lookup in Huffman table. */ + + /*int bitsAvailable = 0; + int bitIndex = 0; + + int bits[] = bitbuf;*/ + do + { + if (h.val[point][0]==0) + { /*end of tree*/ + x[0] = h.val[point][1] >>> 4; + y[0] = h.val[point][1] & 0xf; + error = 0; + break; + } + + // hget1bit() is called thousands of times, and so needs to be + // ultra fast. + /* + if (bitIndex==bitsAvailable) + { + bitsAvailable = br.readBits(bits, 32); + bitIndex = 0; + } + */ + //if (bits[bitIndex++]!=0) + if (br.hget1bit()!=0) + { + while (h.val[point][1] >= MXOFF) point += h.val[point][1]; + point += h.val[point][1]; + } + else + { + while (h.val[point][0] >= MXOFF) point += h.val[point][0]; + point += h.val[point][0]; + } + level >>>= 1; + // MDM: ht[0] is always 0; + } while ((level !=0 ) || (point < 0 /*ht[0].treelen*/) ); + + // put back any bits not consumed + /* + int unread = (bitsAvailable-bitIndex); + if (unread>0) + br.rewindNbits(unread); + */ + /* Process sign encodings for quadruples tables. */ + // System.out.println(h.tablename); + if (h.tablename0 == '3' && (h.tablename1 == '2' || h.tablename1 == '3')) + { + v[0] = (y[0]>>3) & 1; + w[0] = (y[0]>>2) & 1; + x[0] = (y[0]>>1) & 1; + y[0] = y[0] & 1; + + /* v, w, x and y are reversed in the bitstream. + switch them around to make test bistream work. */ + + if (v[0]!=0) + if (br.hget1bit() != 0) v[0] = -v[0]; + if (w[0]!=0) + if (br.hget1bit() != 0) w[0] = -w[0]; + if (x[0]!=0) + if (br.hget1bit() != 0) x[0] = -x[0]; + if (y[0]!=0) + if (br.hget1bit() != 0) y[0] = -y[0]; + } + else + { + // Process sign and escape encodings for dual tables. + // x and y are reversed in the test bitstream. + // Reverse x and y here to make test bitstream work. + + if (h.linbits != 0) + if ((h.xlen-1) == x[0]) + x[0] += br.hgetbits(h.linbits); + if (x[0] != 0) + if (br.hget1bit() != 0) x[0] = -x[0]; + if (h.linbits != 0) + if ((h.ylen-1) == y[0]) + y[0] += br.hgetbits(h.linbits); + if (y[0] != 0) + if (br.hget1bit() != 0) y[0] = -y[0]; + } + return error; + } + + public static void inithuff() + { + + if (ht!=null) + return; + + ht = new huffcodetab[HTN]; + ht[0] = new huffcodetab("0 ",0,0,0,0,-1,null,null,ValTab0,0); + ht[1] = new huffcodetab("1 ",2,2,0,0,-1,null,null,ValTab1,7); + ht[2] = new huffcodetab("2 ",3,3,0,0,-1,null,null,ValTab2,17); + ht[3] = new huffcodetab("3 ",3,3,0,0,-1,null,null,ValTab3,17); + ht[4] = new huffcodetab("4 ",0,0,0,0,-1,null,null,ValTab4,0); + ht[5] = new huffcodetab("5 ",4,4,0,0,-1,null,null,ValTab5,31); + ht[6] = new huffcodetab("6 ",4,4,0,0,-1,null,null,ValTab6,31); + ht[7] = new huffcodetab("7 ",6,6,0,0,-1,null,null,ValTab7,71); + ht[8] = new huffcodetab("8 ",6,6,0,0,-1,null,null,ValTab8,71); + ht[9] = new huffcodetab("9 ",6,6,0,0,-1,null,null,ValTab9,71); + ht[10] = new huffcodetab("10 ",8,8,0,0,-1,null,null,ValTab10,127); + ht[11] = new huffcodetab("11 ",8,8,0,0,-1,null,null,ValTab11,127); + ht[12] = new huffcodetab("12 ",8,8,0,0,-1,null,null,ValTab12,127); + ht[13] = new huffcodetab("13 ",16,16,0,0,-1,null,null,ValTab13,511); + ht[14] = new huffcodetab("14 ",0,0,0,0,-1,null,null,ValTab14,0); + ht[15] = new huffcodetab("15 ",16,16,0,0,-1,null,null,ValTab15,511); + ht[16] = new huffcodetab("16 ",16,16,1,1,-1,null,null,ValTab16,511); + ht[17] = new huffcodetab("17 ",16,16,2,3,16,null,null,ValTab16,511); + ht[18] = new huffcodetab("18 ",16,16,3,7,16,null,null,ValTab16,511); + ht[19] = new huffcodetab("19 ",16,16,4,15,16,null,null,ValTab16,511); + ht[20] = new huffcodetab("20 ",16,16,6,63,16,null,null,ValTab16,511); + ht[21] = new huffcodetab("21 ",16,16,8,255,16,null,null,ValTab16,511); + ht[22] = new huffcodetab("22 ",16,16,10,1023,16,null,null,ValTab16,511); + ht[23] = new huffcodetab("23 ",16,16,13,8191,16,null,null,ValTab16,511); + ht[24] = new huffcodetab("24 ",16,16,4,15,-1,null,null,ValTab24,512); + ht[25] = new huffcodetab("25 ",16,16,5,31,24,null,null,ValTab24,512); + ht[26] = new huffcodetab("26 ",16,16,6,63,24,null,null,ValTab24,512); + ht[27] = new huffcodetab("27 ",16,16,7,127,24,null,null,ValTab24,512); + ht[28] = new huffcodetab("28 ",16,16,8,255,24,null,null,ValTab24,512); + ht[29] = new huffcodetab("29 ",16,16,9,511,24,null,null,ValTab24,512); + ht[30] = new huffcodetab("30 ",16,16,11,2047,24,null,null,ValTab24,512); + ht[31] = new huffcodetab("31 ",16,16,13,8191,24,null,null,ValTab24,512); + ht[32] = new huffcodetab("32 ",1,16,0,0,-1,null,null,ValTab32,31); + ht[33] = new huffcodetab("33 ",1,16,0,0,-1,null,null,ValTab33,31); + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/decoder/l3reorder.ser b/JLayer1.0.1/src/javazoom/jl/decoder/l3reorder.ser new file mode 100644 index 0000000000000000000000000000000000000000..da216fcf469620b74fadec2ab33eb91cc99572d5 GIT binary patch literal 13925 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�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 interface provides an abstraction for + * a device capable of sounding audio samples. Samples are written to + * the device wia the write() method. The device assumes + * that these samples are signed 16-bit samples taken at the output frequency + * of the decoder. If the decoder outputs more than one channel, the samples for + * each channel are assumed to appear consecutively, with the lower numbered + * channels preceeding higher-numbered channels. E.g. if there are two + * channels, the samples will appear in this order: + *


+ * 
+ *		l0, r0, l1, r1, l2, r2...
+ * 
+ * where 
+ *	lx indicates the xth sample on channel 0
+ *  rx indicates the xth sample on channel 1
+ * 
+ * + * @since 0.0.8 + * @author Mat McGowan + */ +public interface AudioDevice +{ + /** + * Prepares the AudioDevice for playback of audio samples. + * @param decoder The decoder that will be providing the audio + * samples. + * + * If the audio device is already open, this method returns silently. + * + */ + public void open(Decoder decoder) throws JavaLayerException; + + /** + * Retrieves the open state of this audio device. + * + * @return true if this audio device is open and playing + * audio samples, or false otherwise. + */ + public boolean isOpen(); + + /** + * Writes a number of samples to this AudioDevice. + * + * @param samples The array of signed 16-bit samples to write + * to the audio device. + * @param offs The offset of the first sample. + * @param len The number of samples to write. + * + * This method may return prior to the samples actually being played + * by the audio device. + */ + public void write(short[] samples, int offs, int len) throws JavaLayerException; + + + /** + * Closes this audio device. Any currently playing audio is stopped + * as soon as possible. Any previously written audio data that has not been heard + * is discarded. + * + * The implementation should ensure that any threads currently blocking + * on the device (e.g. during a write or flush + * operation should be unblocked by this method. + */ + public void close(); + + + /** + * Blocks until all audio samples previously written to this audio device have + * been heard. + */ + public void flush(); + + /** + * Retrieves the current playback position in milliseconds. + */ + public int getPosition(); +} diff --git a/JLayer1.0.1/src/javazoom/jl/player/AudioDeviceBase.java b/JLayer1.0.1/src/javazoom/jl/player/AudioDeviceBase.java new file mode 100644 index 0000000..d9c84f0 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/AudioDeviceBase.java @@ -0,0 +1,177 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 29/01/00 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player; + +import javazoom.jl.decoder.Decoder; +import javazoom.jl.decoder.JavaLayerException; + +/** + * The AudioDeviceBase class provides a simple thread-safe + * implementation of the AudioDevice interface. + * Template methods are provided for subclasses to override and + * in doing so provide the implementation for the main operations + * of the AudioDevice interface. + * + * @since 0.0.8 + * @author Mat McGowan + */ +/* + * REVIEW: It is desirable to be able to use the decoder whe + * in the implementation of open(), but the decoder + * has not yet read a frame, and so much of the + * desired information (sample rate, channels etc.) + * are not available. + */ +public abstract class AudioDeviceBase implements AudioDevice +{ + private boolean open = false; + + private Decoder decoder = null; + + /** + * Opens this audio device. + * + * @param decoder The decoder that will provide audio data + * to this audio device. + */ + public synchronized void open(Decoder decoder) throws JavaLayerException + { + if (!isOpen()) + { + this.decoder = decoder; + openImpl(); + setOpen(true); + } + } + + /** + * Template method to provide the + * implementation for the opening of the audio device. + */ + protected void openImpl() throws JavaLayerException + { + } + + /** + * Sets the open state for this audio device. + */ + protected void setOpen(boolean open) + { + this.open = open; + } + + /** + * Determines if this audio device is open or not. + * + * @return true if the audio device is open, + * false if it is not. + */ + public synchronized boolean isOpen() + { + return open; + } + + /** + * Closes this audio device. If the device is currently playing + * audio, playback is stopped immediately without flushing + * any buffered audio data. + */ + public synchronized void close() + { + if (isOpen()) + { + closeImpl(); + setOpen(false); + decoder = null; + } + } + + /** + * Template method to provide the implementation for + * closing the audio device. + */ + protected void closeImpl() + { + } + + /** + * Writes audio data to this audio device. Audio data is + * assumed to be in the output format of the decoder. This + * method may return before the data has actually been sounded + * by the device if the device buffers audio samples. + * + * @param samples The samples to write to the audio device. + * @param offs The offset into the array of the first sample to write. + * @param len The number of samples from the array to write. + * @throws JavaLayerException if the audio data could not be + * written to the audio device. + * If the audio device is not open, this method does nthing. + */ + public void write(short[] samples, int offs, int len) + throws JavaLayerException + { + if (isOpen()) + { + writeImpl(samples, offs, len); + } + } + + /** + * Template method to provide the implementation for + * writing audio samples to the audio device. + */ + protected void writeImpl(short[] samples, int offs, int len) + throws JavaLayerException + { + } + + /** + * Waits for any buffered audio samples to be played by the + * audio device. This method should only be called prior + * to closing the device. + */ + public void flush() + { + if (isOpen()) + { + flushImpl(); + } + } + + /** + * Template method to provide the implementation for + * flushing any buffered audio data. + */ + protected void flushImpl() + { + } + + /** + * Retrieves the decoder that provides audio data to this + * audio device. + * + * @return The associated decoder. + */ + protected Decoder getDecoder() + { + return decoder; + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/player/AudioDeviceFactory.java b/JLayer1.0.1/src/javazoom/jl/player/AudioDeviceFactory.java new file mode 100644 index 0000000..2d502d2 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/AudioDeviceFactory.java @@ -0,0 +1,87 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 29/01/00 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player; + +import javazoom.jl.decoder.JavaLayerException; + +/** + * An AudioDeviceFactory class is responsible for creating + * a specific AudioDevice implementation. A factory implementation + * can be as simple or complex as desired and may support just one implementation + * or may return several implementations depending upon the execution + * environment. + *

+ * When implementing a factory that provides an AudioDevice that uses + * class that may not be present, the factory should dynamically link to any + * specific implementation classes required to instantiate or test the audio + * implementation. This is so that the application as a whole + * can run without these classes being present. The audio + * device implementation, however, will usually statically link to the classes + * required. (See the JavaSound deivce and factory for an example + * of this.) + * + * @see FactoryRegistry + * + * @since 0.0.8 + * @author Mat McGowan + */ +public abstract class AudioDeviceFactory +{ + /** + * Creates a new AudioDevice. + * + * @return a new instance of a specific class of AudioDevice. + * @throws JavaLayerException if an instance of AudioDevice could not + * be created. + */ + public abstract AudioDevice createAudioDevice() throws JavaLayerException; + + /** + * Creates an instance of an AudioDevice implementation. + * @param loader The ClassLoader to use to + * load the named class, or null to use the + * system class loader. + * @param name The name of the class to load. + * @return A newly-created instance of the audio device class. + */ + protected AudioDevice instantiate(ClassLoader loader, String name) + throws ClassNotFoundException, + IllegalAccessException, + InstantiationException + { + AudioDevice dev = null; + + Class cls = null; + if (loader==null) + { + cls = Class.forName(name); + } + else + { + cls = loader.loadClass(name); + } + + Object o = cls.newInstance(); + dev = (AudioDevice)o; + + return dev; + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/player/FactoryRegistry.java b/JLayer1.0.1/src/javazoom/jl/player/FactoryRegistry.java new file mode 100644 index 0000000..8919995 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/FactoryRegistry.java @@ -0,0 +1,129 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 29/01/00 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player; + +import java.util.Enumeration; +import java.util.Hashtable; + +import javazoom.jl.decoder.JavaLayerException; + +/** + * The FactoryRegistry class stores the factories + * for all the audio device implementations available in the system. + *


+
+

+Constant Field Values

+
+
+Contents + + + + + + +
+javazoom.jl.*
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.converter.Converter.PrintWriterProgressListener
+public static final intDEBUG_DETAIL7
+public static final intEXPERT_DETAIL1
+public static final intMAX_DETAIL10
+public static final intNO_DETAIL0
+public static final intVERBOSE_DETAIL2
+ +

+ +

+ + + + + + + + + + + + + + + + + +
javazoom.jl.converter.Converter.ProgressListener
+public static final intUPDATE_CONVERT_COMPLETE2
+public static final intUPDATE_FRAME_COUNT1
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.converter.RiffFile
+public static final intDDC_FAILURE1
+public static final intDDC_FILE_ERROR3
+public static final intDDC_INVALID_CALL4
+public static final intDDC_INVALID_FILE6
+public static final intDDC_OUT_OF_MEMORY2
+public static final intDDC_SUCCESS0
+public static final intDDC_USER_ABORT5
+public static final intRFM_READ2
+public static final intRFM_UNKNOWN0
+public static final intRFM_WRITE1
+ +

+ +

+ + + + + + + + + + + + +
javazoom.jl.converter.WaveFile
+public static final intMAX_WAVE_CHANNELS2
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.BitstreamErrors
+public static final intBITSTREAM_LAST511
+public static final intINVALIDFRAME261
+public static final intSTREAM_EOF260
+public static final intSTREAM_ERROR258
+public static final intUNEXPECTED_EOF259
+public static final intUNKNOWN_ERROR256
+public static final intUNKNOWN_SAMPLE_RATE257
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.DecoderErrors
+public static final intILLEGAL_SUBBAND_ALLOCATION514
+public static final intUNKNOWN_ERROR512
+public static final intUNSUPPORTED_LAYER513
+ +

+ +

+ + + + + + + + + + + + +
javazoom.jl.decoder.Equalizer
+public static final floatBAND_NOT_PRESENT-1f/0f
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.Header
+public static final intDUAL_CHANNEL2
+public static final intFOURTYEIGHT1
+public static final intFOURTYFOUR_POINT_ONE0
+public static final intJOINT_STEREO1
+public static final intMPEG11
+public static final intMPEG2_LSF0
+public static final intMPEG25_LSF2
+public static final intSINGLE_CHANNEL3
+public static final intSTEREO0
+public static final intTHIRTYTWO2
+ +

+ +

+ + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.JavaLayerErrors
+public static final intBITSTREAM_ERROR256
+public static final intDECODER_ERROR512
+ +

+ +

+ + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.Obuffer
+public static final intMAXCHANNELS2
+public static final intOBUFFERSIZE2304
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
javazoom.jl.decoder.OutputChannels
+public static final intBOTH_CHANNELS0
+public static final intDOWNMIX_CHANNELS3
+public static final intLEFT_CHANNEL1
+public static final intRIGHT_CHANNEL2
+ +

+ +

+ + + + + + + + + + + + +
javazoom.jl.decoder.Source
+public static final longLENGTH_UNKNOWN-1L
+ +

+ +

+ + + + + + + + + + + + +
javazoom.jl.player.PlayerApplet
+public static final java.lang.StringAUDIO_PARAMETER"audioURL"
+ +

+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/deprecated-list.html b/build/classes/doc/deprecated-list.html new file mode 100644 index 0000000..a7fed74 --- /dev/null +++ b/build/classes/doc/deprecated-list.html @@ -0,0 +1,140 @@ + + + + + + +Deprecated List + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Deprecated API

+
+
+Contents
    +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/help-doc.html b/build/classes/doc/help-doc.html new file mode 100644 index 0000000..3df9fcd --- /dev/null +++ b/build/classes/doc/help-doc.html @@ -0,0 +1,213 @@ + + + + + + +API Help + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+How This API Document Is Organized

+
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

+Overview

+
+ +

+The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

+

+Package

+
+ +

+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    +
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
+
+

+Class/Interface

+
+ +

+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description +

    +

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary +

    +

  • Field Detail
  • Constructor Detail
  • Method Detail
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+ +

+Annotation Type

+
+ +

+Each annotation type has its own separate page with the following sections:

    +
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
+
+ +

+Enum

+
+ +

+Each enum has its own separate page with the following sections:

    +
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
+
+

+Tree (Class Hierarchy)

+
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    +
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
+
+

+Deprecated API

+
+The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+

+Index

+
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+

+Prev/Next

+These links take you to the next or previous class, interface, package, or related page.

+Frames/No Frames

+These links show and hide the HTML frames. All pages are available with or without frames. +

+

+Serialized Form

+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. +

+

+Constant Field Values

+The Constant Field Values page lists the static final fields and their values. +

+ + +This help file applies to API documentation generated using the standard doclet. + +
+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/index-all.html b/build/classes/doc/index-all.html new file mode 100644 index 0000000..1cde02b --- /dev/null +++ b/build/classes/doc/index-all.html @@ -0,0 +1,1451 @@ + + + + + + +Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I J L M N O P R S T U V W
+

+A

+
+
add_bits(int, int) - +Method in class javazoom.jl.decoder.Crc16 +
Feed a bitstring to the crc calculation (0 < length <= 32). +
addControl(Control) - +Method in class javazoom.jl.decoder.Manager +
  +
addFactory(AudioDeviceFactory) - +Method in class javazoom.jl.player.FactoryRegistry +
Registers an AudioDeviceFactory instance + with this registry. +
AdvancedPlayer - Class in javazoom.jl.player.advanced
a hybrid of javazoom.jl.player.Player tweeked to include play(startFrame, endFrame) + hopefully this will be included in the api
AdvancedPlayer(InputStream) - +Constructor for class javazoom.jl.player.advanced.AdvancedPlayer +
Creates a new Player instance. +
AdvancedPlayer(InputStream, AudioDevice) - +Constructor for class javazoom.jl.player.advanced.AdvancedPlayer +
  +
append(int, short) - +Method in class javazoom.jl.converter.WaveFileObuffer +
Takes a 16 Bit PCM sample. +
append(int, short) - +Method in class javazoom.jl.decoder.Obuffer +
Takes a 16 Bit PCM sample. +
append(int, short) - +Method in class javazoom.jl.decoder.SampleBuffer +
Takes a 16 Bit PCM sample. +
appendSamples(int, float[]) - +Method in class javazoom.jl.decoder.Obuffer +
Accepts 32 new PCM samples. +
appendSamples(int, float[]) - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
AUDIO_PARAMETER - +Static variable in class javazoom.jl.player.PlayerApplet +
  +
AudioDevice - Interface in javazoom.jl.player
The AudioDevice interface provides an abstraction for + a device capable of sounding audio samples.
AudioDeviceBase - Class in javazoom.jl.player
The AudioDeviceBase class provides a simple thread-safe + implementation of the AudioDevice interface.
AudioDeviceBase() - +Constructor for class javazoom.jl.player.AudioDeviceBase +
  +
AudioDeviceFactory - Class in javazoom.jl.player
An AudioDeviceFactory class is responsible for creating + a specific AudioDevice implementation.
AudioDeviceFactory() - +Constructor for class javazoom.jl.player.AudioDeviceFactory +
  +
+
+

+B

+
+
Backpatch(long, RiffFile.RiffChunkHeader, int) - +Method in class javazoom.jl.converter.RiffFile +
Write Data to specified offset. +
Backpatch(long, byte[], int) - +Method in class javazoom.jl.converter.RiffFile +
  +
BAND_NOT_PRESENT - +Static variable in class javazoom.jl.decoder.Equalizer +
Equalizer setting to denote that a given band will not be + present in the output signal. +
bitrate() - +Method in class javazoom.jl.decoder.Header +
Return Bitrate. +
bitrate_index() - +Method in class javazoom.jl.decoder.Header +
Returns bitrate index. +
bitrate_instant() - +Method in class javazoom.jl.decoder.Header +
Return Instant Bitrate. +
bitrate_str - +Static variable in class javazoom.jl.decoder.Header +
  +
bitrate_string() - +Method in class javazoom.jl.decoder.Header +
Return Bitrate. +
bitrates - +Static variable in class javazoom.jl.decoder.Header +
  +
BitsPerSample() - +Method in class javazoom.jl.converter.WaveFile +
  +
Bitstream - Class in javazoom.jl.decoder
The Bistream class is responsible for parsing + an MPEG audio bitstream.
Bitstream(InputStream) - +Constructor for class javazoom.jl.decoder.Bitstream +
Construct a IBitstream that reads data from a + given InputStream. +
BITSTREAM_ERROR - +Static variable in interface javazoom.jl.decoder.JavaLayerErrors +
The first bitstream error code. +
BITSTREAM_LAST - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
  +
BitstreamErrors - Interface in javazoom.jl.decoder
This interface describes all error codes that can be thrown + in BistreamExceptions.
BitstreamException - Exception in javazoom.jl.decoder
Instances of BitstreamException are thrown + when operations on a Bitstream fail.
BitstreamException(String, Throwable) - +Constructor for exception javazoom.jl.decoder.BitstreamException +
  +
BitstreamException(int, Throwable) - +Constructor for exception javazoom.jl.decoder.BitstreamException +
  +
BOTH - +Static variable in class javazoom.jl.decoder.OutputChannels +
  +
BOTH_CHANNELS - +Static variable in class javazoom.jl.decoder.OutputChannels +
Flag to indicate output should include both channels. +
+
+

+C

+
+
calculate_framesize() - +Method in class javazoom.jl.decoder.Header +
Calculate Frame size. +
chan - +Variable in class javazoom.jl.converter.WaveFile.WaveFileSample +
  +
checksum() - +Method in class javazoom.jl.decoder.Crc16 +
Return the calculated checksum. +
checksum - +Variable in class javazoom.jl.decoder.Header +
  +
checksum_ok() - +Method in class javazoom.jl.decoder.Header +
Returns Checksum flag. +
checksums() - +Method in class javazoom.jl.decoder.Header +
Returns Protection bit. +
clear_buffer() - +Method in class javazoom.jl.converter.WaveFileObuffer +
  +
clear_buffer() - +Method in class javazoom.jl.decoder.Obuffer +
Clears all data in the buffer (for seeking). +
clear_buffer() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
clone() - +Method in class javazoom.jl.decoder.Decoder.Params +
  +
Close() - +Method in class javazoom.jl.converter.RiffFile +
Close Riff File. +
Close() - +Method in class javazoom.jl.converter.WaveFile +
  +
close() - +Method in class javazoom.jl.converter.WaveFileObuffer +
  +
close() - +Method in class javazoom.jl.decoder.Bitstream +
Close the Bitstream. +
close() - +Method in class javazoom.jl.decoder.Obuffer +
  +
close() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
close() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
Cloases this player. +
close() - +Method in interface javazoom.jl.player.AudioDevice +
Closes this audio device. +
close() - +Method in class javazoom.jl.player.AudioDeviceBase +
Closes this audio device. +
close() - +Method in class javazoom.jl.player.Player +
Cloases this player. +
closeFrame() - +Method in class javazoom.jl.decoder.Bitstream +
Close MP3 frame. +
closeImpl() - +Method in class javazoom.jl.player.AudioDeviceBase +
Template method to provide the implementation for + closing the audio device. +
closeImpl() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
Control - Interface in javazoom.jl.decoder
Work in progress.
convert(String, String) - +Method in class javazoom.jl.converter.Converter +
  +
convert(String, String, Converter.ProgressListener) - +Method in class javazoom.jl.converter.Converter +
  +
convert(String, String, Converter.ProgressListener, Decoder.Params) - +Method in class javazoom.jl.converter.Converter +
  +
convert(InputStream, String, Converter.ProgressListener, Decoder.Params) - +Method in class javazoom.jl.converter.Converter +
  +
Converter - Class in javazoom.jl.converter
The Converter class implements the conversion of + an MPEG audio file to a .WAV file.
Converter() - +Constructor for class javazoom.jl.converter.Converter +
Creates a new converter instance. +
Converter.PrintWriterProgressListener - Class in javazoom.jl.converter
Implementation of ProgressListener that writes + notification text to a PrintWriter.
Converter.PrintWriterProgressListener(PrintWriter, int) - +Constructor for class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
Converter.ProgressListener - Interface in javazoom.jl.converter
This interface is used by the Converter to provide + notification of tasks being carried out by the converter, + and to provide new information as it becomes available.
converterException(Throwable) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
converterException(Throwable) - +Method in interface javazoom.jl.converter.Converter.ProgressListener +
Called when an exception is thrown during while converting + a frame. +
converterUpdate(int, int, int) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
converterUpdate(int, int, int) - +Method in interface javazoom.jl.converter.Converter.ProgressListener +
Notifies the listener that new information is available. +
copyright() - +Method in class javazoom.jl.decoder.Header +
Returns Copyright. +
countFrames(InputStream) - +Method in class javazoom.jl.converter.Converter +
  +
Crc16 - Class in javazoom.jl.decoder
16-Bit CRC checksum
Crc16() - +Constructor for class javazoom.jl.decoder.Crc16 +
Dummy Constructor +
createAudioDevice() - +Method in class javazoom.jl.player.AudioDeviceFactory +
Creates a new AudioDevice. +
createAudioDevice() - +Method in class javazoom.jl.player.FactoryRegistry +
  +
createAudioDevice() - +Method in class javazoom.jl.player.JavaSoundAudioDeviceFactory +
  +
createAudioDeviceImpl() - +Method in class javazoom.jl.player.JavaSoundAudioDeviceFactory +
  +
createInstance(String[]) - +Static method in class javazoom.jl.player.jlp +
  +
createPlayerThread() - +Method in class javazoom.jl.player.PlayerApplet +
Creates a new thread used to run the audio player. +
createSource() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
CurrentFileMode() - +Method in class javazoom.jl.converter.RiffFile +
Return File Mode. +
CurrentFilePosition() - +Method in class javazoom.jl.converter.RiffFile +
Return File Position. +
CurrentFilePosition() - +Method in class javazoom.jl.converter.WaveFile +
  +
+
+

+D

+
+
DDC_FAILURE - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_FILE_ERROR - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_INVALID_CALL - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_INVALID_FILE - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_OUT_OF_MEMORY - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_SUCCESS - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DDC_USER_ABORT - +Static variable in class javazoom.jl.converter.RiffFile +
  +
DEBUG_DETAIL - +Static variable in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
Debug detail. +
decodedFrame(int, Header, Obuffer) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
decodedFrame(int, Header, Obuffer) - +Method in interface javazoom.jl.converter.Converter.ProgressListener +
This method is called after a frame has been decoded. +
decodeFrame(Header, Bitstream) - +Method in class javazoom.jl.decoder.Decoder +
Decodes one frame from an MPEG audio bitstream. +
decodeFrame() - +Method in interface javazoom.jl.decoder.FrameDecoder +
Decodes one frame of MPEG audio. +
decodeFrame() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
Decodes a single frame. +
decodeFrame() - +Method in class javazoom.jl.player.Player +
Decodes a single frame. +
Decoder - Class in javazoom.jl.decoder
The Decoder class encapsulates the details of + decoding an MPEG audio frame.
Decoder() - +Constructor for class javazoom.jl.decoder.Decoder +
Creates a new Decoder instance with default + parameters. +
Decoder(Decoder.Params) - +Constructor for class javazoom.jl.decoder.Decoder +
Creates a new Decoder instance with default + parameters. +
Decoder.Params - Class in javazoom.jl.decoder
The Params class presents the customizable + aspects of the decoder.
Decoder.Params() - +Constructor for class javazoom.jl.decoder.Decoder.Params +
  +
DECODER_ERROR - +Static variable in interface javazoom.jl.decoder.JavaLayerErrors +
The first decoder error code. +
DecoderErrors - Interface in javazoom.jl.decoder
This interface provides constants describing the error + codes used by the Decoder to indicate errors.
DecoderException - Exception in javazoom.jl.decoder
The DecoderException represents the class of + errors that can occur when decoding MPEG audio.
DecoderException(String, Throwable) - +Constructor for exception javazoom.jl.decoder.DecoderException +
  +
DecoderException(int, Throwable) - +Constructor for exception javazoom.jl.decoder.DecoderException +
  +
deserialize(InputStream, Class) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
Deserializes the object contained in the given input stream. +
deserialize(InputStream) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
Deserializes an object from the given InputStream. +
deserializeArray(InputStream, Class, int) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
Deserializes an array from a given InputStream. +
deserializeArrayResource(String, Class, int) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
  +
destroy() - +Method in class javazoom.jl.player.PlayerApplet +
  +
DOWNMIX - +Static variable in class javazoom.jl.decoder.OutputChannels +
  +
DOWNMIX_CHANNELS - +Static variable in class javazoom.jl.decoder.OutputChannels +
Flag to indicate output is mono. +
DUAL_CHANNEL - +Static variable in class javazoom.jl.decoder.Header +
  +
+
+

+E

+
+
Equalizer - Class in javazoom.jl.decoder
The Equalizer class can be used to specify + equalization settings for the MPEG audio decoder.
Equalizer() - +Constructor for class javazoom.jl.decoder.Equalizer +
Creates a new Equalizer instance. +
Equalizer(float[]) - +Constructor for class javazoom.jl.decoder.Equalizer +
  +
Equalizer(Equalizer.EQFunction) - +Constructor for class javazoom.jl.decoder.Equalizer +
  +
Equalizer.EQFunction - Class in javazoom.jl.decoder
 
Equalizer.EQFunction() - +Constructor for class javazoom.jl.decoder.Equalizer.EQFunction +
  +
equals(Object) - +Method in class javazoom.jl.decoder.OutputChannels +
  +
Expect(String, int) - +Method in class javazoom.jl.converter.RiffFile +
Expect NumBytes data. +
EXPERT_DETAIL - +Static variable in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
Level of detail typically expected of expert + users. +
+
+

+F

+
+
factories - +Variable in class javazoom.jl.player.FactoryRegistry +
  +
FactoryRegistry - Class in javazoom.jl.player
The FactoryRegistry class stores the factories + for all the audio device implementations available in the system.
FactoryRegistry() - +Constructor for class javazoom.jl.player.FactoryRegistry +
  +
file - +Variable in class javazoom.jl.converter.RiffFile +
  +
flush() - +Method in interface javazoom.jl.player.AudioDevice +
Blocks until all audio samples previously written to this audio device have + been heard. +
flush() - +Method in class javazoom.jl.player.AudioDeviceBase +
Waits for any buffered audio samples to be played by the + audio device. +
flushImpl() - +Method in class javazoom.jl.player.AudioDeviceBase +
Template method to provide the implementation for + flushing any buffered audio data. +
flushImpl() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
fmode - +Variable in class javazoom.jl.converter.RiffFile +
  +
FourCC(String) - +Static method in class javazoom.jl.converter.RiffFile +
Fill the header. +
FOURTYEIGHT - +Static variable in class javazoom.jl.decoder.Header +
  +
FOURTYFOUR_POINT_ONE - +Static variable in class javazoom.jl.decoder.Header +
  +
FrameDecoder - Interface in javazoom.jl.decoder
Implementations of FrameDecoder are responsible for decoding + an MPEG audio frame.
framesize - +Variable in class javazoom.jl.decoder.Header +
  +
frequencies - +Static variable in class javazoom.jl.decoder.Header +
  +
frequency() - +Method in class javazoom.jl.decoder.Header +
Returns Frequency. +
fromInt(int) - +Static method in class javazoom.jl.decoder.OutputChannels +
Creates an OutputChannels instance + corresponding to the given channel code. +
+
+

+G

+
+
get_bits(int) - +Method in class javazoom.jl.decoder.Bitstream +
Read bits from buffer into the lower bits of an unsigned int. +
getAudioDevice() - +Method in class javazoom.jl.player.jlp +
  +
getAudioDevice() - +Method in class javazoom.jl.player.PlayerApplet +
Retrieves the AudioDevice instance that will + be used to sound the audio data. +
getAudioFileName() - +Method in class javazoom.jl.player.PlayerApplet +
  +
getAudioFormat() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
getAudioStream() - +Method in class javazoom.jl.player.PlayerApplet +
Retrieves the InputStream that provides the MPEG audio + stream data. +
getAudioURL() - +Method in class javazoom.jl.player.PlayerApplet +
  +
getBand(int) - +Method in class javazoom.jl.decoder.Equalizer.EQFunction +
Returns the setting of a band in the equalizer. +
getBand(int) - +Method in class javazoom.jl.decoder.Equalizer +
Retrieves the eq setting for a given band. +
getBandCount() - +Method in class javazoom.jl.decoder.Equalizer +
Retrieves the number of bands present in this equalizer. +
getBuffer() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
getBufferLength() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
getByteArray(int) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
getChannelCount() - +Method in class javazoom.jl.decoder.OutputChannels +
Retrieves the number of output channels represented + by this channel output type. +
getChannelCount() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
getChannelsOutputCode() - +Method in class javazoom.jl.decoder.OutputChannels +
Retrieves the code representing the desired output channels. +
getDecoder() - +Method in class javazoom.jl.player.AudioDeviceBase +
Retrieves the decoder that provides audio data to this + audio device. +
getDefaultParams() - +Static method in class javazoom.jl.decoder.Decoder +
  +
getErrorCode() - +Method in exception javazoom.jl.decoder.BitstreamException +
  +
getErrorCode() - +Method in exception javazoom.jl.decoder.DecoderException +
  +
getErrorString(int) - +Static method in exception javazoom.jl.decoder.BitstreamException +
  +
getErrorString(int) - +Static method in exception javazoom.jl.decoder.DecoderException +
  +
getException() - +Method in exception javazoom.jl.decoder.JavaLayerException +
  +
getFactoriesPriority() - +Method in class javazoom.jl.player.FactoryRegistry +
  +
getFileName() - +Method in class javazoom.jl.player.PlayerApplet +
  +
getFrame() - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
getHook() - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
  +
getId() - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
getInitialEqualizerSettings() - +Method in class javazoom.jl.decoder.Decoder.Params +
Retrieves the equalizer settings that the decoder's equalizer + will be initialized from. +
getInputStream() - +Method in class javazoom.jl.player.jlp +
Playing file from FileInputStream. +
getOutputBlockSize() - +Method in class javazoom.jl.decoder.Decoder +
Retrieves the maximum number of samples that will be written to + the output buffer when one frame is decoded. +
getOutputChannels() - +Method in class javazoom.jl.decoder.Decoder +
Retrieves the number of channels of PCM samples output by + this decoder. +
getOutputChannels() - +Method in class javazoom.jl.decoder.Decoder.Params +
  +
getOutputFrequency() - +Method in class javazoom.jl.decoder.Decoder +
Retrieves the sample frequency of the PCM samples output + by this decoder. +
getPlayBackListener() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
gets the PlaybackListener +
getPosition() - +Method in interface javazoom.jl.decoder.Control +
Retrieves the current position. +
getPosition() - +Method in interface javazoom.jl.player.AudioDevice +
Retrieves the current playback position in milliseconds. +
getPosition() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
getPosition() - +Method in class javazoom.jl.player.NullAudioDevice +
  +
getPosition() - +Method in class javazoom.jl.player.Player +
Retrieves the position in milliseconds of the current audio + sample being played. +
getRawID3v2() - +Method in class javazoom.jl.decoder.Bitstream +
Return raw ID3v2 frames + header. +
getResourceAsStream(String) - +Method in interface javazoom.jl.decoder.JavaLayerHook +
Retrieves the named resource. +
getResourceAsStream(String) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
Retrieves an InputStream for a named resource. +
getSampleFrequency() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
getSource() - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
getSourceLineInfo() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
getSyncHeader() - +Method in class javazoom.jl.decoder.Header +
Returns synchronized header. +
getURLInputStream() - +Method in class javazoom.jl.player.jlp +
Playing file from URL (Streaming). +
+
+

+H

+
+
hashCode() - +Method in class javazoom.jl.decoder.OutputChannels +
  +
Header - Class in javazoom.jl.decoder
Class for extracting information from a frame header.
header_pos() - +Method in class javazoom.jl.decoder.Bitstream +
Return position of the first audio header. +
+
+

+I

+
+
ILLEGAL_SUBBAND_ALLOCATION - +Static variable in interface javazoom.jl.decoder.DecoderErrors +
Illegal allocation in subband layer. +
init(String) - +Method in class javazoom.jl.player.jlp +
  +
init() - +Method in class javazoom.jl.player.PlayerApplet +
Initializes this applet. +
InputStreamSource - Class in javazoom.jl.decoder
Work In Progress.
InputStreamSource(InputStream) - +Constructor for class javazoom.jl.decoder.InputStreamSource +
  +
instantiate(ClassLoader, String) - +Method in class javazoom.jl.player.AudioDeviceFactory +
Creates an instance of an AudioDevice implementation. +
intensity_stereo_bound() - +Method in class javazoom.jl.decoder.Header +
Returns Intensity Stereo. +
INVALIDFRAME - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
Frame data are missing. +
isComplete() - +Method in class javazoom.jl.player.Player +
Returns the completed status of this player. +
isDetail(int) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
isOpen() - +Method in interface javazoom.jl.player.AudioDevice +
Retrieves the open state of this audio device. +
isOpen() - +Method in class javazoom.jl.player.AudioDeviceBase +
Determines if this audio device is open or not. +
isPlaying() - +Method in interface javazoom.jl.decoder.Control +
  +
isRandomAccess() - +Method in interface javazoom.jl.decoder.Control +
  +
isSeekable() - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
isSeekable() - +Method in interface javazoom.jl.decoder.Source +
  +
isSyncCurrentPosition(int) - +Method in class javazoom.jl.decoder.Bitstream +
Determines if the next 4 bytes of the stream represent a + frame header. +
isSyncMark(int, int, int) - +Method in class javazoom.jl.decoder.Bitstream +
  +
+
+

+J

+
+
JavaLayerError - Error in javazoom.jl.decoder
Work in progress.
JavaLayerError() - +Constructor for error javazoom.jl.decoder.JavaLayerError +
  +
JavaLayerErrors - Interface in javazoom.jl.decoder
Exception erorr codes for components of the JavaLayer API.
JavaLayerException - Exception in javazoom.jl.decoder
The JavaLayerException is the base class for all API-level + exceptions thrown by JavaLayer.
JavaLayerException() - +Constructor for exception javazoom.jl.decoder.JavaLayerException +
  +
JavaLayerException(String) - +Constructor for exception javazoom.jl.decoder.JavaLayerException +
  +
JavaLayerException(String, Throwable) - +Constructor for exception javazoom.jl.decoder.JavaLayerException +
  +
JavaLayerHook - Interface in javazoom.jl.decoder
The JavaLayerHooks class allows developers to change + the way the JavaLayer library uses Resources.
JavaLayerUtils - Class in javazoom.jl.decoder
The JavaLayerUtils class is not strictly part of the JavaLayer API.
JavaLayerUtils() - +Constructor for class javazoom.jl.decoder.JavaLayerUtils +
  +
JavaSoundAudioDevice - Class in javazoom.jl.player
The JavaSoundAudioDevice implements an audio + device by using the JavaSound API.
JavaSoundAudioDevice() - +Constructor for class javazoom.jl.player.JavaSoundAudioDevice +
  +
JavaSoundAudioDeviceFactory - Class in javazoom.jl.player
This class is responsible for creating instances of the + JavaSoundAudioDevice.
JavaSoundAudioDeviceFactory() - +Constructor for class javazoom.jl.player.JavaSoundAudioDeviceFactory +
  +
javazoom.jl.converter - package javazoom.jl.converter
 
javazoom.jl.decoder - package javazoom.jl.decoder
 
javazoom.jl.player - package javazoom.jl.player
 
javazoom.jl.player.advanced - package javazoom.jl.player.advanced
 
jlap - Class in javazoom.jl.player.advanced
This class implements a sample player using Playback listener.
jlap() - +Constructor for class javazoom.jl.player.advanced.jlap +
  +
jlap.InfoListener - Class in javazoom.jl.player.advanced
 
jlap.InfoListener() - +Constructor for class javazoom.jl.player.advanced.jlap.InfoListener +
  +
jlc - Class in javazoom.jl.converter
The jlc class presents the JavaLayer + Conversion functionality as a command-line program.
jlc() - +Constructor for class javazoom.jl.converter.jlc +
  +
jlp - Class in javazoom.jl.player
The jlp class implements a simple command-line + player for MPEG audio files.
jlp(String) - +Constructor for class javazoom.jl.player.jlp +
  +
JOINT_STEREO - +Static variable in class javazoom.jl.decoder.Header +
  +
+
+

+L

+
+
layer() - +Method in class javazoom.jl.decoder.Header +
Returns Layer ID. +
layer_string() - +Method in class javazoom.jl.decoder.Header +
Return Layer version. +
LEFT - +Static variable in class javazoom.jl.decoder.OutputChannels +
  +
LEFT_CHANNEL - +Static variable in class javazoom.jl.decoder.OutputChannels +
Flag to indicate output should include the left channel only. +
length() - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
length() - +Method in interface javazoom.jl.decoder.Source +
  +
LENGTH_UNKNOWN - +Static variable in interface javazoom.jl.decoder.Source +
  +
+
+

+M

+
+
main(String[]) - +Static method in class javazoom.jl.converter.jlc +
  +
main(String[]) - +Static method in class javazoom.jl.player.advanced.jlap +
  +
main(String[]) - +Static method in class javazoom.jl.player.jlp +
  +
Manager - Class in javazoom.jl.decoder
Work in progress.
Manager() - +Constructor for class javazoom.jl.decoder.Manager +
  +
MAX_DETAIL - +Static variable in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
max_number_of_frames(int) - +Method in class javazoom.jl.decoder.Header +
Returns the maximum number of frames in the stream. +
MAX_WAVE_CHANNELS - +Static variable in class javazoom.jl.converter.WaveFile +
  +
MAXCHANNELS - +Static variable in class javazoom.jl.decoder.Obuffer +
  +
millisecondsToBytes(AudioFormat, int) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
min_number_of_frames(int) - +Method in class javazoom.jl.decoder.Header +
Returns the maximum number of frames in the stream. +
mode() - +Method in class javazoom.jl.decoder.Header +
Returns Mode. +
mode_extension() - +Method in class javazoom.jl.decoder.Header +
Returns Mode Extension. +
mode_string() - +Method in class javazoom.jl.decoder.Header +
Returns Mode. +
MPEG1 - +Static variable in class javazoom.jl.decoder.Header +
Constant for MPEG-1 version +
MPEG25_LSF - +Static variable in class javazoom.jl.decoder.Header +
  +
MPEG2_LSF - +Static variable in class javazoom.jl.decoder.Header +
Constant for MPEG-2 LSF version +
ms_per_frame() - +Method in class javazoom.jl.decoder.Header +
Returns ms/frame. +
+
+

+N

+
+
newBitstreamException(int) - +Method in class javazoom.jl.decoder.Bitstream +
  +
newBitstreamException(int, Throwable) - +Method in class javazoom.jl.decoder.Bitstream +
  +
newDecoderException(int) - +Method in class javazoom.jl.decoder.Decoder +
  +
newDecoderException(int, Throwable) - +Method in class javazoom.jl.decoder.Decoder +
  +
newStdOut(int) - +Static method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
NO_DETAIL - +Static variable in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
nSlots - +Variable in class javazoom.jl.decoder.Header +
  +
NullAudioDevice - Class in javazoom.jl.player
The NullAudioDevice implements a silent, no-op + audio device.
NullAudioDevice() - +Constructor for class javazoom.jl.player.NullAudioDevice +
  +
number_of_subbands() - +Method in class javazoom.jl.decoder.Header +
Returns the number of subbands in the current frame. +
NumChannels() - +Method in class javazoom.jl.converter.WaveFile +
  +
NumSamples() - +Method in class javazoom.jl.converter.WaveFile +
  +
+
+

+O

+
+
Obuffer - Class in javazoom.jl.decoder
Base Class for audio output.
Obuffer() - +Constructor for class javazoom.jl.decoder.Obuffer +
  +
OBUFFERSIZE - +Static variable in class javazoom.jl.decoder.Obuffer +
  +
Open(String, int) - +Method in class javazoom.jl.converter.RiffFile +
Open a RIFF file. +
open(Decoder) - +Method in interface javazoom.jl.player.AudioDevice +
Prepares the AudioDevice for playback of audio samples. +
open(Decoder) - +Method in class javazoom.jl.player.AudioDeviceBase +
Opens this audio device. +
open(AudioFormat) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
OpenForWrite(String, int, short, short) - +Method in class javazoom.jl.converter.WaveFile +
  +
OpenForWrite(String, WaveFile) - +Method in class javazoom.jl.converter.WaveFile +
Open for write using another wave file's parameters... +
openImpl() - +Method in class javazoom.jl.player.AudioDeviceBase +
Template method to provide the + implementation for the opening of the audio device. +
openImpl() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
openInput(String) - +Method in class javazoom.jl.converter.Converter +
  +
original() - +Method in class javazoom.jl.decoder.Header +
Returns Original. +
OutputChannels - Class in javazoom.jl.decoder
A Type-safe representation of the the supported output channel + constants.
+
+

+P

+
+
padding() - +Method in class javazoom.jl.decoder.Header +
Returns Layer III Padding bit. +
parseArgs(String[]) - +Method in class javazoom.jl.player.jlp +
  +
parsedFrame(int, Header) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
parsedFrame(int, Header) - +Method in interface javazoom.jl.converter.Converter.ProgressListener +
If the converter wishes to make a first pass over the + audio frames, this is called as each frame is parsed. +
PASS_THRU_EQ - +Static variable in class javazoom.jl.decoder.Equalizer +
  +
pause() - +Method in interface javazoom.jl.decoder.Control +
  +
play() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
  +
play(int) - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
Plays a number of MPEG audio frames. +
play(int, int) - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
Plays a range of MPEG audio frames +
play(String) - +Method in class javazoom.jl.player.advanced.jlap +
  +
play() - +Method in class javazoom.jl.player.jlp +
  +
play() - +Method in class javazoom.jl.player.Player +
  +
play(int) - +Method in class javazoom.jl.player.Player +
Plays a number of MPEG audio frames. +
play(InputStream, AudioDevice) - +Method in class javazoom.jl.player.PlayerApplet +
Decompresses audio data from an InputStream and plays it + back through an AudioDevice. +
PlaybackEvent - Class in javazoom.jl.player.advanced
An event which indicates a Player has performed an 'playback action'
PlaybackEvent(AdvancedPlayer, int, int) - +Constructor for class javazoom.jl.player.advanced.PlaybackEvent +
  +
playbackFinished(PlaybackEvent) - +Method in class javazoom.jl.player.advanced.jlap.InfoListener +
  +
playbackFinished(PlaybackEvent) - +Method in class javazoom.jl.player.advanced.PlaybackListener +
  +
PlaybackListener - Class in javazoom.jl.player.advanced
Listener for javalayer Player playback
PlaybackListener() - +Constructor for class javazoom.jl.player.advanced.PlaybackListener +
  +
playbackStarted(PlaybackEvent) - +Method in class javazoom.jl.player.advanced.jlap.InfoListener +
  +
playbackStarted(PlaybackEvent) - +Method in class javazoom.jl.player.advanced.PlaybackListener +
  +
Player - Class in javazoom.jl.player
The Player class implements a simple player for playback + of an MPEG audio stream.
Player(InputStream) - +Constructor for class javazoom.jl.player.Player +
Creates a new Player instance. +
Player(InputStream, AudioDevice) - +Constructor for class javazoom.jl.player.Player +
  +
PlayerApplet - Class in javazoom.jl.player
A simple applet that plays an MPEG audio file.
PlayerApplet() - +Constructor for class javazoom.jl.player.PlayerApplet +
  +
playMp3(File, PlaybackListener) - +Static method in class javazoom.jl.player.advanced.jlap +
  +
playMp3(File, int, int, PlaybackListener) - +Static method in class javazoom.jl.player.advanced.jlap +
  +
playMp3(InputStream, int, int, PlaybackListener) - +Static method in class javazoom.jl.player.advanced.jlap +
  +
printStackTrace() - +Method in exception javazoom.jl.decoder.JavaLayerException +
  +
printStackTrace(PrintStream) - +Method in exception javazoom.jl.decoder.JavaLayerException +
  +
+
+

+R

+
+
Read(byte[], int) - +Method in class javazoom.jl.converter.RiffFile +
Read NumBytes data. +
read(byte[], int, int) - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
read(byte[], int, int) - +Method in interface javazoom.jl.decoder.Source +
  +
readBits(int) - +Method in class javazoom.jl.decoder.Bitstream +
  +
readCheckedBits(int) - +Method in class javazoom.jl.decoder.Bitstream +
  +
readFrame(int, Header) - +Method in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
  +
readFrame(int, Header) - +Method in interface javazoom.jl.converter.Converter.ProgressListener +
This method is called after each frame has been read, + but before it has been decoded. +
readFrame() - +Method in class javazoom.jl.decoder.Bitstream +
Reads and parses the next frame from the input source. +
registerDefaultFactories() - +Method in class javazoom.jl.player.FactoryRegistry +
  +
removeAll() - +Method in class javazoom.jl.decoder.Manager +
  +
removeControl(Control) - +Method in class javazoom.jl.decoder.Manager +
  +
removeFactory(AudioDeviceFactory) - +Method in class javazoom.jl.player.FactoryRegistry +
  +
removeFactoryType(Class) - +Method in class javazoom.jl.player.FactoryRegistry +
  +
reset() - +Method in class javazoom.jl.decoder.Equalizer +
Sets all bands to 0.0 +
retrieveDecoder(Header, Bitstream, int) - +Method in class javazoom.jl.decoder.Decoder +
  +
RFM_READ - +Static variable in class javazoom.jl.converter.RiffFile +
  +
RFM_UNKNOWN - +Static variable in class javazoom.jl.converter.RiffFile +
  +
RFM_WRITE - +Static variable in class javazoom.jl.converter.RiffFile +
  +
RiffFile - Class in javazoom.jl.converter
Class to manage RIFF files
RiffFile() - +Constructor for class javazoom.jl.converter.RiffFile +
Dummy Constructor +
RIGHT - +Static variable in class javazoom.jl.decoder.OutputChannels +
  +
RIGHT_CHANNEL - +Static variable in class javazoom.jl.decoder.OutputChannels +
Flag to indicate output should include the right channel only. +
run() - +Method in class javazoom.jl.player.PlayerApplet +
The run method for the audio player thread. +
+
+

+S

+
+
sample_frequency() - +Method in class javazoom.jl.decoder.Header +
Returns Sample Frequency. +
sample_frequency_string() - +Method in class javazoom.jl.decoder.Header +
Returns Frequency +
SampleBuffer - Class in javazoom.jl.decoder
The SampleBuffer class implements an output buffer + that provides storage for a fixed size block of samples.
SampleBuffer(int, int) - +Constructor for class javazoom.jl.decoder.SampleBuffer +
Constructor +
SamplingRate() - +Method in class javazoom.jl.converter.WaveFile +
  +
Seek(long) - +Method in class javazoom.jl.converter.RiffFile +
Seek in the File. +
seek(long) - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
seek(long) - +Method in interface javazoom.jl.decoder.Source +
  +
serialize(OutputStream, Object) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
  +
set_stop_flag() - +Method in class javazoom.jl.converter.WaveFileObuffer +
  +
set_stop_flag() - +Method in class javazoom.jl.decoder.Obuffer +
Notify the buffer that the user has stopped the stream. +
set_stop_flag() - +Method in class javazoom.jl.decoder.SampleBuffer +
  +
setAudioFormat(AudioFormat) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
setBand(int, float) - +Method in class javazoom.jl.decoder.Equalizer +
  +
setEqualizer(Equalizer) - +Method in class javazoom.jl.decoder.Decoder +
  +
setFileName(String) - +Method in class javazoom.jl.player.PlayerApplet +
Sets the URL of the audio stream to play. +
setFrame(int) - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
setFrom(float[]) - +Method in class javazoom.jl.decoder.Equalizer +
  +
setFrom(Equalizer.EQFunction) - +Method in class javazoom.jl.decoder.Equalizer +
  +
setFrom(Equalizer) - +Method in class javazoom.jl.decoder.Equalizer +
Sets the bands of this equalizer to the value the bands of + another equalizer. +
setHook(JavaLayerHook) - +Static method in class javazoom.jl.decoder.JavaLayerUtils +
Sets the system-wide JavaLayer hook. +
setId(int) - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
setOpen(boolean) - +Method in class javazoom.jl.player.AudioDeviceBase +
Sets the open state for this audio device. +
setOutputBuffer(Obuffer) - +Method in class javazoom.jl.decoder.Decoder +
Changes the output buffer. +
setOutputChannels(OutputChannels) - +Method in class javazoom.jl.decoder.Decoder.Params +
  +
setPlayBackListener(PlaybackListener) - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
sets the PlaybackListener +
setPosition(double) - +Method in interface javazoom.jl.decoder.Control +
  +
setSource(AdvancedPlayer) - +Method in class javazoom.jl.player.advanced.PlaybackEvent +
  +
showUsage() - +Method in class javazoom.jl.player.advanced.jlap +
  +
showUsage() - +Method in class javazoom.jl.player.jlp +
  +
SINGLE_CHANNEL - +Static variable in class javazoom.jl.decoder.Header +
  +
skipFrame() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
skips over a single frame +
slots() - +Method in class javazoom.jl.decoder.Header +
Returns Slots. +
Source - Interface in javazoom.jl.decoder
Work in progress.
start() - +Method in interface javazoom.jl.decoder.Control +
Starts playback of the media presented by this control. +
start() - +Method in class javazoom.jl.player.PlayerApplet +
Starts this applet. +
STARTED - +Static variable in class javazoom.jl.player.advanced.PlaybackEvent +
  +
STEREO - +Static variable in class javazoom.jl.decoder.Header +
  +
stop() - +Method in interface javazoom.jl.decoder.Control +
Stops playback of the media presented by this control. +
stop() - +Method in class javazoom.jl.player.advanced.AdvancedPlayer +
closes the player and notifies PlaybackListener +
stop() - +Method in class javazoom.jl.player.PlayerApplet +
Stops this applet. +
STOPPED - +Static variable in class javazoom.jl.player.advanced.PlaybackEvent +
  +
stopPlayer() - +Method in class javazoom.jl.player.PlayerApplet +
Stops the audio player. +
STREAM_EOF - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
The end of the stream was reached. +
STREAM_ERROR - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
A problem occurred reading from the stream. +
systemRegistry() - +Static method in class javazoom.jl.player.FactoryRegistry +
  +
+
+

+T

+
+
tell() - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
tell() - +Method in interface javazoom.jl.decoder.Source +
  +
test() - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
Runs a short test by playing a short silent sound. +
testAudioDevice() - +Method in class javazoom.jl.player.JavaSoundAudioDeviceFactory +
  +
THIRTYTWO - +Static variable in class javazoom.jl.decoder.Header +
  +
toByteArray(short[], int, int) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
toString() - +Method in class javazoom.jl.decoder.Header +
  +
total_ms(int) - +Method in class javazoom.jl.decoder.Header +
Returns total ms. +
+
+

+U

+
+
UNEXPECTED_EOF - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
The end of the stream was reached prematurely. +
UNKNOWN_ERROR - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
An undeterminable error occurred. +
UNKNOWN_ERROR - +Static variable in interface javazoom.jl.decoder.DecoderErrors +
  +
UNKNOWN_SAMPLE_RATE - +Static variable in interface javazoom.jl.decoder.BitstreamErrors +
The header describes an unknown sample rate. +
unreadFrame() - +Method in class javazoom.jl.decoder.Bitstream +
Unreads the bytes read from the frame. +
UNSUPPORTED_LAYER - +Static variable in interface javazoom.jl.decoder.DecoderErrors +
Layer not supported by the decoder. +
UPDATE_CONVERT_COMPLETE - +Static variable in interface javazoom.jl.converter.Converter.ProgressListener +
Conversion is complete. +
UPDATE_FRAME_COUNT - +Static variable in interface javazoom.jl.converter.Converter.ProgressListener +
  +
+
+

+V

+
+
vbr() - +Method in class javazoom.jl.decoder.Header +
Return VBR. +
vbr_scale() - +Method in class javazoom.jl.decoder.Header +
Return VBR scale. +
vbr_toc() - +Method in class javazoom.jl.decoder.Header +
Return VBR TOC. +
VERBOSE_DETAIL - +Static variable in class javazoom.jl.converter.Converter.PrintWriterProgressListener +
Verbose detail. +
version() - +Method in class javazoom.jl.decoder.Header +
Returns version. +
version_string() - +Method in class javazoom.jl.decoder.Header +
Returns Version. +
+
+

+W

+
+
WaveFile - Class in javazoom.jl.converter
Class allowing WaveFormat Access
WaveFile() - +Constructor for class javazoom.jl.converter.WaveFile +
Constructs a new WaveFile instance. +
WaveFile.WaveFileSample - Class in javazoom.jl.converter
 
WaveFile.WaveFileSample() - +Constructor for class javazoom.jl.converter.WaveFile.WaveFileSample +
  +
WaveFileObuffer - Class in javazoom.jl.converter
Implements an Obuffer by writing the data to + a file in RIFF WAVE format.
WaveFileObuffer(int, int, String) - +Constructor for class javazoom.jl.converter.WaveFileObuffer +
Creates a new WareFileObuffer instance. +
willReadBlock() - +Method in class javazoom.jl.decoder.InputStreamSource +
  +
willReadBlock() - +Method in interface javazoom.jl.decoder.Source +
  +
Write(byte[], int) - +Method in class javazoom.jl.converter.RiffFile +
Write NumBytes data. +
Write(short[], int) - +Method in class javazoom.jl.converter.RiffFile +
Write NumBytes data. +
Write(RiffFile.RiffChunkHeader, int) - +Method in class javazoom.jl.converter.RiffFile +
Write NumBytes data. +
Write(short, int) - +Method in class javazoom.jl.converter.RiffFile +
Write NumBytes data. +
Write(int, int) - +Method in class javazoom.jl.converter.RiffFile +
Write NumBytes data. +
write(short[], int, int) - +Method in interface javazoom.jl.player.AudioDevice +
Writes a number of samples to this AudioDevice. +
write(short[], int, int) - +Method in class javazoom.jl.player.AudioDeviceBase +
Writes audio data to this audio device. +
write_buffer(int) - +Method in class javazoom.jl.converter.WaveFileObuffer +
  +
write_buffer(int) - +Method in class javazoom.jl.decoder.Obuffer +
Write the samples to the file or directly to the audio hardware. +
write_buffer(int) - +Method in class javazoom.jl.decoder.SampleBuffer +
Write the samples to the file (Random Acces). +
WriteData(short[], int) - +Method in class javazoom.jl.converter.WaveFile +
Write 16-bit audio +
writeImpl(short[], int, int) - +Method in class javazoom.jl.player.AudioDeviceBase +
Template method to provide the implementation for + writing audio samples to the audio device. +
writeImpl(short[], int, int) - +Method in class javazoom.jl.player.JavaSoundAudioDevice +
  +
+
+A B C D E F G H I J L M N O P R S T U V W + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/index.html b/build/classes/doc/index.html new file mode 100644 index 0000000..46ebcbf --- /dev/null +++ b/build/classes/doc/index.html @@ -0,0 +1,39 @@ + + + + + + +Generated Documentation (Untitled) + + + + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to<A HREF="overview-summary.html">Non-frame version.</A> + + + diff --git a/build/classes/doc/javazoom/jl/converter/Converter.PrintWriterProgressListener.html b/build/classes/doc/javazoom/jl/converter/Converter.PrintWriterProgressListener.html new file mode 100644 index 0000000..2108ece --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/Converter.PrintWriterProgressListener.html @@ -0,0 +1,568 @@ + + + + + + +Converter.PrintWriterProgressListener + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class Converter.PrintWriterProgressListener

+
+java.lang.Object
+  extended by javazoom.jl.converter.Converter.PrintWriterProgressListener
+
+
+
All Implemented Interfaces:
Converter.ProgressListener
+
+
+
Enclosing class:
Converter
+
+
+
+
public static class Converter.PrintWriterProgressListener
extends java.lang.Object
implements Converter.ProgressListener
+ + +

+Implementation of ProgressListener that writes + notification text to a PrintWriter. +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intDEBUG_DETAIL + +
+          Debug detail.
+static intEXPERT_DETAIL + +
+          Level of detail typically expected of expert + users.
+static intMAX_DETAIL + +
+           
+static intNO_DETAIL + +
+           
+static intVERBOSE_DETAIL + +
+          Verbose detail.
+ + + + + + + +
Fields inherited from interface javazoom.jl.converter.Converter.ProgressListener
UPDATE_CONVERT_COMPLETE, UPDATE_FRAME_COUNT
+  + + + + + + + + + + +
+Constructor Summary
Converter.PrintWriterProgressListener(java.io.PrintWriter writer, + int detailLevel) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanconverterException(java.lang.Throwable t) + +
+          Called when an exception is thrown during while converting + a frame.
+ voidconverterUpdate(int updateID, + int param1, + int param2) + +
+          Notifies the listener that new information is available.
+ voiddecodedFrame(int frameNo, + Header header, + Obuffer o) + +
+          This method is called after a frame has been decoded.
+ booleanisDetail(int detail) + +
+           
+static Converter.PrintWriterProgressListenernewStdOut(int detail) + +
+           
+ voidparsedFrame(int frameNo, + Header header) + +
+          If the converter wishes to make a first pass over the + audio frames, this is called as each frame is parsed.
+ voidreadFrame(int frameNo, + Header header) + +
+          This method is called after each frame has been read, + but before it has been decoded.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+NO_DETAIL

+
+public static final int NO_DETAIL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+EXPERT_DETAIL

+
+public static final int EXPERT_DETAIL
+
+
Level of detail typically expected of expert + users. +

+

+
See Also:
Constant Field Values
+
+
+ +

+VERBOSE_DETAIL

+
+public static final int VERBOSE_DETAIL
+
+
Verbose detail. +

+

+
See Also:
Constant Field Values
+
+
+ +

+DEBUG_DETAIL

+
+public static final int DEBUG_DETAIL
+
+
Debug detail. All frame read notifications are shown. +

+

+
See Also:
Constant Field Values
+
+
+ +

+MAX_DETAIL

+
+public static final int MAX_DETAIL
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+Converter.PrintWriterProgressListener

+
+public Converter.PrintWriterProgressListener(java.io.PrintWriter writer,
+                                             int detailLevel)
+
+
+ + + + + + + + +
+Method Detail
+ +

+newStdOut

+
+public static Converter.PrintWriterProgressListener newStdOut(int detail)
+
+
+
+
+
+
+
+
+
+ +

+isDetail

+
+public boolean isDetail(int detail)
+
+
+
+
+
+
+
+
+
+ +

+converterUpdate

+
+public void converterUpdate(int updateID,
+                            int param1,
+                            int param2)
+
+
Description copied from interface: Converter.ProgressListener
+
Notifies the listener that new information is available. +

+

+
Specified by:
converterUpdate in interface Converter.ProgressListener
+
+
+
Parameters:
updateID - Code indicating the information that has been + updated.
param1 - Parameter whose value depends upon the update code.
param2 - Parameter whose value depends upon the update code. + + The updateID parameter can take these values: + + UPDATE_FRAME_COUNT: param1 is the frame count, or -1 if not known. + UPDATE_CONVERT_COMPLETE: param1 is the conversion time, param2 + is the number of frames converted.
+
+
+
+ +

+parsedFrame

+
+public void parsedFrame(int frameNo,
+                        Header header)
+
+
Description copied from interface: Converter.ProgressListener
+
If the converter wishes to make a first pass over the + audio frames, this is called as each frame is parsed. +

+

+
Specified by:
parsedFrame in interface Converter.ProgressListener
+
+
+
+
+
+
+ +

+readFrame

+
+public void readFrame(int frameNo,
+                      Header header)
+
+
Description copied from interface: Converter.ProgressListener
+
This method is called after each frame has been read, + but before it has been decoded. +

+

+
Specified by:
readFrame in interface Converter.ProgressListener
+
+
+
Parameters:
frameNo - The 0-based sequence number of the frame.
header - The Header rerpesenting the frame just read.
+
+
+
+ +

+decodedFrame

+
+public void decodedFrame(int frameNo,
+                         Header header,
+                         Obuffer o)
+
+
Description copied from interface: Converter.ProgressListener
+
This method is called after a frame has been decoded. +

+

+
Specified by:
decodedFrame in interface Converter.ProgressListener
+
+
+
Parameters:
frameNo - The 0-based sequence number of the frame.
header - The Header rerpesenting the frame just read.
o - The Obuffer the deocded data was written to.
+
+
+
+ +

+converterException

+
+public boolean converterException(java.lang.Throwable t)
+
+
Description copied from interface: Converter.ProgressListener
+
Called when an exception is thrown during while converting + a frame. +

+

+
Specified by:
converterException in interface Converter.ProgressListener
+
+
+
Parameters:
t - The Throwable instance that + was thrown. +
Returns:
true to continue processing, or false + to abort conversion. + + If this method returns false, the exception + is propagated to the caller of the convert() method. If + true is returned, the exception is silently + ignored and the converter moves onto the next frame.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/converter/Converter.ProgressListener.html b/build/classes/doc/javazoom/jl/converter/Converter.ProgressListener.html new file mode 100644 index 0000000..591a096 --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/Converter.ProgressListener.html @@ -0,0 +1,390 @@ + + + + + + +Converter.ProgressListener + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Interface Converter.ProgressListener

+
+
All Known Implementing Classes:
Converter.PrintWriterProgressListener
+
+
+
Enclosing class:
Converter
+
+
+
+
public static interface Converter.ProgressListener
+ + +

+This interface is used by the Converter to provide + notification of tasks being carried out by the converter, + and to provide new information as it becomes available. +

+ +

+


+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+static intUPDATE_CONVERT_COMPLETE + +
+          Conversion is complete.
+static intUPDATE_FRAME_COUNT + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanconverterException(java.lang.Throwable t) + +
+          Called when an exception is thrown during while converting + a frame.
+ voidconverterUpdate(int updateID, + int param1, + int param2) + +
+          Notifies the listener that new information is available.
+ voiddecodedFrame(int frameNo, + Header header, + Obuffer o) + +
+          This method is called after a frame has been decoded.
+ voidparsedFrame(int frameNo, + Header header) + +
+          If the converter wishes to make a first pass over the + audio frames, this is called as each frame is parsed.
+ voidreadFrame(int frameNo, + Header header) + +
+          This method is called after each frame has been read, + but before it has been decoded.
+  +

+ + + + + + + + +
+Field Detail
+ +

+UPDATE_FRAME_COUNT

+
+static final int UPDATE_FRAME_COUNT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+UPDATE_CONVERT_COMPLETE

+
+static final int UPDATE_CONVERT_COMPLETE
+
+
Conversion is complete. Param1 contains the time + to convert in milliseconds. Param2 contains the number + of MPEG audio frames converted. +

+

+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Method Detail
+ +

+converterUpdate

+
+void converterUpdate(int updateID,
+                     int param1,
+                     int param2)
+
+
Notifies the listener that new information is available. +

+

+
Parameters:
updateID - Code indicating the information that has been + updated.
param1 - Parameter whose value depends upon the update code.
param2 - Parameter whose value depends upon the update code. + + The updateID parameter can take these values: + + UPDATE_FRAME_COUNT: param1 is the frame count, or -1 if not known. + UPDATE_CONVERT_COMPLETE: param1 is the conversion time, param2 + is the number of frames converted.
+
+
+
+ +

+parsedFrame

+
+void parsedFrame(int frameNo,
+                 Header header)
+
+
If the converter wishes to make a first pass over the + audio frames, this is called as each frame is parsed. +

+

+
+
+
+
+ +

+readFrame

+
+void readFrame(int frameNo,
+               Header header)
+
+
This method is called after each frame has been read, + but before it has been decoded. +

+

+
Parameters:
frameNo - The 0-based sequence number of the frame.
header - The Header rerpesenting the frame just read.
+
+
+
+ +

+decodedFrame

+
+void decodedFrame(int frameNo,
+                  Header header,
+                  Obuffer o)
+
+
This method is called after a frame has been decoded. +

+

+
Parameters:
frameNo - The 0-based sequence number of the frame.
header - The Header rerpesenting the frame just read.
o - The Obuffer the deocded data was written to.
+
+
+
+ +

+converterException

+
+boolean converterException(java.lang.Throwable t)
+
+
Called when an exception is thrown during while converting + a frame. +

+

+
Parameters:
t - The Throwable instance that + was thrown. +
Returns:
true to continue processing, or false + to abort conversion. + + If this method returns false, the exception + is propagated to the caller of the convert() method. If + true is returned, the exception is silently + ignored and the converter moves onto the next frame.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/converter/Converter.html b/build/classes/doc/javazoom/jl/converter/Converter.html new file mode 100644 index 0000000..162093f --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/Converter.html @@ -0,0 +1,418 @@ + + + + + + +Converter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class Converter

+
+java.lang.Object
+  extended by javazoom.jl.converter.Converter
+
+
+
+
public class Converter
extends java.lang.Object
+ + +

+The Converter class implements the conversion of + an MPEG audio file to a .WAV file. To convert an MPEG audio stream, + just create an instance of this class and call the convert() + method, passing in the names of the input and output files. You can + pass in optional ProgressListener and + Decoder.Params objects also to customize the conversion. +

+ +

+

+
Since:
+
0.0.7
+
+
+ +

+ + + + + + + + + + + + + + + +
+Nested Class Summary
+static classConverter.PrintWriterProgressListener + +
+          Implementation of ProgressListener that writes + notification text to a PrintWriter.
+static interfaceConverter.ProgressListener + +
+          This interface is used by the Converter to provide + notification of tasks being carried out by the converter, + and to provide new information as it becomes available.
+  + + + + + + + + + + +
+Constructor Summary
Converter() + +
+          Creates a new converter instance.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidconvert(java.io.InputStream sourceStream, + java.lang.String destName, + Converter.ProgressListener progressListener, + Decoder.Params decoderParams) + +
+           
+ voidconvert(java.lang.String sourceName, + java.lang.String destName) + +
+           
+ voidconvert(java.lang.String sourceName, + java.lang.String destName, + Converter.ProgressListener progressListener) + +
+           
+ voidconvert(java.lang.String sourceName, + java.lang.String destName, + Converter.ProgressListener progressListener, + Decoder.Params decoderParams) + +
+           
+protected  intcountFrames(java.io.InputStream in) + +
+           
+protected  java.io.InputStreamopenInput(java.lang.String fileName) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Converter

+
+public Converter()
+
+
Creates a new converter instance. +

+

+ + + + + + + + +
+Method Detail
+ +

+convert

+
+public void convert(java.lang.String sourceName,
+                    java.lang.String destName)
+             throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+convert

+
+public void convert(java.lang.String sourceName,
+                    java.lang.String destName,
+                    Converter.ProgressListener progressListener)
+             throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+convert

+
+public void convert(java.lang.String sourceName,
+                    java.lang.String destName,
+                    Converter.ProgressListener progressListener,
+                    Decoder.Params decoderParams)
+             throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+convert

+
+public void convert(java.io.InputStream sourceStream,
+                    java.lang.String destName,
+                    Converter.ProgressListener progressListener,
+                    Decoder.Params decoderParams)
+             throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+countFrames

+
+protected int countFrames(java.io.InputStream in)
+
+
+
+
+
+
+ +

+openInput

+
+protected java.io.InputStream openInput(java.lang.String fileName)
+                                 throws java.io.IOException
+
+
+ +
Throws: +
java.io.IOException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/converter/RiffFile.html b/build/classes/doc/javazoom/jl/converter/RiffFile.html new file mode 100644 index 0000000..c9b09d4 --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/RiffFile.html @@ -0,0 +1,809 @@ + + + + + + +RiffFile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class RiffFile

+
+java.lang.Object
+  extended by javazoom.jl.converter.RiffFile
+
+
+
Direct Known Subclasses:
WaveFile
+
+
+
+
public class RiffFile
extends java.lang.Object
+ + +

+Class to manage RIFF files +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intDDC_FAILURE + +
+           
+static intDDC_FILE_ERROR + +
+           
+static intDDC_INVALID_CALL + +
+           
+static intDDC_INVALID_FILE + +
+           
+static intDDC_OUT_OF_MEMORY + +
+           
+static intDDC_SUCCESS + +
+           
+static intDDC_USER_ABORT + +
+           
+protected  java.io.RandomAccessFilefile + +
+           
+protected  intfmode + +
+           
+static intRFM_READ + +
+           
+static intRFM_UNKNOWN + +
+           
+static intRFM_WRITE + +
+           
+  + + + + + + + + + + +
+Constructor Summary
RiffFile() + +
+          Dummy Constructor
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intBackpatch(long FileOffset, + byte[] Data, + int NumBytes) + +
+           
+ intBackpatch(long FileOffset, + javazoom.jl.converter.RiffFile.RiffChunkHeader Data, + int NumBytes) + +
+          Write Data to specified offset.
+ intClose() + +
+          Close Riff File.
+ intCurrentFileMode() + +
+          Return File Mode.
+ longCurrentFilePosition() + +
+          Return File Position.
+ intExpect(java.lang.String Data, + int NumBytes) + +
+          Expect NumBytes data.
+static intFourCC(java.lang.String ChunkName) + +
+          Fill the header.
+ intOpen(java.lang.String Filename, + int NewMode) + +
+          Open a RIFF file.
+ intRead(byte[] Data, + int NumBytes) + +
+          Read NumBytes data.
+protected  intSeek(long offset) + +
+          Seek in the File.
+ intWrite(byte[] Data, + int NumBytes) + +
+          Write NumBytes data.
+ intWrite(int Data, + int NumBytes) + +
+          Write NumBytes data.
+ intWrite(javazoom.jl.converter.RiffFile.RiffChunkHeader Triff_header, + int NumBytes) + +
+          Write NumBytes data.
+ intWrite(short[] Data, + int NumBytes) + +
+          Write NumBytes data.
+ intWrite(short Data, + int NumBytes) + +
+          Write NumBytes data.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+DDC_SUCCESS

+
+public static final int DDC_SUCCESS
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_FAILURE

+
+public static final int DDC_FAILURE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_OUT_OF_MEMORY

+
+public static final int DDC_OUT_OF_MEMORY
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_FILE_ERROR

+
+public static final int DDC_FILE_ERROR
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_INVALID_CALL

+
+public static final int DDC_INVALID_CALL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_USER_ABORT

+
+public static final int DDC_USER_ABORT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DDC_INVALID_FILE

+
+public static final int DDC_INVALID_FILE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+RFM_UNKNOWN

+
+public static final int RFM_UNKNOWN
+
+
+
See Also:
Constant Field Values
+
+
+ +

+RFM_WRITE

+
+public static final int RFM_WRITE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+RFM_READ

+
+public static final int RFM_READ
+
+
+
See Also:
Constant Field Values
+
+
+ +

+fmode

+
+protected int fmode
+
+
+
+
+
+ +

+file

+
+protected java.io.RandomAccessFile file
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+RiffFile

+
+public RiffFile()
+
+
Dummy Constructor +

+

+ + + + + + + + +
+Method Detail
+ +

+CurrentFileMode

+
+public int CurrentFileMode()
+
+
Return File Mode. +

+

+
+
+
+
+ +

+Open

+
+public int Open(java.lang.String Filename,
+                int NewMode)
+
+
Open a RIFF file. +

+

+
+
+
+
+ +

+Write

+
+public int Write(byte[] Data,
+                 int NumBytes)
+
+
Write NumBytes data. +

+

+
+
+
+
+ +

+Write

+
+public int Write(short[] Data,
+                 int NumBytes)
+
+
Write NumBytes data. +

+

+
+
+
+
+ +

+Write

+
+public int Write(javazoom.jl.converter.RiffFile.RiffChunkHeader Triff_header,
+                 int NumBytes)
+
+
Write NumBytes data. +

+

+
+
+
+
+ +

+Write

+
+public int Write(short Data,
+                 int NumBytes)
+
+
Write NumBytes data. +

+

+
+
+
+
+ +

+Write

+
+public int Write(int Data,
+                 int NumBytes)
+
+
Write NumBytes data. +

+

+
+
+
+
+ +

+Read

+
+public int Read(byte[] Data,
+                int NumBytes)
+
+
Read NumBytes data. +

+

+
+
+
+
+ +

+Expect

+
+public int Expect(java.lang.String Data,
+                  int NumBytes)
+
+
Expect NumBytes data. +

+

+
+
+
+
+ +

+Close

+
+public int Close()
+
+
Close Riff File. + Length is written too. +

+

+
+
+
+
+ +

+CurrentFilePosition

+
+public long CurrentFilePosition()
+
+
Return File Position. +

+

+
+
+
+
+ +

+Backpatch

+
+public int Backpatch(long FileOffset,
+                     javazoom.jl.converter.RiffFile.RiffChunkHeader Data,
+                     int NumBytes)
+
+
Write Data to specified offset. +

+

+
+
+
+
+ +

+Backpatch

+
+public int Backpatch(long FileOffset,
+                     byte[] Data,
+                     int NumBytes)
+
+
+
+
+
+
+ +

+Seek

+
+protected int Seek(long offset)
+
+
Seek in the File. +

+

+
+
+
+
+ +

+FourCC

+
+public static int FourCC(java.lang.String ChunkName)
+
+
Fill the header. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/converter/WaveFile.WaveFileSample.html b/build/classes/doc/javazoom/jl/converter/WaveFile.WaveFileSample.html new file mode 100644 index 0000000..d46f87a --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/WaveFile.WaveFileSample.html @@ -0,0 +1,258 @@ + + + + + + +WaveFile.WaveFileSample + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class WaveFile.WaveFileSample

+
+java.lang.Object
+  extended by javazoom.jl.converter.WaveFile.WaveFileSample
+
+
+
Enclosing class:
WaveFile
+
+
+
+
public class WaveFile.WaveFileSample
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + +
+Field Summary
+ short[]chan + +
+           
+  + + + + + + + + + + +
+Constructor Summary
WaveFile.WaveFileSample() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+chan

+
+public short[] chan
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WaveFile.WaveFileSample

+
+public WaveFile.WaveFileSample()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/converter/WaveFile.html b/build/classes/doc/javazoom/jl/converter/WaveFile.html new file mode 100644 index 0000000..ea4628e --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/WaveFile.html @@ -0,0 +1,504 @@ + + + + + + +WaveFile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class WaveFile

+
+java.lang.Object
+  extended by javazoom.jl.converter.RiffFile
+      extended by javazoom.jl.converter.WaveFile
+
+
+
+
public class WaveFile
extends RiffFile
+ + +

+Class allowing WaveFormat Access +

+ +

+


+ +

+ + + + + + + + + + + +
+Nested Class Summary
+ classWaveFile.WaveFileSample + +
+           
+ + + + + + + + + + +
+Field Summary
+static intMAX_WAVE_CHANNELS + +
+           
+ + + + + + + +
Fields inherited from class javazoom.jl.converter.RiffFile
DDC_FAILURE, DDC_FILE_ERROR, DDC_INVALID_CALL, DDC_INVALID_FILE, DDC_OUT_OF_MEMORY, DDC_SUCCESS, DDC_USER_ABORT, file, fmode, RFM_READ, RFM_UNKNOWN, RFM_WRITE
+  + + + + + + + + + + +
+Constructor Summary
WaveFile() + +
+          Constructs a new WaveFile instance.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ shortBitsPerSample() + +
+           
+ intClose() + +
+          Close Riff File.
+ longCurrentFilePosition() + +
+          Return File Position.
+ shortNumChannels() + +
+           
+ intNumSamples() + +
+           
+ intOpenForWrite(java.lang.String Filename, + int SamplingRate, + short BitsPerSample, + short NumChannels) + +
+           
+ intOpenForWrite(java.lang.String Filename, + WaveFile OtherWave) + +
+          Open for write using another wave file's parameters...
+ intSamplingRate() + +
+           
+ intWriteData(short[] data, + int numData) + +
+          Write 16-bit audio
+ + + + + + + +
Methods inherited from class javazoom.jl.converter.RiffFile
Backpatch, Backpatch, CurrentFileMode, Expect, FourCC, Open, Read, Seek, Write, Write, Write, Write, Write
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+MAX_WAVE_CHANNELS

+
+public static final int MAX_WAVE_CHANNELS
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+WaveFile

+
+public WaveFile()
+
+
Constructs a new WaveFile instance. +

+

+ + + + + + + + +
+Method Detail
+ +

+OpenForWrite

+
+public int OpenForWrite(java.lang.String Filename,
+                        int SamplingRate,
+                        short BitsPerSample,
+                        short NumChannels)
+
+
+
+
+
+
+ +

+WriteData

+
+public int WriteData(short[] data,
+                     int numData)
+
+
Write 16-bit audio +

+

+
+
+
+
+ +

+Close

+
+public int Close()
+
+
Description copied from class: RiffFile
+
Close Riff File. + Length is written too. +

+

+
Overrides:
Close in class RiffFile
+
+
+
+
+
+
+ +

+SamplingRate

+
+public int SamplingRate()
+
+
+
+
+
+
+ +

+BitsPerSample

+
+public short BitsPerSample()
+
+
+
+
+
+
+ +

+NumChannels

+
+public short NumChannels()
+
+
+
+
+
+
+ +

+NumSamples

+
+public int NumSamples()
+
+
+
+
+
+
+ +

+OpenForWrite

+
+public int OpenForWrite(java.lang.String Filename,
+                        WaveFile OtherWave)
+
+
Open for write using another wave file's parameters... +

+

+
+
+
+
+ +

+CurrentFilePosition

+
+public long CurrentFilePosition()
+
+
Description copied from class: RiffFile
+
Return File Position. +

+

+
Overrides:
CurrentFilePosition in class RiffFile
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/converter/WaveFileObuffer.html b/build/classes/doc/javazoom/jl/converter/WaveFileObuffer.html new file mode 100644 index 0000000..200134d --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/WaveFileObuffer.html @@ -0,0 +1,397 @@ + + + + + + +WaveFileObuffer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class WaveFileObuffer

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Obuffer
+      extended by javazoom.jl.converter.WaveFileObuffer
+
+
+
+
public class WaveFileObuffer
extends Obuffer
+ + +

+Implements an Obuffer by writing the data to + a file in RIFF WAVE format. +

+ +

+

+
Since:
+
0.0
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class javazoom.jl.decoder.Obuffer
MAXCHANNELS, OBUFFERSIZE
+  + + + + + + + + + + +
+Constructor Summary
WaveFileObuffer(int number_of_channels, + int freq, + java.lang.String FileName) + +
+          Creates a new WareFileObuffer instance.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidappend(int channel, + short value) + +
+          Takes a 16 Bit PCM sample.
+ voidclear_buffer() + +
+          Clears all data in the buffer (for seeking).
+ voidclose() + +
+           
+ voidset_stop_flag() + +
+          Notify the buffer that the user has stopped the stream.
+ voidwrite_buffer(int val) + +
+          Write the samples to the file or directly to the audio hardware.
+ + + + + + + +
Methods inherited from class javazoom.jl.decoder.Obuffer
appendSamples
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+WaveFileObuffer

+
+public WaveFileObuffer(int number_of_channels,
+                       int freq,
+                       java.lang.String FileName)
+
+
Creates a new WareFileObuffer instance. +

+

+
Parameters:
number_of_channels - The number of channels of audio data + this buffer will receive.
freq - The sample frequency of the samples in the buffer.
fileName - The filename to write the data to.
+
+ + + + + + + + +
+Method Detail
+ +

+append

+
+public void append(int channel,
+                   short value)
+
+
Takes a 16 Bit PCM sample. +

+

+
Specified by:
append in class Obuffer
+
+
+
+
+
+
+ +

+write_buffer

+
+public void write_buffer(int val)
+
+
Description copied from class: Obuffer
+
Write the samples to the file or directly to the audio hardware. +

+

+
Specified by:
write_buffer in class Obuffer
+
+
+
+
+
+
+ +

+close

+
+public void close()
+
+
+
Specified by:
close in class Obuffer
+
+
+
+
+
+
+ +

+clear_buffer

+
+public void clear_buffer()
+
+
Description copied from class: Obuffer
+
Clears all data in the buffer (for seeking). +

+

+
Specified by:
clear_buffer in class Obuffer
+
+
+
+
+
+
+ +

+set_stop_flag

+
+public void set_stop_flag()
+
+
Description copied from class: Obuffer
+
Notify the buffer that the user has stopped the stream. +

+

+
Specified by:
set_stop_flag in class Obuffer
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/converter/jlc.html b/build/classes/doc/javazoom/jl/converter/jlc.html new file mode 100644 index 0000000..67ddbf2 --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/jlc.html @@ -0,0 +1,256 @@ + + + + + + +jlc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.converter +
+Class jlc

+
+java.lang.Object
+  extended by javazoom.jl.converter.jlc
+
+
+
+
public class jlc
extends java.lang.Object
+ + +

+The jlc class presents the JavaLayer + Conversion functionality as a command-line program. +

+ +

+

+
Since:
+
0.0.7
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
jlc() + +
+           
+  + + + + + + + + + + + +
+Method Summary
+static voidmain(java.lang.String[] args) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+jlc

+
+public jlc()
+
+
+ + + + + + + + +
+Method Detail
+ +

+main

+
+public static void main(java.lang.String[] args)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/converter/package-frame.html b/build/classes/doc/javazoom/jl/converter/package-frame.html new file mode 100644 index 0000000..4bfc943 --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/package-frame.html @@ -0,0 +1,53 @@ + + + + + + +javazoom.jl.converter + + + + + + + + + + + +javazoom.jl.converter + + + + +
+Interfaces  + +
+Converter.ProgressListener
+ + + + + + +
+Classes  + +
+Converter +
+Converter.PrintWriterProgressListener +
+jlc +
+RiffFile +
+WaveFile +
+WaveFileObuffer
+ + + + diff --git a/build/classes/doc/javazoom/jl/converter/package-summary.html b/build/classes/doc/javazoom/jl/converter/package-summary.html new file mode 100644 index 0000000..9bc73a4 --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/package-summary.html @@ -0,0 +1,192 @@ + + + + + + +javazoom.jl.converter + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package javazoom.jl.converter +

+ + + + + + + + + +
+Interface Summary
Converter.ProgressListenerThis interface is used by the Converter to provide + notification of tasks being carried out by the converter, + and to provide new information as it becomes available.
+  + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
ConverterThe Converter class implements the conversion of + an MPEG audio file to a .WAV file.
Converter.PrintWriterProgressListenerImplementation of ProgressListener that writes + notification text to a PrintWriter.
jlcThe jlc class presents the JavaLayer + Conversion functionality as a command-line program.
RiffFileClass to manage RIFF files
WaveFileClass allowing WaveFormat Access
WaveFileObufferImplements an Obuffer by writing the data to + a file in RIFF WAVE format.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/converter/package-tree.html b/build/classes/doc/javazoom/jl/converter/package-tree.html new file mode 100644 index 0000000..b2b5e68 --- /dev/null +++ b/build/classes/doc/javazoom/jl/converter/package-tree.html @@ -0,0 +1,157 @@ + + + + + + +javazoom.jl.converter Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package javazoom.jl.converter +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Bitstream.html b/build/classes/doc/javazoom/jl/decoder/Bitstream.html new file mode 100644 index 0000000..6a4ce40 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Bitstream.html @@ -0,0 +1,601 @@ + + + + + + +Bitstream + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Bitstream

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Bitstream
+
+
+
All Implemented Interfaces:
BitstreamErrors, JavaLayerErrors
+
+
+
+
public final class Bitstream
extends java.lang.Object
implements BitstreamErrors
+ + +

+The Bistream class is responsible for parsing + an MPEG audio bitstream. + + REVIEW: much of the parsing currently occurs in the + various decoders. This should be moved into this class and associated + inner classes. +

+ +

+


+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.BitstreamErrors
BITSTREAM_LAST, INVALIDFRAME, STREAM_EOF, STREAM_ERROR, UNEXPECTED_EOF, UNKNOWN_ERROR, UNKNOWN_SAMPLE_RATE
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  + + + + + + + + + + +
+Constructor Summary
Bitstream(java.io.InputStream in) + +
+          Construct a IBitstream that reads data from a + given InputStream.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          Close the Bitstream.
+ voidcloseFrame() + +
+          Close MP3 frame.
+ intget_bits(int number_of_bits) + +
+          Read bits from buffer into the lower bits of an unsigned int.
+ java.io.InputStreamgetRawID3v2() + +
+          Return raw ID3v2 frames + header.
+ intheader_pos() + +
+          Return position of the first audio header.
+ booleanisSyncCurrentPosition(int syncmode) + +
+          Determines if the next 4 bytes of the stream represent a + frame header.
+ booleanisSyncMark(int headerstring, + int syncmode, + int word) + +
+           
+protected  BitstreamExceptionnewBitstreamException(int errorcode) + +
+           
+protected  BitstreamExceptionnewBitstreamException(int errorcode, + java.lang.Throwable throwable) + +
+           
+ intreadBits(int n) + +
+           
+ intreadCheckedBits(int n) + +
+           
+ HeaderreadFrame() + +
+          Reads and parses the next frame from the input source.
+ voidunreadFrame() + +
+          Unreads the bytes read from the frame.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Bitstream

+
+public Bitstream(java.io.InputStream in)
+
+
Construct a IBitstream that reads data from a + given InputStream. +

+

+
Parameters:
in - The InputStream to read from.
+
+ + + + + + + + +
+Method Detail
+ +

+header_pos

+
+public int header_pos()
+
+
Return position of the first audio header. +

+

+
+
+
+ +
Returns:
size of ID3v2 tag frames.
+
+
+
+ +

+getRawID3v2

+
+public java.io.InputStream getRawID3v2()
+
+
Return raw ID3v2 frames + header. +

+

+
+
+
+ +
Returns:
ID3v2 InputStream or null if ID3v2 frames are not available.
+
+
+
+ +

+close

+
+public void close()
+           throws BitstreamException
+
+
Close the Bitstream. +

+

+
+
+
+ +
Throws: +
BitstreamException
+
+
+
+ +

+readFrame

+
+public Header readFrame()
+                 throws BitstreamException
+
+
Reads and parses the next frame from the input source. +

+

+
+
+
+ +
Returns:
the Header describing details of the frame read, + or null if the end of the stream has been reached. +
Throws: +
BitstreamException
+
+
+
+ +

+unreadFrame

+
+public void unreadFrame()
+                 throws BitstreamException
+
+
Unreads the bytes read from the frame. +

+

+
+
+
+ +
Throws: +
BitstreamException
+
+
+
+ +

+closeFrame

+
+public void closeFrame()
+
+
Close MP3 frame. +

+

+
+
+
+
+
+
+
+ +

+isSyncCurrentPosition

+
+public boolean isSyncCurrentPosition(int syncmode)
+                              throws BitstreamException
+
+
Determines if the next 4 bytes of the stream represent a + frame header. +

+

+
+
+
+ +
Throws: +
BitstreamException
+
+
+
+ +

+readBits

+
+public int readBits(int n)
+
+
+
+
+
+
+
+
+
+ +

+readCheckedBits

+
+public int readCheckedBits(int n)
+
+
+
+
+
+
+
+
+
+ +

+newBitstreamException

+
+protected BitstreamException newBitstreamException(int errorcode)
+
+
+
+
+
+
+
+
+
+ +

+newBitstreamException

+
+protected BitstreamException newBitstreamException(int errorcode,
+                                                   java.lang.Throwable throwable)
+
+
+
+
+
+
+
+
+
+ +

+isSyncMark

+
+public boolean isSyncMark(int headerstring,
+                          int syncmode,
+                          int word)
+
+
+
+
+
+
+
+
+
+ +

+get_bits

+
+public int get_bits(int number_of_bits)
+
+
Read bits from buffer into the lower bits of an unsigned int. + The LSB contains the latest read bit of the stream. + (1 <= number_of_bits <= 16) +

+

+
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/BitstreamErrors.html b/build/classes/doc/javazoom/jl/decoder/BitstreamErrors.html new file mode 100644 index 0000000..0e08363 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/BitstreamErrors.html @@ -0,0 +1,343 @@ + + + + + + +BitstreamErrors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface BitstreamErrors

+
+
All Superinterfaces:
JavaLayerErrors
+
+
+
All Known Implementing Classes:
Bitstream, BitstreamException
+
+
+
+
public interface BitstreamErrors
extends JavaLayerErrors
+ + +

+This interface describes all error codes that can be thrown + in BistreamExceptions. +

+ +

+

+
Since:
+
0.0.6
+
See Also:
BitstreamException
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intBITSTREAM_LAST + +
+           
+static intINVALIDFRAME + +
+          Frame data are missing.
+static intSTREAM_EOF + +
+          The end of the stream was reached.
+static intSTREAM_ERROR + +
+          A problem occurred reading from the stream.
+static intUNEXPECTED_EOF + +
+          The end of the stream was reached prematurely.
+static intUNKNOWN_ERROR + +
+          An undeterminable error occurred.
+static intUNKNOWN_SAMPLE_RATE + +
+          The header describes an unknown sample rate.
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  +

+ + + + + + + + +
+Field Detail
+ +

+UNKNOWN_ERROR

+
+static final int UNKNOWN_ERROR
+
+
An undeterminable error occurred. +

+

+
See Also:
Constant Field Values
+
+
+ +

+UNKNOWN_SAMPLE_RATE

+
+static final int UNKNOWN_SAMPLE_RATE
+
+
The header describes an unknown sample rate. +

+

+
See Also:
Constant Field Values
+
+
+ +

+STREAM_ERROR

+
+static final int STREAM_ERROR
+
+
A problem occurred reading from the stream. +

+

+
See Also:
Constant Field Values
+
+
+ +

+UNEXPECTED_EOF

+
+static final int UNEXPECTED_EOF
+
+
The end of the stream was reached prematurely. +

+

+
See Also:
Constant Field Values
+
+
+ +

+STREAM_EOF

+
+static final int STREAM_EOF
+
+
The end of the stream was reached. +

+

+
See Also:
Constant Field Values
+
+
+ +

+INVALIDFRAME

+
+static final int INVALIDFRAME
+
+
Frame data are missing. +

+

+
See Also:
Constant Field Values
+
+
+ +

+BITSTREAM_LAST

+
+static final int BITSTREAM_LAST
+
+
+
See Also:
Constant Field Values
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/BitstreamException.html b/build/classes/doc/javazoom/jl/decoder/BitstreamException.html new file mode 100644 index 0000000..29be600 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/BitstreamException.html @@ -0,0 +1,359 @@ + + + + + + +BitstreamException + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class BitstreamException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by javazoom.jl.decoder.JavaLayerException
+              extended by javazoom.jl.decoder.BitstreamException
+
+
+
All Implemented Interfaces:
java.io.Serializable, BitstreamErrors, JavaLayerErrors
+
+
+
+
public class BitstreamException
extends JavaLayerException
implements BitstreamErrors
+ + +

+Instances of BitstreamException are thrown + when operations on a Bitstream fail. +

+ The exception provides details of the exception condition + in two ways: +

  1. + as an error-code describing the nature of the error +


  2. + as the Throwable instance, if any, that was thrown + indicating that an exceptional condition has occurred. +

+

+ +

+

+
Since:
+
0.0.6
+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.BitstreamErrors
BITSTREAM_LAST, INVALIDFRAME, STREAM_EOF, STREAM_ERROR, UNEXPECTED_EOF, UNKNOWN_ERROR, UNKNOWN_SAMPLE_RATE
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  + + + + + + + + + + + + + +
+Constructor Summary
BitstreamException(int errorcode, + java.lang.Throwable t) + +
+           
BitstreamException(java.lang.String msg, + java.lang.Throwable t) + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ intgetErrorCode() + +
+           
+static java.lang.StringgetErrorString(int errorcode) + +
+           
+ + + + + + + +
Methods inherited from class javazoom.jl.decoder.JavaLayerException
getException, printStackTrace, printStackTrace
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+BitstreamException

+
+public BitstreamException(java.lang.String msg,
+                          java.lang.Throwable t)
+
+
+
+ +

+BitstreamException

+
+public BitstreamException(int errorcode,
+                          java.lang.Throwable t)
+
+
+ + + + + + + + +
+Method Detail
+ +

+getErrorCode

+
+public int getErrorCode()
+
+
+
+
+
+
+
+
+
+ +

+getErrorString

+
+public static java.lang.String getErrorString(int errorcode)
+
+
+
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Control.html b/build/classes/doc/javazoom/jl/decoder/Control.html new file mode 100644 index 0000000..f457c6d --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Control.html @@ -0,0 +1,325 @@ + + + + + + +Control + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface Control

+
+
+
public interface Control
+ + +

+Work in progress. +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ doublegetPosition() + +
+          Retrieves the current position.
+ booleanisPlaying() + +
+           
+ booleanisRandomAccess() + +
+           
+ voidpause() + +
+           
+ voidsetPosition(double d) + +
+           
+ voidstart() + +
+          Starts playback of the media presented by this control.
+ voidstop() + +
+          Stops playback of the media presented by this control.
+  +

+ + + + + + + + +
+Method Detail
+ +

+start

+
+void start()
+
+
Starts playback of the media presented by this control. +

+

+
+
+
+
+ +

+stop

+
+void stop()
+
+
Stops playback of the media presented by this control. +

+

+
+
+
+
+ +

+isPlaying

+
+boolean isPlaying()
+
+
+
+
+
+
+ +

+pause

+
+void pause()
+
+
+
+
+
+
+ +

+isRandomAccess

+
+boolean isRandomAccess()
+
+
+
+
+
+
+ +

+getPosition

+
+double getPosition()
+
+
Retrieves the current position. +

+

+
+
+
+
+ +

+setPosition

+
+void setPosition(double d)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Crc16.html b/build/classes/doc/javazoom/jl/decoder/Crc16.html new file mode 100644 index 0000000..7a85bda --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Crc16.html @@ -0,0 +1,279 @@ + + + + + + +Crc16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Crc16

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Crc16
+
+
+
+
public final class Crc16
extends java.lang.Object
+ + +

+16-Bit CRC checksum +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
Crc16() + +
+          Dummy Constructor
+  + + + + + + + + + + + + + + + +
+Method Summary
+ voidadd_bits(int bitstring, + int length) + +
+          Feed a bitstring to the crc calculation (0 < length <= 32).
+ shortchecksum() + +
+          Return the calculated checksum.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Crc16

+
+public Crc16()
+
+
Dummy Constructor +

+

+ + + + + + + + +
+Method Detail
+ +

+add_bits

+
+public void add_bits(int bitstring,
+                     int length)
+
+
Feed a bitstring to the crc calculation (0 < length <= 32). +

+

+
+
+
+
+ +

+checksum

+
+public short checksum()
+
+
Return the calculated checksum. + Erase it for next calls to add_bits(). +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Decoder.Params.html b/build/classes/doc/javazoom/jl/decoder/Decoder.Params.html new file mode 100644 index 0000000..22915e8 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Decoder.Params.html @@ -0,0 +1,342 @@ + + + + + + +Decoder.Params + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Decoder.Params

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Decoder.Params
+
+
+
All Implemented Interfaces:
java.lang.Cloneable
+
+
+
Enclosing class:
Decoder
+
+
+
+
public static class Decoder.Params
extends java.lang.Object
implements java.lang.Cloneable
+ + +

+The Params class presents the customizable + aspects of the decoder. +

+ Instances of this class are not thread safe. +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
Decoder.Params() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.lang.Objectclone() + +
+           
+ EqualizergetInitialEqualizerSettings() + +
+          Retrieves the equalizer settings that the decoder's equalizer + will be initialized from.
+ OutputChannelsgetOutputChannels() + +
+           
+ voidsetOutputChannels(OutputChannels out) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Decoder.Params

+
+public Decoder.Params()
+
+
+ + + + + + + + +
+Method Detail
+ +

+clone

+
+public java.lang.Object clone()
+
+
+
Overrides:
clone in class java.lang.Object
+
+
+
+
+
+
+ +

+setOutputChannels

+
+public void setOutputChannels(OutputChannels out)
+
+
+
+
+
+
+
+
+
+ +

+getOutputChannels

+
+public OutputChannels getOutputChannels()
+
+
+
+
+
+
+
+
+
+ +

+getInitialEqualizerSettings

+
+public Equalizer getInitialEqualizerSettings()
+
+
Retrieves the equalizer settings that the decoder's equalizer + will be initialized from. +

+ The Equalizer instance returned + cannot be changed in real time to affect the + decoder output as it is used only to initialize the decoders + EQ settings. To affect the decoder's output in realtime, + use the Equalizer returned from the getEqualizer() method on + the decoder. +

+

+
+
+
+ +
Returns:
The Equalizer used to initialize the + EQ settings of the decoder.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Decoder.html b/build/classes/doc/javazoom/jl/decoder/Decoder.html new file mode 100644 index 0000000..cabfc58 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Decoder.html @@ -0,0 +1,575 @@ + + + + + + +Decoder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Decoder

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Decoder
+
+
+
All Implemented Interfaces:
DecoderErrors, JavaLayerErrors
+
+
+
+
public class Decoder
extends java.lang.Object
implements DecoderErrors
+ + +

+The Decoder class encapsulates the details of + decoding an MPEG audio frame. +

+ +

+

+
Since:
+
0.0.5
+
Version:
+
0.0.7 12/12/99
+
+
+ +

+ + + + + + + + + + + +
+Nested Class Summary
+static classDecoder.Params + +
+          The Params class presents the customizable + aspects of the decoder.
+ + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.DecoderErrors
ILLEGAL_SUBBAND_ALLOCATION, UNKNOWN_ERROR, UNSUPPORTED_LAYER
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  + + + + + + + + + + + + + +
+Constructor Summary
Decoder() + +
+          Creates a new Decoder instance with default + parameters.
Decoder(Decoder.Params params0) + +
+          Creates a new Decoder instance with default + parameters.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ ObufferdecodeFrame(Header header, + Bitstream stream) + +
+          Decodes one frame from an MPEG audio bitstream.
+static Decoder.ParamsgetDefaultParams() + +
+           
+ intgetOutputBlockSize() + +
+          Retrieves the maximum number of samples that will be written to + the output buffer when one frame is decoded.
+ intgetOutputChannels() + +
+          Retrieves the number of channels of PCM samples output by + this decoder.
+ intgetOutputFrequency() + +
+          Retrieves the sample frequency of the PCM samples output + by this decoder.
+protected  DecoderExceptionnewDecoderException(int errorcode) + +
+           
+protected  DecoderExceptionnewDecoderException(int errorcode, + java.lang.Throwable throwable) + +
+           
+protected  FrameDecoderretrieveDecoder(Header header, + Bitstream stream, + int layer) + +
+           
+ voidsetEqualizer(Equalizer eq) + +
+           
+ voidsetOutputBuffer(Obuffer out) + +
+          Changes the output buffer.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Decoder

+
+public Decoder()
+
+
Creates a new Decoder instance with default + parameters. +

+

+
+ +

+Decoder

+
+public Decoder(Decoder.Params params0)
+
+
Creates a new Decoder instance with default + parameters. +

+

+
Parameters:
params - The Params instance that describes + the customizable aspects of the decoder.
+
+ + + + + + + + +
+Method Detail
+ +

+getDefaultParams

+
+public static Decoder.Params getDefaultParams()
+
+
+
+
+
+
+
+
+
+ +

+setEqualizer

+
+public void setEqualizer(Equalizer eq)
+
+
+
+
+
+
+
+
+
+ +

+decodeFrame

+
+public Obuffer decodeFrame(Header header,
+                           Bitstream stream)
+                    throws DecoderException
+
+
Decodes one frame from an MPEG audio bitstream. +

+

+
+
+
+
Parameters:
header - The header describing the frame to decode.
bitstream - The bistream that provides the bits for te body of the frame. +
Returns:
A SampleBuffer containing the decoded samples. +
Throws: +
DecoderException
+
+
+
+ +

+setOutputBuffer

+
+public void setOutputBuffer(Obuffer out)
+
+
Changes the output buffer. This will take effect the next time + decodeFrame() is called. +

+

+
+
+
+
+
+
+
+ +

+getOutputFrequency

+
+public int getOutputFrequency()
+
+
Retrieves the sample frequency of the PCM samples output + by this decoder. This typically corresponds to the sample + rate encoded in the MPEG audio stream. +

+

+
+
+
+
Parameters:
the - sample rate (in Hz) of the samples written to the + output buffer when decoding.
+
+
+
+ +

+getOutputChannels

+
+public int getOutputChannels()
+
+
Retrieves the number of channels of PCM samples output by + this decoder. This usually corresponds to the number of + channels in the MPEG audio stream, although it may differ. +

+

+
+
+
+ +
Returns:
The number of output channels in the decoded samples: 1 + for mono, or 2 for stereo.
+
+
+
+ +

+getOutputBlockSize

+
+public int getOutputBlockSize()
+
+
Retrieves the maximum number of samples that will be written to + the output buffer when one frame is decoded. This can be used to + help calculate the size of other buffers whose size is based upon + the number of samples written to the output buffer. NB: this is + an upper bound and fewer samples may actually be written, depending + upon the sample rate and number of channels. +

+

+
+
+
+ +
Returns:
The maximum number of samples that are written to the + output buffer when decoding a single frame of MPEG audio.
+
+
+
+ +

+newDecoderException

+
+protected DecoderException newDecoderException(int errorcode)
+
+
+
+
+
+
+
+
+
+ +

+newDecoderException

+
+protected DecoderException newDecoderException(int errorcode,
+                                               java.lang.Throwable throwable)
+
+
+
+
+
+
+
+
+
+ +

+retrieveDecoder

+
+protected FrameDecoder retrieveDecoder(Header header,
+                                       Bitstream stream,
+                                       int layer)
+                                throws DecoderException
+
+
+
+
+
+ +
Throws: +
DecoderException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/DecoderErrors.html b/build/classes/doc/javazoom/jl/decoder/DecoderErrors.html new file mode 100644 index 0000000..953a9a7 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/DecoderErrors.html @@ -0,0 +1,259 @@ + + + + + + +DecoderErrors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface DecoderErrors

+
+
All Superinterfaces:
JavaLayerErrors
+
+
+
All Known Implementing Classes:
Decoder, DecoderException
+
+
+
+
public interface DecoderErrors
extends JavaLayerErrors
+ + +

+This interface provides constants describing the error + codes used by the Decoder to indicate errors. +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intILLEGAL_SUBBAND_ALLOCATION + +
+          Illegal allocation in subband layer.
+static intUNKNOWN_ERROR + +
+           
+static intUNSUPPORTED_LAYER + +
+          Layer not supported by the decoder.
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  +

+ + + + + + + + +
+Field Detail
+ +

+UNKNOWN_ERROR

+
+static final int UNKNOWN_ERROR
+
+
+
See Also:
Constant Field Values
+
+
+ +

+UNSUPPORTED_LAYER

+
+static final int UNSUPPORTED_LAYER
+
+
Layer not supported by the decoder. +

+

+
See Also:
Constant Field Values
+
+
+ +

+ILLEGAL_SUBBAND_ALLOCATION

+
+static final int ILLEGAL_SUBBAND_ALLOCATION
+
+
Illegal allocation in subband layer. Indicates a corrupt stream. +

+

+
See Also:
Constant Field Values
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/DecoderException.html b/build/classes/doc/javazoom/jl/decoder/DecoderException.html new file mode 100644 index 0000000..afbc5fc --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/DecoderException.html @@ -0,0 +1,348 @@ + + + + + + +DecoderException + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class DecoderException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by javazoom.jl.decoder.JavaLayerException
+              extended by javazoom.jl.decoder.DecoderException
+
+
+
All Implemented Interfaces:
java.io.Serializable, DecoderErrors, JavaLayerErrors
+
+
+
+
public class DecoderException
extends JavaLayerException
implements DecoderErrors
+ + +

+The DecoderException represents the class of + errors that can occur when decoding MPEG audio. +

+ +

+

+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.DecoderErrors
ILLEGAL_SUBBAND_ALLOCATION, UNKNOWN_ERROR, UNSUPPORTED_LAYER
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.JavaLayerErrors
BITSTREAM_ERROR, DECODER_ERROR
+  + + + + + + + + + + + + + +
+Constructor Summary
DecoderException(int errorcode, + java.lang.Throwable t) + +
+           
DecoderException(java.lang.String msg, + java.lang.Throwable t) + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ intgetErrorCode() + +
+           
+static java.lang.StringgetErrorString(int errorcode) + +
+           
+ + + + + + + +
Methods inherited from class javazoom.jl.decoder.JavaLayerException
getException, printStackTrace, printStackTrace
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+DecoderException

+
+public DecoderException(java.lang.String msg,
+                        java.lang.Throwable t)
+
+
+
+ +

+DecoderException

+
+public DecoderException(int errorcode,
+                        java.lang.Throwable t)
+
+
+ + + + + + + + +
+Method Detail
+ +

+getErrorCode

+
+public int getErrorCode()
+
+
+
+
+
+
+
+
+
+ +

+getErrorString

+
+public static java.lang.String getErrorString(int errorcode)
+
+
+
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Equalizer.EQFunction.html b/build/classes/doc/javazoom/jl/decoder/Equalizer.EQFunction.html new file mode 100644 index 0000000..13a7b4e --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Equalizer.EQFunction.html @@ -0,0 +1,255 @@ + + + + + + +Equalizer.EQFunction + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Equalizer.EQFunction

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Equalizer.EQFunction
+
+
+
Enclosing class:
Equalizer
+
+
+
+
public abstract static class Equalizer.EQFunction
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
Equalizer.EQFunction() + +
+           
+  + + + + + + + + + + + +
+Method Summary
+ floatgetBand(int band) + +
+          Returns the setting of a band in the equalizer.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Equalizer.EQFunction

+
+public Equalizer.EQFunction()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getBand

+
+public float getBand(int band)
+
+
Returns the setting of a band in the equalizer. +

+

+
Parameters:
band - The index of the band to retrieve the setting + for. +
Returns:
the setting of the specified band. This is a value between + -1 and +1.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Equalizer.html b/build/classes/doc/javazoom/jl/decoder/Equalizer.html new file mode 100644 index 0000000..39bd1c8 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Equalizer.html @@ -0,0 +1,491 @@ + + + + + + +Equalizer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Equalizer

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Equalizer
+
+
+
+
public final class Equalizer
extends java.lang.Object
+ + +

+The Equalizer class can be used to specify + equalization settings for the MPEG audio decoder. +

+ The equalizer consists of 32 band-pass filters. + Each band of the equalizer can take on a fractional value between + -1.0 and +1.0. + At -1.0, the input signal is attenuated by 6dB, at +1.0 the signal is + amplified by 6dB. +

+ +

+

+
See Also:
Decoder
+
+ +

+ + + + + + + + + + + +
+Nested Class Summary
+static classEqualizer.EQFunction + +
+           
+ + + + + + + + + + + + + + +
+Field Summary
+static floatBAND_NOT_PRESENT + +
+          Equalizer setting to denote that a given band will not be + present in the output signal.
+static EqualizerPASS_THRU_EQ + +
+           
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
Equalizer() + +
+          Creates a new Equalizer instance.
Equalizer(Equalizer.EQFunction eq) + +
+           
Equalizer(float[] settings) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ floatgetBand(int band) + +
+          Retrieves the eq setting for a given band.
+ intgetBandCount() + +
+          Retrieves the number of bands present in this equalizer.
+ voidreset() + +
+          Sets all bands to 0.0
+ floatsetBand(int band, + float neweq) + +
+           
+ voidsetFrom(Equalizer.EQFunction eq) + +
+           
+ voidsetFrom(Equalizer eq) + +
+          Sets the bands of this equalizer to the value the bands of + another equalizer.
+ voidsetFrom(float[] eq) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+BAND_NOT_PRESENT

+
+public static final float BAND_NOT_PRESENT
+
+
Equalizer setting to denote that a given band will not be + present in the output signal. +

+

+
See Also:
Constant Field Values
+
+
+ +

+PASS_THRU_EQ

+
+public static final Equalizer PASS_THRU_EQ
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+Equalizer

+
+public Equalizer()
+
+
Creates a new Equalizer instance. +

+

+
+ +

+Equalizer

+
+public Equalizer(float[] settings)
+
+
+
+ +

+Equalizer

+
+public Equalizer(Equalizer.EQFunction eq)
+
+
+ + + + + + + + +
+Method Detail
+ +

+setFrom

+
+public void setFrom(float[] eq)
+
+
+
+
+
+
+ +

+setFrom

+
+public void setFrom(Equalizer.EQFunction eq)
+
+
+
+
+
+
+ +

+setFrom

+
+public void setFrom(Equalizer eq)
+
+
Sets the bands of this equalizer to the value the bands of + another equalizer. Bands that are not present in both equalizers are ignored. +

+

+
+
+
+
+ +

+reset

+
+public void reset()
+
+
Sets all bands to 0.0 +

+

+
+
+
+
+ +

+getBandCount

+
+public int getBandCount()
+
+
Retrieves the number of bands present in this equalizer. +

+

+
+
+
+
+ +

+setBand

+
+public float setBand(int band,
+                     float neweq)
+
+
+
+
+
+
+ +

+getBand

+
+public float getBand(int band)
+
+
Retrieves the eq setting for a given band. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/FrameDecoder.html b/build/classes/doc/javazoom/jl/decoder/FrameDecoder.html new file mode 100644 index 0000000..d3f54dd --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/FrameDecoder.html @@ -0,0 +1,211 @@ + + + + + + +FrameDecoder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface FrameDecoder

+
+
+
public interface FrameDecoder
+ + +

+Implementations of FrameDecoder are responsible for decoding + an MPEG audio frame. +

+ +

+


+ +

+ + + + + + + + + + + + +
+Method Summary
+ voiddecodeFrame() + +
+          Decodes one frame of MPEG audio.
+  +

+ + + + + + + + +
+Method Detail
+ +

+decodeFrame

+
+void decodeFrame()
+                 throws DecoderException
+
+
Decodes one frame of MPEG audio. +

+

+ +
Throws: +
DecoderException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Header.html b/build/classes/doc/javazoom/jl/decoder/Header.html new file mode 100644 index 0000000..a922c16 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Header.html @@ -0,0 +1,1202 @@ + + + + + + +Header + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Header

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Header
+
+
+
+
public final class Header
extends java.lang.Object
+ + +

+Class for extracting information from a frame header. +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static java.lang.String[][][]bitrate_str + +
+           
+static int[][][]bitrates + +
+           
+ shortchecksum + +
+           
+static intDUAL_CHANNEL + +
+           
+static intFOURTYEIGHT + +
+           
+static intFOURTYFOUR_POINT_ONE + +
+           
+ intframesize + +
+           
+static int[][]frequencies + +
+           
+static intJOINT_STEREO + +
+           
+static intMPEG1 + +
+          Constant for MPEG-1 version
+static intMPEG2_LSF + +
+          Constant for MPEG-2 LSF version
+static intMPEG25_LSF + +
+           
+ intnSlots + +
+           
+static intSINGLE_CHANNEL + +
+           
+static intSTEREO + +
+           
+static intTHIRTYTWO + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intbitrate_index() + +
+          Returns bitrate index.
+ intbitrate_instant() + +
+          Return Instant Bitrate.
+ java.lang.Stringbitrate_string() + +
+          Return Bitrate.
+ intbitrate() + +
+          Return Bitrate.
+ intcalculate_framesize() + +
+          Calculate Frame size.
+ booleanchecksum_ok() + +
+          Returns Checksum flag.
+ booleanchecksums() + +
+          Returns Protection bit.
+ booleancopyright() + +
+          Returns Copyright.
+ intfrequency() + +
+          Returns Frequency.
+ intgetSyncHeader() + +
+          Returns synchronized header.
+ intintensity_stereo_bound() + +
+          Returns Intensity Stereo.
+ java.lang.Stringlayer_string() + +
+          Return Layer version.
+ intlayer() + +
+          Returns Layer ID.
+ intmax_number_of_frames(int streamsize) + +
+          Returns the maximum number of frames in the stream.
+ intmin_number_of_frames(int streamsize) + +
+          Returns the maximum number of frames in the stream.
+ intmode_extension() + +
+          Returns Mode Extension.
+ java.lang.Stringmode_string() + +
+          Returns Mode.
+ intmode() + +
+          Returns Mode.
+ floatms_per_frame() + +
+          Returns ms/frame.
+ intnumber_of_subbands() + +
+          Returns the number of subbands in the current frame.
+ booleanoriginal() + +
+          Returns Original.
+ booleanpadding() + +
+          Returns Layer III Padding bit.
+ java.lang.Stringsample_frequency_string() + +
+          Returns Frequency
+ intsample_frequency() + +
+          Returns Sample Frequency.
+ intslots() + +
+          Returns Slots.
+ java.lang.StringtoString() + +
+           
+ floattotal_ms(int streamsize) + +
+          Returns total ms.
+ intvbr_scale() + +
+          Return VBR scale.
+ byte[]vbr_toc() + +
+          Return VBR TOC.
+ booleanvbr() + +
+          Return VBR.
+ java.lang.Stringversion_string() + +
+          Returns Version.
+ intversion() + +
+          Returns version.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+frequencies

+
+public static final int[][] frequencies
+
+
+
+
+
+ +

+MPEG2_LSF

+
+public static final int MPEG2_LSF
+
+
Constant for MPEG-2 LSF version +

+

+
See Also:
Constant Field Values
+
+
+ +

+MPEG25_LSF

+
+public static final int MPEG25_LSF
+
+
+
See Also:
Constant Field Values
+
+
+ +

+MPEG1

+
+public static final int MPEG1
+
+
Constant for MPEG-1 version +

+

+
See Also:
Constant Field Values
+
+
+ +

+STEREO

+
+public static final int STEREO
+
+
+
See Also:
Constant Field Values
+
+
+ +

+JOINT_STEREO

+
+public static final int JOINT_STEREO
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DUAL_CHANNEL

+
+public static final int DUAL_CHANNEL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+SINGLE_CHANNEL

+
+public static final int SINGLE_CHANNEL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+FOURTYFOUR_POINT_ONE

+
+public static final int FOURTYFOUR_POINT_ONE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+FOURTYEIGHT

+
+public static final int FOURTYEIGHT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+THIRTYTWO

+
+public static final int THIRTYTWO
+
+
+
See Also:
Constant Field Values
+
+
+ +

+checksum

+
+public short checksum
+
+
+
+
+
+ +

+framesize

+
+public int framesize
+
+
+
+
+
+ +

+nSlots

+
+public int nSlots
+
+
+
+
+
+ +

+bitrates

+
+public static final int[][][] bitrates
+
+
+
+
+
+ +

+bitrate_str

+
+public static final java.lang.String[][][] bitrate_str
+
+
+
+
+ + + + + + + + +
+Method Detail
+ +

+toString

+
+public java.lang.String toString()
+
+
+
Overrides:
toString in class java.lang.Object
+
+
+
+
+
+
+ +

+version

+
+public int version()
+
+
Returns version. +

+

+
+
+
+
+ +

+layer

+
+public int layer()
+
+
Returns Layer ID. +

+

+
+
+
+
+ +

+bitrate_index

+
+public int bitrate_index()
+
+
Returns bitrate index. +

+

+
+
+
+
+ +

+sample_frequency

+
+public int sample_frequency()
+
+
Returns Sample Frequency. +

+

+
+
+
+
+ +

+frequency

+
+public int frequency()
+
+
Returns Frequency. +

+

+
+
+
+
+ +

+mode

+
+public int mode()
+
+
Returns Mode. +

+

+
+
+
+
+ +

+checksums

+
+public boolean checksums()
+
+
Returns Protection bit. +

+

+
+
+
+
+ +

+copyright

+
+public boolean copyright()
+
+
Returns Copyright. +

+

+
+
+
+
+ +

+original

+
+public boolean original()
+
+
Returns Original. +

+

+
+
+
+
+ +

+vbr

+
+public boolean vbr()
+
+
Return VBR. +

+

+ +
Returns:
true if VBR header is found
+
+
+
+ +

+vbr_scale

+
+public int vbr_scale()
+
+
Return VBR scale. +

+

+ +
Returns:
scale of -1 if not available
+
+
+
+ +

+vbr_toc

+
+public byte[] vbr_toc()
+
+
Return VBR TOC. +

+

+ +
Returns:
vbr toc ot null if not available
+
+
+
+ +

+checksum_ok

+
+public boolean checksum_ok()
+
+
Returns Checksum flag. + Compares computed checksum with stream checksum. +

+

+
+
+
+
+ +

+padding

+
+public boolean padding()
+
+
Returns Layer III Padding bit. +

+

+
+
+
+
+ +

+slots

+
+public int slots()
+
+
Returns Slots. +

+

+
+
+
+
+ +

+mode_extension

+
+public int mode_extension()
+
+
Returns Mode Extension. +

+

+
+
+
+
+ +

+calculate_framesize

+
+public int calculate_framesize()
+
+
Calculate Frame size. + Calculates framesize in bytes excluding header size. +

+

+
+
+
+
+ +

+max_number_of_frames

+
+public int max_number_of_frames(int streamsize)
+
+
Returns the maximum number of frames in the stream. +

+

+
Parameters:
streamsize - +
Returns:
number of frames
+
+
+
+ +

+min_number_of_frames

+
+public int min_number_of_frames(int streamsize)
+
+
Returns the maximum number of frames in the stream. +

+

+
Parameters:
streamsize - +
Returns:
number of frames
+
+
+
+ +

+ms_per_frame

+
+public float ms_per_frame()
+
+
Returns ms/frame. +

+

+ +
Returns:
milliseconds per frame
+
+
+
+ +

+total_ms

+
+public float total_ms(int streamsize)
+
+
Returns total ms. +

+

+
Parameters:
streamsize - +
Returns:
total milliseconds
+
+
+
+ +

+getSyncHeader

+
+public int getSyncHeader()
+
+
Returns synchronized header. +

+

+
+
+
+
+ +

+layer_string

+
+public java.lang.String layer_string()
+
+
Return Layer version. +

+

+
+
+
+
+ +

+bitrate_string

+
+public java.lang.String bitrate_string()
+
+
Return Bitrate. +

+

+ +
Returns:
bitrate in bps
+
+
+
+ +

+bitrate

+
+public int bitrate()
+
+
Return Bitrate. +

+

+ +
Returns:
bitrate in bps and average bitrate for VBR header
+
+
+
+ +

+bitrate_instant

+
+public int bitrate_instant()
+
+
Return Instant Bitrate. + Bitrate for VBR is not constant. +

+

+ +
Returns:
bitrate in bps
+
+
+
+ +

+sample_frequency_string

+
+public java.lang.String sample_frequency_string()
+
+
Returns Frequency +

+

+ +
Returns:
frequency string in kHz
+
+
+
+ +

+mode_string

+
+public java.lang.String mode_string()
+
+
Returns Mode. +

+

+
+
+
+
+ +

+version_string

+
+public java.lang.String version_string()
+
+
Returns Version. +

+

+ +
Returns:
MPEG-1 or MPEG-2 LSF or MPEG-2.5 LSF
+
+
+
+ +

+number_of_subbands

+
+public int number_of_subbands()
+
+
Returns the number of subbands in the current frame. +

+

+ +
Returns:
number of subbands
+
+
+
+ +

+intensity_stereo_bound

+
+public int intensity_stereo_bound()
+
+
Returns Intensity Stereo. + (Layer II joint stereo only). + Returns the number of subbands which are in stereo mode, + subbands above that limit are in intensity stereo mode. +

+

+ +
Returns:
intensity
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/InputStreamSource.html b/build/classes/doc/javazoom/jl/decoder/InputStreamSource.html new file mode 100644 index 0000000..621d3dc --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/InputStreamSource.html @@ -0,0 +1,396 @@ + + + + + + +InputStreamSource + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class InputStreamSource

+
+java.lang.Object
+  extended by javazoom.jl.decoder.InputStreamSource
+
+
+
All Implemented Interfaces:
Source
+
+
+
+
public class InputStreamSource
extends java.lang.Object
implements Source
+ + +

+Work In Progress. + + An instance of InputStreamSource implements a + Source that provides data from an InputStream + . Seeking functionality is not supported. +

+ +

+


+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from interface javazoom.jl.decoder.Source
LENGTH_UNKNOWN
+  + + + + + + + + + + +
+Constructor Summary
InputStreamSource(java.io.InputStream in) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanisSeekable() + +
+           
+ longlength() + +
+           
+ intread(byte[] b, + int offs, + int len) + +
+           
+ longseek(long to) + +
+           
+ longtell() + +
+           
+ booleanwillReadBlock() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+InputStreamSource

+
+public InputStreamSource(java.io.InputStream in)
+
+
+ + + + + + + + +
+Method Detail
+ +

+read

+
+public int read(byte[] b,
+                int offs,
+                int len)
+         throws java.io.IOException
+
+
+
Specified by:
read in interface Source
+
+
+ +
Throws: +
java.io.IOException
+
+
+
+ +

+willReadBlock

+
+public boolean willReadBlock()
+
+
+
Specified by:
willReadBlock in interface Source
+
+
+
+
+
+
+ +

+isSeekable

+
+public boolean isSeekable()
+
+
+
Specified by:
isSeekable in interface Source
+
+
+
+
+
+
+ +

+tell

+
+public long tell()
+
+
+
Specified by:
tell in interface Source
+
+
+
+
+
+
+ +

+seek

+
+public long seek(long to)
+
+
+
Specified by:
seek in interface Source
+
+
+
+
+
+
+ +

+length

+
+public long length()
+
+
+
Specified by:
length in interface Source
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/JavaLayerError.html b/build/classes/doc/javazoom/jl/decoder/JavaLayerError.html new file mode 100644 index 0000000..caad212 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/JavaLayerError.html @@ -0,0 +1,242 @@ + + + + + + +JavaLayerError + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class JavaLayerError

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Error
+          extended by javazoom.jl.decoder.JavaLayerError
+
+
+
All Implemented Interfaces:
java.io.Serializable
+
+
+
+
public class JavaLayerError
extends java.lang.Error
+ + +

+Work in progress. + + API usage errors may be handled by throwing an instance of this + class, as per JMF 2.0. +

+ +

+

+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
JavaLayerError() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JavaLayerError

+
+public JavaLayerError()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/JavaLayerErrors.html b/build/classes/doc/javazoom/jl/decoder/JavaLayerErrors.html new file mode 100644 index 0000000..87b559f --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/JavaLayerErrors.html @@ -0,0 +1,233 @@ + + + + + + +JavaLayerErrors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface JavaLayerErrors

+
+
All Known Subinterfaces:
BitstreamErrors, DecoderErrors
+
+
+
All Known Implementing Classes:
Bitstream, BitstreamException, Decoder, DecoderException
+
+
+
+
public interface JavaLayerErrors
+ + +

+Exception erorr codes for components of the JavaLayer API. +

+ +

+


+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+static intBITSTREAM_ERROR + +
+          The first bitstream error code.
+static intDECODER_ERROR + +
+          The first decoder error code.
+  +

+ + + + + + + + +
+Field Detail
+ +

+BITSTREAM_ERROR

+
+static final int BITSTREAM_ERROR
+
+
The first bitstream error code. See the DecoderErrors + interface for other bitstream error codes. +

+

+
See Also:
Constant Field Values
+
+
+ +

+DECODER_ERROR

+
+static final int DECODER_ERROR
+
+
The first decoder error code. See the DecoderErrors + interface for other decoder error codes. +

+

+
See Also:
Constant Field Values
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/JavaLayerException.html b/build/classes/doc/javazoom/jl/decoder/JavaLayerException.html new file mode 100644 index 0000000..5e71fa1 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/JavaLayerException.html @@ -0,0 +1,348 @@ + + + + + + +JavaLayerException + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class JavaLayerException

+
+java.lang.Object
+  extended by java.lang.Throwable
+      extended by java.lang.Exception
+          extended by javazoom.jl.decoder.JavaLayerException
+
+
+
All Implemented Interfaces:
java.io.Serializable
+
+
+
Direct Known Subclasses:
BitstreamException, DecoderException
+
+
+
+
public class JavaLayerException
extends java.lang.Exception
+ + +

+The JavaLayerException is the base class for all API-level + exceptions thrown by JavaLayer. To facilitate conversion and + common handling of exceptions from other domains, the class + can delegate some functionality to a contained Throwable instance. +

+

+ +

+

+
See Also:
Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + +
+Constructor Summary
JavaLayerException() + +
+           
JavaLayerException(java.lang.String msg) + +
+           
JavaLayerException(java.lang.String msg, + java.lang.Throwable t) + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.lang.ThrowablegetException() + +
+           
+ voidprintStackTrace() + +
+           
+ voidprintStackTrace(java.io.PrintStream ps) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, setStackTrace, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JavaLayerException

+
+public JavaLayerException()
+
+
+
+ +

+JavaLayerException

+
+public JavaLayerException(java.lang.String msg)
+
+
+
+ +

+JavaLayerException

+
+public JavaLayerException(java.lang.String msg,
+                          java.lang.Throwable t)
+
+
+ + + + + + + + +
+Method Detail
+ +

+getException

+
+public java.lang.Throwable getException()
+
+
+
+
+
+
+ +

+printStackTrace

+
+public void printStackTrace()
+
+
+
Overrides:
printStackTrace in class java.lang.Throwable
+
+
+
+
+
+
+ +

+printStackTrace

+
+public void printStackTrace(java.io.PrintStream ps)
+
+
+
Overrides:
printStackTrace in class java.lang.Throwable
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/JavaLayerHook.html b/build/classes/doc/javazoom/jl/decoder/JavaLayerHook.html new file mode 100644 index 0000000..cbac229 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/JavaLayerHook.html @@ -0,0 +1,209 @@ + + + + + + +JavaLayerHook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface JavaLayerHook

+
+
+
public interface JavaLayerHook
+ + +

+The JavaLayerHooks class allows developers to change + the way the JavaLayer library uses Resources. +

+ +

+


+ +

+ + + + + + + + + + + + +
+Method Summary
+ java.io.InputStreamgetResourceAsStream(java.lang.String name) + +
+          Retrieves the named resource.
+  +

+ + + + + + + + +
+Method Detail
+ +

+getResourceAsStream

+
+java.io.InputStream getResourceAsStream(java.lang.String name)
+
+
Retrieves the named resource. This allows resources to be + obtained without specifying how they are retrieved. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/JavaLayerUtils.html b/build/classes/doc/javazoom/jl/decoder/JavaLayerUtils.html new file mode 100644 index 0000000..361dec5 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/JavaLayerUtils.html @@ -0,0 +1,436 @@ + + + + + + +JavaLayerUtils + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class JavaLayerUtils

+
+java.lang.Object
+  extended by javazoom.jl.decoder.JavaLayerUtils
+
+
+
+
public class JavaLayerUtils
extends java.lang.Object
+ + +

+The JavaLayerUtils class is not strictly part of the JavaLayer API. + It serves to provide useful methods and system-wide hooks. +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
JavaLayerUtils() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static java.lang.Objectdeserialize(java.io.InputStream in) + +
+          Deserializes an object from the given InputStream.
+static java.lang.Objectdeserialize(java.io.InputStream in, + java.lang.Class cls) + +
+          Deserializes the object contained in the given input stream.
+static java.lang.ObjectdeserializeArray(java.io.InputStream in, + java.lang.Class elemType, + int length) + +
+          Deserializes an array from a given InputStream.
+static java.lang.ObjectdeserializeArrayResource(java.lang.String name, + java.lang.Class elemType, + int length) + +
+           
+static JavaLayerHookgetHook() + +
+           
+static java.io.InputStreamgetResourceAsStream(java.lang.String name) + +
+          Retrieves an InputStream for a named resource.
+static voidserialize(java.io.OutputStream out, + java.lang.Object obj) + +
+           
+static voidsetHook(JavaLayerHook hook0) + +
+          Sets the system-wide JavaLayer hook.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JavaLayerUtils

+
+public JavaLayerUtils()
+
+
+ + + + + + + + +
+Method Detail
+ +

+deserialize

+
+public static java.lang.Object deserialize(java.io.InputStream in,
+                                           java.lang.Class cls)
+                                    throws java.io.IOException
+
+
Deserializes the object contained in the given input stream. +

+

+
Parameters:
in - The input stream to deserialize an object from.
cls - The expected class of the deserialized object. +
Throws: +
java.io.IOException
+
+
+
+ +

+deserialize

+
+public static java.lang.Object deserialize(java.io.InputStream in)
+                                    throws java.io.IOException
+
+
Deserializes an object from the given InputStream. + The deserialization is delegated to an + ObjectInputStream instance. +

+

+
Parameters:
in - The InputStream to deserialize an object + from. +
Returns:
The object deserialized from the stream. +
Throws: +
java.io.IOException - is thrown if there was a problem reading + the underlying stream, or an object could not be deserialized + from the stream.
See Also:
ObjectInputStream
+
+
+
+ +

+deserializeArray

+
+public static java.lang.Object deserializeArray(java.io.InputStream in,
+                                                java.lang.Class elemType,
+                                                int length)
+                                         throws java.io.IOException
+
+
Deserializes an array from a given InputStream. +

+

+
Parameters:
in - The InputStream to + deserialize an object from.
elemType - The class denoting the type of the array + elements.
length - The expected length of the array, or -1 if + any length is expected. +
Throws: +
java.io.IOException
+
+
+
+ +

+deserializeArrayResource

+
+public static java.lang.Object deserializeArrayResource(java.lang.String name,
+                                                        java.lang.Class elemType,
+                                                        int length)
+                                                 throws java.io.IOException
+
+
+ +
Throws: +
java.io.IOException
+
+
+
+ +

+serialize

+
+public static void serialize(java.io.OutputStream out,
+                             java.lang.Object obj)
+                      throws java.io.IOException
+
+
+ +
Throws: +
java.io.IOException
+
+
+
+ +

+setHook

+
+public static void setHook(JavaLayerHook hook0)
+
+
Sets the system-wide JavaLayer hook. +

+

+
+
+
+
+ +

+getHook

+
+public static JavaLayerHook getHook()
+
+
+
+
+
+
+ +

+getResourceAsStream

+
+public static java.io.InputStream getResourceAsStream(java.lang.String name)
+
+
Retrieves an InputStream for a named resource. +

+

+
Parameters:
name - The name of the resource. This must be a simple + name, and not a qualified package name. +
Returns:
The InputStream for the named resource, or null if + the resource has not been found. If a hook has been + provided, its getResourceAsStream() method is called + to retrieve the resource.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Manager.html b/build/classes/doc/javazoom/jl/decoder/Manager.html new file mode 100644 index 0000000..4a34d70 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Manager.html @@ -0,0 +1,291 @@ + + + + + + +Manager + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Manager

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Manager
+
+
+
+
public class Manager
extends java.lang.Object
+ + +

+Work in progress. + + Manages a number of controls. +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
Manager() + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddControl(Control c) + +
+           
+ voidremoveAll() + +
+           
+ voidremoveControl(Control c) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Manager

+
+public Manager()
+
+
+ + + + + + + + +
+Method Detail
+ +

+addControl

+
+public void addControl(Control c)
+
+
+
+
+
+
+ +

+removeControl

+
+public void removeControl(Control c)
+
+
+
+
+
+
+ +

+removeAll

+
+public void removeAll()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Obuffer.html b/build/classes/doc/javazoom/jl/decoder/Obuffer.html new file mode 100644 index 0000000..38a0993 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Obuffer.html @@ -0,0 +1,417 @@ + + + + + + +Obuffer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class Obuffer

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Obuffer
+
+
+
Direct Known Subclasses:
SampleBuffer, WaveFileObuffer
+
+
+
+
public abstract class Obuffer
extends java.lang.Object
+ + +

+Base Class for audio output. +

+ +

+


+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+static intMAXCHANNELS + +
+           
+static intOBUFFERSIZE + +
+           
+  + + + + + + + + + + +
+Constructor Summary
Obuffer() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+abstract  voidappend(int channel, + short value) + +
+          Takes a 16 Bit PCM sample.
+ voidappendSamples(int channel, + float[] f) + +
+          Accepts 32 new PCM samples.
+abstract  voidclear_buffer() + +
+          Clears all data in the buffer (for seeking).
+abstract  voidclose() + +
+           
+abstract  voidset_stop_flag() + +
+          Notify the buffer that the user has stopped the stream.
+abstract  voidwrite_buffer(int val) + +
+          Write the samples to the file or directly to the audio hardware.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+OBUFFERSIZE

+
+public static final int OBUFFERSIZE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+MAXCHANNELS

+
+public static final int MAXCHANNELS
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+Obuffer

+
+public Obuffer()
+
+
+ + + + + + + + +
+Method Detail
+ +

+append

+
+public abstract void append(int channel,
+                            short value)
+
+
Takes a 16 Bit PCM sample. +

+

+
+
+
+
+ +

+appendSamples

+
+public void appendSamples(int channel,
+                          float[] f)
+
+
Accepts 32 new PCM samples. +

+

+
+
+
+
+ +

+write_buffer

+
+public abstract void write_buffer(int val)
+
+
Write the samples to the file or directly to the audio hardware. +

+

+
+
+
+
+ +

+close

+
+public abstract void close()
+
+
+
+
+
+
+ +

+clear_buffer

+
+public abstract void clear_buffer()
+
+
Clears all data in the buffer (for seeking). +

+

+
+
+
+
+ +

+set_stop_flag

+
+public abstract void set_stop_flag()
+
+
Notify the buffer that the user has stopped the stream. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/OutputChannels.html b/build/classes/doc/javazoom/jl/decoder/OutputChannels.html new file mode 100644 index 0000000..da35697 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/OutputChannels.html @@ -0,0 +1,496 @@ + + + + + + +OutputChannels + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class OutputChannels

+
+java.lang.Object
+  extended by javazoom.jl.decoder.OutputChannels
+
+
+
+
public class OutputChannels
extends java.lang.Object
+ + +

+A Type-safe representation of the the supported output channel + constants. + + This class is immutable and, hence, is thread safe. +

+ +

+

+
Since:
+
0.0.7
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static OutputChannelsBOTH + +
+           
+static intBOTH_CHANNELS + +
+          Flag to indicate output should include both channels.
+static OutputChannelsDOWNMIX + +
+           
+static intDOWNMIX_CHANNELS + +
+          Flag to indicate output is mono.
+static OutputChannelsLEFT + +
+           
+static intLEFT_CHANNEL + +
+          Flag to indicate output should include the left channel only.
+static OutputChannelsRIGHT + +
+           
+static intRIGHT_CHANNEL + +
+          Flag to indicate output should include the right channel only.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanequals(java.lang.Object o) + +
+           
+static OutputChannelsfromInt(int code) + +
+          Creates an OutputChannels instance + corresponding to the given channel code.
+ intgetChannelCount() + +
+          Retrieves the number of output channels represented + by this channel output type.
+ intgetChannelsOutputCode() + +
+          Retrieves the code representing the desired output channels.
+ inthashCode() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+BOTH_CHANNELS

+
+public static final int BOTH_CHANNELS
+
+
Flag to indicate output should include both channels. +

+

+
See Also:
Constant Field Values
+
+
+ +

+LEFT_CHANNEL

+
+public static final int LEFT_CHANNEL
+
+
Flag to indicate output should include the left channel only. +

+

+
See Also:
Constant Field Values
+
+
+ +

+RIGHT_CHANNEL

+
+public static final int RIGHT_CHANNEL
+
+
Flag to indicate output should include the right channel only. +

+

+
See Also:
Constant Field Values
+
+
+ +

+DOWNMIX_CHANNELS

+
+public static final int DOWNMIX_CHANNELS
+
+
Flag to indicate output is mono. +

+

+
See Also:
Constant Field Values
+
+
+ +

+LEFT

+
+public static final OutputChannels LEFT
+
+
+
+
+
+ +

+RIGHT

+
+public static final OutputChannels RIGHT
+
+
+
+
+
+ +

+BOTH

+
+public static final OutputChannels BOTH
+
+
+
+
+
+ +

+DOWNMIX

+
+public static final OutputChannels DOWNMIX
+
+
+
+
+ + + + + + + + +
+Method Detail
+ +

+fromInt

+
+public static OutputChannels fromInt(int code)
+
+
Creates an OutputChannels instance + corresponding to the given channel code. +

+

+
Parameters:
code - one of the OutputChannels channel code constants. +
Throws: +
java.lang.IllegalArgumentException - if code is not a valid + channel code.
+
+
+
+ +

+getChannelsOutputCode

+
+public int getChannelsOutputCode()
+
+
Retrieves the code representing the desired output channels. + Will be one of LEFT_CHANNEL, RIGHT_CHANNEL, BOTH_CHANNELS + or DOWNMIX_CHANNELS. +

+

+ +
Returns:
the channel code represented by this instance.
+
+
+
+ +

+getChannelCount

+
+public int getChannelCount()
+
+
Retrieves the number of output channels represented + by this channel output type. +

+

+ +
Returns:
The number of output channels for this channel output + type. This will be 2 for BOTH_CHANNELS only, and 1 + for all other types.
+
+
+
+ +

+equals

+
+public boolean equals(java.lang.Object o)
+
+
+
Overrides:
equals in class java.lang.Object
+
+
+
+
+
+
+ +

+hashCode

+
+public int hashCode()
+
+
+
Overrides:
hashCode in class java.lang.Object
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/SampleBuffer.html b/build/classes/doc/javazoom/jl/decoder/SampleBuffer.html new file mode 100644 index 0000000..e802e5f --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/SampleBuffer.html @@ -0,0 +1,481 @@ + + + + + + +SampleBuffer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Class SampleBuffer

+
+java.lang.Object
+  extended by javazoom.jl.decoder.Obuffer
+      extended by javazoom.jl.decoder.SampleBuffer
+
+
+
+
public class SampleBuffer
extends Obuffer
+ + +

+The SampleBuffer class implements an output buffer + that provides storage for a fixed size block of samples. +

+ +

+


+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class javazoom.jl.decoder.Obuffer
MAXCHANNELS, OBUFFERSIZE
+  + + + + + + + + + + +
+Constructor Summary
SampleBuffer(int sample_frequency, + int number_of_channels) + +
+          Constructor
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidappend(int channel, + short value) + +
+          Takes a 16 Bit PCM sample.
+ voidappendSamples(int channel, + float[] f) + +
+          Accepts 32 new PCM samples.
+ voidclear_buffer() + +
+          Clears all data in the buffer (for seeking).
+ voidclose() + +
+           
+ short[]getBuffer() + +
+           
+ intgetBufferLength() + +
+           
+ intgetChannelCount() + +
+           
+ intgetSampleFrequency() + +
+           
+ voidset_stop_flag() + +
+          Notify the buffer that the user has stopped the stream.
+ voidwrite_buffer(int val) + +
+          Write the samples to the file (Random Acces).
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SampleBuffer

+
+public SampleBuffer(int sample_frequency,
+                    int number_of_channels)
+
+
Constructor +

+

+ + + + + + + + +
+Method Detail
+ +

+getChannelCount

+
+public int getChannelCount()
+
+
+
+
+
+
+ +

+getSampleFrequency

+
+public int getSampleFrequency()
+
+
+
+
+
+
+ +

+getBuffer

+
+public short[] getBuffer()
+
+
+
+
+
+
+ +

+getBufferLength

+
+public int getBufferLength()
+
+
+
+
+
+
+ +

+append

+
+public void append(int channel,
+                   short value)
+
+
Takes a 16 Bit PCM sample. +

+

+
Specified by:
append in class Obuffer
+
+
+
+
+
+
+ +

+appendSamples

+
+public void appendSamples(int channel,
+                          float[] f)
+
+
Description copied from class: Obuffer
+
Accepts 32 new PCM samples. +

+

+
Overrides:
appendSamples in class Obuffer
+
+
+
+
+
+
+ +

+write_buffer

+
+public void write_buffer(int val)
+
+
Write the samples to the file (Random Acces). +

+

+
Specified by:
write_buffer in class Obuffer
+
+
+
+
+
+
+ +

+close

+
+public void close()
+
+
+
Specified by:
close in class Obuffer
+
+
+
+
+
+
+ +

+clear_buffer

+
+public void clear_buffer()
+
+
Description copied from class: Obuffer
+
Clears all data in the buffer (for seeking). +

+

+
Specified by:
clear_buffer in class Obuffer
+
+
+
+
+
+
+ +

+set_stop_flag

+
+public void set_stop_flag()
+
+
Description copied from class: Obuffer
+
Notify the buffer that the user has stopped the stream. +

+

+
Specified by:
set_stop_flag in class Obuffer
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/Source.html b/build/classes/doc/javazoom/jl/decoder/Source.html new file mode 100644 index 0000000..7fa2c4f --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/Source.html @@ -0,0 +1,348 @@ + + + + + + +Source + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.decoder +
+Interface Source

+
+
All Known Implementing Classes:
InputStreamSource
+
+
+
+
public interface Source
+ + +

+Work in progress. + + Class to describe a seekable data source. +

+ +

+


+ +

+ + + + + + + + + + + +
+Field Summary
+static longLENGTH_UNKNOWN + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanisSeekable() + +
+           
+ longlength() + +
+           
+ intread(byte[] b, + int offs, + int len) + +
+           
+ longseek(long pos) + +
+           
+ longtell() + +
+           
+ booleanwillReadBlock() + +
+           
+  +

+ + + + + + + + +
+Field Detail
+ +

+LENGTH_UNKNOWN

+
+static final long LENGTH_UNKNOWN
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Method Detail
+ +

+read

+
+int read(byte[] b,
+         int offs,
+         int len)
+         throws java.io.IOException
+
+
+ +
Throws: +
java.io.IOException
+
+
+
+ +

+willReadBlock

+
+boolean willReadBlock()
+
+
+
+
+
+
+ +

+isSeekable

+
+boolean isSeekable()
+
+
+
+
+
+
+ +

+length

+
+long length()
+
+
+
+
+
+
+ +

+tell

+
+long tell()
+
+
+
+
+
+
+ +

+seek

+
+long seek(long pos)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/package-frame.html b/build/classes/doc/javazoom/jl/decoder/package-frame.html new file mode 100644 index 0000000..bf35c2a --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/package-frame.html @@ -0,0 +1,105 @@ + + + + + + +javazoom.jl.decoder + + + + + + + + + + + +javazoom.jl.decoder + + + + +
+Interfaces  + +
+BitstreamErrors +
+Control +
+DecoderErrors +
+FrameDecoder +
+JavaLayerErrors +
+JavaLayerHook +
+Source
+ + + + + + +
+Classes  + +
+Bitstream +
+Crc16 +
+Decoder +
+Decoder.Params +
+Equalizer +
+Equalizer.EQFunction +
+Header +
+InputStreamSource +
+JavaLayerUtils +
+Manager +
+Obuffer +
+OutputChannels +
+SampleBuffer
+ + + + + + +
+Exceptions  + +
+BitstreamException +
+DecoderException +
+JavaLayerException
+ + + + + + +
+Errors  + +
+JavaLayerError
+ + + + diff --git a/build/classes/doc/javazoom/jl/decoder/package-summary.html b/build/classes/doc/javazoom/jl/decoder/package-summary.html new file mode 100644 index 0000000..f5b1c5a --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/package-summary.html @@ -0,0 +1,287 @@ + + + + + + +javazoom.jl.decoder + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package javazoom.jl.decoder +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Interface Summary
BitstreamErrorsThis interface describes all error codes that can be thrown + in BistreamExceptions.
ControlWork in progress.
DecoderErrorsThis interface provides constants describing the error + codes used by the Decoder to indicate errors.
FrameDecoderImplementations of FrameDecoder are responsible for decoding + an MPEG audio frame.
JavaLayerErrorsException erorr codes for components of the JavaLayer API.
JavaLayerHookThe JavaLayerHooks class allows developers to change + the way the JavaLayer library uses Resources.
SourceWork in progress.
+  + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
BitstreamThe Bistream class is responsible for parsing + an MPEG audio bitstream.
Crc1616-Bit CRC checksum
DecoderThe Decoder class encapsulates the details of + decoding an MPEG audio frame.
Decoder.ParamsThe Params class presents the customizable + aspects of the decoder.
EqualizerThe Equalizer class can be used to specify + equalization settings for the MPEG audio decoder.
Equalizer.EQFunction 
HeaderClass for extracting information from a frame header.
InputStreamSourceWork In Progress.
JavaLayerUtilsThe JavaLayerUtils class is not strictly part of the JavaLayer API.
ManagerWork in progress.
ObufferBase Class for audio output.
OutputChannelsA Type-safe representation of the the supported output channel + constants.
SampleBufferThe SampleBuffer class implements an output buffer + that provides storage for a fixed size block of samples.
+  + +

+ + + + + + + + + + + + + + + + + +
+Exception Summary
BitstreamExceptionInstances of BitstreamException are thrown + when operations on a Bitstream fail.
DecoderExceptionThe DecoderException represents the class of + errors that can occur when decoding MPEG audio.
JavaLayerExceptionThe JavaLayerException is the base class for all API-level + exceptions thrown by JavaLayer.
+  + +

+ + + + + + + + + +
+Error Summary
JavaLayerErrorWork in progress.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/decoder/package-tree.html b/build/classes/doc/javazoom/jl/decoder/package-tree.html new file mode 100644 index 0000000..cdbcb67 --- /dev/null +++ b/build/classes/doc/javazoom/jl/decoder/package-tree.html @@ -0,0 +1,171 @@ + + + + + + +javazoom.jl.decoder Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package javazoom.jl.decoder +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/AudioDevice.html b/build/classes/doc/javazoom/jl/player/AudioDevice.html new file mode 100644 index 0000000..6757acb --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/AudioDevice.html @@ -0,0 +1,361 @@ + + + + + + +AudioDevice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Interface AudioDevice

+
+
All Known Implementing Classes:
AudioDeviceBase, JavaSoundAudioDevice, NullAudioDevice
+
+
+
+
public interface AudioDevice
+ + +

+The AudioDevice interface provides an abstraction for + a device capable of sounding audio samples. Samples are written to + the device wia the write() method. The device assumes + that these samples are signed 16-bit samples taken at the output frequency + of the decoder. If the decoder outputs more than one channel, the samples for + each channel are assumed to appear consecutively, with the lower numbered + channels preceeding higher-numbered channels. E.g. if there are two + channels, the samples will appear in this order: +


+ 
+                l0, r0, l1, r1, l2, r2...
+ 
+ where 
+        lx indicates the xth sample on channel 0
+  rx indicates the xth sample on channel 1
+ 
+

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          Closes this audio device.
+ voidflush() + +
+          Blocks until all audio samples previously written to this audio device have + been heard.
+ intgetPosition() + +
+          Retrieves the current playback position in milliseconds.
+ booleanisOpen() + +
+          Retrieves the open state of this audio device.
+ voidopen(Decoder decoder) + +
+          Prepares the AudioDevice for playback of audio samples.
+ voidwrite(short[] samples, + int offs, + int len) + +
+          Writes a number of samples to this AudioDevice.
+  +

+ + + + + + + + +
+Method Detail
+ +

+open

+
+void open(Decoder decoder)
+          throws JavaLayerException
+
+
Prepares the AudioDevice for playback of audio samples. +

+

+
Parameters:
decoder - The decoder that will be providing the audio + samples. + + If the audio device is already open, this method returns silently. +
Throws: +
JavaLayerException
+
+
+
+ +

+isOpen

+
+boolean isOpen()
+
+
Retrieves the open state of this audio device. +

+

+ +
Returns:
true if this audio device is open and playing + audio samples, or false otherwise.
+
+
+
+ +

+write

+
+void write(short[] samples,
+           int offs,
+           int len)
+           throws JavaLayerException
+
+
Writes a number of samples to this AudioDevice. +

+

+
Parameters:
samples - The array of signed 16-bit samples to write + to the audio device.
offs - The offset of the first sample.
len - The number of samples to write. + + This method may return prior to the samples actually being played + by the audio device. +
Throws: +
JavaLayerException
+
+
+
+ +

+close

+
+void close()
+
+
Closes this audio device. Any currently playing audio is stopped + as soon as possible. Any previously written audio data that has not been heard + is discarded. + + The implementation should ensure that any threads currently blocking + on the device (e.g. during a write or flush + operation should be unblocked by this method. +

+

+
+
+
+
+ +

+flush

+
+void flush()
+
+
Blocks until all audio samples previously written to this audio device have + been heard. +

+

+
+
+
+
+ +

+getPosition

+
+int getPosition()
+
+
Retrieves the current playback position in milliseconds. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/AudioDeviceBase.html b/build/classes/doc/javazoom/jl/player/AudioDeviceBase.html new file mode 100644 index 0000000..ff7ca2d --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/AudioDeviceBase.html @@ -0,0 +1,563 @@ + + + + + + +AudioDeviceBase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class AudioDeviceBase

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceBase
+
+
+
All Implemented Interfaces:
AudioDevice
+
+
+
Direct Known Subclasses:
JavaSoundAudioDevice, NullAudioDevice
+
+
+
+
public abstract class AudioDeviceBase
extends java.lang.Object
implements AudioDevice
+ + +

+The AudioDeviceBase class provides a simple thread-safe + implementation of the AudioDevice interface. + Template methods are provided for subclasses to override and + in doing so provide the implementation for the main operations + of the AudioDevice interface. +

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
AudioDeviceBase() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          Closes this audio device.
+protected  voidcloseImpl() + +
+          Template method to provide the implementation for + closing the audio device.
+ voidflush() + +
+          Waits for any buffered audio samples to be played by the + audio device.
+protected  voidflushImpl() + +
+          Template method to provide the implementation for + flushing any buffered audio data.
+protected  DecodergetDecoder() + +
+          Retrieves the decoder that provides audio data to this + audio device.
+ booleanisOpen() + +
+          Determines if this audio device is open or not.
+ voidopen(Decoder decoder) + +
+          Opens this audio device.
+protected  voidopenImpl() + +
+          Template method to provide the + implementation for the opening of the audio device.
+protected  voidsetOpen(boolean open) + +
+          Sets the open state for this audio device.
+ voidwrite(short[] samples, + int offs, + int len) + +
+          Writes audio data to this audio device.
+protected  voidwriteImpl(short[] samples, + int offs, + int len) + +
+          Template method to provide the implementation for + writing audio samples to the audio device.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+ + + + + + + +
Methods inherited from interface javazoom.jl.player.AudioDevice
getPosition
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+AudioDeviceBase

+
+public AudioDeviceBase()
+
+
+ + + + + + + + +
+Method Detail
+ +

+open

+
+public void open(Decoder decoder)
+          throws JavaLayerException
+
+
Opens this audio device. +

+

+
Specified by:
open in interface AudioDevice
+
+
+
Parameters:
decoder - The decoder that will provide audio data + to this audio device. +
Throws: +
JavaLayerException
+
+
+
+ +

+openImpl

+
+protected void openImpl()
+                 throws JavaLayerException
+
+
Template method to provide the + implementation for the opening of the audio device. +

+

+
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+setOpen

+
+protected void setOpen(boolean open)
+
+
Sets the open state for this audio device. +

+

+
+
+
+
+
+
+
+ +

+isOpen

+
+public boolean isOpen()
+
+
Determines if this audio device is open or not. +

+

+
Specified by:
isOpen in interface AudioDevice
+
+
+ +
Returns:
true if the audio device is open, + false if it is not.
+
+
+
+ +

+close

+
+public void close()
+
+
Closes this audio device. If the device is currently playing + audio, playback is stopped immediately without flushing + any buffered audio data. +

+

+
Specified by:
close in interface AudioDevice
+
+
+
+
+
+
+ +

+closeImpl

+
+protected void closeImpl()
+
+
Template method to provide the implementation for + closing the audio device. +

+

+
+
+
+
+
+
+
+ +

+write

+
+public void write(short[] samples,
+                  int offs,
+                  int len)
+           throws JavaLayerException
+
+
Writes audio data to this audio device. Audio data is + assumed to be in the output format of the decoder. This + method may return before the data has actually been sounded + by the device if the device buffers audio samples. +

+

+
Specified by:
write in interface AudioDevice
+
+
+
Parameters:
samples - The samples to write to the audio device.
offs - The offset into the array of the first sample to write.
len - The number of samples from the array to write. +
Throws: +
JavaLayerException - if the audio data could not be + written to the audio device. + If the audio device is not open, this method does nthing.
+
+
+
+ +

+writeImpl

+
+protected void writeImpl(short[] samples,
+                         int offs,
+                         int len)
+                  throws JavaLayerException
+
+
Template method to provide the implementation for + writing audio samples to the audio device. +

+

+
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+flush

+
+public void flush()
+
+
Waits for any buffered audio samples to be played by the + audio device. This method should only be called prior + to closing the device. +

+

+
Specified by:
flush in interface AudioDevice
+
+
+
+
+
+
+ +

+flushImpl

+
+protected void flushImpl()
+
+
Template method to provide the implementation for + flushing any buffered audio data. +

+

+
+
+
+
+
+
+
+ +

+getDecoder

+
+protected Decoder getDecoder()
+
+
Retrieves the decoder that provides audio data to this + audio device. +

+

+
+
+
+ +
Returns:
The associated decoder.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/AudioDeviceFactory.html b/build/classes/doc/javazoom/jl/player/AudioDeviceFactory.html new file mode 100644 index 0000000..035092c --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/AudioDeviceFactory.html @@ -0,0 +1,311 @@ + + + + + + +AudioDeviceFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class AudioDeviceFactory

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceFactory
+
+
+
Direct Known Subclasses:
FactoryRegistry, JavaSoundAudioDeviceFactory
+
+
+
+
public abstract class AudioDeviceFactory
extends java.lang.Object
+ + +

+An AudioDeviceFactory class is responsible for creating + a specific AudioDevice implementation. A factory implementation + can be as simple or complex as desired and may support just one implementation + or may return several implementations depending upon the execution + environment. +

+ When implementing a factory that provides an AudioDevice that uses + class that may not be present, the factory should dynamically link to any + specific implementation classes required to instantiate or test the audio + implementation. This is so that the application as a whole + can run without these classes being present. The audio + device implementation, however, will usually statically link to the classes + required. (See the JavaSound deivce and factory for an example + of this.) +

+ +

+

+
Since:
+
0.0.8
+
See Also:
FactoryRegistry
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
AudioDeviceFactory() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+abstract  AudioDevicecreateAudioDevice() + +
+          Creates a new AudioDevice.
+protected  AudioDeviceinstantiate(java.lang.ClassLoader loader, + java.lang.String name) + +
+          Creates an instance of an AudioDevice implementation.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+AudioDeviceFactory

+
+public AudioDeviceFactory()
+
+
+ + + + + + + + +
+Method Detail
+ +

+createAudioDevice

+
+public abstract AudioDevice createAudioDevice()
+                                       throws JavaLayerException
+
+
Creates a new AudioDevice. +

+

+ +
Returns:
a new instance of a specific class of AudioDevice. +
Throws: +
JavaLayerException - if an instance of AudioDevice could not + be created.
+
+
+
+ +

+instantiate

+
+protected AudioDevice instantiate(java.lang.ClassLoader loader,
+                                  java.lang.String name)
+                           throws java.lang.ClassNotFoundException,
+                                  java.lang.IllegalAccessException,
+                                  java.lang.InstantiationException
+
+
Creates an instance of an AudioDevice implementation. +

+

+
Parameters:
loader - The ClassLoader to use to + load the named class, or null to use the + system class loader.
name - The name of the class to load. +
Returns:
A newly-created instance of the audio device class. +
Throws: +
java.lang.ClassNotFoundException +
java.lang.IllegalAccessException +
java.lang.InstantiationException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/FactoryRegistry.html b/build/classes/doc/javazoom/jl/player/FactoryRegistry.html new file mode 100644 index 0000000..794671e --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/FactoryRegistry.html @@ -0,0 +1,433 @@ + + + + + + +FactoryRegistry + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class FactoryRegistry

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceFactory
+      extended by javazoom.jl.player.FactoryRegistry
+
+
+
+
public class FactoryRegistry
extends AudioDeviceFactory
+ + +

+The FactoryRegistry class stores the factories + for all the audio device implementations available in the system. +

+ Instances of this class are thread-safe. +

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + +
+Field Summary
+protected  java.util.Hashtablefactories + +
+           
+  + + + + + + + + + + +
+Constructor Summary
FactoryRegistry() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddFactory(AudioDeviceFactory factory) + +
+          Registers an AudioDeviceFactory instance + with this registry.
+ AudioDevicecreateAudioDevice() + +
+          Creates a new AudioDevice.
+protected  AudioDeviceFactory[]getFactoriesPriority() + +
+           
+protected  voidregisterDefaultFactories() + +
+           
+ voidremoveFactory(AudioDeviceFactory factory) + +
+           
+ voidremoveFactoryType(java.lang.Class cls) + +
+           
+static FactoryRegistrysystemRegistry() + +
+           
+ + + + + + + +
Methods inherited from class javazoom.jl.player.AudioDeviceFactory
instantiate
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+factories

+
+protected java.util.Hashtable factories
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+FactoryRegistry

+
+public FactoryRegistry()
+
+
+ + + + + + + + +
+Method Detail
+ +

+systemRegistry

+
+public static FactoryRegistry systemRegistry()
+
+
+
+
+
+
+ +

+addFactory

+
+public void addFactory(AudioDeviceFactory factory)
+
+
Registers an AudioDeviceFactory instance + with this registry. +

+

+
+
+
+
+ +

+removeFactoryType

+
+public void removeFactoryType(java.lang.Class cls)
+
+
+
+
+
+
+ +

+removeFactory

+
+public void removeFactory(AudioDeviceFactory factory)
+
+
+
+
+
+
+ +

+createAudioDevice

+
+public AudioDevice createAudioDevice()
+                              throws JavaLayerException
+
+
Description copied from class: AudioDeviceFactory
+
Creates a new AudioDevice. +

+

+
Specified by:
createAudioDevice in class AudioDeviceFactory
+
+
+ +
Returns:
a new instance of a specific class of AudioDevice. +
Throws: +
JavaLayerException - if an instance of AudioDevice could not + be created.
+
+
+
+ +

+getFactoriesPriority

+
+protected AudioDeviceFactory[] getFactoriesPriority()
+
+
+
+
+
+
+ +

+registerDefaultFactories

+
+protected void registerDefaultFactories()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/JavaSoundAudioDevice.html b/build/classes/doc/javazoom/jl/player/JavaSoundAudioDevice.html new file mode 100644 index 0000000..259b7ac --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/JavaSoundAudioDevice.html @@ -0,0 +1,578 @@ + + + + + + +JavaSoundAudioDevice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class JavaSoundAudioDevice

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceBase
+      extended by javazoom.jl.player.JavaSoundAudioDevice
+
+
+
All Implemented Interfaces:
AudioDevice
+
+
+
+
public class JavaSoundAudioDevice
extends AudioDeviceBase
+ + +

+The JavaSoundAudioDevice implements an audio + device by using the JavaSound API. +

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
JavaSoundAudioDevice() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  voidcloseImpl() + +
+          Template method to provide the implementation for + closing the audio device.
+protected  voidcreateSource() + +
+           
+protected  voidflushImpl() + +
+          Template method to provide the implementation for + flushing any buffered audio data.
+protected  javax.sound.sampled.AudioFormatgetAudioFormat() + +
+           
+protected  byte[]getByteArray(int length) + +
+           
+ intgetPosition() + +
+          Retrieves the current playback position in milliseconds.
+protected  javax.sound.sampled.DataLine.InfogetSourceLineInfo() + +
+           
+ intmillisecondsToBytes(javax.sound.sampled.AudioFormat fmt, + int time) + +
+           
+ voidopen(javax.sound.sampled.AudioFormat fmt) + +
+           
+protected  voidopenImpl() + +
+          Template method to provide the + implementation for the opening of the audio device.
+protected  voidsetAudioFormat(javax.sound.sampled.AudioFormat fmt0) + +
+           
+ voidtest() + +
+          Runs a short test by playing a short silent sound.
+protected  byte[]toByteArray(short[] samples, + int offs, + int len) + +
+           
+protected  voidwriteImpl(short[] samples, + int offs, + int len) + +
+          Template method to provide the implementation for + writing audio samples to the audio device.
+ + + + + + + +
Methods inherited from class javazoom.jl.player.AudioDeviceBase
close, flush, getDecoder, isOpen, open, setOpen, write
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JavaSoundAudioDevice

+
+public JavaSoundAudioDevice()
+
+
+ + + + + + + + +
+Method Detail
+ +

+setAudioFormat

+
+protected void setAudioFormat(javax.sound.sampled.AudioFormat fmt0)
+
+
+
+
+
+
+ +

+getAudioFormat

+
+protected javax.sound.sampled.AudioFormat getAudioFormat()
+
+
+
+
+
+
+ +

+getSourceLineInfo

+
+protected javax.sound.sampled.DataLine.Info getSourceLineInfo()
+
+
+
+
+
+
+ +

+open

+
+public void open(javax.sound.sampled.AudioFormat fmt)
+          throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+openImpl

+
+protected void openImpl()
+                 throws JavaLayerException
+
+
Description copied from class: AudioDeviceBase
+
Template method to provide the + implementation for the opening of the audio device. +

+

+
Overrides:
openImpl in class AudioDeviceBase
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+createSource

+
+protected void createSource()
+                     throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+millisecondsToBytes

+
+public int millisecondsToBytes(javax.sound.sampled.AudioFormat fmt,
+                               int time)
+
+
+
+
+
+
+ +

+closeImpl

+
+protected void closeImpl()
+
+
Description copied from class: AudioDeviceBase
+
Template method to provide the implementation for + closing the audio device. +

+

+
Overrides:
closeImpl in class AudioDeviceBase
+
+
+
+
+
+
+ +

+writeImpl

+
+protected void writeImpl(short[] samples,
+                         int offs,
+                         int len)
+                  throws JavaLayerException
+
+
Description copied from class: AudioDeviceBase
+
Template method to provide the implementation for + writing audio samples to the audio device. +

+

+
Overrides:
writeImpl in class AudioDeviceBase
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+getByteArray

+
+protected byte[] getByteArray(int length)
+
+
+
+
+
+
+ +

+toByteArray

+
+protected byte[] toByteArray(short[] samples,
+                             int offs,
+                             int len)
+
+
+
+
+
+
+ +

+flushImpl

+
+protected void flushImpl()
+
+
Description copied from class: AudioDeviceBase
+
Template method to provide the implementation for + flushing any buffered audio data. +

+

+
Overrides:
flushImpl in class AudioDeviceBase
+
+
+
+
+
+
+ +

+getPosition

+
+public int getPosition()
+
+
Description copied from interface: AudioDevice
+
Retrieves the current playback position in milliseconds. +

+

+
+
+
+
+ +

+test

+
+public void test()
+          throws JavaLayerException
+
+
Runs a short test by playing a short silent sound. +

+

+ +
Throws: +
JavaLayerException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/JavaSoundAudioDeviceFactory.html b/build/classes/doc/javazoom/jl/player/JavaSoundAudioDeviceFactory.html new file mode 100644 index 0000000..7893744 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/JavaSoundAudioDeviceFactory.html @@ -0,0 +1,319 @@ + + + + + + +JavaSoundAudioDeviceFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class JavaSoundAudioDeviceFactory

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceFactory
+      extended by javazoom.jl.player.JavaSoundAudioDeviceFactory
+
+
+
+
public class JavaSoundAudioDeviceFactory
extends AudioDeviceFactory
+ + +

+This class is responsible for creating instances of the + JavaSoundAudioDevice. The audio device implementation is loaded + and tested dynamically as not all systems will have support + for JavaSound, or they may have the incorrect version. +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
JavaSoundAudioDeviceFactory() + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ AudioDevicecreateAudioDevice() + +
+          Creates a new AudioDevice.
+protected  JavaSoundAudioDevicecreateAudioDeviceImpl() + +
+           
+ voidtestAudioDevice() + +
+           
+ + + + + + + +
Methods inherited from class javazoom.jl.player.AudioDeviceFactory
instantiate
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+JavaSoundAudioDeviceFactory

+
+public JavaSoundAudioDeviceFactory()
+
+
+ + + + + + + + +
+Method Detail
+ +

+createAudioDevice

+
+public AudioDevice createAudioDevice()
+                              throws JavaLayerException
+
+
Description copied from class: AudioDeviceFactory
+
Creates a new AudioDevice. +

+

+
Specified by:
createAudioDevice in class AudioDeviceFactory
+
+
+ +
Returns:
a new instance of a specific class of AudioDevice. +
Throws: +
JavaLayerException - if an instance of AudioDevice could not + be created.
+
+
+
+ +

+createAudioDeviceImpl

+
+protected JavaSoundAudioDevice createAudioDeviceImpl()
+                                              throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+testAudioDevice

+
+public void testAudioDevice()
+                     throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/NullAudioDevice.html b/build/classes/doc/javazoom/jl/player/NullAudioDevice.html new file mode 100644 index 0000000..fdafc04 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/NullAudioDevice.html @@ -0,0 +1,272 @@ + + + + + + +NullAudioDevice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class NullAudioDevice

+
+java.lang.Object
+  extended by javazoom.jl.player.AudioDeviceBase
+      extended by javazoom.jl.player.NullAudioDevice
+
+
+
All Implemented Interfaces:
AudioDevice
+
+
+
+
public class NullAudioDevice
extends AudioDeviceBase
+ + +

+The NullAudioDevice implements a silent, no-op + audio device. This is useful for testing purposes. +

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
NullAudioDevice() + +
+           
+  + + + + + + + + + + + +
+Method Summary
+ intgetPosition() + +
+          Retrieves the current playback position in milliseconds.
+ + + + + + + +
Methods inherited from class javazoom.jl.player.AudioDeviceBase
close, closeImpl, flush, flushImpl, getDecoder, isOpen, open, openImpl, setOpen, write, writeImpl
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+NullAudioDevice

+
+public NullAudioDevice()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getPosition

+
+public int getPosition()
+
+
Description copied from interface: AudioDevice
+
Retrieves the current playback position in milliseconds. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/Player.html b/build/classes/doc/javazoom/jl/player/Player.html new file mode 100644 index 0000000..8cbc263 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/Player.html @@ -0,0 +1,408 @@ + + + + + + +Player + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class Player

+
+java.lang.Object
+  extended by javazoom.jl.player.Player
+
+
+
+
public class Player
extends java.lang.Object
+ + +

+The Player class implements a simple player for playback + of an MPEG audio stream. +

+ +

+

+
Since:
+
0.0.8
+
+
+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
Player(java.io.InputStream stream) + +
+          Creates a new Player instance.
Player(java.io.InputStream stream, + AudioDevice device) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          Cloases this player.
+protected  booleandecodeFrame() + +
+          Decodes a single frame.
+ intgetPosition() + +
+          Retrieves the position in milliseconds of the current audio + sample being played.
+ booleanisComplete() + +
+          Returns the completed status of this player.
+ voidplay() + +
+           
+ booleanplay(int frames) + +
+          Plays a number of MPEG audio frames.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Player

+
+public Player(java.io.InputStream stream)
+       throws JavaLayerException
+
+
Creates a new Player instance. +

+

+ +
Throws: +
JavaLayerException
+
+
+ +

+Player

+
+public Player(java.io.InputStream stream,
+              AudioDevice device)
+       throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+ + + + + + + + +
+Method Detail
+ +

+play

+
+public void play()
+          throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+play

+
+public boolean play(int frames)
+             throws JavaLayerException
+
+
Plays a number of MPEG audio frames. +

+

+
Parameters:
frames - The number of frames to play. +
Returns:
true if the last frame was played, or false if there are + more frames. +
Throws: +
JavaLayerException
+
+
+
+ +

+close

+
+public void close()
+
+
Cloases this player. Any audio currently playing is stopped + immediately. +

+

+
+
+
+
+ +

+isComplete

+
+public boolean isComplete()
+
+
Returns the completed status of this player. +

+

+ +
Returns:
true if all available MPEG audio frames have been + decoded, or false otherwise.
+
+
+
+ +

+getPosition

+
+public int getPosition()
+
+
Retrieves the position in milliseconds of the current audio + sample being played. This method delegates to the + AudioDevice that is used by this player to sound + the decoded audio samples. +

+

+
+
+
+
+ +

+decodeFrame

+
+protected boolean decodeFrame()
+                       throws JavaLayerException
+
+
Decodes a single frame. +

+

+ +
Returns:
true if there are no more frames to decode, false otherwise. +
Throws: +
JavaLayerException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/PlayerApplet.html b/build/classes/doc/javazoom/jl/player/PlayerApplet.html new file mode 100644 index 0000000..9a55f98 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/PlayerApplet.html @@ -0,0 +1,740 @@ + + + + + + +PlayerApplet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class PlayerApplet

+
+java.lang.Object
+  extended by java.awt.Component
+      extended by java.awt.Container
+          extended by java.awt.Panel
+              extended by java.applet.Applet
+                  extended by javazoom.jl.player.PlayerApplet
+
+
+
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.lang.Runnable, javax.accessibility.Accessible
+
+
+
+
public class PlayerApplet
extends java.applet.Applet
implements java.lang.Runnable
+ + +

+A simple applet that plays an MPEG audio file. + The URL (relative to the document base) + is passed as the "audioURL" parameter. +

+ +

+

+
Since:
+
0.0.8
+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class java.applet.Applet
java.applet.Applet.AccessibleApplet
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Panel
java.awt.Panel.AccessibleAWTPanel
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
+  + + + + + + + + + + + +
+Field Summary
+static java.lang.StringAUDIO_PARAMETER + +
+           
+ + + + + + + +
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
+ + + + + + + +
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
+  + + + + + + + + + + +
+Constructor Summary
PlayerApplet() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  java.lang.ThreadcreatePlayerThread() + +
+          Creates a new thread used to run the audio player.
+ voiddestroy() + +
+           
+protected  AudioDevicegetAudioDevice() + +
+          Retrieves the AudioDevice instance that will + be used to sound the audio data.
+protected  java.lang.StringgetAudioFileName() + +
+           
+protected  java.io.InputStreamgetAudioStream() + +
+          Retrieves the InputStream that provides the MPEG audio + stream data.
+protected  java.net.URLgetAudioURL() + +
+           
+ java.lang.StringgetFileName() + +
+           
+ voidinit() + +
+          Initializes this applet.
+protected  voidplay(java.io.InputStream in, + AudioDevice dev) + +
+          Decompresses audio data from an InputStream and plays it + back through an AudioDevice.
+ voidrun() + +
+          The run method for the audio player thread.
+ voidsetFileName(java.lang.String name) + +
+          Sets the URL of the audio stream to play.
+ voidstart() + +
+          Starts this applet.
+ voidstop() + +
+          Stops this applet.
+protected  voidstopPlayer() + +
+          Stops the audio player.
+ + + + + + + +
Methods inherited from class java.applet.Applet
getAccessibleContext, getAppletContext, getAppletInfo, getAudioClip, getAudioClip, getCodeBase, getDocumentBase, getImage, getImage, getLocale, getParameter, getParameterInfo, isActive, newAudioClip, play, play, resize, resize, setStub, showStatus
+ + + + + + + +
Methods inherited from class java.awt.Panel
addNotify
+ + + + + + + +
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getInsets, getLayout, getListeners, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paint, paintComponents, paramString, preferredSize, print, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, removeNotify, setComponentZOrder, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, setLayout, transferFocusBackward, transferFocusDownCycle, update, validate, validateTree
+ + + + + + + +
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusUpCycle
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+AUDIO_PARAMETER

+
+public static final java.lang.String AUDIO_PARAMETER
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+PlayerApplet

+
+public PlayerApplet()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getAudioDevice

+
+protected AudioDevice getAudioDevice()
+                              throws JavaLayerException
+
+
Retrieves the AudioDevice instance that will + be used to sound the audio data. +

+

+
+
+
+ +
Returns:
an audio device instance that will be used to + sound the audio stream. +
Throws: +
JavaLayerException
+
+
+
+ +

+getAudioStream

+
+protected java.io.InputStream getAudioStream()
+
+
Retrieves the InputStream that provides the MPEG audio + stream data. +

+

+
+
+
+ +
Returns:
an InputStream from which the MPEG audio data + is read, or null if an error occurs.
+
+
+
+ +

+getAudioFileName

+
+protected java.lang.String getAudioFileName()
+
+
+
+
+
+
+
+
+
+ +

+getAudioURL

+
+protected java.net.URL getAudioURL()
+
+
+
+
+
+
+
+
+
+ +

+setFileName

+
+public void setFileName(java.lang.String name)
+
+
Sets the URL of the audio stream to play. +

+

+
+
+
+
+
+
+
+ +

+getFileName

+
+public java.lang.String getFileName()
+
+
+
+
+
+
+
+
+
+ +

+stopPlayer

+
+protected void stopPlayer()
+                   throws JavaLayerException
+
+
Stops the audio player. If the player is already stopped + this method is a no-op. +

+

+
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+play

+
+protected void play(java.io.InputStream in,
+                    AudioDevice dev)
+             throws JavaLayerException
+
+
Decompresses audio data from an InputStream and plays it + back through an AudioDevice. The playback is run on a newly + created thread. +

+

+
+
+
+
Parameters:
in - The InputStream that provides the MPEG audio data.
dev - The AudioDevice to use to sound the decompressed data. +
Throws: +
JavaLayerException - if there was a problem decoding + or playing the audio data.
+
+
+
+ +

+createPlayerThread

+
+protected java.lang.Thread createPlayerThread()
+
+
Creates a new thread used to run the audio player. +

+

+
+
+
+ +
Returns:
A new Thread that, once started, runs the audio player.
+
+
+
+ +

+init

+
+public void init()
+
+
Initializes this applet. +

+

+
Overrides:
init in class java.applet.Applet
+
+
+
+
+
+
+ +

+start

+
+public void start()
+
+
Starts this applet. An input stream and audio device + are created and passed to the play() method. +

+

+
Overrides:
start in class java.applet.Applet
+
+
+
+
+
+
+ +

+stop

+
+public void stop()
+
+
Stops this applet. If audio is currently playing, it is + stopped. +

+

+
Overrides:
stop in class java.applet.Applet
+
+
+
+
+
+
+ +

+destroy

+
+public void destroy()
+
+
+
Overrides:
destroy in class java.applet.Applet
+
+
+
+
+
+
+ +

+run

+
+public void run()
+
+
The run method for the audio player thread. Simply calls + play() on the player to play the entire stream. +

+

+
Specified by:
run in interface java.lang.Runnable
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/advanced/AdvancedPlayer.html b/build/classes/doc/javazoom/jl/player/advanced/AdvancedPlayer.html new file mode 100644 index 0000000..f243e68 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/advanced/AdvancedPlayer.html @@ -0,0 +1,471 @@ + + + + + + +AdvancedPlayer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player.advanced +
+Class AdvancedPlayer

+
+java.lang.Object
+  extended by javazoom.jl.player.advanced.AdvancedPlayer
+
+
+
+
public class AdvancedPlayer
extends java.lang.Object
+ + +

+a hybrid of javazoom.jl.player.Player tweeked to include play(startFrame, endFrame) + hopefully this will be included in the api +

+ +

+


+ +

+ + + + + + + + + + + + + + +
+Constructor Summary
AdvancedPlayer(java.io.InputStream stream) + +
+          Creates a new Player instance.
AdvancedPlayer(java.io.InputStream stream, + AudioDevice device) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          Cloases this player.
+protected  booleandecodeFrame() + +
+          Decodes a single frame.
+ PlaybackListenergetPlayBackListener() + +
+          gets the PlaybackListener
+ voidplay() + +
+           
+ booleanplay(int frames) + +
+          Plays a number of MPEG audio frames.
+ booleanplay(int start, + int end) + +
+          Plays a range of MPEG audio frames
+ voidsetPlayBackListener(PlaybackListener listener) + +
+          sets the PlaybackListener
+protected  booleanskipFrame() + +
+          skips over a single frame
+ voidstop() + +
+          closes the player and notifies PlaybackListener
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+AdvancedPlayer

+
+public AdvancedPlayer(java.io.InputStream stream)
+               throws JavaLayerException
+
+
Creates a new Player instance. +

+

+ +
Throws: +
JavaLayerException
+
+
+ +

+AdvancedPlayer

+
+public AdvancedPlayer(java.io.InputStream stream,
+                      AudioDevice device)
+               throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+ + + + + + + + +
+Method Detail
+ +

+play

+
+public void play()
+          throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+play

+
+public boolean play(int frames)
+             throws JavaLayerException
+
+
Plays a number of MPEG audio frames. +

+

+
Parameters:
frames - The number of frames to play. +
Returns:
true if the last frame was played, or false if there are + more frames. +
Throws: +
JavaLayerException
+
+
+
+ +

+close

+
+public void close()
+
+
Cloases this player. Any audio currently playing is stopped + immediately. +

+

+
+
+
+
+ +

+decodeFrame

+
+protected boolean decodeFrame()
+                       throws JavaLayerException
+
+
Decodes a single frame. +

+

+ +
Returns:
true if there are no more frames to decode, false otherwise. +
Throws: +
JavaLayerException
+
+
+
+ +

+skipFrame

+
+protected boolean skipFrame()
+                     throws JavaLayerException
+
+
skips over a single frame +

+

+ +
Returns:
false if there are no more frames to decode, true otherwise. +
Throws: +
JavaLayerException
+
+
+
+ +

+play

+
+public boolean play(int start,
+                    int end)
+             throws JavaLayerException
+
+
Plays a range of MPEG audio frames +

+

+
Parameters:
start - The first frame to play
end - The last frame to play +
Returns:
true if the last frame was played, or false if there are more frames. +
Throws: +
JavaLayerException
+
+
+
+ +

+setPlayBackListener

+
+public void setPlayBackListener(PlaybackListener listener)
+
+
sets the PlaybackListener +

+

+
+
+
+
+ +

+getPlayBackListener

+
+public PlaybackListener getPlayBackListener()
+
+
gets the PlaybackListener +

+

+
+
+
+
+ +

+stop

+
+public void stop()
+
+
closes the player and notifies PlaybackListener +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/advanced/PlaybackEvent.html b/build/classes/doc/javazoom/jl/player/advanced/PlaybackEvent.html new file mode 100644 index 0000000..781208e --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/advanced/PlaybackEvent.html @@ -0,0 +1,404 @@ + + + + + + +PlaybackEvent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player.advanced +
+Class PlaybackEvent

+
+java.lang.Object
+  extended by javazoom.jl.player.advanced.PlaybackEvent
+
+
+
+
public class PlaybackEvent
extends java.lang.Object
+ + +

+An event which indicates a Player has performed an 'playback action' +

+ +

+


+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+static intSTARTED + +
+           
+static intSTOPPED + +
+           
+  + + + + + + + + + + +
+Constructor Summary
PlaybackEvent(AdvancedPlayer source, + int id, + int frame) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetFrame() + +
+           
+ intgetId() + +
+           
+ AdvancedPlayergetSource() + +
+           
+ voidsetFrame(int frame) + +
+           
+ voidsetId(int id) + +
+           
+ voidsetSource(AdvancedPlayer source) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+STOPPED

+
+public static int STOPPED
+
+
+
+
+
+ +

+STARTED

+
+public static int STARTED
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+PlaybackEvent

+
+public PlaybackEvent(AdvancedPlayer source,
+                     int id,
+                     int frame)
+
+
+ + + + + + + + +
+Method Detail
+ +

+getId

+
+public int getId()
+
+
+
+
+
+
+ +

+setId

+
+public void setId(int id)
+
+
+
+
+
+
+ +

+getFrame

+
+public int getFrame()
+
+
+
+
+
+
+ +

+setFrame

+
+public void setFrame(int frame)
+
+
+
+
+
+
+ +

+getSource

+
+public AdvancedPlayer getSource()
+
+
+
+
+
+
+ +

+setSource

+
+public void setSource(AdvancedPlayer source)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/advanced/PlaybackListener.html b/build/classes/doc/javazoom/jl/player/advanced/PlaybackListener.html new file mode 100644 index 0000000..dcce366 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/advanced/PlaybackListener.html @@ -0,0 +1,273 @@ + + + + + + +PlaybackListener + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player.advanced +
+Class PlaybackListener

+
+java.lang.Object
+  extended by javazoom.jl.player.advanced.PlaybackListener
+
+
+
Direct Known Subclasses:
jlap.InfoListener
+
+
+
+
public abstract class PlaybackListener
extends java.lang.Object
+ + +

+Listener for javalayer Player playback +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
PlaybackListener() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ voidplaybackFinished(PlaybackEvent evt) + +
+           
+ voidplaybackStarted(PlaybackEvent evt) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+PlaybackListener

+
+public PlaybackListener()
+
+
+ + + + + + + + +
+Method Detail
+ +

+playbackStarted

+
+public void playbackStarted(PlaybackEvent evt)
+
+
+
+
+
+
+ +

+playbackFinished

+
+public void playbackFinished(PlaybackEvent evt)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/advanced/jlap.InfoListener.html b/build/classes/doc/javazoom/jl/player/advanced/jlap.InfoListener.html new file mode 100644 index 0000000..2a37dec --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/advanced/jlap.InfoListener.html @@ -0,0 +1,276 @@ + + + + + + +jlap.InfoListener + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player.advanced +
+Class jlap.InfoListener

+
+java.lang.Object
+  extended by javazoom.jl.player.advanced.PlaybackListener
+      extended by javazoom.jl.player.advanced.jlap.InfoListener
+
+
+
Enclosing class:
jlap
+
+
+
+
public class jlap.InfoListener
extends PlaybackListener
+ + +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
jlap.InfoListener() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ voidplaybackFinished(PlaybackEvent evt) + +
+           
+ voidplaybackStarted(PlaybackEvent evt) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+jlap.InfoListener

+
+public jlap.InfoListener()
+
+
+ + + + + + + + +
+Method Detail
+ +

+playbackStarted

+
+public void playbackStarted(PlaybackEvent evt)
+
+
+
Overrides:
playbackStarted in class PlaybackListener
+
+
+
+
+
+
+ +

+playbackFinished

+
+public void playbackFinished(PlaybackEvent evt)
+
+
+
Overrides:
playbackFinished in class PlaybackListener
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/advanced/jlap.html b/build/classes/doc/javazoom/jl/player/advanced/jlap.html new file mode 100644 index 0000000..5304c1e --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/advanced/jlap.html @@ -0,0 +1,395 @@ + + + + + + +jlap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player.advanced +
+Class jlap

+
+java.lang.Object
+  extended by javazoom.jl.player.advanced.jlap
+
+
+
+
public class jlap
extends java.lang.Object
+ + +

+This class implements a sample player using Playback listener. +

+ +

+


+ +

+ + + + + + + + + + + +
+Nested Class Summary
+ classjlap.InfoListener + +
+           
+  + + + + + + + + + + +
+Constructor Summary
jlap() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static voidmain(java.lang.String[] args) + +
+           
+ voidplay(java.lang.String filename) + +
+           
+static AdvancedPlayerplayMp3(java.io.File mp3, + int start, + int end, + PlaybackListener listener) + +
+           
+static AdvancedPlayerplayMp3(java.io.File mp3, + PlaybackListener listener) + +
+           
+static AdvancedPlayerplayMp3(java.io.InputStream is, + int start, + int end, + PlaybackListener listener) + +
+           
+ voidshowUsage() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+jlap

+
+public jlap()
+
+
+ + + + + + + + +
+Method Detail
+ +

+main

+
+public static void main(java.lang.String[] args)
+
+
+
+
+
+
+ +

+play

+
+public void play(java.lang.String filename)
+          throws JavaLayerException,
+                 java.io.IOException
+
+
+ +
Throws: +
JavaLayerException +
java.io.IOException
+
+
+
+ +

+showUsage

+
+public void showUsage()
+
+
+
+
+
+
+ +

+playMp3

+
+public static AdvancedPlayer playMp3(java.io.File mp3,
+                                     PlaybackListener listener)
+                              throws java.io.IOException,
+                                     JavaLayerException
+
+
+ +
Throws: +
java.io.IOException +
JavaLayerException
+
+
+
+ +

+playMp3

+
+public static AdvancedPlayer playMp3(java.io.File mp3,
+                                     int start,
+                                     int end,
+                                     PlaybackListener listener)
+                              throws java.io.IOException,
+                                     JavaLayerException
+
+
+ +
Throws: +
java.io.IOException +
JavaLayerException
+
+
+
+ +

+playMp3

+
+public static AdvancedPlayer playMp3(java.io.InputStream is,
+                                     int start,
+                                     int end,
+                                     PlaybackListener listener)
+                              throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/advanced/package-frame.html b/build/classes/doc/javazoom/jl/player/advanced/package-frame.html new file mode 100644 index 0000000..63df5d9 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/advanced/package-frame.html @@ -0,0 +1,38 @@ + + + + + + +javazoom.jl.player.advanced + + + + + + + + + + + +javazoom.jl.player.advanced + + + + +
+Classes  + +
+AdvancedPlayer +
+jlap +
+PlaybackEvent +
+PlaybackListener
+ + + + diff --git a/build/classes/doc/javazoom/jl/player/advanced/package-summary.html b/build/classes/doc/javazoom/jl/player/advanced/package-summary.html new file mode 100644 index 0000000..cbceab7 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/advanced/package-summary.html @@ -0,0 +1,165 @@ + + + + + + +javazoom.jl.player.advanced + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package javazoom.jl.player.advanced +

+ + + + + + + + + + + + + + + + + + + + + +
+Class Summary
AdvancedPlayera hybrid of javazoom.jl.player.Player tweeked to include play(startFrame, endFrame) + hopefully this will be included in the api
jlapThis class implements a sample player using Playback listener.
PlaybackEventAn event which indicates a Player has performed an 'playback action'
PlaybackListenerListener for javalayer Player playback
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/advanced/package-tree.html b/build/classes/doc/javazoom/jl/player/advanced/package-tree.html new file mode 100644 index 0000000..702e8f3 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/advanced/package-tree.html @@ -0,0 +1,149 @@ + + + + + + +javazoom.jl.player.advanced Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package javazoom.jl.player.advanced +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/jlp.html b/build/classes/doc/javazoom/jl/player/jlp.html new file mode 100644 index 0000000..a12bb40 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/jlp.html @@ -0,0 +1,420 @@ + + + + + + +jlp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +javazoom.jl.player +
+Class jlp

+
+java.lang.Object
+  extended by javazoom.jl.player.jlp
+
+
+
+
public class jlp
extends java.lang.Object
+ + +

+The jlp class implements a simple command-line + player for MPEG audio files. +

+ +

+


+ +

+ + + + + + + + + + + +
+Constructor Summary
jlp(java.lang.String filename) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static jlpcreateInstance(java.lang.String[] args) + +
+           
+protected  AudioDevicegetAudioDevice() + +
+           
+protected  java.io.InputStreamgetInputStream() + +
+          Playing file from FileInputStream.
+protected  java.io.InputStreamgetURLInputStream() + +
+          Playing file from URL (Streaming).
+protected  voidinit(java.lang.String filename) + +
+           
+static voidmain(java.lang.String[] args) + +
+           
+protected  booleanparseArgs(java.lang.String[] args) + +
+           
+ voidplay() + +
+           
+ voidshowUsage() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+jlp

+
+public jlp(java.lang.String filename)
+
+
+ + + + + + + + +
+Method Detail
+ +

+main

+
+public static void main(java.lang.String[] args)
+
+
+
+
+
+
+ +

+createInstance

+
+public static jlp createInstance(java.lang.String[] args)
+
+
+
+
+
+
+ +

+init

+
+protected void init(java.lang.String filename)
+
+
+
+
+
+
+ +

+parseArgs

+
+protected boolean parseArgs(java.lang.String[] args)
+
+
+
+
+
+
+ +

+showUsage

+
+public void showUsage()
+
+
+
+
+
+
+ +

+play

+
+public void play()
+          throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+
+ +

+getURLInputStream

+
+protected java.io.InputStream getURLInputStream()
+                                         throws java.lang.Exception
+
+
Playing file from URL (Streaming). +

+

+ +
Throws: +
java.lang.Exception
+
+
+
+ +

+getInputStream

+
+protected java.io.InputStream getInputStream()
+                                      throws java.io.IOException
+
+
Playing file from FileInputStream. +

+

+ +
Throws: +
java.io.IOException
+
+
+
+ +

+getAudioDevice

+
+protected AudioDevice getAudioDevice()
+                              throws JavaLayerException
+
+
+ +
Throws: +
JavaLayerException
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/package-frame.html b/build/classes/doc/javazoom/jl/player/package-frame.html new file mode 100644 index 0000000..55c1649 --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/package-frame.html @@ -0,0 +1,59 @@ + + + + + + +javazoom.jl.player + + + + + + + + + + + +javazoom.jl.player + + + + +
+Interfaces  + +
+AudioDevice
+ + + + + + +
+Classes  + +
+AudioDeviceBase +
+AudioDeviceFactory +
+FactoryRegistry +
+JavaSoundAudioDevice +
+JavaSoundAudioDeviceFactory +
+jlp +
+NullAudioDevice +
+Player +
+PlayerApplet
+ + + + diff --git a/build/classes/doc/javazoom/jl/player/package-summary.html b/build/classes/doc/javazoom/jl/player/package-summary.html new file mode 100644 index 0000000..1e4629a --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/package-summary.html @@ -0,0 +1,207 @@ + + + + + + +javazoom.jl.player + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package javazoom.jl.player +

+ + + + + + + + + +
+Interface Summary
AudioDeviceThe AudioDevice interface provides an abstraction for + a device capable of sounding audio samples.
+  + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
AudioDeviceBaseThe AudioDeviceBase class provides a simple thread-safe + implementation of the AudioDevice interface.
AudioDeviceFactoryAn AudioDeviceFactory class is responsible for creating + a specific AudioDevice implementation.
FactoryRegistryThe FactoryRegistry class stores the factories + for all the audio device implementations available in the system.
JavaSoundAudioDeviceThe JavaSoundAudioDevice implements an audio + device by using the JavaSound API.
JavaSoundAudioDeviceFactoryThis class is responsible for creating instances of the + JavaSoundAudioDevice.
jlpThe jlp class implements a simple command-line + player for MPEG audio files.
NullAudioDeviceThe NullAudioDevice implements a silent, no-op + audio device.
PlayerThe Player class implements a simple player for playback + of an MPEG audio stream.
PlayerAppletA simple applet that plays an MPEG audio file.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/javazoom/jl/player/package-tree.html b/build/classes/doc/javazoom/jl/player/package-tree.html new file mode 100644 index 0000000..1c1232a --- /dev/null +++ b/build/classes/doc/javazoom/jl/player/package-tree.html @@ -0,0 +1,168 @@ + + + + + + +javazoom.jl.player Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package javazoom.jl.player +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/overview-frame.html b/build/classes/doc/overview-frame.html new file mode 100644 index 0000000..6b45982 --- /dev/null +++ b/build/classes/doc/overview-frame.html @@ -0,0 +1,48 @@ + + + + + + +Overview + + + + + + + + + + + + + + + +
+
+ + + + + +
All Classes +

+ +Packages +
+javazoom.jl.converter +
+javazoom.jl.decoder +
+javazoom.jl.player +
+javazoom.jl.player.advanced +
+

+ +

+  + + diff --git a/build/classes/doc/overview-summary.html b/build/classes/doc/overview-summary.html new file mode 100644 index 0000000..6569711 --- /dev/null +++ b/build/classes/doc/overview-summary.html @@ -0,0 +1,158 @@ + + + + + + +Overview + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +


+ + + + + + + + + + + + + + + + + + + + + +
+Packages
javazoom.jl.converter 
javazoom.jl.decoder 
javazoom.jl.player 
javazoom.jl.player.advanced 
+ +


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/overview-tree.html b/build/classes/doc/overview-tree.html new file mode 100644 index 0000000..211f5b2 --- /dev/null +++ b/build/classes/doc/overview-tree.html @@ -0,0 +1,191 @@ + + + + + + +Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For All Packages

+
+
+
Package Hierarchies:
javazoom.jl.converter, javazoom.jl.decoder, javazoom.jl.player, javazoom.jl.player.advanced
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/package-list b/build/classes/doc/package-list new file mode 100644 index 0000000..b8fb0d7 --- /dev/null +++ b/build/classes/doc/package-list @@ -0,0 +1,4 @@ +javazoom.jl.converter +javazoom.jl.decoder +javazoom.jl.player +javazoom.jl.player.advanced diff --git a/build/classes/doc/packages.html b/build/classes/doc/packages.html new file mode 100644 index 0000000..99d78ad --- /dev/null +++ b/build/classes/doc/packages.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+The front page has been relocated.Please see: +
+          Frame version +
+          Non-frame version.
+ + + diff --git a/build/classes/doc/resources/inherit.gif b/build/classes/doc/resources/inherit.gif new file mode 100644 index 0000000000000000000000000000000000000000..c814867a13deb0ca7ea2156c6ca1d5a03372af7e GIT binary patch literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X literal 0 HcmV?d00001 diff --git a/build/classes/doc/serialized-form.html b/build/classes/doc/serialized-form.html new file mode 100644 index 0000000..ca1841b --- /dev/null +++ b/build/classes/doc/serialized-form.html @@ -0,0 +1,295 @@ + + + + + + +Serialized Form + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Serialized Form

+
+
+ + + + + +
+Package javazoom.jl.decoder
+ +

+ + + + + +
+Class javazoom.jl.decoder.BitstreamException extends JavaLayerException implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+errorcode

+
+int errorcode
+
+
+
+
+ +

+ + + + + +
+Class javazoom.jl.decoder.DecoderException extends JavaLayerException implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+errorcode

+
+int errorcode
+
+
+
+
+ +

+ + + + + +
+Class javazoom.jl.decoder.JavaLayerError extends java.lang.Error implements Serializable
+ +

+ +

+ + + + + +
+Class javazoom.jl.decoder.JavaLayerException extends java.lang.Exception implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+exception

+
+java.lang.Throwable exception
+
+
+
+
+
+ + + + + +
+Package javazoom.jl.player
+ +

+ + + + + +
+Class javazoom.jl.player.PlayerApplet extends java.applet.Applet implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+player

+
+Player player
+
+
The Player used to play the MPEG audio file. +

+

+
+
+
+

+playerThread

+
+java.lang.Thread playerThread
+
+
The thread that runs the player. +

+

+
+
+
+

+fileName

+
+java.lang.String fileName
+
+
+
+
+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+JavaZOOM 1999-2008 + + diff --git a/build/classes/doc/stylesheet.css b/build/classes/doc/stylesheet.css new file mode 100644 index 0000000..6d31fdb --- /dev/null +++ b/build/classes/doc/stylesheet.css @@ -0,0 +1,29 @@ +/* Javadoc style sheet */ + +/* Define colors, fonts and other style attributes here to override the defaults */ + +/* Page background color */ +body { background-color: #FFFFFF } + +/* Headings */ +h1 { font-size: 145% } + +/* Table colors */ +.TableHeadingColor { background: #CCCCFF } /* Dark mauve */ +.TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ +.TableRowColor { background: #FFFFFF } /* White */ + +/* Font used in left-hand frame lists */ +.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif } +.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } +.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } + +/* Navigation bar fonts and colors */ +.NavBarCell1 { background-color:#EEEEFF;} /* Light mauve */ +.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */ +.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} +.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} + +.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} +.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} + diff --git a/build/classes/javazoom/jl/converter/Converter$PrintWriterProgressListener.class b/build/classes/javazoom/jl/converter/Converter$PrintWriterProgressListener.class new file mode 100644 index 0000000000000000000000000000000000000000..04cd274904504090ede5092392967aa0cc720b9d GIT binary patch literal 3436 zcmcInS#uOs6#mZ4B;6T03khIIf{rMfMKY*}N&*7OAcNT?AtVTr&P<1NoXwsdf`}_o zL2(0l&L@9Lb2=84&3U!FqLvF$yo!q&UeoZppl)RJ%wS^TU~)(x zNkRQUK38-StiKad=HI_Iw5g00^2pT36#}18-C#tj|fiajkbo|*WohFD5 zADpVvL3 znxt=c-X_X@{}N*Dq8B!SZWjl=xY0G4pJdj?T{HF4uvrN3HC6&}ypT3s(x~lBCOt5E z$@(^iT>a^goUlaD?{&6xM(ahGX5tAgd_ zIb-I|#(f<_tIa8QBYEEATMIhw=9h)w&}#s~@NZq-?z=mtb^VUcmgeRHz(N???rKFA zmFOkTr>uf&=W~MAAi*BDiFqf#sOq6lMPFF2L4~h5WkZbTOHRr4Xd`Mr4f6Ok% zOukb;=9nxp-<12%UM?GsG36Ci!=P7cD+--Mp-^)7dQd*1c>s=8*K6QoTs82CqWCdB z)o{(gb$ljhTH!W2yI`f5rd@v>?X|O}>CW+U-(PrHb@liwoLX5yIIrf~nn}nevCJ%+ zq-|w>_*8?Fld8+YoodwzYIbH=i?wEORy>Fulpo?JE`*1<@2uK)ao=6F@8SNDs{Kyx zd#mZrrx*uxv1?tEjUE$8ib4k9FiEoVBq=}0whG7?yf1L?sJ@I|C&2soc{`ry0&H87pRHs=jB=% zQT4cu4b!(^G}o8Wu&s>7<|YaqO4z7`Z5bstQ!JyUj7=&YKGJ)cZpcySGK3BpLrk8> zb{R*POyHDEc?`OJKoth3k?_(>kT~qcMoG_73J0vh9W_rA?GYpcR=@E`v6^ZB0y_g{ zJ02-x^GG%NEd;o;0`ewycQ-}7AoSc}dJoOo6{*%$@2n8p&MJePf*~(rqntsH%%E3H zJSi#kOB!cn&Lg**N!W-s9L00Q*w6a+C1R}*p21K+cm~55VGdOCA_(>FBEQl9kLA|C z$8v!zGh~@1%N$we$?|2gbjZ^Ek64c3c|VuZ!Z_8C|I%`Hj;ieJjZ|l{ts3~&2zP$r zRogIqD%-45RgyQcC#Z{F)<}yoY-T0jtAsM{Yj27c0(Dbw8L>dUlJ7mJXTHy~sV|^W zUd7{b5ySEt#^iNO$(tzf{TmQjmFd zdW_xZm%4`V?-*;}!q80Mcu?#n3q-YPD?#dCqPfQhdw+nrYEJmm=o4siji9e%i`?)4 r`7@)n0;3g^I6?2K?7|RrJVh~tX*|JaGbO=E{<5lL{hq`dwRL|2FeUsc literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/converter/Converter$ProgressListener.class b/build/classes/javazoom/jl/converter/Converter$ProgressListener.class new file mode 100644 index 0000000000000000000000000000000000000000..feddd992d3db76b4b9053cc021ff4782d5dc5ffd GIT binary patch literal 727 zcmah`O;6iE5PcJZ%}0PVr9ewtDB=(zqrRdv=e5fW8ZA&6}D1_4~(903UJW;*E<#LZ#ceya@f9#`VROe^YOFTOol0 z!bV-IBo!*{iFhWLSVe^0oLz6Xdj56D{HspW4}DuM5Vj(%?xjhk=}reCl?1061i?v< zu&>RirexZeLM641Fyc-!uf-uDtjscgaLJ0Pt$lcSoD$XyE-X|$IoLMh-XsIpDJ#I6Uuxj{`cPPyz59#^88~)X--JcDIxf`)hWwE&b zEt1o8tQBFenrXdQsF4@m8vRxDV|jM+g%6w();{Z*iDY9O^H!UD?fKyN?5o)`jpIZ=KaYx~a2z literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/converter/Converter.class b/build/classes/javazoom/jl/converter/Converter.class new file mode 100644 index 0000000000000000000000000000000000000000..d33349d0a93850e2c93d08b9f49b71d6af01db9b GIT binary patch literal 5052 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 Z-PK3GHn0~48I%Sz27H_yhb= z##z)0iIOJMd2eUmo0=`&PaLAy0!}=`)t23m$VN=co zC2?Pl%TElW&9`_uD*@3jdJ0YJ{qlU#&k0hWCPZMZ{p$gFr+zpO43a3aTrt z%S!^(x7iFQktfs?4B6j-F4VjhOsrY3aAd(i+Cm0t1IG-D)4#W|?80CxIoIdGv-{W? z2rp*PDryZ!|L+wgdZH9Po(85`pp2<50NYm0Eii2XS>o3TwUD3>C_3kJFy|EsN1H=a yL4P4WfgHs=bczlsozkre3Y6Q#Y<=Iw28x78W#Pey-6WKt^8)=%@=9W#RPY7&Er_xJ literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/converter/RiffFile.class b/build/classes/javazoom/jl/converter/RiffFile.class new file mode 100644 index 0000000000000000000000000000000000000000..7d0483f58e3ec14823fba8b07fb05f4d256facdf GIT binary patch literal 6644 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 J6&Y#2{{uh*^EUth literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/converter/WaveFile$WaveFileSample.class b/build/classes/javazoom/jl/converter/WaveFile$WaveFileSample.class new file mode 100644 index 0000000000000000000000000000000000000000..581e30c430d93c2ed165ee2a89aa564f6d28991c GIT binary patch literal 559 zcmah`O;5r=5Pegil~Sal;hu0FJShMFu4sCRQx0YOrQu-NFVT?RSJC7_SD8hww%Dc~JxD^K5h!^z z=(S~hBibQnijBw@VN1k;#=pt59)vJI@oS3SlO{WtO3An$ihf^m-J9WD{;TJy?PfHH z{qYWj{G@!Sw{?((?I4Fu!uIs_9axwn9872Zb0@f(?}b7=de`l)^bQ0)~)E%TloA^kEI&vP`H3f!Z>vGhZRi$z8( W8#m=sV~LT0Wfb|hS&>1CtMmcxT%t2nd=cckVqibMKjZZuk4I&tCxyV>O5d+z+7s6TX;E}&1^iIo!=Ut<$0XJ>tI|mpdmn4v9CrsOPCmA}rFFV|mBEouZ zLr^akO@`De(&a{GiSLxlhmyHn#}Kmjv{~s|zf?&>8*XU0iD?ya1`qpp z<>Wacs1yfNuGJZjtN&{%h5~PH#Gc=c` zti&bhI;OofE=5#~%sh3HksB~FNpqhR3)*^`(?86j5n@RiI(xdX72k73epNV0VbDa_ zNuJ%YP6Bb$^|n2np~j9|IU_S|nOim@^a*IBkA)BPmqQDAObP&m!*U!bt|EkVA$yCW zcTflc#-hDNu;?+WqF>;9)q4!32tWA&>8nLlM~~od2!2ASh#KjK!$oKxy@V06t@J?w zbObSjX43gK66hnTM=?h}aJ5thchE@@74+!PtI>tKWisE0wj|@q{70zq${pYhh1Ex> zRoapc0~jQiU<|T0$mj9pJ+^=goK2ku>>#8p&r|X?OC(kmgqxx zp|9bM325Sl58y)?XAU(OL*V8+XJ%*4{N_vh>-UeJ0M<~=B8PbkHp+ZkU~yR%S(aFq zSt?23%cey)FN1p-+!wHpx5B6`<2~6F5Osm9uC=7rD(DF0bzQdK1*-ExMRnDnf^C6< zUhg$G-pA+JoZbk+#?gAMug?f6>lcH0Lk+LH$XWrlach79&)w;*%)TI z&fy5lH11@uCa`+B@fYqwnB3(BQa8Ql2ZyQ=3na_D(bVP7(bydQ7J&>19eKKu3;mNY zO-!WbBv^A2FW@-58pR3f7{g7{TNHgniZZ|hckvX${f>m2JVlZv#WKK>X34M&x+(rT zoOPVkH&|cId*h@oEYf9UahImekx}zBql_XJFhgJGQNa>CRI!2ysvJF=ib>q2h~^tQ z`WvvZeYQ_X5*@QmFi4S+CYixKq1y=tS|o!lXE0#Ie$vFB3HO|B9BF!G4FfdYqDcij tLW$;M^!zmSXA3 zy}EXqw9xX?0_CsapYYSdFg!3VOb6R3{o{q8+=q2XG4>jiVi(j^P8C6>`#q9Y+MGWRo>PmrHgi@;#3q8 z`n>FwY=1VLUv%e9d{JRjz4Van+X@?w4&F68H8?pun;sb)A0HmeD5z0|wshI8__pg$ z+QmgD%)EsZTF=t+Y)+e2xN+=^y=0#+mrJQL#Zc&Qq^-Sr+1D6}kOOS7l7 z=Z+JFTu$Q~aqQEMr|`ih2IZo}ySq+<_Bv|zX3M!;#qkOL2ywcLrP+$k4)YNmD7Xdx zphCEB&!j>mT|UjEb&M5UXMC}A%JC-bQ|t(AKkta5LTF})Ig!|0yQCpVO5deJ z!}^`6f5H~SZ9@gWa@_H1udn!Gtqdfcw^;^7f;BzI&*~uCGQORiKWZ;jqlsy7!OKVc zW-_A!Clb6zXoiMNW-d66JNNjWJ#@~Ok}}f8a)rK`K`Mm2tY&#XPR9Wd-rCn7kRT(Iyh>=*9a7QTZ~;l69(d%}HR>^_1YSoooE7e)3XA)mmE9E@A|u^jva zKedp-goTd?8NsB5BSHqja%+OAmQIE18-uQ02-Q5 z>8%;(IuGK<55n+2IZ@&FO}&owT|`#d3CjuvnO54DD{+WHE9jJw;+e93l(0pUq2;A8C@i zT2VKGjcfQ7Yv)JAz*gLV6gceVlY$%hW8-L^&8Js3v0mB7T;sgU-Xk2I4dACg~JgGh0L3$lxq$S#Q z$mNLA#Ws{FUm&u(>D$AHQNcmpvI5`S-^rblehP4@UsK7aomeFObV)J^zmU=-q&1_wNV_Usod%a3e zAP|6ClF3!{O2Q?PRrg)S;|w|sN#r;-lKv7s_!V~G3I50V4d>~T9LK-K2`pmf57kY7yJz`;6=QQm+)WwQzv|cNj<@#mc}7OCB4Bq(f{M<0_4aI)n{sSVK$(x@*9?In$48VBPqb1{T3429ct! zlBrzvdXAt3^zQHgeZDX97&;}hp;~r#4s5@O7S{1K1KTerd7Gp`{gr>lUO-&Eh^^`+ z^s2vOm->fBvpKL?MH9jY-hbKBX5NANAHwQ2nCf-3syEQiy$pt(f%aMvbgorrC#E?p zLiEFrbk&`#HS$f0|>RObL`kb4XP~dvuB@uS!?a%KVCff9l!+cB@x4P z0%^Q&;AR|`lF)F=z>EytmS$F(f`L0pBwLvuNN-M>d1)35EDFRnn)SLJ2t*!~1dP^K zLm*y#WO<(L?g)q?FZ^b>X6@PnBgvlYq?GK6I9gvI&ea}a-_1JEy`St8N7eY z+^XyEFjvdUxLI{=E9hjWcI>dS6Z(xx-L*Cak|nPj1fpmuN2W&qL4 z$|$3D?hqmu{VlPN$k=nFo&T6crLS#gf^x3>zN;MCig4i{q*0MwIzJ(Qr-Is>PV}+12BVJ8(;=k@h&R`#z?j`?kA3uyBODIwF3J~1=Uz>@&Km_ zN^?2(RoVaSDtk_~SZC`m*zO^9a&QA%3eE)YhWI;DZoC6*9C-ySLS^5h7h!E)>7_yH z)q}_j3<*Jr28s4MTedJy^OS-oB;Et`u5|@TvJ2oL4qr_-TZ!$N0^^+~SD7c9h;Ffb Yr9ksoq39G&yuR@J6ALHVGJ>gp0cDpuB>(^b literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/converter/jlc$jlcArgs.class b/build/classes/javazoom/jl/converter/jlc$jlcArgs.class new file mode 100644 index 0000000000000000000000000000000000000000..b2f094f4cf8b1e3f5c123e0481eb4c84a07c2f65 GIT binary patch literal 2752 zcmZ`)+j|t{8UKBoS!S{f1Q!BQISimS*^sQH8Z{`2Q6NYF8-pU%IGKFOPMFNBGqaln zZ50o+o?9%fv{jL++;CBOWI?R<=|!KaH$L`o)tmkm_D=izW@n#lG|t8QzTe?J|GsxV z|N6=&0B*$D9J(>mimf=L;{nAVROGO>o5xCeNRcCo{6xpYia%mtRPjd**g1^B$#F5R zBxztm@kvEWinuvU;iwL;71Qty1UZ!Pm|BE7q8!#?#6YZgMUkq38O3J}%o#YA=EgS(V{fKo50i z%Nk2hR;4Gfqkq65FvLm@ZCvMJMp-JeDCB&b6rygI!t<14l+t-NfpS zBj3%alf}rU5ohGAz^0}<^*DD0;j|s!GwaB5>;^vVYIZnTWqB8|$8?>L%~)4IYeYCM z9i|@^2SR6CA1w&CZiP3O4ac@~bjU6zsq45`2OF6kiR?*Mhs9%rx#6G^I&v3#!xk{X z9@QEX{n&2eRuly`tBr4aJCJ~3pk%XlUSy&NMHAc5YvM<^(ZnrEx*2@}YZuc_Vl{Dt zG7l3ssf(HJl8)z0oWRdb+=m~V_ywL<+f@@U;6)QJ;bjxA;8h*JH1R8(6xcYAqDAYe z<24h%#wmg82K}n-x#L!fBrEAlk2Mkzd)7DsT=C)_9ltU0TfA=Kv{G6#Z@v!FyDF~7 zQZuPTb$nVoo!G6~u^hKL5{s6J-{JR){DGb5H1P)BR5_Fd`VM;1j-(ZprQ=S_S+;N0 z--Xq{y=6}jXjWX3R(IJ75=d+^@fOYyZ>mB2`FO0`ErIsEY{@=*j<*LI0JZuBHdt17 z^~mhQR^w}=tKLx$6|ZR=GVop`}kz4(0g^0A8T z@rkx~G`*y{!ght_B~Hl>cT!pF80;J%wxie%H z=||ere99{mKMS`xxytI2=YNkQ4#XC=j@7WsW$BL#bT^l)k@O2JLH>lRCU{@93v zx)Fg@9gEgSle2Ex1xB-A0xSRkEdJTL`6DzS)C8d<)KEw`he^UYPZG`{k#J6xgmc6s zoHL5Ng_;~$q_=TpBSQ(;ShxgHSaK1WLd!*Hiew9Uu5~3E@AFCqx07ywPU=F#1pmrY zSdODu2@h-G^DMv)o|<)&xC3`_B`|=y>+Ui)QEv&iRu{xYv}zwCH`Mh>U*gVCj+Pek z=0z-P*RpS8d6(9kUtUAoX&8kXR-D&%tZ&!O;)|~Jy)89dwW9kBUZtGR*Rb+5MhY4O z<+_Gd*>|v+QnrTn{%m1w_A*v8vvXM1pS^&q^J{DP!3A9N5!M~Pg!TCiHKzXoGBsHF zO_Xcc%nRr6s4~7K31IWHErQO^ppAO@Yk90)#&rc=V6^AZm&8|Jwl-P5p4O6xQk(SB z`u8*&T0Hm7w&oq}JgYQ@7&BPIHmPc#z$VgJWN{2RJi%%|$!b4^t8tvwewqz^hE0Et zjXuG4K94ENhfqk6w_FcS*Kj92M#990mf5hML9=^Z@ z{0lYw2bb^_E{hDV2m^l>ZTMKM!e5fE?qTPTvgh~ETb9-g?80tJ>}J|&CGEi=v&ab( zdvPx@(}(|JALDGna#|dsq+vgE>Vo+-iaHKJXx~sHt7EHfcQu?oCt6u&he^e(WUAF_x_?|D7=Y4^O+9zW@LL literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/converter/jlc.class b/build/classes/javazoom/jl/converter/jlc.class new file mode 100644 index 0000000000000000000000000000000000000000..1f5ea38dad18616e0dff6e45a9ebb8f2e2981b79 GIT binary patch literal 2285 zcmai0T~iZR7=8}f%_ebC1cL_KqSaaiG*m0K#QFi%3I?!^#e%K6EC*cN?53LyqW!q) zMQ1wxfOdN24V`IkbUNUasXw3>{U!Yc9jEj;o1lq+0y!t=J?}p6^S?&3 zF1}5n6N4!X;X?!G6S!dDqZD*y(s5DQhYgIRki=k;mP=~L8yGb(p5*4`6t?5z6q@mg z+9{~vit_%{z=U$RYT&aJc4IJsNi|QY;hGvgPvHw(H*mwiO#x%xwa*1}WdU>8^JFmO zTII6jGJeYOoba?jtn2WEfHvgMNP!)B$CG1~;ot$E+J+zBgi)VgNW!dnh8 z_U7lU1?!&g7qjzj*7m&x8H6(6!p;%0XgQuhd)KwdE$dp|T(%GfjyIQ6A%(-wut1Ys z6zFPznvpi?1lbY7=dHUkIKODiQt0@e!nLA&+BSi$ZY~Ju<iJNV)= zgl{f{mVJBFDn*4i&?k^8_?5tx7aY}{1W6xNO)&8$4j7m=VPl5zm94(w>@!`N)0Q1u z&)K zrR}M~H&McuCIU5-!PXzD=d-n-OjJ-5*d0ZvljvZ@aVbH8UA1f}zJ0T7btRAk`%En0 zjv5wC+{HZuUzzwC-w0&tqbeCaI}r^{8K0h)Hc9qv?*6R68#K{?Qn*XWk^D}(5(Lr< zuQ)|H>bO*5bgZfUZKc4sDZ}a&u=!D(qTuDCLpEC1usWC~Nl*J_d7~KJ34#vI>n2w& zNUA;NSLmOPB%NLF3(vN+id1b!^)#!E@k&^#gteV1g`Ro7S=Y^66ge?VReM%3x_4ge z2!VGnEa7fEcQa}=7MQHz*7Yz~<+s7I@y6P^;L%kTlL3_ww@M}H@pK*8B-G&zv1$q; z?FRp9>vJ#jPlSH;o}~J^HaZfq@jz6|%ger`j+o0!H@z9d3GBxkd@ZS;CJ1$7a6HIW zmb2ijcdtM^jJDt67>|rSIK=N})d6p#i>o9Kqnj2!EdHininiY#qv>4t6YXZdme&46 zEZ-Ar)e5nGJ*{^?d4RT_w65LkPV2`C-|1p$?VnZXlPic1=o!6d8OBdAw8u!SB1vm% zAfC~G$F?7_P0i*Kv{=8fiss2xY@d9D9oh<7(#8sQ4kR*>Ype2W%OsYuYYCkL$wz2k z#co3FY0WI7Ba>Xl-etVDjMrm~@{ru`;CuXlG-6P>PVgJ>4m2ENHpkJzmv|Z{SgwBN zdV(c7$=~;J4g)xkQy9Z(K63`waTXQ^iFT2AqeL9RedMu(ar}zQQSD}lxQDOi9`y1( zejgn;f}^Y6>DUYSa+bEMqwZa4(Yv&e3m#( b%yd8J4%SDfZ1xd9N6x3>N&Z)oB$MR-dpk|A literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/BitReserve.class b/build/classes/javazoom/jl/decoder/BitReserve.class new file mode 100644 index 0000000000000000000000000000000000000000..445b4eaf983258936251a16e5127c5fb7d652982 GIT binary patch literal 1707 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 fI393JR+5Mss;(LqOKUwkI&%@CV+rQNQIyFP&Dv zn|vd5onXU>d}Sw>GVb_8fkLC}ymsD(VZYK1Ds9hYji^$O+|^t61Ts#${i@~13`{Mr zt*I^(%8Vm_utk(LLImDmEA9wbbo8BJPaxNf9k;jcY$vTUZpU+b!%<(8DtxVHs&0@B zU^l~2Ng=_2XR~1(lHYT%NMkWgj8G-o|X$5AKuM#+et;+LO*K=d6a*1iK*I*f@ zYmK#dO0W+mDYLYyj1WBS@*zao_zvTUdJ3Y6K7ei z2nD@ literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/Decoder$Params.class b/build/classes/javazoom/jl/decoder/Decoder$Params.class new file mode 100644 index 0000000000000000000000000000000000000000..0ba5577e88a779136fa852332ac2cd17c25409e2 GIT binary patch literal 1683 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 L1p+Giw@QBjFlg<` literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/Equalizer$EQFunction.class b/build/classes/javazoom/jl/decoder/Equalizer$EQFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..7d36c9a7d85d055955917b11f3b991c2d287e580 GIT binary patch literal 489 zcma)2u}%U(5PfqToE#{KiZ&J|7C_-O#ztcyfrNx;jD~*i*x-_5FCKRme3XfmiG?3v z=MVTP#@U5PXWU}m%$xUSCj0UI_730_2R;he@v!HiNhn7s!Y8i-Rwcl34ZUkpX(@7i6&GBTFbN>i}_q~uQQyAC$UJ9 zSul-*v5a_r8uT7>5vzqvkJr|7f;W-bmC$3pqcv#v8A4mpfS24Qc^b*SGS_VV4mdI6 zt8h{Duuo|HcN?K@q(Ln7B)AEuGRg>tf4bcxIQ(_yIpEt+ZeFGIn-!i-K-SQ8X C(Ph*C literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/Equalizer.class b/build/classes/javazoom/jl/decoder/Equalizer.class new file mode 100644 index 0000000000000000000000000000000000000000..3f0a6adb946fa97afdfbef081f21bff590c4a25f GIT binary patch literal 2570 zcma)7U2_vv7=F&?W1D1KLZAiOrVS)Onn+u}K}w+?2~_(*n^He;>}755Z zEdzJ~6Dsk%H_2n)?v{5@EqX%g^S!9^6z83{0m|jBXTPv z;}5DBRWT+I%#3E|OL?SWKX1&M?hF=@@e=hnd0ORVWqAZUIlSZ9>4?M+kv6gN2eYJU=^S zRL1qGB6lK#<-A^;&?^P`?reI^=>ma#$-`M0yd(K!K8dOTyXASsI4O|&|1kn8*=H-| zSr$|v^F6EQ&2ohbd6R8Y>>3hwGO0)HZz@_@ z!oSY5xT8GVl`lHh1asy2O5Vs8q!D$lz3tL`dL!%riK_c3q+sT8X8*A zsv(7Ka@nq-1DiGM#4Zgl;bjebu}eix!#ECU*n~!QXf@5q)Qpj5waF)@SmicZSEGk? zbDBz@D4&-4_V>5-<5`YLg#GDdss?O;z(&3)9HdP$Ie#~z3C-?)l&8s``*qx7xm>sK zZ7*X4pS7tQP*UO8&;B3b{f-+7;?`j~1Us4LIcV601m83}09&mz5^S3THpVE0CnBrC zQt2i5s)!L{0X+_4FV>>ZLT#`k9aLgibZIQ{w?7Tv|0sUe!QW5(1CPN^qK&v5Czt={ z@LBBIQ%g|O%i-8n)P!T#;Y%;?@pMO)Kv;OS}#$F3kO3vUXIE(kjESG8cf+f3Bp6xP6``e)o^3e}c{ z%Jy$?(#m83DEBD&UACY=CnwFGlukb7QNK*J{0)EEBjUGq&snhcX!sp4!J&EHiC&=Q zvhib~Y||w)S)}VN(w$lBkxEFzwl4CFtx*Hj0p4Yn_c(Izlk5i^iSw>c#B#NY@t?3= zNDMEsQ{))7P`?etk|mMjJ+#P4=T+q}I?gk)3F|`{G74Laf;OW}qDsS7@M9kSgfuRZ z#$}5_%no)b)H@WUsxq0LA)310jZzW8EXyLcHsZ807Ree@ap zk32YkWxDy_Lj8^7dGU*{No#bNo{wUdA@nW#m4vnL$uZjN%e)6FR^k2T}=WGfF4RM9QO-xN#U!z=PkvrjBv9C<>E>rop&e-mpi{MVOX zDa#$o@*7qE{V~2sH{{KtV4v#?2P(j!=y3-sZdn3^Zo~8D4TQhPS~*3+y4UO$Z|9L- S?kT*n>-h{?s2;5M2L1v1r;FtP literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/FrameDecoder.class b/build/classes/javazoom/jl/decoder/FrameDecoder.class new file mode 100644 index 0000000000000000000000000000000000000000..699a1dc34d6eda0d77164050453be5a327286444 GIT binary patch literal 218 zcmX^0Z`VEs1_l!b9(D#!b_Om+2JV#92A! zb_Q-BKRCa%C^^+FGY6bE3qt*kwF1ORpsaB>SyKXLkuj^M^?wkAOKRL zpOcuEuJ50em6}|_$e@Bv7t~<53)mPL7#Wy=Zf0O$WC1#mfd$BC1@b^N8xXSt*-Q)^ E0I?r9HUIzs literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/Header.class b/build/classes/javazoom/jl/decoder/Header.class new file mode 100644 index 0000000000000000000000000000000000000000..89378794a8de3525f2f2513e0015334585176521 GIT binary patch literal 12498 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 literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/JavaLayerError.class b/build/classes/javazoom/jl/decoder/JavaLayerError.class new file mode 100644 index 0000000000000000000000000000000000000000..f2dc0889de7ceb5c1570605702b8c1007f8d10cb GIT binary patch literal 306 zcmaivKWhRp7{;IXygzzgtJJxJ;?O#nrJKb?+CdH%i+enSM$QXFE!1!2By{Kp@I#4j z4i~2;@Q~-1mmkUb^7{wi4b2!8JVbbm&>)2Gy3o5Jq4M%NBlsh;P=rRR3pLqq=E{D_ zdCuf1HJQw3(rVXl(BG}}me5Vt@>?E^*@$&67Aj+h6=P@eAFM$YrqxVSg#1Q&udK`JP3)RK-QD bJnGnY9rWO$VyXI}nq}{Y>(&w)pPl~(oiZ{E literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/JavaLayerException.class b/build/classes/javazoom/jl/decoder/JavaLayerException.class new file mode 100644 index 0000000000000000000000000000000000000000..ce02cc7df816611e4ec97fe234ab80a44f4b7f94 GIT binary patch literal 1120 zcmaiyO>fgc5Qg8ilQ?mlrX-{(ABC2Wk~pPCqVzyf1wsW0QUprW`_^5hE=e3YE>Qju zS3uB89JnI!qYyK;i9@Nx!Lzfwub-KD?VrECeFw0HRTBj)aky4M9@h)Fftw~}%X~)R z78(Yc25f5(k5sVr zrwb}qi?wkdoiOl*y$!Cb55_$%k~W!K3fO17GNnt0VU7p|tey%dH3jO8=9zMuazypR zPAJ{i-9WlD<$O}h^PQLRU7+M3>QEceq=}2Ct_4aFWLu6BW6X|!7`W<*$JW*Vbz+t0 zv|ypcp=!ZI(Ll?>3KlF}#3ci_c`XSnv-JPo3RF|?rly}wPdi8BPz}gy6$F3DCl+Ff zexw5ZX960xL|Kkjc_qf`csXM1;9ml@Pd%^QaMnS#t^N6=`&06(g3t@)ddtoQba12zZa$TaTcN zv3vq8CQw44PLD?5d0a^F4z2O5U!Z@aI`OP*2yp+*Iq8EXFRw>1Aa8$0<`~(uvDmAJ zFz{%Kk)L=)A3tG8Vz5_rn;Q5LkD2=blefn(7^z40SIBr^i;z!g|C|iko-(mMnYWJ1 TSRnWnQfHu*d6cV^YgqgZ4Oq*F literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/JavaLayerHook.class b/build/classes/javazoom/jl/decoder/JavaLayerHook.class new file mode 100644 index 0000000000000000000000000000000000000000..764b83d248f9e140dde78de65809e279820890da GIT binary patch literal 246 zcmY*UyKcfj5S%5B9Y}+cl8P=gzJ`v9CIW;KgumcyuPi(E9XcOK$)}~@1NbPEwOyr} zhekWIxBKrEz!J|9#t|lj*Mj|#TYGjHuiL~s)(v6twy*R>t6G~viCLOrwHU0@s;xPl z{SaLdX4Vz4VV|-#ZG6y9H|*Jc2(*O22ofeq-|$}6B3^cKd#}IQZLIx@yC%ZCgCA=f rRn;oz%;xOWzaU}SWrk6oX~mfj351b+1W-VDKp^^2)Ci%lsAo@qP_sm! literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/JavaLayerUtils.class b/build/classes/javazoom/jl/decoder/JavaLayerUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..855df7813ff6ad9efd5a9cbb7e221d36a2f80a5d GIT binary patch literal 3808 zcmaJ^`*Ryt75=U)dDpV+xPByYs>B;D;)nmQJ2ga8<#NlF(qPcvfD2 ztl~L&rO^T3%=0SFs+dynLJ}GLL@qD3QTe5IyeuueA}#a!sz7|%an1|u%dhAc^(&53 z%B@(rqET>)MkV(s_wxFxQ8_`ONrBeGrfs?p3A79ipP}wiN(pSso3=4qD=iw8)B2*t zo$kC-(5*9i#gxy%X53vis{;4j+0$dLX;tZ}y=YVo>RaX&8k`vNv~s4Co3_g}ciycS zdTG+%v~+tZchu6W)yd(=&fMaPQE+K0X4(RMO${)Tf<;hwMf7}2JaHCRWGFH*InPJK zV#mCz7tYV<(WZzu$SCr0WmG08kSKyy;^2rTCHHe z!;?A|94Ppiz|O5mP8n6FRw+>JfdG-0RuWZcSB|Y9+&VBa)Limcp;_b_(y{T{4Qq;Vjb3 zsuzTAYhJgc@E+b47^vCC}$YakKW5yJJ`50u+@3<4dexO z)h+u8j{!pE%qsUVeuh;ztzgB^krJB=0#;xZcmF z9It}cL}nf0W8TE@6|Sw`<^epw`;;$$uVR8vZF0m=N-DpI7XAT4*-z22f!IQK%R1t> zGTEC*%w$K_(E5(tR~EX}b+p|Y`6FdpJo~%o0R$8$q)vkArM)!09iVmTQ}gZOK|I7K zdcebYggAQnH-#hgf0Vmzh;`n^4uuhZjgN5(40r&K1pq&xnK)0zGIfAS32+1L3ye3F z&#s|k<|A~?ZeZKO=o-4#ahHV2MkbsALi6DcLZy|HwDnEy&GU4D=ijBocL?tkzRF$gk)L zJk1cFVG6D?anIrmp2OpK9*cMZ7GCmFc7jnnPFpjW^*CWSYHnlBt2tw2>Sr1EAfuNl zYoUkZ9wXv>9;NL^n0U#EUL-m@|ARF1rr^|VZ0EXb6FKH_Iv~e~#GateIFqzzcJx#1 z+rYrW2DF8B?Cl<0!@dmvb>G8f4g1$|;MQn1eG~V}REBxj?%8;a>+7W68yM#M?-1Wz zlEsn^a(#@E%ink-qVXW21RL;MjlI8=z+7$z4sVgEL1=Xc)Al$M>BZ4i4% zR=>f8VV~w1N%QQ?2zfpto7-pe9*;QhG5q&gx@+j>3n-22*v}VB1~(!Nn8jH#T>i3N z;ss?|S*|AtL#8{<2JDDH9A-~^kKC5S;XYpd$?|86hLc79{|)#(RsY~Qs!x|Ez2P(r zo$T-pq&;;y`4c?eiO6L7n0e-FIFP(bn=%`k$W!*8=;E6B3&vu|e}q(bZf1m)Jebdh zRrBZ1->LTrTl*jA!@sZ-pJ5OF-3WgtLzPoU;?;s0#wcO1UZOsKZljM?QfcH|W2Wxr UvHT@O5P1~&5D%Al7{l`a0n!4Ds{jB1 literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIDecoder$Subband.class b/build/classes/javazoom/jl/decoder/LayerIDecoder$Subband.class new file mode 100644 index 0000000000000000000000000000000000000000..191a4140ef6e80249942bcfcd04e1ec5b1d689ea GIT binary patch literal 1747 zcmbu8-A)@v6vxk)#WuzX&dC>qd;lSd4T&8H_-ofT34w;jC2>e;owTLv^@5GoYqYym zNpIShsCw0lK0=j?N>$YdXrCvyQUAwwBU)K%rCRcDXU^}Onc11y-{1Z68xgHgD@OOp z)GB{u-fEQ}Hzu{pV`SA@Vy4a%FqS&I?qS&I?qS%7ig4lxCg4lxCg4n#+yx6?hyx6?hyx5%B zoY3P+QEj{S_Hn0Sd(X{=g9ula zi$On3FX=P-oTBu_Ukg&-qYgjyO=9iWaDC)dt*&vXRv+b&T0I=E)g!Fc>QNr8)e~V3 zgAtB^QI3LRJO;)%29EPM7-!TZPBF$woaWQu1W$koPJn0l49LvjSw0J%<8$D7J`Y~t z3*be*2u|`OIK@-oCB6hs^E7ywFN0V33V4;Tg4g&OIKwmGEYE^-JO^Iq>)<@kgE#mF zc$05}xA+#AuNwdW literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1.class b/build/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1.class new file mode 100644 index 0000000000000000000000000000000000000000..1db2ebac9e7e178eccf7b71fbb2568266184c0a8 GIT binary patch literal 2792 zcmbtV-*Zz%6#h2ZCTV)xrdKGIg0!WTG^K3YBO9(;^yB%58Gnrld(tZuu#+ zD5AbPzVIZ^%8N?D@mKK08GZ8~5PfsT8NpFUW@Nx`?@iOfL}bQ?d}nv>*>k=<=iAM9 zcRu?Hz(%~~M+b~@tjCCgxE~3aYBcJ_m>1)Ic#!mC0!P$hO2MRpw1SL+DFv@8$STNr zVfitQqjGELgAZlzyO9>z>wEhhx#e7=Pi}Gf8fDK}my|u2JuACsw>8LaH27rKY``VE z;1hE5tc2VQ7v!c{0hw1(@&_kBmHG6qH)a0Vmp5eo)QxL0fBNrRGJobSU1nxDoyqg- z%=O!Zn`-Trg4+u2z>DKvoDk3~V@TimMn`j|B~Y209vLyxiS+d3 zh)Ew2p-aw~oJyJVOMWAj%ES#TnMn&&^VL zlU6TJ8H}{neAZu zNIGq1`%*?OXYzB$z=UzsIGM>zh9^?tgc)awY}j^=>~Lny_eAI>fvjmHh8LeQ7AzTN zd(z5Tbe`-k`FR(^nAy_b`m*tk&Te&Tj}t;*RmmU=Ip{iWM-*65(zTFJz#Y%V1?o#W zIf+%>EF*qow=q>Hr+?@1xH+Yo%BltI3f$A$-v3hqbxxp(Pd0QSZH=3`WUfD%vi_~^_dBT+mG(gs#RR_ixIq!6SP1W^9gDhZ zd8nMl9UBCEJ@HgQ;O?NRfPW}6osFBMXKPvsc3y+)lu9*h#UTw(qEo|D==9>0hSzXf z!zOeJG?x-`LBhq}2{b;)Et}0`b1KalFJ?5%;;e>lm2Lx`(69wv8s9{Yde!K4HQKC3 zJ?LV$N(J6KZLvRng?f4MhK6%^(~I*0;Zpt&xOf7s550qBE?ioHm8EtSZw=cpW?I7| zys6GR!}qMNAfRx{NRNg0jb}5*)VpHe#=26`>^s9qMj}y&R2GcbPnNdmjxfRMQoHYy z9G|FUT8VmI&t<`WJ66fg-BU0$@E@jwe_Vdlsg`k6ry52pm27NF<=B>@u`N4jTlU$u zY^H75ZQHWfv>ph`VjJ;k&i3;E$3ukdgJi{3S*tGaJf?bI4n+pClcd6Zjp*HUo$OCgI3shf3_2=-!YFsXH6~27? zH_+Ncmr+KKa%C@|C8Vr8JO_X1V^pZg`Z;JER~E)qil5u&*90HOKQsR?sK-qN@f*VU zopSyIJMkx?_{-)Sa+nnP4&qrnN48{#0qnL=TtjNrZ2=F@NTPuSa(+AP9W2FNn?!@Nt4N}@NTRktLZx;?EM=m7c%hJP zhD)kRcAYLD5NcyyKeL^mLro}l8E$!)#dQa?i!7PypSR-J0c0UUHHftNXQ zI>mCeQ3S8xP=Vq1b^u^5Q2m7`=B|jwq`o8?E7O-oV;;RW8uRMQqA{QTXfzh^=ygP| zzMSaO>xt$13Zh?MNvzNxBWn68Vx`_dtkN5!pP*t<kJHnmuOWK% zAkn9{63g`v(XY1=EA+KQO>ZYw>g$MAdYF+bm3V}$Y)3rTc;;_;=3%b8a2WlxI!Ehq OjQaNRkvN8v()SN6@1P3+ literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1IntensityStereo.class b/build/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1IntensityStereo.class new file mode 100644 index 0000000000000000000000000000000000000000..ffa98805a43357229c0e614fee86e5e12e417df7 GIT binary patch literal 2203 zcmbtWTTdHD6#kBHYn(+;N#tvHO4{PHdSTqnKLtIzH^!HjQsnbuipT;hV>NM@re?X zEoj51O58|c3e!rvsYG7w-cs6aCGIG3SBaSv?%}?MSq*a<3WCn^mSNjwb!@{e8&z}D zD0?+WAhUwRv}IdfUJ%O``d2y3)GDT+ZNak5#l4-9>8u!~DpxudYCOAYIF_2%7h~R* z?LR~C!|(-|$;o@u+5cTn_9$E*qT0-ZZERl{{nTHjvSHoi5!uhn*jx2wYy zvrLc9uz$92FPLTi32;i#>IM#NKSE~0B-XZl|1ihgkCq8JpL@C0MTy5s zbfZVZs*Wdk%36js!_uC|>dgdQ%bQ*k z-o#B_N#qN@IXz)GjgH|JJ~O?I61y~bmDt;7nov~l`CO!O{E{VVo13ob3HrjIPf>>t zl4UD$9>c`5v;Nz6DeUlDCB{WQukC!G8JW6YYH{kM0_9oG@`&&UBy#B^$O~!_oTE&s zRT)HFhS0_NxxfnNk>-r{iWI~U#VGD6tQGo*aZKh028WIiIgNG=noRg;xxlW0mSmil zh{dzGj6UC25*b`U6d!Rl#=VdEWzkQme0|5YD923hH$;C#Z|+yb2HF#^5FdHTWSVE1 ziX-Z0)uH^#G~>wQtlUDM-0|bN7+^Kx$u#20)Z@wd7}7`g?2vj8HyCJ8yn!Pmf1ycG zyae|lbAMB~AXUK-t_CDbRmH=Q^!dyexb$73h!F%^GMraValdBid;bEv5` zMVZ4!=?^jL6HBd)@tmsfA^%^f8mUXr5d8!5-JRT+;535k_<&;vwKhD!1-fnLIFICC DDQyT` literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1Stereo.class b/build/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1Stereo.class new file mode 100644 index 0000000000000000000000000000000000000000..c34653018cfb8440b681e26a44b937c825606cd5 GIT binary patch literal 2608 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 literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2.class b/build/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2.class new file mode 100644 index 0000000000000000000000000000000000000000..6588bfca7ec487a5dcd1ae004b74cde58843152f GIT binary patch literal 25413 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 literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2IntensityStereo.class b/build/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2IntensityStereo.class new file mode 100644 index 0000000000000000000000000000000000000000..4ed146c8d22160cef4829dc9e2d2df94c2264818 GIT binary patch literal 3174 zcmbVN?N3uz82_D~zELhOq6ktE6m+G46i~-Rae|_q6{j#KpyF+NfkJ7!_EyEcByPz* zY)kfSiOaH>EE$RM%gmH)%lJ5xecC^;kNX4mX^S!2p6A@#Qb={1Y3_5*^KyRAbDo#e zpa1%P4Zs1s>w_OBnT%GT38#EGjWF+CV{*oa2+p#0jM;NcUT1Qi$pu!7^KOF48%!=T zd6UT{CX-C2m`pRd%;bs>S25$kH4ma5#008i^Li>}B>QG^vDsWgK!gSAON4sTnAKxu zI@?RS(P!xTo+0lSa34ve66TPAGZ5~$NXtk%ZV1#w5-DRWzZ5mH6M8gBlDbGbrYA4z z*#z^p&}q&masoTY^UBHG-B3$kG{}-*Y8v{ZtAhcvwFrZZS7`f0z)t4!oDKs&8kvPU&0u z;`|AC=L~ZuN;7XgaP)Y(?1ywmxsz%f=#(Ch+oxQCuzDA@lCdK&$27gQcGD26Sxr-T zjjHCd>3k-Unlr7pQ%NT}eyQ!5rj#f9QZ_q}xowy-5=tt6^e-+{z+BvY7 zsE?(NKj3owiG9Rxx2*6Ig2XWjH6mdM?tdF=LU{+g!OpJkRX8@I{SA+VLJN{5*%i^e z*pD7UVOa>h%9j^?=!Ycf0UWeFd`dh)AQb!-@(wzKovuf4K7^~Vad-WM`YzJCNa5j) zn>QSZRQK8i4{bdZNd;=94?AQfnq?LC$!he-Eh@TJ%SSP~P%*lYiphaP3QuszG}=~h z;v^-7gIlwL`;M}(O1YpA?vWI@uP6rsRfq_!8TvjBK0rlht($HVdI;YJu5tsXtsoXG zkxV^A<>nJ)b1b;YNV5%B&|Y$yPnNJ`qY>VEs)kWZ!8TH=nouSE2+3U-k}ZhHR!qs= zxFXw;k$dr;+=tt;10TsC?#NDjA@}2+?7@%nKuJ2+is@V{rgP0MHmB1ASE#G4sg;sR zkD^`g!_)~@cXqC#iW6vcC-*Sq;4?bY>Lr0e9IHi#y4bA}<3ATE^LZh3 z)&kvL5NagsQYa0N(AceDc(;NN{LZ@=wjI?J9j#z@0pAib{t7f@z_9CRTy`r?%aXz) z%T32As^W19rsQ~VlG5S4Mom!Tz6+Q0zT|9MGxH(+S3!5&F_)=cO*HXs=8O0AWhR4#t zFLD;Y$_4x;7xBAH;)z@mZkZM}G9z|KQv_sQ1mz7??IEh;LFhP2BjiGz@X!m^!mo+w zg8eqp?wER;SoSK8a|h9Gn08W4ZWF4XqTBHl?T+RxPq4jln^)Vq&HDruwPZV@y6glx SXssi@iM$2qUGmc!hxZ?TjM%>b literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2Stereo.class b/build/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2Stereo.class new file mode 100644 index 0000000000000000000000000000000000000000..915d8543417edc5cdb3f0d75a1feb5621269aedc GIT binary patch literal 3751 zcmbVP{Zm|L6@Ko%ckjY-2?Rn?0+f)i!UD-cQl!vOEe&=pO(Zm_308X9y}+i+?z(%4 zNwr@}Vw=iL^|#cH)#(p7vE$fGNgR#L_%W$=raGg}G&BC@=s5lZeza-F=e&1W7G_hm znb~vB`=0lFyw7{ix#aB+f3gDLAQr=D!HG&V<53}>6LM0>DIpVKlFx_n7``CONgYa2_sZ8AQl9{vtBW7SzQIn5P=aU8+N;aI7JMF~1OsCGnTzJ7duYRX9`MxAqRu6NvXb8g0f9V1-1 z;gpllOAh^`r=2s-lbOui{?n=b30JO@+pkSxu?PI+?lO)B4OHiS|7o2Nv&*?oV%;;G zY%lBm{-l@pczABGtolK^adYK$!?}1*-=IKZ`7R8!mUXfggGXnzM+41ej~3z?Q1Kie zqN(g5KQMi*zIFAu=ft0Q*vS?^->z?;=W7%yYckKei2L<;=wkt~cG=pE&J7HGESH75 z3V{A|`Nf!UJjcM!|K_se6zkNtkUAk6o|Bt#J$a4Hd@jx%<;`VTubwNcD(8Chx%3$) zHBXg6>zeGmH<@Qm-c4ed@?_hOtEy!m&3+GlAyKfxuVcstn$#b zcEV=g^FIYET5tq}$Mw~i2JcY6zBBeo^VsM@w~am6YvV4o+lUD16w)E&EY5}Sq>V4* zD>j}&tBpI+8p6{yp24#=o|By&Lhi?~jjxJH8+O{*C1kgduVKN)12}BsJTBOH7)SV6 z<@)yMyhnhC{gIfr@pW8fYVW6*^`TEP1YkLFH|JRU%V%_{Ou!SX4 zGAC9$sf)FctOyK2b>NG8B{IUpJAis|fX(ktJ5>Sb(J-)1(ipjCYb9qLsaP~X$p9Q5N9vpI-F-4) zZ}NSnf0Iw&!u)D-sEK8O=Q%8Rhfi`TCDE*U&tIdS2tF zu+()_s})4m&oQKafl>8KoKnBSW9luq>etAs-{5KWHl9=O;G+61E~($)74>^uR)4@1 z^+)_ny^D9%pGr`_Sw#J25%rse;*mnBfEDf9wS7k;G3Q64fc$wDPzALsk@SDxY_s@*+7vlR@Y*l|loBBKMQvYDJ z{u6hre{lr-8-waS99Hk+A$1GK)d!eRAHp?(SyN%b4C1?H2-nT9#`hQzY9nSNtUbl% z>&K@#zf2B{C?2E~bH1}vUhj_W2n8i_28Lo>( zlos(>A}2#{5o0)}hu$K=IY!hgv7nLjhu$VwAK;J?sNYgi`<~#4M`#tmaU3A8qtpx! My?nP8@-Ly{KQ=CLzW@LL literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIIDecoder.class b/build/classes/javazoom/jl/decoder/LayerIIDecoder.class new file mode 100644 index 0000000000000000000000000000000000000000..206ab52f6e8d312b565d375c6e6908a69780b3ad GIT binary patch literal 1700 zcmb7EOK;Ok7(J7?acf)(1qw7gn$niEl%@|_F0>SApb)9RA_#<7M2<5ELt-P_L4qx8 z;8!3vtdXuj0twwU{{jh#|A4A{Ib%Dmg3LuM?C+bIGiScXnfd(hhfe@bp<-YV6Mfi? z<2s7UPO9IOjuQrQm{x<62C|sZQ8Hj)TF0ybGhUff%kv7jpyQN|MIB25d#dev-Etcn z))VQ^S3~JbPr$6WuJp@ID+pvDaHtDZaYN|_PWYsQ?(bR_$gMc86Rrwmi<7qmw6fQb z0s|Y4E3da(b?M)<>P^lJZg{rUyk+^08Yh!lc;DfXV;c{w$JSHNYn2`}OATq0!!Jcq zRw|d`;j+L^+m}`-lK{9+IQ%LC{ngO2A6~N_CA0^KYgBohT(|7d^Q*Ec?a=XD0i)`* zeOsWp(HR&n0M z1zZ$Z`csBZH_rd*#-I9WVhv>zmvGs{I<5$e{+>{v@M}=gErF3V%(`#2Y|%4Ab}JFbqa0(w$7f$6*dqmqQPQ)Y@qD^`>qbN8cmQP!!u<7N^*T*o2Ql3n!d@RSG%7hWV5`*AH;FFW3rS$n9=4gRd(DqEdhj>dTgFOEREpQwf zia12ij6pbzBOGZs+941V=!vi|r~XDJ_X>sVN}jIv8c%6@@*k1AlYh_tJ{RK6f8P{J zdxZ-zs`nlGUSod(G!$@04E&mqEGBEFTI)|pwvI^K`Aub!jj~w90R0*CqQvxPS%wlO zFvpn%EUUMd_68Pl8%vP14{;W4t~{fC!E38BpJKKKy%7{xgITV|9`G`$MvFF{8zp`S z`X&tV9r;c4i6fB}B2SiMothzJe5$_VTZtTw(wzSXIXXM}4ZOpysA6BX(-|ZQc##d1 z*@iWY@jj~%he(#e=vH9kNnk3RK4dnLVK@as#yF9|IQG$wMtSYVURKAXJcej8dro#XL literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIIIDecoder$III_side_info_t.class b/build/classes/javazoom/jl/decoder/LayerIIIDecoder$III_side_info_t.class new file mode 100644 index 0000000000000000000000000000000000000000..8405fc4baf1d28439e1310ee5697bcf46efab8a8 GIT binary patch literal 726 zcma)4!EVz)5PcIn-Ncxt4W&SVwlo}Q4mDNb1maSJWGR9}Q6|&J6FL7avYi%L9m`xFa#r*6AjaMCC1~tjpyPr!?*4#(f$sPly54vAA1<+Q;1d5| z@|8&)+~T;-BO#{nMTWk}u_#WkDhiB5iKoI~g?qy5A-Ih@E$?m{?_rT~$T~hA;wBpx IjH~GV0VOZ5ssI20 literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIIIDecoder$SBI.class b/build/classes/javazoom/jl/decoder/LayerIIIDecoder$SBI.class new file mode 100644 index 0000000000000000000000000000000000000000..1622b0271c7cdfb616de7a9223cf69c3708dfcd8 GIT binary patch literal 600 zcma)&O-sW-5Qg7PVz;fat+jrCP*AX6Gz#7n4=O^i=s_t+Pib8=B~2i01^rhZL=f=@ z_@l&k)1JhGEbPp@JM+x!e0{%v0yw}{7Bg7Rz`}~YRwdRYHUvZl8Zz`0XBf@7!UJ*n7r-Lpx&!^%SeS?RbPH|almP#lk7&B$Iy{2|FG;%1yGR^l6_%{QmUWb519Q}EVpxnE z=4l1LTAYG!2{x(a6L4Kq8-F01L^{aGJ>=wmf-FzUrbq&?z`1psJWBKoo<&9mmQbM8 KKe4dJ*YpqJtZrHW literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIIIDecoder$Sftable.class b/build/classes/javazoom/jl/decoder/LayerIIIDecoder$Sftable.class new file mode 100644 index 0000000000000000000000000000000000000000..14681e8cef0ce5bb88bcff34d3861af4468cc7aa GIT binary patch literal 787 zcma))O;6NN7=_R64Ab6PpgDpC?9p<4&nx4(qy6w3^AEiXSh0@lvdjE<-c-4 zNR06Z_@j*Hc1BGMi*D}w(R<$K)Q_iuh5a0!DAaOJki;jKGsb4^|aa4mITb>kLBc+6Q-%k50j`U6hG|N z;ciaVbi7l~Xg}D3Z&0vg2?;erWdEmLaC)cs-~N5WzX$Y zHUi})Do|c(q2oQZ?oHZ_EGO&N8!KN&;Ucwbhm>>`SANHWX2_})uO~AL3j^jz<sk!UW zUzrPB&Bg>KZ46-0#t>teag%Y2F~Ydb7-QUHj5F>t9x(1;)W%(m3hY>z|F040&2hdH z$k2BV8YkveP5wg(YG0!76)1wP6N9uOgI7uxOiV6}k`bfi#VFY^N`o7v*^QDzqh!)3 z`7}yajgniV7T+25o1*9v9kc=t%3olWJ1JyzGIER?j4p;?bTjgd0;7jvGkVKi-wKx~ zX43bWN_OBOahHrj)Q}Ua$cr@;#X1JX21djt#>5sT#5ShI4(3D^74aOaVwZlvJygYO iyb^D)FY0(ib?j_ROrvaSKQ^4hENOwBm9UK&bpHaIg4M|Y literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire.class b/build/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire.class new file mode 100644 index 0000000000000000000000000000000000000000..f57d8cef19f5a8fe9ae66ce0545ffbff507e0cbe GIT binary patch literal 659 zcmb7C+e*Vg5Iviu-8M#B>-}EP2QAe2;G5!0MFQXl9HUvJF~%{G_(>ZkMmeT9rWsPPe;O+Wqvnxm zXohS*I*u6}FASxw1R{NQ1o{U1(o!sDxR{#gtuwh}jfH~ASY#r+ys~l?#EM_peK7kQKuB(xC z6eUr1Omusv!(g`3zGNr|Q6k&pVNa?H(Tgcl3DQu+9ibx4zmsNm6_HXglf&y&iAc$P z2FFhlsamlZjU*NKf`PaZlQbQAgV^iKkPMU;h+C8B>^#R5LJ7Zv`g6CouUP9DYw<_kc3xwGz$4 V#p0~DI(wI>ALPeqj}5<|cw6j8CU>e^i^ z=qkn%b?u7S0Q=gzYwx|gt{pW0@0|PIOX0bHKl|VP|Neh8Gjr$6nbYUYDfhm|f4h4N z5sgu~L9wq~Y)}6FK=Us^S+br%1B1gEG%{Gipozg!2Fn;6!JwHz3xie$%NeW)itpq~ zN3P@j)t-iD{nPfVTUh(iN- zI5~)iQylr{APteHa>!{6PG@iigEJYN#o%lP=P>vSgL8v4MxN)$^ZDTdez=gSi3}=sEn)p8RZ_n9?xCP(k^ke2Inr!Qf>EuduRLnR-o69;^Sw z)awl1;D9&vWJJ`H554VWJ^9BOpXtf^#IN*Z(d&LaIe6NOdUC&mhU&@tPn)ABw@+NI zrz{_Oh@QMx-WWYO|K-Q^gc^Gcal%DhtMjbh#?=8a>?Pq61Xj^@^U{(hFVdsJoBX zlh?eqtDb!9qsY~ibSEKSXbR;Mgzq)+4Lm(px7y`nle^{)E+ft1g+Lw|sKmKlGMoSG=INY~JG%z2%1H zef5^hzJFS8Id9ml$o+6m2=F zY>eJ={Pq^4aRwgu+Hw75HedioMR^L~-_f>l9_$!v{ExoFX8H~_d4|r*i-pb>1YjFLEddpYi z5c)jE?3T?d9&yCEj(o?F?+S9})U{SsH`WRY&unU{ZJyRx)zVViA}G{ayJXqY=BoPU z+EPIoGiT1MY^krQt*mdVTUy!b$oB*VJ4GD%zM#OOWRT#D z)gZiisUSUX-n<#08xg@?y1dm7VV1kBxpqZ$HZR#dHCx^&6NhQ^UKwF{Tl)HaWtTHopmjECsr+A8n_6{Hm1!-PW4sjF{nt!*A9 zXs48dbB=6kU0mBz-!j9Dff$XVZ% zu~3NpYg=lYSJWb+Y^fJCHl^I&RY%q~qd}+pg&)|XZ8=rLO0-a`pwfANNK>)2-#avTe-NZu?~4g=5=c&4=2f) zwhq{J-%%)QT668vX7tv|_$ZbOxsNQY!YEi-j|y;F661TsA8Nt4IY34-nwl$@)>XFD zRaaIwF6D8>gO5u&p}wiUb&{Z~hon^5IhIle$Hz~~u%1KaKNm`jpqWGGBIDCA$Wfxb z>ziu#UB0Bcw)p_x=0)~iicUVas=1z@<4l2pBO16C7jvC2u1Afg9^pL(5-QE{tw;$d z--Qr423Q&xnIjhw6bhr(8!J7!k}>sQw$o%GR2^= zj41|R}<8!Ae_H+uAw3n6wWOlxetZg(@*ov@UIidTYo`)1)?f zcMT5;g$|1Pj88p+MyBjDJz8pDa;8F?1&x`iT)1?}GAM%CSk$^0)fA`D1QE{1-g9PD z`hr{%bS5(>T8~^-+hlqavRmJTLL`i)uP&{}v%3U6v9fj*ER4Wp6f#N@3ZmW9NtQW% zF($($Rj5N_uwf0GYZuioZ5oA!WGfnfER8=Z^ewatAo4EIhx?_h5?0ES9}EX7A#RCB z`%UB`OO@4_6M6b&Bj(7Dxqz_LwJJifSF5UCfs~qSp&k`~#By{&w%)3~2IkXgg;!w= zsa%EbBp0H+U5<}RfDn@_>uXw3PwdT(&79%_cl3{V0qj0JHdVu^8Q+O-R*E|7oa9#DnCbW#h)1K*|7KdOE z2bQ$ND-msjKJF&!6s2u!LAwRG=BgU&tB{PtW2>eeO8Fg6%LkP##qaoqup;dCKV>ElsxTpGut&wcJfUGyX62nvV%n~Sq zU=6Sum0UTJdyXnai7Cs0P8fOeliIeh{p^$FNspMdH030PjAV7q7( z?!vv8HIIVoI0fBt3d-XYw8tr^k5kYer;tFLLJFaU@Ml|VD}A3p4;ji%uxe!o!5%Vi z=1`ugEz_;RHg>nu7FEMH;X2@cFkvD3u9?n*bCxb|URVon6}6S!!(tY**BlmCh$q9M zLL3qnhl$FtI6>5g#fc2oibKQVPYh0Ca595a82p*RsVs6DgVPzDfw=M$@uZ*ushsg1 zNr%M()=?#@!(t(W8rD%K7KLHl0P4k|F#CT%(ZDY5X&9d2kzui#ox{O@Brd$OusB~_ zfI5($hQ-C=+_3x%`I3%YAZXYhQsKK|tl{&pxJ+yai}_r#261>;G>Ro*(Il3J#WDs* zh~}_p;W|E=E9(pSrJ!D^67k)suvo)lU&$}S;wYxRX6ks3e;k8j1x7*dRPj3(4PntL zU{6M;lIqbUJ(mn&_}44L;%W2_`3%YR8PEWZO!e$S6TaOQplPaMPf zdR4p@7N0WsjKNRh=djF>o}m7zasfAe89ep)S|}`c;`AJj(+ja>Uj{!(JpLlLh2?fm z`BzTmI{8~zc5qd{s3@!icuF!*3^W4^K<>$u%>WylVdXLi@MDlch(VY^8i4o|a#SoVF5>=sA%pWcPv46l!eTu? zUc%t70CJEV92S?NcgsWNVQ`taHbyp9H7y!BtGc0*W2iu34 z3}c6er(U1*DA4#s6wSUFjOCD_FrChd+U6GcSg3p7hpA+jV0mrRLKqCI#rJhxcG!G3 zi5&rswiq4M_+QTA7B~rwjmY0(i1|_(ovv`)dx7u9p6tHHCx#&hWmeiA=9T1olYf`CH5sD zW>Fb=Jl%tyhwTrE{{+ujOtS}IFlJ|iF+m%QIoe=M(*|RvHW-t&!I-ZN#Vt{)))-W#$Y%%2E)HG7%mR5WG@G}mpBtRUVq{&JfGd= z`5ZiBB7s~UPX;C)oDB1f8Ny&p7Y1VvF&I+?aFAUP;9fjy7>tR-gk#zO7VKb{XG}`K z+2C9ut^~Y_$h(njDkKWcE80Y&D4XO)(nV?`Sw&vod+m*6$FWo7+#B3TZjrt>SfSLc zjTGo4gPmlklMEMS$|)Qv%@9zQUgSksX-1JZkg>-pW!^~<2ux?m>>|tS>qQ=>C<1c2 zKEx6_a*HgeeVFo)(_UTZ{344r6ckyTsc<9pF1nq1t9z)hViWb5!w)+7z)u^gZ;=<+ zO#L=ee=p{jsX}}9tP0Bu&#JJ!$gB#-%biu>dc9{=c(ykX(D8-?x?UMzz?%vf^!5V` zc?$r;UMpZ)CY=tHo=MjLWn|K$Kwc(&1(ca73VF6Ri@ayVNqXA3#%3+Q-7fUZ{#81VK440<(yp-fr}6wag@fsm*BW{q?I zYvpYAb)Eu*a<&1XoDTq@oSy)poH;-!C+7&|JQb+3oLmQfIRpQ`oV_5JsQD7mt~UuV zVCp>REe4HpaxPHL+kyOY2LEg2{I9iV=)X|Tll*dawr9AroIN^;$DJe_^0w(Jj_Ja# z>B0fig@fK0goaFYhE2Cg^9}(g-D?6wV{&3>Om5oDOnL|?;&)**Cigou=3Jm?reG1j zG1GpxkS0IeBW#ls#~T9LHF-!3qXWPRc@2PQOKwuXEz|$AG8REW&?_}MC$LU$4_4_N z447_GK^c$31Il;_5X!g(2xa^T2xa8TLm9dIqKqu*moejyl#%2C!WJ?q@mMCN_QP|s`ReE)R=|(+@$Ynzjd1#`D-vD7ua^<6ljX)^k zeL%21oLj$$nSZ2+Y!efT z2~b+5;At)0pBpnW#o2iBGQ}G}nVFKO+(@S6c`hqca+k}_l$;9sE>8-6-;H&amFG;$ zgXJ+c&|%}}Tbx9;79f`E9Sw+Vaek03HfG4yl|abW)j<9j&4tU*AKpa2iaaOJ-9!V} zqv#Kh0*pXjFu|}4Ba|0TFl@s}%S%r%9K*=S^AZf#Ff#KZ35Ms#$;!)4a{NfqyqqM* zj}^`Kc%`3f~2Hi=6=d8^W?H%vC3E#pW ziXpBeRFvaIXN}9Vy9b76jq6o(4-Kg(%FD~^wTXsqq@p6Pj9sl^MZ-4I@S@=xX++V8 zjZ|Eer#I5bqC9IOl@vwc-i>1SuCxeQ7;y)Uwl|QY+essMY@Ao7!Lz_a#GT{3a$np8 z+3oNMP3$sj1GyfawOX)|b^&uNIQsyPx(+@q5ns^Ze|$L0bRYZ;XIxaI4%tZKHq!WZ z8eCMQlMlT(cjJqY^tg7os7WzZmLJWx+GrT9~Dry4!&50Xn63EFQr);EMZ$UPcxEh}L8sde(L8Otj5S5ZgA5boR zNPXp=G+2I2rScP+C_kk=0mmBD(ECSgwCaTw1MW+ zwR9+Lq{HZb=zf%{=~-GxZ&D3?Mz!=UEv9W$FV3U}@je|cS5TvTf|jVms7c*M%k(rl zLSIPD)?jL}R#U4Tq~&%ct+c48V-jKK4BX5d5M&*?8gm(C65(|N&RbWw0L zT^uZ@OM(;WufeHwX>bp^EVwUi2p&Lf!3w$}xP-0@9#2;X&!G0;MRZN@2D%P??fT#= zbaU`Mx+VA_-5&g!HU__?yMjN`-NEg2Pq2gT3kB%GP=p=|71G0@A;86W9z%Z*O{d2~ zv*_{AA@qc3M;jDV@4yq(S6qX|S6(QJ<<_;J3PNETBCZ3K&x;}PH*q~$im4m0I2DGv z5zA9)sGG1bMMp#E&7icQZowkeGSscmVv92aPl?;GkaNWQfmPymP_A6zekeAA3dkqi zv&9{tg6c5mSFs6HNZsaKBklwh*3+C^aTlmGeWCr3xEoZuHP{{_?g5oyt+w73_k!~5 zpfy`;29;@7>g{3+sEGZot`}QDWjVX+Y;hl`Z09v~ytp4!)E%jYiw8jExR1#5#e<+? zf!=bWcnDN(&=qsU!=Unl`C^KA1XM5acdTIlOpy*$S}zA$#iI_5al~Wh|Hp+xJN*a$ zqe6e7J{@!n<^R`o`q?1lD60ca_g_~mp;+wyKh@qrdHrwv02AT~@ua_ZL04lCvb`@e^NgCnR=b~?=-ccF>~gRCQnuIjF^w>7qji-Cg z(?;406iUJ~ep*pf7jB}x+bQT%`}k;Imd=UlQWHFDtwy2lEP~{I;E#f5kpVnbUr7#X zV}H=&<0*~1LRcI(mWVsYS9pMr4)h{rPSnBd-A2W_%!*oGq|NLd=|`GDKhgg5GaX3Vsg62mnGm!bu~rC8YlKCo3Y*Ro z0a_=5bOrFWB22f5blNI1=y8!rFNp}fEwbq&kwagKT-qkmg%J6|7KI{5^cKBDUolkl z7dwjqVv-mvb`!(JY%xO26U8_N9f4ED;W+;+!6EV}ajqy87l_d~V;duG6=j%FM`LCz z$9%Pmcn;w&iwWXgF;RQ~O<#-2*s0!CDlth0#59>LrprEJ0uBuO%3&fbM~PW-yx31p zLrOfv&!lv506c+bFo#>>blNLUT|m2vXU)9+L6UlnX2(Nk(tAj`5+>me9J;a>0iQrl zkB?qgP7u$7Cuo`!;ssEW{)U6V7eOi7S*D4XK)F;W-V*-+6(CQJG5$%A4GK2k3p!v` zLTnR}Me`3teg_TlnLgLpl@99LjfZBU!t4&DZKCrdG&1Ud&584vX?R2IUb$AMS{4Jp zhcMDHynY>QiHxD{6byHua0zBYvIAB%$>Ye-h}ii_W@j@0LFCRyn*7*8XKfy^At zKrGuvRV;ct9g>fA*F0Vz4995OZB|zUHXSG=mC6bembWuFN zfX(r6FKn`OXo?WOREMPq@e5YDV+c$O%E#6)QL1<{T&#`Vii?2TscN0rdq-i*2v_eI z;A>gfJ>Yh#F*V1T>RNLqff`eNDT8WFEN+n}$1&bZilOK0>N@oN zPL&*b^2V;|sNWq6@sJc_As&)qEOd+0Z7}#DDF%Z|F&KQ|6oa9wmTrTAwfs)2o1oN# zfrEZ$Fqoj!gTVx)9t<3`<6tn{o`ZpzJqLp-jSq$wx;N1dg8_ow1_LWgH5i!xpH<86 z3)Kv5Z!WBj{}GGF%Pb^*92*O{}2JI0AoJtfGJ7`dSE=*apJ?mO~xAe=YtbgW}J!w>S;Aq)wMJ#hJ2FoGqKhU*vjmzT7A-kk5(> z<>%reT!&hx3dMRgQe2|;5Pwxw;!?F*tWd{^+{#4w#l#kCn7Gdx zA?~;4iU+Mm@vwEQc*JTKPgoC#C#^TdQ`S%7X**LqV;6~M?Fr%q`#|xc-6XEHTQQHb z&sKyve1@75UyR)-UooB))>HNh-vd+kqg?Ej39~>ers&x8?ReNmwT$d-qG3{G@HRSc z8}0WqSwsCmarmTh;Oz{50hiMt2Y(^ZA3je2nosW9hYL!_S$Wp&w4ltsl@3>>QMUDKOe|bSk7HrvxotEEy85!K(8x=MNk)ZHSBy2(EcV?yUb7); zw^6xSL4g>Wh_eI>o0QRbiS)9G{HVvV!~b`&b!nGGyT%Sril=Iw+bvb)ufsk`GBFys z08xyfJ$Ujpg<7Iha;=nHRmxUrM-8dCR!Uh_%EoI)4XL zskl~3SygJ*={wY9Dz24M7Dm+1Feb8YjggXVrIv;gKhHZTNyUbeRBX2UraE>|l8Ox_ zsn}2wNUbCl8%k2Kp(L1ENh&s!q+&w}uly%PcPLIOHk71dLrGY59U|Qx5ecE~av;)4 zxPCR4X}Ox^1y87~p< zvh?UBjb0=b)9jda?@x`!1==Bcw6oJRdO2!V=LSw4j)h3PgIjvmle7*RJHj1xli};4#0{#HcpNVhj2k|dq ziErUp{3!b2O7_m;XR(j?1$Xba!QI#{&Jw?htHf{EeCZI+VVmV+Y;XK3rOc8_4wYI? zmXql5d2ksh~_({bYtJm!6s>GgY08sAFW7I!|V+ zzsab2K<21dWlVh|bG0M$bZ^;9kCpj)x-8IhWTCE={q<@&K%XfG>NdHPzC#YukITXO zEjdJgD~l{g4zmj6aBGwtVa<@m);u}VS|&$Xf0CuvdO6y=AOjJylMy50Vq@MmfbkQtoP>gl!^rIF?}pb~TlX*WprVx-&`5pohg9;3;gP z<;O$eD#W*em@-ZXyAN>}#j{t6H^p0UDq{9B@iyYx)X%OH?|^b>m^~jGS=bsfZVOhC z9oUBp_&YAxVV-L?Qig~Q>>b6qBEcQTJ0Cqo(Et;FBr z#9to#C0u;>{UvKRWFw5dFkY5nf2FC+Qf3P}F`BTN9~a0Az;~L&kXO}%n84y8pv#l;JDFWpOJ7ETsD;g6Hy`ACg}5@%Ml+C*s|uZ?-A1;ru4ZzXA+16$ zV~usRq3uF@4HI4R0Z)E0GKUp6G=0}*4ws<`T5GIMZSlv1Mt<})xwaXbJrrtIxO-uy zq&Ax3XAR10>_q0wLtL4OzoQx)P%pO1+-PTcf6hmJd{?NC=1p$gd}}j%RIZ9@Z(v+8 zlgqq#GFJS_PbXzQZO-TAtPLgS4RqE9)ivJaHI83pep)r1bqKXA@$ZW7u-ZLYuA_~n zCe?OUfJw2&{`WP&E#sEC=8VG|(Ps9qhed<%KlyOuE3;3I;|~Y*pvpqg(5Xt^G z(rB=_jYcBbVP@yt#q)Y{RJ+l@$0W=#PBwPtL(uhz(YUG8tVU=$dhdQXv7JL1w%z zu9r*cHhBa+Ae-qq*+Os0R{Bsbryu1C`c-7YVHLB3E%GN1`}9st})9vUUBwD zMBhs>$8p07i+P!8PSxJE*{JYpvBaE2VXfIOA-yDO;Q$U#i3ogP^|p!jOhT9qy;04= z?8cf?t&jbr|6{EO|2wVGe_x%%n`nW25X1XnS|cB!<3XPc-Wl>SxGb>PFNP8oJ4nDakV-H%-oyjAFr zAN?H+2fHNip<@K_CIe8=MvlSHL5~4vh8b@$cN60w$2&5+crM>r z+oPQl^<9AUAj$U%*o+mn(fRSy{WJbpHbOnJ5$^H)@3M)woJ~Yw)IHP5Otp6$ zj(lC|dmx}{?x5DS&h})u$#e!k7DhD!_c$nC0A8XNGYY(q%T#La81r2wzM3E}Rug5r+Ew19rpmk3 zboro~A)in)-B|k0#2h!@uiviub|ziW;t5?KzqOgE?yV$pY^d#yJ z7Zj)>e?9Td=6qFJ7@o}p_L9T1+i7aPUbD{F5DvPPmKT)f>jnDglCDB*}@?^Ib}*toPj zZEW`p#%!-AG65Hf&uNpUQ^Rt$o7+tZ)*!H8tF2YIB4w;sBmGpuL~~OOh9&AuqD5EFESwy~c|)mhphkj)t&0$;eBKW|T(L zLuiJpYY>fK7mY-yu;an7X_i_68r2#I^{wT zZt(^>1UX97>mUd98nsdFHmcq3Ho+mRtE63AWA+!4QTZq)>L999!#f9`?T{2M%6Cz4 z1l(1uv=^AB-`pi&P-j3gCtZW1782^tfEG^G?UMZAT_yf28qEcNXf+N(r$)c3u@;DT z@KC&}^An7@amK!Atbv!)?r0*XCh9hp@%-7B$IX&xuoR_Yx%ySy1(~YFg4tTNpv;SR zhxsM9(wcbpo1BQ*$dzHl7q6pq?z_i=gGjy(*0w|RwE?pN|Meay!5HDuf(fpTM(@~} z(#@Qg9?dYgbHJFc_(an7h(Rv0QK!-m>I{*i&J-o;T(Q48 zPt>b5VyRj$j!}OVYjGlarrIFRSC`{tv`yTot`rZbtHkr_YVo?dM!co26~C(MvGI9> z%u_eX5$YB>Lv57v)g7`{-6dD3yD>4|D=)&C<&D_<+@v0skE%!HTk28ynR*KMU0+nA z)T?T|dQO}RaI!%41E>K^n4eCpEi~3sKuGXu&)wk+#^}Tvd z{h(e~KSKH^^||_4eFy$8YP+$$+i~-F57^aTU|nszJ%GEbhI)q9W3#sstNp9#L2UU} z;sWf=bQd;$D=7nZy)U+Z5vs=1IBWuAjgPu2_IYBhEb(LDjCoKz#&bB?Hd@r{xOs21 zu(?jye6w+^3ClX0|nOii25sy61WdMQuN8|_Y>t<@>guTi{aa7HvW(1#<1J4 z9X0t2_4*l;`mZ2`^D`=1N_^79pV{=Dm>e;)3ARbyX13&PCR*ZSTQqcDLS>H-H&}5A z+IWQipcf${;0?q%aulx=^GxJ)nTZe~K0ZtQc>lomVAS=}+63=mCT%M(HoC4p21Q-A zd4U>SMh?K_f=D+LuN}3b!8STGnvOfQ7~1JkdqG*)AK4k01T)Me$fqc|(J+$sN~0Mi zvk?%4^xCla?@7W!uC-Nr#}T;e+}=^#Sy7AdwiMFe1>1(jsE%~5l?-IGYu30{{H&SU ze6%z6AFIZflD3KNreeZtPvmKQ(pZORpiZNaI-Pa~o~S+AO-E>!j?!G6Lko0_mg0H2 z?nB4w{&cn;Kv(OX=q5dw?$t%~pdLn#>k;&vE~eM<)!)zXHQ;~ZE5YC4i^ALVSYhd% zMYb*%`Fa=8TaOnz=?P+_o+KveA!2vkN9?1giG%fS_&)Fq(WrM9EA$@XPvD)V_YoK9 z{ls7OY|*aw$IXp>#J&2!q`jDnVd7ha1(XpV%g@mg!^^;3_JxM$(Sx*Bx)_fkdYq1d z`&@~!cN1NNdnjy8Zl#MQKB$ASyb(NnRR{KG6}@D(C0uNHY{vaqxb(0;?J^xy5Fa<_ zYsPXq?#K8!$Pg>yIq+yOz6#|#<9|)$4>?Zc4+AJ+YsBV+tpP7?Ye2cBAbIByf5M~wN^E9t?eXd^6g>P=o`+N)hwF*P-HuE0FRfxd$i!X1@ z&xdD@Xa8WxCq^R=uo4#5ALeaAc$VD)cwrI`;AJr1*@cf0r>qT$FyrAb&}-NLB`)~) zf>avpox>Xquy}E!_(3$h&OVeaBQEK@6}O@KCErxaf2pzz#h#1ZCO)&uGQBXnqW0y~ z3MHMEkloDgj2_-!)YA*1?&1X+ZfMlK)SOD>;DQj$Z=-?BN5f_}t#qn9~JPK-JiPRFD6W}^w(BgpX}iY%#|?L*X}DwC)dA@5D1RFc^vgWIvtPVpU++Ha z$GaGO1b^0#X8hs4?xpVQXYg?0zWyI{@QmN>;8<7xk2-j_`tU-<{5DqCE^G4Cy_2I) z2hpd4@RNcy(PXAOTQ-d|``_r(8R*j^+r?_HkLl6s|IHqavzh<1J-X}Y@v>oxu&V6F zi~1vKetettzh3`W!w~p$s_5&_sUm_5_%?O}t&WD)(Vk%RoMgd*#lgH=QXM&=fj8b_ z=8^gSG~6js#}e&y3k#*1tCJCZg%CXnlO7$CL zrV!wX8P>I=y2(UO#zV55PID#^sF~ILNh>tLyL@ z!6KTj7vq)qTB-(rv0g%}bQ2w~TWGy*rQ7s!dPc9LSM*WzzCMP&(8t07K8k+PCs2nz zQFwZ-$kivo2|h&()TfHU`ZO_0pDw2AGvNH5DGtZ=-CDc9(`=+{)8eqA-{H`FryraE4~rB2artLyYT>PG#px?jJip3?8D=k*8b1O1Wu zL4T}%Mp%b_OI!ML?dmUdrv6H2>#ud8{--Y1-|Ff3QIUi6_jsf1{ z^#a0P)n8ceSwpRltRm}EYnb)9HQf5f8ex-FY=^CpcElQm)n}=lXN|TCtTA?ftK8nn z+Qlxn#@Ums3HDTLqCLl&WFKNpwvV=^*vDDB+UHtR?aQob_LbIj`wnY{{iwCO{RG0E zgWSv3p7tl!UXE++ec8&2wt3`A(yCsI$sC z%sIxYbS|?NI1gFX&MVeJ=WDCZ`OaGG{A|^`F{{BXw;J8K))KebYH^oa^WCGYdG7Jn zDqd{ivk`;vvfg3l1w;vNeXe=!P>F+SPnn4&k&AnOjee+j0%y_@UNDKl;w_m4DpM|_ zi{qigaFW3{)NFYc9UYhJjnfnU1cImXaAkvEa+E4YU-@ZZd+dBahRBzn;q^&u`{?P3 zbg|%E;A_$MCvt$78sa&?=La4(Iq<9l=~Q2{&J}<6^;whXazCy$i_Vr&Xb$QSmS3Eg z4C`}z0@vil`V=pK^6Qw&o+@H~T&E7Njv5}Vas%;Aq2pchFNo0V&ei68$D#Gk$1+F8 zu=Kpmd0OUz3ez*rtuhZ(8olCNYYrCDdHs`E7J}j>pl}Yu%M>ODygh{57<0B`?a6O; zZ=+dwOP~WQc$-gPup+}%JfbPM$N~LbSy*(LfbDo`Tyc1sS@I>K0Am%#i@x5!VqXm5 zVTyFdH@iz5j(>b!G`V{qczzg&!7i^Be>bkjt3?xv50m=$21RG&37P*sb_cE^{BGol zX}^$(?saC|oY^F^okk`ov7;6*Gcr9WL*{l+cGuv}A`=bS#m^Tnk|Av>88}{Jl5gB_ zg=KaIcgBWX2Tkf8hETu064mv4G10W+{HQzB7E!#ielKnZ&FvXA*+|K%`kfMW;PA=> z^{A@On(7joEURBp*1&DFTUt`X4%O9x?L$9y&x-88mO&T2$+qLe!$XU<(H^^)=EVTO z7a36fl0UJGn#9{MQe*P~hp6-j=JYNX3&z>;D@f7A6{N7ag0vpr4~U248^$`yN=O9p zCcf29Zl=Tq2KY&QCEp{(NqNxc!~(a{ ziBVnB5DVT)YniBHF9agY@IxSCLaJw*%S)H8Rd_4^tfT{i3tpKxUObLGYb_16PNE{~ z6q;t8N_$$T(=6*OI>pQ^r?$ zb|)qCVN@(?pjom2l!F888L|+ROGo3IKfSRd9iTtqN8b8?3gY`dhZ_UOC!&ueOcSX1 z5j7|_QWD3?%gvkTie}NucpCT;gE5KzRh|Xpbl?>!C((WwNBAld_lE>4aY+Zg-3Vcv z7$NRWagOPc+#_n(&U6<;kHGh~{T^ZEp-1qE?<})qKk)cO35c@}4ucp!kS7BkJbaQ5P+b)jDt8e#|Rv`u-o>UpP53QA>l)a!8z|qpiAt@TX@YetO~q*3 z+uBI;cvM=OsL8sUR$2GZ$-rk=Tj^Zue!9+jfbO;)r01-M=w0h!`pJ4kxYplAAL~&u z(t1qHupSq4ttZ41>q&8p^^~~KdRkm#JtH2lo)s@x&xtRs=f!W<3o_SwQ4Y0UlGChz z$OEjGWs~)aJQlBBtg~K|*IBR2hpac`OV*q6YwImV*4wI=^^O{5y{mS!-cxg}_ti4% z19iN0gF4yz$k^68SjydSk*S}tqempE32HCdA3Q}<)oyYCP7G{17r#9)5T|_(Tc?CY z1r@ibpnQv(rF@Huvl+F@*ilRHZIj95{zh5GH1?kk&m)j{y@HLUL+|m#`7`DJic>-y z+U0l1pMCc*VNGEs@hb(snS^sh=Xoq*?4z(3Ra&a^;Z6eEZ)z_2sU9|b?%xXkP)oaNWCsXOyYB>s$(gG0_^ z%qNlfhYkG7NIw;of#0+Y3$qCBml zJX}!@v0z1cprYKZD0j;3LTiH>I9!Eh57+p!@Mq%>yZggk{CWJ~@snpB155=OgcyVw zq%pvao8evt1CK!_g9w8x2H6av400I6800d@W6+C1J_CGiYPeU(pf`g)4Ei$Y$Dluh z0U>-bC^vpzS}q#qW#CYBe#tN|42&7XCzye^TYLr+%)m<4XD|Uq;yM1P62S?LJryM6 z{iM+P<-OucBPTbM=i!DQ^v8Ntm*@LrJWqAyPAor`S6yy1sw;Q>JeR~3m{fcPCIMf8 zA>)E|H zoO1+wcr+I?>->_KT|Jv=hiS*BU8Y^14lo_?=^)cVpAIn{^643n8##>Av2gvH)J}KX@*Q=GHl2& zlOaQfm<$>+$Yj8f0VZ8Tx=do<4}I8S(l(?G(u8xc3FSZ&#z7VfSs*kM8iX>@On$p$ zvP;goWT#6WIulN&mQ2LxRz`JsQLM-mu6$T*81fUjprM)z5V?@CR}#6Xp}IU5GSJ8T zIu=dvVN(kb=2{rSL8ygzkf{X(aV-pu<;DuD%S&SYVuPw9e{Coq6)TC2 zVygpGS00Py#d>pa|JdMaHcatg#}Cel^@{c3-~q8A)sah+!LA=1g@x&$sT;~hdMK&abL%wi?lj2|`RTsHD865V5GdZIijEvT?J&k8H z%@6jtm>i5^)9GjtbVFyvGC^k;+Kb_$A%-98%#3A#&NOr+mJT{%=&Ts717OX@ zGTE^(=xjqrW4IQH)fe+~VnNV3hK|Jopks#4jk%z64V@QrK<62{SIh?8%h36T&NnpX zEAR^pU1;JK8oIa9+1t>4Oj>;m-Ph!yuc7;yy!A75f0O6_h8|$bG5~baLBsn*x8Xfv zNoClB9B)TyvYkWI>=?fBm`i)vc{I!JMRV+YI@m6tL+wJUwtLeeyAL(med!3hAFZ(a z(^2*SI?f(Qf3kO?Q|&=?mOYrxvxm?+dnjFM7ts~=FuKMbPB+*i=vKR!HrXTTUb}?u zw@1+mR_^V=xuvv`oJ!yPwjE^g*}13w|5mouxq=!y_;BU&lIip zp5i!rFL9c^x478eN3_}d;xjJ$i;eaiald_lcoLs>dBdJ7-nS1DpV{-oKk@$aPxhgr z!(JejT_uBdwal~^N?ae11$M0*VAsjP_99tqFP3BNC3suANlvqu%02C6a<+YhJlJlQ zmG(-x$X+Fv;tlSV_G)>oeUv=eK3bk-uaW24$IA8gaq@Ee1bMA}qP)dkEAPTv-uKz3 z$S3VT%UA4EMQ{TDUeK3DB$pReZF6I6wL zp_*@BqE4~@s&2P0Rd3suX=QKFVf#v5ZeOJchucqDt@hK_S@tv5-|T0tM{o-9uKm2V-G0fo z?3eAn_A7R&{i?l>{hGble&0UX{=mN4{?LBd{s`2^_P6#YPNw~-Q(}MS%(6dsn(VKg z<@P_F&+Ki^5B7Ff+P}K# z_HS-4yTcvikXz~qcakIBJssuFb+lXUSZ|?J;`z1zc>N+QYYwM=Y-rloUr?V zljc6{q`R*<8SY1p=YH#Cy1zM*K+wqw8J{b9K@PzdSRQ_Z?rnTU zz``epPZN*IB2f9b*14Y?2C4vW(k+q0vFOO9ujLZ6+i&U9^#yVSLUZ*s_$ELxs673k zu9PD|^}@N{9#?-ULvC z?S14+aw4c9=&yInNuY-6#W)AVcM_;bAE9rNQ$P*FN!kFpE2!bt;cAnd3TlMas&16i zKo#4TDwNYfjYLnsP3{J&1bzEjIRn%vXE|O0-d)sUdk+h$#4p2)RF~H0l%3at^3;DhN3808kl}7YO3@Vhh)Za{_5{E~re(3V8A$P!aM1 zS@K{|S(FyYkrkk_DHzC;hk%Nb6DYuI$re6IssnxGd{8m7sGLK(gTAIb>{(*@jsLOI zmOK1InSYV>d=oFXiy#)`J^x{M6FVD0{+Ye_BK>q!3GcrS&g=`bw-;WQ*aI8Wcxb~F zsKUa;I}o_thW*ITif)Fe`Ir~JlVD>59>1*Q+=RD&ZbANTqdvepIUAFU<}iA=d6fmS z{qPB{TEq@gVf;6?c*7x$@NyQ8litIvY;<#%e_ztineedc=1&&SRuizLdT($azF3gf zhO_*_;xb)Sh+9Maz6)PeYoozYd`N-6X4^(N!|kZE7?*GJvEKJz68qF#{CU-sVaxE& zGL)iC$;HR7+;Vc=U9jOe4xbMnPX+D-wE9FUaVOD4;AwcCiSSwO6jQeSk+Go|vs^ZZ z`o!N-wb71aWEFTCV|RqC2E{#TH*=oHJ0Y{>LVRuZ-bO+pqFIo&A%K_e;tDx3 ztM`n4Um-t+IFT@i`U;uKuxHJ=jSly65*oW^ku~Da{RaO4KSw8)Ks>5-cNGa@$wdXZZIGb6VGMk2QX zW<_oX%#LgXj7IJN%!zCQj79DQ%#GXym>0Pluvg?B!2HO)fCZ7wfQ6AQfW0GI0sBPm z1MC~QAFyBK0l@x|2LT5}9s(Q~c^Gh~$RmJ*B7X-Q9C;LQNaQiVp^?V{iy}_|4vRbq zI6U$c;E2f6fW?t#07pii1uTg?2RJJ7JYZ?$1;Ejf7XimaUIH8&`3GQG;o z?J^^ugN~RM%!+&gI@`2kH1Z|r9MhVy$XB3qO`GOLz6RaPv}}Il8_)%&eG4Q11l`-T za-Ybzvw1Ld=KueHeF@C-Nhp8~F(^ z5cwG}82JS-6xjxdeMBA#(17ZP3NIs!mOkEdS$SkTYyXwC|HjSR0rfc2hJGBWLe|a_ z5(qqnNGJM{vV=ygEMXy9maq{oOE@N?Ya#~xh(SMM2ocvheviUW>s8>LToeM)(@gYq z6FtL3_e}ImKYGNEo&|)=WCI1VL=-5PC31j5St14$&JwvmX;~retz zC~^n|#-|1R)*f$KdxB~0iKewDnbt;opz@|8g!~mP(C=P>vUl{y= zRAMYb7(4kD*u1a6-hBnO?o9z^0HFY!R}_GAjskEwPyj9!3czJVcikNb-E|Kjbk~_c z=&pMLp}Xz{gzmaG(EriydK+Eg*_*{a70NcA3VvY|69Oh{&A(lRKig%0!)FJ;_5dsf zHUJvGGeY+eL`tO*Z$7ZEl0qeZ!V5>nsZ=IHkXl!j_{}Kn-X#60q)PmB8g^Z}@Z)*R z=)s?ZjC3h8GKL)^E*xi3b!HLCV>gHcI3pa;wb0O-444C-u8T&lMgQlmKy@v&(b!p! zJqvBpGBu2lITdbKooEqkWg$&&nl70%g-b^4nMtk<(`E?3gtL_QaD@5Mk0N$dozv)A z=NysiTp%xUu9KHKcj}#-r}YVezIsz&kp3nx!M!4|1`C!t_KxKuF&nrPtA-)Ckh34? gLSXi~Cj-yHUBCl?@o@lL^T@(Sm|W@yd@#BH7jR#rYXATM literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/Manager.class b/build/classes/javazoom/jl/decoder/Manager.class new file mode 100644 index 0000000000000000000000000000000000000000..631d432a46aaf04fbeda4a109ad7d97bbb6c3640 GIT binary patch literal 589 zcmaix%}T>S6ot=i)5gYDYt?RwP!~e2;B0hN5v1U%>O$#$nhZ51&A^y;;aj;9T=)P! zlz1nJL8RJ1?#%r;CtqehKHuH}oT2TZj9nLdF7^r4i!ct8OG3GKJSI3p9Vo)~D2&zZ zVm?vkK~5sBv_{&O(O8<$=6TUc9>XWX!DuFz@>%P-m_;H`K6@B(BV##LWe_$cV|I71xiqJ4>u9vE?t!4RD#Gml)^}_h-I<(;Roa59o*5RN+=={S= zXxgrbWIPpjlbP}p9HPW$W*-N9MyPPCawd2sUMu}q&P?7=_LKG_XBNma;6k(_k9jX`irFC%Z$aadv z0s|Wo3xWwTuykQzp%Mct5`To>z(C7=PN+IDymx)?JwE5$`+gpL`wn0ZH&RHVkb;h) zyk<4?@BrEm>Lqb4iR%o#YfFzzv-H3!KPfS=GDCXV_ri#K(K>hALIrw2u+_!K%l8(m z)l$Wx5)=mgj^jDe0)v{HUT4sj{Vl=JS8+U1Z8vKoc*tumRWcRd=I%NV9GQ2ETD0SY z3}clB-{sGJzgcX!#VuhIM^Id=wd-{e%##LhwS>3DkjRxSsWR#Z+XYWVHNm~GaGwXf zDIyV6DG*)K-r=4nT*B{4^E6C{z~ar8D-n9GykSZrMhUa%ICSa^%7#g3E8_OkRo?pN z(srE|jg~W~395%N3*iZBJPVviY<8SVNLjL~BunD9>xU$6*skEg5hfjqXfurb)@I%1 z+YBkoZwIz89l0f=J9I%V#K1}P890xufgudj*#B7*L%-}6UG8nu>Kek1v?+S*qDyONV zVT9-z&SI2qN%saS5)>!Zo7#}pKluqG`I#Z@mBwcGp)BM_$G$?{JNzY;R7j-^u>iM_ z!foQ6#{}-is&m9MOvcY)jF2kDamplivg0KF8i_}fwFx>3rl^{N@`rw4zsXfbuC(i| zL4Ae#_N}Ie*2ja$DOSpjS@|0l8=?x*>H#D$i+A= o;38>AZ5?XbSYouLOSnumxg`ZT%BN}Na(nr1ydonZW@5zEze(+;+5i9m literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/OutputChannels.class b/build/classes/javazoom/jl/decoder/OutputChannels.class new file mode 100644 index 0000000000000000000000000000000000000000..6ac2c8c0db91f724ab49859dec740ab5a48f0e5e GIT binary patch literal 1857 zcma)7TW=dh6#iy+?R6X{cGDy!_oOW}aY)Ubl1oYACXK1%v~gqzAj-yB5~rKp;H;~{ z3qm0A0ifjzmJD=mkbK z2rAI&wS?03R@K|jxxT=q@!Z7!LpQQy6-eeQu3f0@Z`suiYs=wDSKcdIPRXiP0-h7%Z(W>lIn3=5oZP~{xQ-m#p8>P~IncKxM$ zW&6Odc&@;?Mo`hOR@|M%TE$_96G&rPpf~5Qhkcn#`6DuJkVaA3RJ0#nUG28qoCZza&KC09Pb!TMABZ+Fc1f*S(e z=Ezw$u_B( zol-NKr7$TUXOmnPaFI-pa`!0=u7Df;-_QaXW%+$_zQi%Yae-s<0mS_W&^UAseU49igrN2=ODdA0zP#!*x7H+t1${Li5QKNO%+DSjXeoz!NAb@I*k(bD7u# zhl$9j&Oa)^7KS<22&d6Gls-mBdf-QN4t#;wK=dng$Sk^&lJq+U1gyRMfdgJ+VXw2) zHz@CI4B}12*c$*b3n>X9F{MP5+?~+=X0T==MMc_3ewlIvGRaxW6iNSp&TqNURDn@- zc&DkDNC+)hWc~6wqh$U`dHHjgk*{GGvjY+)$T+Ut_t1fNnzBrWP#yF>d75PeTKl|A z<|#Z)D|`3}0}Re%`rPDiNPULB$zPEwOp#48ehJecqdqs-U<@>Rj~Cx(r5~{N583LE z6nmOrojAjPF2l@^u%~K`;aNPViWwpO^SmACrvHf{LD}ZTAB-2ca$5RBb^BP+1&^Sv zTMRE?I;`uKq6elT(%XOGCZ`p_V!Z literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/SampleBuffer.class b/build/classes/javazoom/jl/decoder/SampleBuffer.class new file mode 100644 index 0000000000000000000000000000000000000000..64b551e28a3fcadb204aba7eb436d3bb24a3dd15 GIT binary patch literal 1840 zcmZ`(O>bLO5Iy&O#_3Cwn5HHEfV4pCIEmdr8UjrXB$6RgARt2sN|E#8JSQ%W?b^>p zP*~9&%L-PAMK{^70I3lYDlA#>UyxX$3e}u@uW_u%NXh+}H#6tVxikLb$uGYFSitMU zFz||tS0jkvx?Gm!azidTE8lqn>vt|LUK4P3+vRf56fm|60!^3FjLbkB}%)7$e+{{p;04}TxwbhBIC7b zJ*e%62Q1ugG=kcmD!d>Icf07c-0`bzRxB7eqTMtGt8`Lp+j;3OcrnUcM4ta;sWcB} zquz2cC*XbBtb{>Pzk{Tq#5I|j`AgM$i}_gs6M3a-;5U1oBds7Tw!(U&Sg!i}0>g!R zyIBhI75N6^{c>ic-X6xWAP^s<{f0*OFpM)EJdAiai%}0_7!{Zr6w#j^7ujY88`0v* z3_KY!iQ1V*?M%h}3`h-8u21py5GG^T!0DeM(&G_4iX6jC+mD8iVWkttu+#BlIA$)H zc!2TrLs-e={f&F3IO_cM6XQ&r<9eCszzj3Z5_68W3?`AqGnmH2xPYg*%hM!nLY-nf8Hn>7h0$SvkKR#C66G(O|$a0r4Hp$sP@L(uP zjxsJONKZR-fdpv{3U*Eh-xwJDEXio?`jO2aPa&@i48GVyo+nR9+m)J{nbX*B_JzAW z;+ODT7kh^)O7&t4H)V==Cb6mZn;CBQ&W3y)EyY>oxxs#TmkPh9GEeE~p7t?3-_<_G z7rU&;T|r8tiF5RJnQu!Y<;+EA!Wo--fR)(^=bj_3F4-6CsQbc?_i1IS@?RUHk z9f4ou*RSs{T8uW66V_%@G0YuxepUIBimUFVG`ko0fM_4FOScijO>v-H zRqWwI1geg==$T_jOp~)k??v|43~Xk}s}6G{>t2;xy(+iZsdKE-r5+j8iL%#bVRsnn z%3gDk<@@ljgG8Ujpv8N`_?t=!TxDPDUbx0+Ie+3rcHM!u70vVdV~>d7P{>vnYAke$ z85uq(McCI1qSp)8I4?TzfUhI5C(Y%!RJJ>)@i+%na8Um|8Pq660`9WLFDTkw4&IkN oeg*}TLn%2-c44F_{9*YAhImXzL4E&2{a?CY4W#=rGZ|R=7eTfYf&c&j literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/Source.class b/build/classes/javazoom/jl/decoder/Source.class new file mode 100644 index 0000000000000000000000000000000000000000..d0c60b7e576a494bfb94f88db85b758d41a7fc66 GIT binary patch literal 432 zcmX|7%TmHX5bTAJD2Sr?1oaFTa`6kWP=i*m#7C7LtW6j&uwsm%~N(n_SL(JJ8N9f^@X_++>)2qof=xCAww74Mc2@5!aTj|$mCod_ JpKVB4?GKp{U)TTu literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/SynthesisFilter.class b/build/classes/javazoom/jl/decoder/SynthesisFilter.class new file mode 100644 index 0000000000000000000000000000000000000000..b5eed6d1ce5de80a97e5d459ff811d2b1a93e930 GIT binary patch literal 23737 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 literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/decoder/huffcodetab.class b/build/classes/javazoom/jl/decoder/huffcodetab.class new file mode 100644 index 0000000000000000000000000000000000000000..8a93f556dd04b66882245bbe274ef810d2f3ac9f GIT binary patch literal 50616 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 mcy+p>SKu_a|^S;!k4u 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 B%a{NF literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/AudioDevice.class b/build/classes/javazoom/jl/player/AudioDevice.class new file mode 100644 index 0000000000000000000000000000000000000000..0564484ebb337391e224a3c3da103ecbad0923df GIT binary patch literal 447 zcmZXQ$xZ@65QhJTSriv=-xA}=z=gSZ^JIc17$PJj9`w`<1vY7>C({EikLJM#@S%*= zBN`G<)m8QV)qmCJ*ZT*63mk_y2yrOjnUoTNvwCMD=km>%X*AK%kYY2WENcD4%f`Jx z<@zP2G*>3EA&vx2Og3&Nln+QIw%L=JoKjBN9S18AE=C9h%65xC%Js&Bfd8DSoEWG- z_Sb+U%@vW?4)(N;6)& znhlj{(OkvUbUO*0F0Ynq`O2FuQLJ%5q-8RWx`PSDxxo3d=Jy=8jCGv+?-YT6K#5NZ z1Rnc=$C=NW$Mpaqze-r)&MGQgWdB(IM+DfwCaT=6VXL6F7jXx>JV9Wun6v*4bbMx) literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/AudioDeviceBase.class b/build/classes/javazoom/jl/player/AudioDeviceBase.class new file mode 100644 index 0000000000000000000000000000000000000000..e7d7354b9bb51c613b28aa7237938b3243938a54 GIT binary patch literal 1728 zcmaJ>TTc^V5ItYJ?b@II)mJn= z`evdgiir>Y0DqM6%wEcZLP%!59lkkp=FEKk{paT|0B13gM;lJ%kjH5;XYw>>#hep! zUd#nC7sZU~xTIrD$GC##*PNe`i%JQsJzi-WYjC4-=w&l%ObyvQlpw?V;8wvv(YScXI zg;OtIU72(J8_rYLcCJ|shougcHr(6HMas8NH!b_|U8@!q$lrW!JGG|kR~tGmE9{UK zE6X*HEjFCyRM4 zqiKMUFbB>jt&C_>@;u?hYa*ctQUO-4$H~JfPv%aR5+ZR?*Eln*eRFFo>g5aPt7hl zc2l8m`#gog*o@-LBT+Zf27SFP6=~*gK>64yPIEE8CUcL^9Pif z{*IKXz9aoLNZ3Q$fi&$fG@L*VWpwdNAee$8_R{yWz&^qVoK2siFPdx6-eH$HOfa4^ zrnZKxpr#?HMPz74!B;}GaT2>s8xjlLjbUPayjK7BWzHo%Wdv%mEFCk>>m=MWpp+I0@dLk#!wiFVL~5C_%KJ85F*RhFBt`KL`Kmsk z90TEz5`gogDg0TSrjmvMG58bG{-T|QQ=r% z$UL-NJ6K^zm&#iV+L~%hhO>3sm5uIBOL{Lv%b`fFt}Nkf3C|9n*)o$BXkK~?h$(pbN2;G*cQ1Bz}%~nTR0lgS*2EuytOzcJj;4nFE zaNOj$MG`et*CVm*a9k4!iDUT}Lp}oo7&LGjOB{C$+{KcCd$`XqdGZJuW=>9si!hAz zx6M#YLfg_Ji+Sc#>ZTq#<#4iOyCZC*H_6x+X{ey4x^6oGN~Ekij@%Z`s%1&v|3}K9 zZ^%oD6#hzijcBMdNi!XDO~PL^i}AkJdX{4t4DA!QKjg}{>rq9EhB6jAy~h&|RhvSF zKGE=(1`EeSYnGl&+8OQo+!wGHyZ6ZTF+sO za3S4i+B3A5Sc6ry`JXTKyNI3q}+5=ahjR}YJ`6R z9qZKK261m9kLUDf(nJw2qi$Au{Jn0%N*KrasKXK_aDnhC%FW{<@#?sSOSnuO7Kr@{ hCMj~2Fa}b;k>k)g3Yq981C%|5Y077~P8li8`~`l0Iidgn literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/FactoryRegistry.class b/build/classes/javazoom/jl/player/FactoryRegistry.class new file mode 100644 index 0000000000000000000000000000000000000000..e36fbef999773568d676a6d915567c65db610ba0 GIT binary patch literal 3087 zcma)8YjYD-7=BK&&8F$5w50_C7E|Ps-iV@9Y_ZxaP*ZL##R7^;vTe5{o3PoG1}~uU zC-~}@e#KiDWduiNWX6A?zrtY#@j1Jj5DH3XlC!(-KIb{_`@HXa&i?Vw&-Vblg_{w? za7xAL2m(0Oh!AGvFstHBgx6DYn2TTvXC>f6Im}DjIThzsT!^4qVw&+$7$3{)MLB#D zK@_@Vz7$4UK4j!XL&bu;E;iu2`FRv3>VmxGA-kHDR;@RXC+XeEtOB}**V=d<+E>8oF$Xo&Bb!jF>=+F1@7y|K^1kO2$^Dn_vB_%CmcP3U< zWL2;{BDJNdL;IrPcu3aPN!!fZrbFd>65Si;51JXqD=7I^PgS=xC#+J=uysE~rD$Fw zAh4jT$f>YYUcu4u4P)Zn0`VGQH!g!7n`-_f{IJYi!@* z?O@(~-^8ZynqBU28=avS3Wk*t=zqzKXR^*#eFpEn9IE$eJwEK@J(JwSo(Gb#quzrm zBeza}pY=lZ?RC-B1ok$qZv~C~N6xNy?_GWf47=`a@zB0|oJaE4 z$tAeJ0iSb}7|9v&Ih&s28>LKRb$pQ;Uj%RR+eY#otob1kT{KhFO|-SNwN}tp!R9+?zb}pl2bA82 zh<7M`_r5`_uR}Rd;aAHV!h;R5hT}ICvG(LI0^0h2N3$eq+tPmrTkrSYW+VgDZiEU3 z-GmQPGayArrlH~lnsAaXou=zEM4lz~0@3r-=R789OW`7Bp>xc*;SJOAF>)QkJ7{2W zbYT!fZn||p7K&LQI0$&cqbK$acY=v=BOA;Wq$fMd8uIAaOW)ybpC=^iW+&g?NXGVutVS$cF4O| z1b*cy5$f$wC{-*pv-afAz6WcF461z(VycuWz>=7vB;fy)d-dcRpdY|8-(MyohgMkV z;AyrUSNQp9)3+iEu*85@FoCPAfimT~R+H*5XUP%`5#39Klxig4ftyD7UR)!q$Gzoylf_MSjScnS0MY=X=iio^v-J z{qOy=09N4ZLfnK03$O|giP$gV;X;Z>3_MzhAK`$A#|n{$gR=Z%13xkFL?MdsQ~7>U z#8V;;iTIg_rwefyKQDrbBO;zL@CyUa8hFmY^Z9t85S4gQ4E|EYOCny*YdzOWJfK+< zN5#mmM7$!Ozm~UG!etbP-^N5JoM7%EIsDWdJ2;;$gydlruiFi}Q zTjKk;f!`Z=TOlu<97#njg$131k=>EeFuxPAa5^$H9JgZOF1@=x;zT;_gw?Fz?;COy z=H*mgI})>#?a9x%E*YcO>0`B><_iohh?CR(c z3K?$q(7bPF7tbd9`uOgTOM+D|lgUzx|Fx-9WUoT7zGJcO5GwRL0}4fshUabPyLLrG z(Tt)+za1Mja4WI&#YfTuE|wx%y(5{nrFgo_h}A!ww`ehtnoDpxwka0sB5COl-y-2F{rH6V93FlD+d-L#~R^+(cBE zHMN;dLxsj%P=w&QNT{$-)FCgK<}@poDK2p`K@pNUT-;Mr3#bvY?J z(cd;=$MtBM=?=+Sp+#*UTgi$w)tdMepNaU~#6R$b0QjfEqU?aaW8iv4n+)C4)SPgg zwMEjT+l(npnf4?j$y{$RGBe(En>00<#i_|zosH?TZQdU=wq?W_9&y@J*8L+^BFYw% z;p#4~8(`wCIJ+XhzP+Pk#|~-O8nJl!V4tL#!b`aPu{%hM3K>(_8dZ<(0QX z#sWd;??AnFd-Xo*+M9N)As!)aVVi-k6q<8iV6yLy{M;9m>~o$5(@rGCDGI3EX@+ZH2Uw-KLxgO`s=CE&iTaEsXWfe=ycipcyYDa4znB7Q<6_TAsI>i&Nfa* z&ZJ;0Mar}1cy6;DO>vmYOul4vZK9eUZA@Zhm^q6n+>isf8?lT05|T6EOZ2z&4q8#C z`MdP;h zBbU$VP;ACEl&$=_o%@QEl{nsDUP@EEVe2RR|KPSeWH%c^0UT?-4O?7#Z`Pt=-7i zT8l#`;lGI5&=`W9p$X*mG>pMGSW?1Ae!xGD0zprmcWBtJfzP5N&>*ikf^Ff?)mAJZ z*h$wWDzFK+=`a?1AUgGFwSX9S0eBeh=9ixvWprNHIf0^{GP7YE(>6DXGdD}cTBCz5 zZ$k+>wUb)+lxI4KX}Thc`##)>t&~b`7Cu{PC(5Uf&sp?R{31$2jBGmJOG1G$lu8z} z!@84Ubup}NTHA(l+?5GS^6J(^-h=~+c;vJyr@EAi7d9pDI?r_jSA`5}s#bY=;T~<( zt+ev2W}Dz8;+jyBG09Q4>Lli}_b_8~;|DNbz`Ri7d6>elllsqp8Z&*6kJBhuIEJ## zjh)9}YMDnVTNhD0fy$n;DyF&m+zDFt@n4Q*nlWMWd$#^=VFBHow4;>1d%0@yznDIL z4KTz(EX4ghx1T2+EXQuF!E#zS#>X^~HX>U3I zda#4?7X7x9Qey7GJ(P^s%ZiWn{66mWay<)q-ym$@2W zX=9RKRW%1$^BVrmIXFmp-NC`Zr)FYq^3ZW=xjb|0@|Z^I@~bLS?JBR@KoxT#d~J&j5(nN<+J8l3a>rF=22&*x^q*<2nFPS!Q=YF6`DGApQ;3m|p{^<5Ulp8l!2j)0 zENZAZ;8QDCQ;iz(Jw^V~Zw6*lCUs4j)HQjjE5MCj>P$}eG{Xt%Byv*!7p4J6g&4=k zH8`~JN)EkCIH$;=aShHLAXjimu_O0*`Rbz|>8C3HYGKR;4qHA>V-c@W)DJzrx>|a` z?RNJ@nxOs}=Hx7=!1=5KP4!X=AP-M_80HsReZ8})rs7Ah$T=$m8= z4W;=npDE}JHTWCOj-io+zJY&Bj$tmxe`U`E!ad_yT6W_Yma$Klk730)R&q`WLF>`L zIprc;v i1HN6HDb-mN_u+?B@^O@H;j@fyMR=SSyrkw!dHx@G-6OaF literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/JavaSoundAudioDeviceFactory.class b/build/classes/javazoom/jl/player/JavaSoundAudioDeviceFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..ece9467481f3d4ba6d64921e4c7ee77933d19534 GIT binary patch literal 2193 zcmah~e^VP(6g@8qY*@Ah0tvJ#4Xte<{0P;GSZXVTP=SPMgD9!z; z(`|1{x0(jC+%|2~yCV=EpV$&e6r38heI?U2Hkt>!hP$cnTGXUUPF1(Ibk~&sLuJBy zY&HaD{f&NdoP+$nm9Ja+GsDfVaqo)Lv}=pan&~VXhi27S(W{>0J|m2Qs%z+;5wQte z9-ruxDB{DwnDJB~9br~{S~cpP>DV-mMD%3vMBg)tuIspxcg54IPs(~dgsz^%kwE%2 zG^+=7OJK4yqE6JfMZ9Jl3UuUfMnt#e=rzL?7>)ohSbC#T@(rAq`)r16bfgLbDhunf zoTltdwo~%3(lh()f`(CC(r^J6HGC+gDNG9tN>eZ#C#4X$Cbh?%tQl2KL(s~SY-+@D zxE&tM)>6~7d@fg-wj7bH=VXJjwgF~YA&$YVtcEY}rCc6ps9;kf{7N9x&Kd2Vf-MbS z;~NFr8Xn@2fKTff<=f{?;QBGGnSE;}2$)$T(^m&n!?*Y@;{KL-78ot)w(WRlF_px= z*RX?20#}bQM3P3j8g`7s*selk6nIkgdfl*j-lxYS(-I!+VCtf0J?sbP@|6Gm-F>6# zExgG;={Z4GfuZmKL=!V(x)TE49{p|T!9D`XJ;U>9aNw)3<5a>07>&)bBBCs9>7OCFCSrvO_h$8(Uv|Kb>Sm;Qi&Bw0uqa5`G|K^mZ6l1)u zNB9cF_~U`2bP@01T?oAAYg0&2=6U3rrDmRff?qXv1d)sXhS)E@-S;lpY@xRW z?Fi>yzRAXv{d{fG=<>fea2|1P3xY{<9p|%^LoX(2ou$_Y$nf#IfjLU^KHx0c zbIlN?WD%oHN)wa_CuEUiD`v@@6GLqVvHzGdreHuJX+di1r>O~f4KqWQ-Yblfxm4Mz q5<4^89spTy-~o|T(1T4M7qd(6aOW=CBtkw_)CPqU?1CJ?kNyX0D;7!s literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/NullAudioDevice.class b/build/classes/javazoom/jl/player/NullAudioDevice.class new file mode 100644 index 0000000000000000000000000000000000000000..d9b5d97e90b72dbd0d4c6c01aa4f53dc21c76c3f GIT binary patch literal 404 zcmah^%Sr=55Ukm!uF=HcS@3aC5%-dt67Yc_EJ09mpKJ#0FxioP1oWG{coIDL0e+O& zGl~WgoI`h4P1n@a+xyEafF8ODe6(Y9Vyp^8M^sSV7w~s>hXTQ=87qNyMui$Q(~&B# z1up9@$-!iWPo#)|hDS+VCo+KM0L)|}G&RxZ1(l@GU}R5}0v literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/Player.class b/build/classes/javazoom/jl/player/Player.class new file mode 100644 index 0000000000000000000000000000000000000000..0acb68760b9edb79da97bca595f13416c838db32 GIT binary patch literal 3461 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 literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/advanced/PlaybackEvent.class b/build/classes/javazoom/jl/player/advanced/PlaybackEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..4bb56bcabf9342d621f028d07b14430f17a3b50f GIT binary patch literal 1251 zcmb7CT~8BH5IuLh{j>@~#SdCPkV3nKt|UGwF(C>`6C#Z?yl=NFZr!$~Elu<{`JlnZ z#0P(XKgxLK?kWXK6ZTnUvPx1Evmsn_e+?ZEyJI3K;f?X*Tt*Y#TVP88I2 z{<%W@ZQtpz&G1_U+4j5s@P)!w=_)9-TKP!9eA#OeXl~!{daqA9O|Rc@ngKHl`#skQ zj-0+P=O}3o-}wWD%FH>!vgx?*cSl}#C}fYlVU0Xvr7|xcAA~2fr01vjb1%G1ihrUo z&Fo<$O|?{>IqpAk(!}}OY+p$d5hS(k29cg5%tR){+Viz4=Pp;3rDZXXl`Q6v$s&vE zS=^8)E#?|B3guawJqM>SFST~ybdT+WX4`Xzc*JLv;!}$gk(i9q0!wemH0?Q1ds3iJ zfjGEHyTDVxI+H$UeTTC0V;ELtjF?pz!~Ckd7HOA=53I7XNc=TkVI7MoA;+v0_Tv_- z#k2&YIdU)nrHJbsFVKqCD-YEROhqh+P7xp#b$1erI;06o+(__OOh^oT03U_8 zPRr7z)RM1#kMBA6;qRZ%F8~+l_^{FTud@$rLP(6?#YP3xyfV6upOvO-c2W= zEFMLe64DOxNTefCDC5sTM~_v>&0-en+o-_< wtkJzW3&1*j@)$O1#E>s(TLxPs9@fPD+2fpOsGHa#OJA^D;%JFPtIoai3q6{G0RR91 literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/advanced/jlap$1.class b/build/classes/javazoom/jl/player/advanced/jlap$1.class new file mode 100644 index 0000000000000000000000000000000000000000..0b8486865244f7903838608e363747390cec4082 GIT binary patch literal 1130 zcmb7D{cF=u6g{u)8XGg$&2H-4bemP%ZZ6Kv510&OObE0hc5EmjzP67pGfhg84&6WG z&%!=HL4Ws;63Mam&PQlnj&& zR7_;CXu`mffjb741b^XXhe6P>_dUBGwPou-`c2icpA0t7lk9bY zoUV;x8O8#_5iqo`{FXrWvFp3>hQLbce;^&Fyd#j=3|dNHtm^veS+CPj;kImej7(I6 zru24X=xTou%*19lCrF1qpSGlF1sNujGTW1W+unNL zRNdGOeCCbTW7&LHlidNSSr2+)Q$2NcTR9E4tZ$A@Z~09xh+My2Q}JHVGGJS{ixmqN zMlD>xn1#GHg#B`f$jL+UR;j}(ph($q4%sOrNN72ks&w6=i`d8TSHHk`xp;zer^tQ#ltAR!K$az%U=iz$NZXmY7`m F`~>Lt6F2|> literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/advanced/jlap$InfoListener.class b/build/classes/javazoom/jl/player/advanced/jlap$InfoListener.class new file mode 100644 index 0000000000000000000000000000000000000000..87cf8d4730404f9c257a135aefa6a88ac6bcf76a GIT binary patch literal 1369 zcma)6Yi|-k6g>mjg>?m_PqiqtRH3xps`W{&+FFt(#56&h_`weYOzF1!a#@J=UuhyW zn)n0!QN}w!fm%b&CU^GEo_o)nGc)_^_xGOw)=-Qfia8ZA%tw&Hf`Z#BLYNQZjvTWp za#)mac^Q^eEMp}MT_x#}L|bYJwqFGHmg>X;p;xhF46QNtB!_H}|+_$h)l_)(sO)pk7d3{J(aYcM;kR4D_6t%+ zP_%r8{7CAvRSfY{+9H|OIFP(**=c%JQ8c6l5ozj*bX`LnS2ZNCrr?2whj_#=EkEcc zx9fV@_YAwf*)+_W^kYU6r5ar=seR9}C~!-pG(5%=1y3~;ur8Bl8aD7;!3zy9v3Xiq zbu8Bu7P3!Mfq- zyCm5s;euQ8+;P_xHW|3w-MC?23b}64d8?=}_dm<)Y%@c+F8rc2l2((=?J&${cSiLN z`%ZUf7$&mkfy6%E(Ro%4gW^hUrcHAHrAFQw@zEeRLc~v5YLo_fhLEQJK#YC~EFPC9 ziQa;sD~5536O?TrKo6iU=D&h1o*?jvi$y6l( literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/advanced/jlap.class b/build/classes/javazoom/jl/player/advanced/jlap.class new file mode 100644 index 0000000000000000000000000000000000000000..8733f91d75029df0e322e8341f2b8297dc661467 GIT binary patch literal 2877 zcmcImTUQfT7~PWuCX6F$ticqj!6JnKNxjw@v=uKkHi#{XrB>S^ImF;(k|qP9z1YhS z>7%de1F)L4`~m$OfnB(x;~N9JaaYXliOsiRd>4il#)6Jq@X4!J zuVgE)L+MyFa1aFpeYh`+MIB292IOS`4|LcD4x=OwM@LzMnQ<1&*<#IAj;eaE9532d zt)^-kx+jZH(LJvrI5Ik?A#|~vR~q(Yi;lX!Tv|}oo7RHOl}NUnv+OymT9o(ZV#vK; zq>m%nC2PfcTrQVVOLnSaTaQ#VW#v~aC#UjUvMOnME?GrKLv-YhXPvSwr;wU;t3{`f z7UY0h)o{SKcX>6ZDsHjt$YHBmAkhB*ILl2})m#m`XI(4zVA`s*$O#d;9P#<|;e{8A zwsNeJ7n|_k#EAK@#c68C(1!f!B~_!%yQZU}<9iJ~wfp6Vw`x{_Sh}#9uAI=Y)Ff6c zr>>AndRwF$Jhi~^T6Ij1Zfky_nS42>s$>-`31n|06)i*!VY}TI$!#5O!Pj8F#y^vJ zI}dLeL08SSs;r2XVKmCgYp8VyWSq*f%i=1ll>VQ21f=7eeab}ok$Ib>x^m0Lx6Q?t z@))z_!_Nj!8IvEr+8O7J>Bj|6U$gJ@er#z z9+`M7b`v`}-_+p3=m(03=e*fRvUbYEd3<8xN31YAUay~xGmiLV>zYwwpdlSs$wD&D zJ%-ngE4gGR8<|VCWP?jqC2ou8h=-)tzxz5dWgJ%(6eB*5OB(uHe5RHc7gbf|ePz+m z*V>i*`gVl)PxAO#++5X=5W_d=*yf^{c!FOjecPRo5QdHkz^^7QOC|SuOg!nESy)mz z_VcjcLtf>mztz+=^2kajwM*A3sI=USZ`J2<_7OF{L_JiiMLG_RWJFhks>*)sH0%v3 zZtJR0tqRJWR<(vUy))9dldmaZqmu~iJ1RmZj%-T$(Z)S|Q{E&Cp27#q%cQlhb8Dp> z-p;|!ny)D+-w*ifib@IU>p-%k;Bgr!d> zTSF+gfv%?*7)u0?uc7-XBGWGr9$!Px8VuQcP8Tu6@jm$kJ;($Mx*A59u6qd_Az%z2 z(&jX+j$?>oki;p@&Um!qJU2wkBx48&3ECdx7$(i*{I78Z{1OTNjhK!=Mu*or<6c@NJMV%sq*5*7();*#}O}F>Z z&(KlbmK}lC^9q;xJOl+Y4b&TsCMxt?|jS(gJD_-PLe8!p3jC#1iEx1>kxW5y( zi*|!`3<&0XXG5{j#2OCOadK|A~d<}!KP=`X)J21;;y2+f)p&vOMLf)fvvf&IF zT$8AIDO!{U+mr^Il;orIb7UEW6f#8OX_A`eJb>$LJg`9n{NN3+IW>NvdjI|f(J8uK literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/jlp.class b/build/classes/javazoom/jl/player/jlp.class new file mode 100644 index 0000000000000000000000000000000000000000..89bf2b16b4147bcb00f239d3b866fe19687e4284 GIT binary patch literal 3939 zcmbVP`F9i775+w&J+eG_5jM7g6amGtC0jC(QVOcO1J2RHXj@zD7>zwyy-n;jH_kDMn=YRb3 zFAo7cfsaB6A}zzbicA9*@LUL4-PAuM58 zURK1y^Fe$?jC?hSuLbe-AifdA3o2d=p$j*IcuD4$gLp;eS4HbJ8NMmQ>ngq#!U4P? z13mh-iZ_G!P6*w2OU11adhxal-&OIw5c=?a6+Z|eE{i|Jk7W3bDtjl7;S z6oiut`l6o5>iKkH(lRso^hpKvrjaXH+*PhC2;}rkUcs)O=}(IGUgiFo!YoCblbO6R zQO?a6=4E{*Ynv{l^z2pL%*eaDSYOQQD~73{)3)|}p^!@~WE0LRpNfR{8OsXVJ!of_ zQ%2Fs6!P2*=w`a4VCOd8*p6F^dX|olDcCV->8a<&^`Z;ilrjz7GRE>HOV6k1VE?v9 z`p?4lJ0t2XqM8Y z`NGnblAflg0pW+lNFZEdGKIugzF4-1Xy`c-1)=IYkKLL!tSgt29v>8R^z=GheA2nH$*43ryLrP(P*r@MlN0%8 zWPGfudb&I}XPCyU$2Mh~2u!q2V()rXh**40S)LQt@jIzrlMNE{fbL?kL!6=fa5y)g#j)bR#mjkz&IFOl2rI z95LeQc!Y99wg-WaFJ$9Rjq#}%$x3C4ay(Z&s$e|g{{1%{fsD*sR`En4v9z=lFB#^d zVa8J|V5eQw>?Qv%d-H{|mC{RA&G3oi0|Nt0s~YJ}eVs06va`}ef^sJItcZr+;&;rX zcs#D*_xOW`>zLM{%a8)AscV}+I5{t|cz+|ZlDM_BSJ3TMn>A8wb!Or`nN3O;tEK?U z=Av0(m&-*qJQ6nO);WBjK(i0vroF74*YHP7vlQ(Of^L)YBKN0_!&78rbCRq0P{Tdk z*YIaKUyE(YZsQkb7K{|zjgzaJOL3Fnnl|=o@E7UQG~M6 zkG%cQ!9FSdui2Kcd+=pbmwwynO422dEn7HXEK7$B^o)tB=P*vd*%pnPWj(vK-EP3K zZ~B=%6w`}EBTqj1yrcHn&u`x2wo` zqT4v*@#XToSy+;9q)kPrz!T6HcJ)n^c|pbK0g3n);1NA#70i`OMmkfnOnxz%N_LEE z3*FoI!7YkBZmaXP^c)5Ic?UVdi;<5%b}jpfjf-<58t_>hXZ!ga-|lhW&$-7x7<~X` zyzlQ&`zr9QqHX*>0(`9N<6J>~U~ta^sQ0MnLo>qE^5X1gF-}kc>qu2;D}Vl8k-Gb;rdp;Xt!NnrxxbFpY{EyBu8? zG6>Cf$bk$(d4#Yy>0@z^x_D>##@3DI=o%WM%E!>6{*STa9+!MJ8xGVc0i$#@h9->J zP@1F0w;{?Z(pOxQ*QjY9VYA6-tb(SR-Cd}oUeaTCoV-nJI)-DLWZ(;o0V`C#QZCA{ zi&7tr(dnAqkd1wb)+ar->Rms9`l>B{09{*uvttj8`iEi<19#CDjrotz+rW@b#wrG4 z59{uto2%jG3R-R>#Hh5cqB9x`xPk$)whC3&_rA}QIe|Kc9en;0eY!^CuQQLP(Tb;e zy?zG!@MUs3gTt6(R;9`IJj0n|DimzbBeX%Es-BP9VU=th!3E}`&(5R<1RkMF>1gru zF#KSfEB%>!kY)+^+cXT5rh_Eq5))0KMiVaM z3X#r{f5xM0OCv9L4>K@^!ife&?p&g18Cx=7NvMubx6a@lQ z>E_4_g~Kt5G%OtNT}SVf5W9wGlBE?RZ+%mwt$(6l8ilud-(e%T&AfY;z3Yzcy!0#D za9z+8s6g>S3RlSQH2-K8N#=_puQ^TA%gM_<$@ljjAXU?00R{qu7T9s%O801Q+18k LSX5xxyv+R@*NA!Y literal 0 HcmV?d00001 diff --git a/build/classes/javazoom/jl/player/jlpTest.class b/build/classes/javazoom/jl/player/jlpTest.class new file mode 100644 index 0000000000000000000000000000000000000000..299de32884d070a3312097ee8c0fd7b603d95249 GIT binary patch literal 1648 zcmbVN|8vwt9DUonHsK7Vv``VKL=@;3nnSIqrJz`FrdSGk2Qv&mZPTUZ$R(N0o>2cT zMMp>d-9JiwyGeUhT4r!=X0x09?EAdWd!Ow6`PVPM16abUhsZ~}1%WF*-uLl=hYycn z97`?C<0Cs<_3^QXPg-~bpZZw#aLvPtz-XcKq7;~3@5%3Edtj2ZeV?zCHi;^)3HVQv zRAsWS1SYGPRA$@lj?qcB&Hb^JBumTcp<=mre6+LON$1*7tedZ}-x6k;)yVIV-xVG)&r*dix5=m&!aS1RAq8QS0{e zSQRG8v(m$LGB-->2K7#TmkD+^bkhYKDkmcJ6GwQj9WKG3oHk}?Yfb&ZjAL*TSC#R>k+ATvo{ z?Qs*>c#y?;zerLmUsyVn(3TP|hPSoOGnEg@u-xf~W~WfgVQ)aAq9>YOKFjsf$ZEMN zOBGcP1~`F}0?V(7S`OGNQEkNa|8;oi)5Nges=)$GVk*FA_&mT(%m{Q}GlK=RMn}Cg zs@&qtwNWI?l3m`_1L}TpH_o=(;SCYs3rphWD@YV{TW+iWsvU0SstmK-gz9-xn%dgk z7W{XE3+&V3-eyn5jGr1xv#$rH_wyd22#m*CNu$=X(#R}kg^RNXwD8>FecQBX{A>$; z=f?GLSIb!89o{O(c+G@e{{c%y7?QEfLF}sIZy`U|n@sK^0YFz0DI%zB$J+JOpd> z0IXZD#1d3shNza;kL1ogV=g${8C=9A w>Nd-Ldhs_w8Xm?y%z6A55FV5ISlBD!yaU>m_Gm4KaI`9$&Jgx8!A7w74{~~r1poj5 literal 0 HcmV?d00001 diff --git a/build/classes/jl1.0.1.jar b/build/classes/jl1.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..bd5fb8b8eb28746e4a3d7cfee2b54c4fd54f5043 GIT binary patch literal 105363 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

(H>r|Sz$es;n6q4t!9osGU^)b#AiEhi^s}TD` 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

W(94n+m(@89xah6`eR%%`DDLQJ z@Aw-tzAuT|%L0%GK<*i@V2Akr4eM@f3U;=%2Sy>6YsHYQLyEK|Z8bpL11_>F}YRuJ#JGFcwh-A`V6?P`n%x%Z*Y#rY~0twp7PN3*a12I3Y5yr*v}s+&yP&# zdYIT>-6EwD$Pr}w8(TVd>&T)3#c>M-GRIRQf23Zo`6c~Y#_&1s||(pA8~*3 zH#28kbvgk20OTI1CqGl3AHU3>p?~%^eue<^AV9+d*vvnvm*t&I?s~4cgA2&U($mzD zQe0WW#m@NmC5hTx`!yd>GqZpW@@ieWC;u<(>n+>%lU>h*s|M9D?t~>iW#je6v|d1&9s6 zb+vIi{ZG{2RHz)qO?*4R3K@VEt~O5drvIkwpNlI~wVO%^pzLJ;_|>`#acVut_owv?%mQkhV3n_!p>}v!%^%jDUDUniLKw{dqv?zkE9TBjx$I+g?xo?k(vb zEtZOlkrBwwH8o_YNTLDy^l$qz=Z2x#V>0@Kv1(~W13{se_|_;;VMUoS(v(ILJLu#g=v zA`|~57?pf!^x6apPaLUHYdO6%py{b3mX@NKXu4zX2E96*NNae?*%(gN%MRwX#Ln zM4bT8^gy|~I(Kt^_TTX4j(?fvHw_`Ffyo*HAYc->u1;u^>i?SnXH#3Sy(7rd@i&8Z zrykQ_MPN&K=aE` z53(!1MP0ofD-W^*ng4Fa7Khs^nF^qAfWm$ihqQJ*?vE2dT3f%31pvkN|7zs=`fqS9 z&cJX+)B2MXNPQ5^i+>#2XO42b+;s(P|+jc^Xw@A5RJJ6G%& z_U<>#KMc0+Gt#8C;6Ong0lm=GVNo|w%&v2`iie%Eg{hOJ6R@HI^l;ZZyW!OO-5ns~ zguq2|Maf=h=xebc7k1#F%FB}iA={f|vHPEI17j=B4#Qi~UngEcQXx+}`bB*q|8LYQJA)y?kVoqL0@o^D z3%>S%9Y`wV(Hg&~(5lx`Wqy0m1|%ACd-N}KlJye&wkP`%>WUo3JHgdkNgEM0iJ367xW3{UzcK*aUm1zg`JK*mS>V&ZsS%lsKFp(G0nOyi)SRDgfygiuhx J<3Ql2{{u2lHQE3G literal 0 HcmV?d00001 diff --git a/build/classes/playerapplet.html b/build/classes/playerapplet.html new file mode 100644 index 0000000..47b9e10 --- /dev/null +++ b/build/classes/playerapplet.html @@ -0,0 +1,44 @@ + + +MP3 Player - Applet Sample + + +

+ + diff --git a/build/classes/setEnvAnt.bat b/build/classes/setEnvAnt.bat new file mode 100644 index 0000000..f6bc03d --- /dev/null +++ b/build/classes/setEnvAnt.bat @@ -0,0 +1,3 @@ +SET JAVA_HOME=C:\java\jdk1.5.0_15 +SET ANT_HOME=C:\java\ant1.7 +SET PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin diff --git a/build/classes/src/javazoom/jl/converter/Converter.rs b/build/classes/src/javazoom/jl/converter/Converter.rs new file mode 100644 index 0000000..86b3500 --- /dev/null +++ b/build/classes/src/javazoom/jl/converter/Converter.rs @@ -0,0 +1,3 @@ +javazoom.jl.converter.Converter$PrintWriterProgressListener +javazoom.jl.converter.Converter$ProgressListener +javazoom.jl.converter.Converter diff --git a/build/classes/src/javazoom/jl/converter/RiffFile.rs b/build/classes/src/javazoom/jl/converter/RiffFile.rs new file mode 100644 index 0000000..989bca6 --- /dev/null +++ b/build/classes/src/javazoom/jl/converter/RiffFile.rs @@ -0,0 +1,2 @@ +javazoom.jl.converter.RiffFile +javazoom.jl.converter.RiffFile$RiffChunkHeader diff --git a/build/classes/src/javazoom/jl/converter/WaveFile.rs b/build/classes/src/javazoom/jl/converter/WaveFile.rs new file mode 100644 index 0000000..3a393c2 --- /dev/null +++ b/build/classes/src/javazoom/jl/converter/WaveFile.rs @@ -0,0 +1,4 @@ +javazoom.jl.converter.WaveFile$WaveFormat_ChunkData +javazoom.jl.converter.WaveFile$WaveFileSample +javazoom.jl.converter.WaveFile$WaveFormat_Chunk +javazoom.jl.converter.WaveFile diff --git a/build/classes/src/javazoom/jl/converter/WaveFileObuffer.rs b/build/classes/src/javazoom/jl/converter/WaveFileObuffer.rs new file mode 100644 index 0000000..51b778e --- /dev/null +++ b/build/classes/src/javazoom/jl/converter/WaveFileObuffer.rs @@ -0,0 +1 @@ +javazoom.jl.converter.WaveFileObuffer diff --git a/build/classes/src/javazoom/jl/converter/jlc.rs b/build/classes/src/javazoom/jl/converter/jlc.rs new file mode 100644 index 0000000..c78183f --- /dev/null +++ b/build/classes/src/javazoom/jl/converter/jlc.rs @@ -0,0 +1,2 @@ +javazoom.jl.converter.jlc +javazoom.jl.converter.jlc$jlcArgs diff --git a/build/classes/src/javazoom/jl/decoder/BitReserve.rs b/build/classes/src/javazoom/jl/decoder/BitReserve.rs new file mode 100644 index 0000000..5cbd530 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/BitReserve.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.BitReserve diff --git a/build/classes/src/javazoom/jl/decoder/Bitstream.rs b/build/classes/src/javazoom/jl/decoder/Bitstream.rs new file mode 100644 index 0000000..3cae7c7 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/Bitstream.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.Bitstream diff --git a/build/classes/src/javazoom/jl/decoder/BitstreamErrors.rs b/build/classes/src/javazoom/jl/decoder/BitstreamErrors.rs new file mode 100644 index 0000000..db7b19d --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/BitstreamErrors.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.BitstreamErrors diff --git a/build/classes/src/javazoom/jl/decoder/BitstreamException.rs b/build/classes/src/javazoom/jl/decoder/BitstreamException.rs new file mode 100644 index 0000000..b9f7766 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/BitstreamException.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.BitstreamException diff --git a/build/classes/src/javazoom/jl/decoder/Control.rs b/build/classes/src/javazoom/jl/decoder/Control.rs new file mode 100644 index 0000000..64fc19d --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/Control.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.Control diff --git a/build/classes/src/javazoom/jl/decoder/Crc16.rs b/build/classes/src/javazoom/jl/decoder/Crc16.rs new file mode 100644 index 0000000..2d483b1 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/Crc16.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.Crc16 diff --git a/build/classes/src/javazoom/jl/decoder/Decoder.rs b/build/classes/src/javazoom/jl/decoder/Decoder.rs new file mode 100644 index 0000000..09d9ce1 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/Decoder.rs @@ -0,0 +1,2 @@ +javazoom.jl.decoder.Decoder$Params +javazoom.jl.decoder.Decoder diff --git a/build/classes/src/javazoom/jl/decoder/DecoderErrors.rs b/build/classes/src/javazoom/jl/decoder/DecoderErrors.rs new file mode 100644 index 0000000..112e26f --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/DecoderErrors.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.DecoderErrors diff --git a/build/classes/src/javazoom/jl/decoder/DecoderException.rs b/build/classes/src/javazoom/jl/decoder/DecoderException.rs new file mode 100644 index 0000000..7f58dbc --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/DecoderException.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.DecoderException diff --git a/build/classes/src/javazoom/jl/decoder/Equalizer.rs b/build/classes/src/javazoom/jl/decoder/Equalizer.rs new file mode 100644 index 0000000..05e61f4 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/Equalizer.rs @@ -0,0 +1,2 @@ +javazoom.jl.decoder.Equalizer +javazoom.jl.decoder.Equalizer$EQFunction diff --git a/build/classes/src/javazoom/jl/decoder/FrameDecoder.rs b/build/classes/src/javazoom/jl/decoder/FrameDecoder.rs new file mode 100644 index 0000000..da60d14 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/FrameDecoder.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.FrameDecoder diff --git a/build/classes/src/javazoom/jl/decoder/Header.rs b/build/classes/src/javazoom/jl/decoder/Header.rs new file mode 100644 index 0000000..19b8a78 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/Header.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.Header diff --git a/build/classes/src/javazoom/jl/decoder/InputStreamSource.rs b/build/classes/src/javazoom/jl/decoder/InputStreamSource.rs new file mode 100644 index 0000000..5de732e --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/InputStreamSource.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.InputStreamSource diff --git a/build/classes/src/javazoom/jl/decoder/JavaLayerError.rs b/build/classes/src/javazoom/jl/decoder/JavaLayerError.rs new file mode 100644 index 0000000..c6ad9c8 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/JavaLayerError.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.JavaLayerError diff --git a/build/classes/src/javazoom/jl/decoder/JavaLayerErrors.rs b/build/classes/src/javazoom/jl/decoder/JavaLayerErrors.rs new file mode 100644 index 0000000..e765991 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/JavaLayerErrors.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.JavaLayerErrors diff --git a/build/classes/src/javazoom/jl/decoder/JavaLayerException.rs b/build/classes/src/javazoom/jl/decoder/JavaLayerException.rs new file mode 100644 index 0000000..6037b95 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/JavaLayerException.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.JavaLayerException diff --git a/build/classes/src/javazoom/jl/decoder/JavaLayerHook.rs b/build/classes/src/javazoom/jl/decoder/JavaLayerHook.rs new file mode 100644 index 0000000..cf01745 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/JavaLayerHook.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.JavaLayerHook diff --git a/build/classes/src/javazoom/jl/decoder/JavaLayerUtils.rs b/build/classes/src/javazoom/jl/decoder/JavaLayerUtils.rs new file mode 100644 index 0000000..b967608 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/JavaLayerUtils.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.JavaLayerUtils diff --git a/build/classes/src/javazoom/jl/decoder/LayerIDecoder.rs b/build/classes/src/javazoom/jl/decoder/LayerIDecoder.rs new file mode 100644 index 0000000..3b4938a --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/LayerIDecoder.rs @@ -0,0 +1,5 @@ +javazoom.jl.decoder.LayerIDecoder$SubbandLayer1Stereo +javazoom.jl.decoder.LayerIDecoder +javazoom.jl.decoder.LayerIDecoder$SubbandLayer1 +javazoom.jl.decoder.LayerIDecoder$Subband +javazoom.jl.decoder.LayerIDecoder$SubbandLayer1IntensityStereo diff --git a/build/classes/src/javazoom/jl/decoder/LayerIIDecoder.rs b/build/classes/src/javazoom/jl/decoder/LayerIIDecoder.rs new file mode 100644 index 0000000..ca48255 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/LayerIIDecoder.rs @@ -0,0 +1,4 @@ +javazoom.jl.decoder.LayerIIDecoder$SubbandLayer2 +javazoom.jl.decoder.LayerIIDecoder$SubbandLayer2Stereo +javazoom.jl.decoder.LayerIIDecoder +javazoom.jl.decoder.LayerIIDecoder$SubbandLayer2IntensityStereo diff --git a/build/classes/src/javazoom/jl/decoder/LayerIIIDecoder.rs b/build/classes/src/javazoom/jl/decoder/LayerIIIDecoder.rs new file mode 100644 index 0000000..5b140bd --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/LayerIIIDecoder.rs @@ -0,0 +1,7 @@ +javazoom.jl.decoder.LayerIIIDecoder$SBI +javazoom.jl.decoder.LayerIIIDecoder$Sftable +javazoom.jl.decoder.LayerIIIDecoder$temporaire +javazoom.jl.decoder.LayerIIIDecoder$temporaire2 +javazoom.jl.decoder.LayerIIIDecoder$III_side_info_t +javazoom.jl.decoder.LayerIIIDecoder +javazoom.jl.decoder.LayerIIIDecoder$gr_info_s diff --git a/build/classes/src/javazoom/jl/decoder/Manager.rs b/build/classes/src/javazoom/jl/decoder/Manager.rs new file mode 100644 index 0000000..dccafde --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/Manager.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.Manager diff --git a/build/classes/src/javazoom/jl/decoder/Obuffer.rs b/build/classes/src/javazoom/jl/decoder/Obuffer.rs new file mode 100644 index 0000000..27cce46 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/Obuffer.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.Obuffer diff --git a/build/classes/src/javazoom/jl/decoder/OutputChannels.rs b/build/classes/src/javazoom/jl/decoder/OutputChannels.rs new file mode 100644 index 0000000..0893036 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/OutputChannels.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.OutputChannels diff --git a/build/classes/src/javazoom/jl/decoder/SampleBuffer.rs b/build/classes/src/javazoom/jl/decoder/SampleBuffer.rs new file mode 100644 index 0000000..c725eb7 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/SampleBuffer.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.SampleBuffer diff --git a/build/classes/src/javazoom/jl/decoder/Source.rs b/build/classes/src/javazoom/jl/decoder/Source.rs new file mode 100644 index 0000000..419ecd1 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/Source.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.Source diff --git a/build/classes/src/javazoom/jl/decoder/SynthesisFilter.rs b/build/classes/src/javazoom/jl/decoder/SynthesisFilter.rs new file mode 100644 index 0000000..4531ecb --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/SynthesisFilter.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.SynthesisFilter diff --git a/build/classes/src/javazoom/jl/decoder/au2lin.ser b/build/classes/src/javazoom/jl/decoder/au2lin.ser new file mode 100644 index 0000000000000000000000000000000000000000..0b20bc8bbd97303c0e82602289279017a3d51517 GIT binary patch literal 539 zcmV+$0_6Ry?EnRJasUEbQ}2T=2IXC_`T_s|cyIs!0RVykh6IWTjtr6!mKB;Ao*kkg zrY5Q?t}e1Nwl}&vzCXc2!$ieL$4SXc%T3Ks&r#7+(^b`2*IL}_?=j-U~>Fw(7>+kIF?eXsO@AUAr@ipgn^*Qyr_B!^v z_dEBz_&oTX_}%#(`Cj>+`QG{-`d|8=`rrE>`(XQ^`{4W_{9*i&{IUGe{PFz}{WASh z{c`=1{j&Yi{qp`2{xkkl{&W6|{+s@*{=5Fm{@ecR{`>z6{~Z4;|2+Rp|6KoU|9t<5 z|B(Nf|DgY<|FHkK|G@vq|Iq)~|KR`V|M36#004dfdHi+warABPY3pU@VdGujS=v?B zQPNG$Ny$aULBT%0JiI!&IJY*nG_x|XFt0AHEUPN0D5fT)B%&gqAf6u_9vdAR92pxJ z8W$NB7!?;3784Z`6cG~;5)Tm#5DX7Y4$BTp4ayBl49N^g3&;yc3dagY3C0OU2*n6Q z2gCa0Hgqv0E7T|0B`_k d0AK)E08ju(06+jZ05AY303ZMu01yBO001A}1w;S< literal 0 HcmV?d00001 diff --git a/build/classes/src/javazoom/jl/decoder/huffcodetab.rs b/build/classes/src/javazoom/jl/decoder/huffcodetab.rs new file mode 100644 index 0000000..3d925f8 --- /dev/null +++ b/build/classes/src/javazoom/jl/decoder/huffcodetab.rs @@ -0,0 +1 @@ +javazoom.jl.decoder.huffcodetab diff --git a/build/classes/src/javazoom/jl/decoder/l3reorder.ser b/build/classes/src/javazoom/jl/decoder/l3reorder.ser new file mode 100644 index 0000000000000000000000000000000000000000..da216fcf469620b74fadec2ab33eb91cc99572d5 GIT binary patch literal 13925 zcmeI&W$=~dzb{|}2@#a;?(S|AX));T?(PnQ?gjw?Y3c4py1TnedSC1L@A2Jvb!N_- zy+>v)KcB^7^vCl&_kDk7E$8106TW?$FyX3JEfM#{)pGHN4lWcnOqfos!h{JE!S9Ey zTB6LFT4_4mUOMZ)e>-e3Z-st+NF+WWJRjlDgo!|8!V!^=i9$4D5tZn~<`ZHNhfj$~ zT;h?4WW*;i$w@#GQjn0Oq$Cv?$VO^1lASbUA_r;7Oit2~gEj0o}~I+8G&T_JsFYY`h6LR z6#4`C5h?YDGBT<3NAhD*>yKp=(&$fQRMP5C2uRoX3$e_QF(aA_AO4E$Y zl%Y9UC`${nQjV5n<6Byho$|CM2j9_#oP1APa`6N0$jy(mCl3|qKwc`+k$hC56Zxr3 zX9`e-E)=9HT`5F0x>1l%gp=^9w7u$giyA5<^(UWrnhvD-2@|R~gP)t}%jj zTxTTfxxpwlaFfw&bH}>;_nf%4y%;Eqqnax37@jHij%^VK%hPfQ!E%P|aJO1Dp z@0ri>{~XUBEYMHrAIOEA)Wga}oYKR|#hlhZluJ0HhnGt^t4EN3a!!vZmvLT?B$snR z|A@#WA`2grn5;x03E7BBQnK?2$;iQ{Bqt})NI@>5lak!TAQgFtNow*Ei!|gTHfhOE z9MVyMxTL2b@yI|S;**iWBp?$-NJwUiwr}kmbj89J3-g~}uG0U?Nyy(im~33pVB#q* zUC}Vb_y$)rn0QJ^S2UQKN=jEWn3_sSS2UQKN=sKXn3~GSvQ(lD<)}v=*2Izr#HXSfj$hOBYhdlFs3k{;Y?)#BbdfQMlzj6jA90h8O?7jVGJ`_ z%2;OcC*zpSGRE^e%bCC&RxpvdtYi}NSjA-iU^Q#l$9dMWp9`$xFD|m416*PQ2f55f z4snG|9Of#UIl?uzaFpw8_HdT_?ByH} zcxbnZL^A!6{D|cGV;Pwg`V;vvDfOo^3aRvGGAgO{=kgQM=r81_q}BhH(MYGil+j7A zzmhS?pud(e$*8}PvB;#qm9fdJzmsvuqQ94M$%>buDK3~;ya-Kk!Nd|)CLjmlNJvgT zBoVm?PhxTtfh6Q1B1y?hJ}S|P{8Xkh1*k$73R0D>6rvj4C`@&_Q-m7ypeQxzNik~C zi_fS{Z$76EefWa9^yN$H(T}gFPk+9q0Rt#bLk98 z49)qKvb10bZPG<6xf-DpuC0Qv*DzZ_C)MTeHX~;nl(vp*ZC!u0t{+)!{ zxCTA=iMI6QXWG$=UuaKnex(C_7(z$-GL&IVVLro|$^u3(jfIS4I*S;^4D0~^PC~AM z-R0j&$WCeZ3O=_A?V@(C;B%|cE^7Dszn+9D_;+}&gGs2O^jrs%P$lWP4kn?>(sLb5 zLRDlZ?4ZGf)LGg=g9)jNEJ}5{Qj8jO<1=c~ozJO-H5N=lwWT!{OhR>JFTSEK)>tqJ z)suZFPJOJgU=nH|`%!|1^rs|^7(gi+Gmz3WVGw0#%3#XU4C_6Zgqln1J(z@ANb5bA zgj!1LJ(z@AN$WkBgj!4MJ(z^-9l_-EqqKJflauuxoUWIp^&XtASEThGoUT{pXx4L$ zF>JtT9863b7 zZ&}E3-m!=iyk{{do#J8S5>DwK$fcaty%9`KXY_FTGS2EB%H^EX!^;(%*CWW4T+k!R zRb12~$<nNJSoElA654 zA`SV7Oxyf!XzLQMMy|y{{NqZ{0)O|!d#8u8!ta~@a>qt zVen0us}X!_=1v6PqPcp(XE*M^Ki`D81OI#z<_`SxO_)3I&o^Q2z(3!FeXf_}JHDV4 z-}5D<`GKz}!;gGTSt?MRa#Z9SzNHc+C{JaoP>&W=r9LgGMgv+=orbig290P#O&Zgd zS~Q^@wP{Lw>d=f1)TKEc=|n$<(V6}XrwaoZL01Mcl5PxQ6x|ujXnODyW9Z4xjHMU9 zFpl2*%6R%PgbDOzC=;2)JXSH8KUmEa=Cg*WEMP6uSjal2vxxP~U@;r`jU{YkCQI4G zEdFFOvsuO#erGvbnZpXUF_)EWX9p*_%}!2nhh3cJF1tCyJ@#;x`|RZ$57@_f9HC}L(>-^0zZt#-h+~gG}xW#MU*xh1~PJb(7 zl3sr&W066BFJqGtFN4o=GD$Cj&vG)$u*4$^;fPOGJ|qFz2v0(?6M;nJAR>v$NhFex zi;qZ3ZX%P6JbX-Y@)Cs<zuc%9JzNQ|1C{BI)@(m5>M+q9zpOQ3U0HtWmKuXhuL6o5> zgDFchexe-B`I&EN!7r4jCBO0=tr)`hv}Pzj(1v0BNLz+efp(0bBJCMTB|0#Q%5-Ej zRp`VRs?wRUjN_nFCv>03b4U-}=LsCvL-%^GkQ!ple2m(Ig4|8Y&o0rdK~#X7xcJt4j1)!axRzj z_;MbX^#t+{uILHne6H$=q+DyZsmaR>nY@)+|g6Y zW!%+M$>rSBQ_B_H*VD+AJkZn1RXo(w$<;j4)5|qH)-%YpJkc}Cbv)HG$@M(bGs_J; z*R#ltywJ1CP5iBAlbd;|XO~-erRR`ad9CM^+jyhrlG}N!=axHor{|G7d9UY{yJQ&h z>AU3zjrft8G^PTzXhKD5)09fop&6B_ zOLMAFj}}y=J}s$616om?hP0*)J@|>X^yFvS(TiVbPj7yu1AQ1mNBT09PV{3Ko$1eT zx-ftdbY&nT>Bb;N(VfAJW(+e~%2;OcC*zpSGRE^e%bCC&RxpvdtYi}NSjA-iU^P>i z&l;w(fVE6xA?ujVBGxm5#cbd=mavgc9ONRKIm9KlaG1+%;D`Y4rCpCTa09n84CWFM}-kMC$ke!izU1^9s$6y!%*Qiuw) zqA(R{O%W>5hN4uaEybupJ3gZ-?fIN)bl?lB(~&Q!K_|YVCY|ZRIzsoME9(i}hi+_e zDunJscQ)#w`_O|;x;KJ}Z?hh{553r;hn~6KY}LcdK5WxN&s<-&>k(x?cIcsJu0K2V z&@(rHU3%!58^~@w^vn%nj~;sF2D4WWJ##;?PY*qFKeJyCJ#)YCmmYfNe&v83dgg|3 zP!BzGLph{}p1ENh)?>-x9MNOT5ggS+&)i6k>7i$C6vy>=ax^FO_;L&<^#pP(r}Tt! z9H;d}ay)1B#Bu^>^(1m4=k%m<66f_~axxe6E�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 S;j_EHV3}-zvRQ1P4DTIAg`VC3 literal 0 HcmV?d00001 diff --git a/build/classes/task5/Application.class b/build/classes/task5/Application.class new file mode 100644 index 0000000000000000000000000000000000000000..f763173722d5fe246e37362a9d1684ca404bb9b5 GIT binary patch literal 2022 zcmZ`)T~`}b6x}xo41{U;D5SMmpcW(q1eI28L0X_61_M-qR$8qN$q3Vi$*h?P7XOK_ z{sLV~!diBzee%H{)zy7whA=7d<>uaV&)NH&ea@Zy_xjJj0bIlPXejG(^E*>)t}_bvUe3!L7{WM=2@kR<@pK&#b?HW zF;nxc%FLqc8iz%i=jgLx?b?Q4b4`VbRzCBgv0~V}GaJ53@VN!X^~KC#Ry4NHTejsd zC?sd zDptwxt*TAr4x?ONm1ySf3zxQm`%#_tB%6C4c{m|Up1VQT5aict#IqOm%LFsx$>OsprkkCmX~ z5x!wu3kh_*i_1E;@mR+bJZ=gOyDX%WIxgWo9p7S9$EUJn$%z}zLIK~NY8_E&hOqTHuxV^_J3@wCJU#owO%F;xB~65Gc}9wGI65cNLS3_XAW zq>x27S;l$N!x-c+!IMHBlMTECnaGm=1F6Y6+8&)E$p;7+L?<&8lx*l3p-5&^_<%SH z)0m0yZqP^a>lVD^UudsGdxehQXi7lRYY(o6V`+6a()th|wSpm3XC3KRXnz~#YD<`p zF&n`wk+f0WU>#j&svBo@x&Nu|8v7#Eaf%~6kE)8gWBI`&bV`W?mBd!r3VnO(80U_V zp*>Sa_olAt^*<}hgO36gjkr1#U>KOk*gtnI-`cLR9a`Hh%39Rt2m;y{YoA=*`#BmltE| zhdR!m^7K&&5TFM)ndls6_wyLna8ypjHAL*24X&+-D=V C`Eo=6 literal 0 HcmV?d00001 diff --git a/build/classes/task5/Controller.class b/build/classes/task5/Controller.class new file mode 100644 index 0000000000000000000000000000000000000000..ef241b84626c433c85f71fb7c3337761714a2508 GIT binary patch literal 2859 zcma)8S#uRd6#hE7$%LB;AqgQ6h(HjyHzB#QDg**qfsjpu(Eu)!n@%!hGIN=kEP%M+ zj*2_7xT7NKgH*xAlF}+)eX+_H-hA{ISmldlc}~wHxe1}lN~OEcIp0~j&(}To*MEQf z8Ne2N7ex)aH9Qza7P=Q;10K@Q6GcuS9OTu*JoGZ)5neqSMIR3F>M%PW(ePLlg&gGZ zJUpS{$vhZQ6rrEBNgf7xkWma`h@%X%ugSwv7Dsqx@oJO@n?;9*6pP1ra9Q+t<@0JR z591mpqKIQMisLw;;iQJAG@KI18FdDvB~a4t8{Wv)L_;cNnMuPp9lK5-GH%KV0X;PK zl0@3vou+O2^#a+kcrSsPD1<;^yJ^eLvC)3%9yIzb(iFElNyF+jT$ANc8S#frk8MG| zCdc+&$FihLfeVc!C+?Q+pyQ6p0fCjV_M^tQkuWCwgdCT)pJ-5!7GBq>>?y+^=6DKc z8TL@3$9GM8h~i}pCI!lsWisJSkTTKMYFe^s*l|3SF?Z0keCY~ooP{E-Oa`C?J9HYO zvSrejwnycWf?O#40$2KDuH9?U`HB4kd7dOUpX(O1{nCt*S|*b+6&`AqLBOV@+DQ`iKZzM-Lj8u4}YaDl|)|P(1G;FW7#~E{zvYk%LYOrm`SG}YY zUz|}+*SK_Db3jtCXn^NkQUhk%QOoD4V>7l06y3oM9SPh=&Vhk>p<^R9>3AB?=y(>- z={Sw&b-aKVHN2$bWxS%}Rh-fB8eSJz%E9Mri9jOL^gsGQZ5T~$Ud8p(CKt_R0g;r< zypK0@oW+|u-oo2D-od*X-qZ0u&gu97=XG4*;x6Knjt}vXj*nUV1Y2}`%8<_(@;U1+ zv+fIqe97WhEMCDG0njCy$v)k19be;|hO0Wh!M9Z4T-wj7IcTv!g$gv69POq@6lAtW zJ?ZzFo~f=`BzA}|LXj~r5L}KKT;*M^&lE!4Abm*s9b=xEWG&G)7C)RpmFdf*Q%*)G zsKAogJSeWCeBRpCg{59mu7Gev$XGlh&osNaoW?QVckG4%x=CdrYML#9jhLG&kBu1? zHN7<4rMmoKocJMuSf)PQ$6bmppv^Ib=wCet>jT%Rq;q)~z|`q2^oE^@u9UQ!O~Z1A zxZs(q-Q99unA^ga~w=EEm~lTquZj=*%(J43tD)$xUL;M36WIo6mjyVXlK``D)2 zlSl0jTQloCLI8J$^9QHbOjY=tKck}1ncj3NHQ$w^&bSP9k=TCrFPQf4l#|4ih^;1W zSf?}5Z5hY;=_^!6DXjrk(36|#$13vkd?!UyN=Y+OyIncXYBkNMdlWiKSvsWW8ADWe z86VPAbK1Jp%i3+&WGUiygt)1W#OLkEo!pD}Vl{oyYv?A|(zi2<-#Gf}XYtFXX2H)P zS+|mO64|r@wpZPRsJex$zMIItfe0;gXqkHhTGe%Eku>snu1aHpny-UY(KPa}sgT=f zyayVMWr$!YefXE5oc=1Y9939>2T+0g$*Kp*NZwA8zz)<=VN^)gBzcp+I8dF2-m!s` zq*0K@!V5TZ3x!n6qRv|=>MJhJ`3WU`*~N={`XV&kMCp!5%`&QHNloBXwk@YL=OWhB zq_H%OWjk_79a)x}M)~Z@ui*DE&2p9I-oSlDJ>x6VsF(}C9K!EW@Z}6kW91BLRT`_W z;8cjJRH$k;rx65AV+}h|Y?Uhr5P0nkz1C*NUN<-P>JYVFp-O@P98)WfspN&7EYQxY zen9m#I^Y~pC+g`JQ#QCoXR(IHO8POi7A06m%~?-Oh*2BjXht>m^DjYS&S7GXNvyGm zGbe~Or-?CV2zj1bb%`QfrDlFlP5gyCf1?)O#!mc!UHB9A_zS!7H};4eGzcAyq5{pL z8ZBZIT16e&sG5CZH};D*98i=PM3i!tQG{K{rHVQ!#%`*23+38_2BK3lRojRrs`@mR zkkmxh+e9d}qFDK8K`ZHqJRz}owHN!;{#$8RZA7vIwDS@y_y?wjnylKjTh~@JYKZ5f Roea4I?VwpudcG=M{{cZI*B<}? literal 0 HcmV?d00001 diff --git a/build/classes/task5/Driver.class b/build/classes/task5/Driver.class new file mode 100644 index 0000000000000000000000000000000000000000..fd3baaa0f2502b69c22ce4644b08f3a52a3faa07 GIT binary patch literal 447 zcmZut!AiqG5Pg%TNt?#DR*ib}Ry~-Do+^S=JOw>e3gT%KL)@Asu-*2*JQWoD06$8c zO@xZLhnabA-@F;-^Xu&cz!?rbG_mI*@L-v|@8W>qT*yM|OG0CKJSEuU@+l?sB3Y!j z%XyrtdlBc%45Bg-`BW%r@DFM0XSpDBBP|v$=i#-It5l8HWiDhv2!@Z*Osqthiy{jr zTFD|CRa1n@xNqm5ZvqK3t#%xjg;r&rSFYZqT&g6!k!GJxJ?zx@`*7eA`hR-}{_n+D zvDxM>o~4P#5p2GSc^3E>a5=UZg`A0V^JEQrt-jkFor?6~aqZUvbhrZA*g}^X(|pBd mmf_xEJ*?4)HU{SQU||dW$|R_T=rIPfgl!Bs@^Khj*!>3nc~yD< literal 0 HcmV?d00001 diff --git a/build/classes/task5/View$1.class b/build/classes/task5/View$1.class new file mode 100644 index 0000000000000000000000000000000000000000..29ea7034c312b11e5730e13a23e0ce3c46314cb8 GIT binary patch literal 975 zcmZ`%ZBNrs6n-u%Yd0#4D!w6#I(08fHwJ!zkPw2&lA#}JmMnhi#?2^ptywQ({7rt) zL^LsxAK;HNKDQe}CN{Y}FZZ11ob#Of>-UdS0Bd-j!wjC}VWVWCY@uSIYT>DcXBJlU zotx*cW}00yk2C4{mZyLfq{xnelt76(nkp1BILa;%^Zl@5M*Mo_rDL33HmA6-^`O-;H`< zoDgeIs)KmnM8oEO)@{t8U}GNZ0)lcPRrn#hXcMDYCTM+ zG1W@-1fudCQx)qcGM$WLcpbx;_Bzu}*6U;))9aXy<((k+g=tf`#(zFdb&*323$(9~ zpeS$B0;*|A?hvT z^F;dUg*ME;ZJ1cXU5LUqf$oigYGa^mW$_#GlQ`}rZ5ZTKH+vrsQuz=?N&}DZ7&oZp Ji9AEe?+>kO=&6R`m*_&ZoAnHyI^Wk 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 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jlayer1.0.1.zip b/jlayer1.0.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..54e4dd1c124c7fd96dae4d86bbbead72977c8548 GIT binary patch literal 544174 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ఋ=4Eq2DD0r5ZCc{DwSI+oLMD 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
5P&l2zZhT1-u;t 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 E0{?SGtDy9-rn`%Y}i}shb8|>*Y=X3 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
0M3XAU+UhJ6{xD2`;3~0Fox$*+{FJRjX7=rBsL{ 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 P{O4>3v))JOZ4Cbh0Q5^J literal 0 HcmV?d00001 diff --git a/manifest.mf b/manifest.mf new file mode 100644 index 0000000..328e8e5 --- /dev/null +++ b/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml new file mode 100644 index 0000000..0aaf1ab --- /dev/null +++ b/nbproject/build-impl.xml @@ -0,0 +1,1429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.JLayer1.0.1.dir + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 0000000..f3f99a1 --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=33386f30 +build.xml.script.CRC32=001ea16d +build.xml.stylesheet.CRC32=8064a381@1.80.1.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=33386f30 +nbproject/build-impl.xml.script.CRC32=e9dac127 +nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48 diff --git a/nbproject/private/config.properties b/nbproject/private/config.properties new file mode 100644 index 0000000..e69de29 diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties new file mode 100644 index 0000000..c2dafb2 --- /dev/null +++ b/nbproject/private/private.properties @@ -0,0 +1,6 @@ +compile.on.save=true +do.depend=false +do.jar=true +javac.debug=true +javadoc.preview=true +user.properties.file=C:\\Users\\Alienware\\AppData\\Roaming\\NetBeans\\8.2\\build.properties diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 0000000..00e045e --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,19 @@ + + + + + src/task5/Application.java + + + 15 + + + + + + + file:/G:/CLO3/Task5/Task5/src/task5/Driver.java + file:/G:/CLO3/Task5/Task5/src/task5/View.java + + + diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..33e5a93 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,79 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=Task5 +application.vendor=MuRa23 +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/Task5.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +file.reference.Documents-JLayer1.0.1=C:\\Users\\Alienware\\Documents\\JLayer1.0.1 +includes=** +jar.compress=false +javac.classpath=\ + ${file.reference.Documents-JLayer1.0.1} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.external.vm=true +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=task5.Task5 +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +src.JLayer1.0.1.dir=JLayer1.0.1 +test.src.dir=test diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..5a1b488 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,16 @@ + + + org.netbeans.modules.java.j2seproject + + + Task5 + + + + + + + + + + diff --git a/src/task5/Application.java b/src/task5/Application.java new file mode 100644 index 0000000..9f33888 --- /dev/null +++ b/src/task5/Application.java @@ -0,0 +1,89 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package task5; + +import java.util.ArrayList; +import java.util.List; +import javazoom.jl.decoder.JavaLayerException; +import javazoom.jl.player.Player; +/** + * + * @author MuRa23 + */ +public class Application { + private int nowPlaying; + private ArrayList musiclist; + private Thread ThreadPlayer; + + public Application(){ + musiclist = new ArrayList<>(); + } + + + public void addMusic (String path){ + this.musiclist.add(path); + } + + public String[] getMusicList(){ + return (String[]) musiclist.toArray(new String[0]); + } + + public String getNowPlayed(){ + return musiclist.get(nowPlaying); + } + + public void removedMusic(int i){ + this.musiclist.remove(i); + } + + public void play (int i){ + nowPlaying = i; + String filepath = musiclist.get(i); + ThreadPlayer = new Thread(filepath); + ThreadPlayer.start(); + } + + + public void stop(){ + if(ThreadPlayer != null){ + ThreadPlayer.stop(); + } + } + + public void next(){ + if(nowPlaying < musiclist.size() - 1){ + stop(); + play(nowPlaying + 1); + } + } + + public void prev(){ + if(nowPlaying != 0){ + stop(); + play(nowPlaying - 1); + } + } + + void removeMusic(int selected) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + private class ThreadPlayer extends Thread{ + private String filepath; + private Player player; + + public ThreadPlayer (String filepath){ + this.filepath = filepath; + } + + @Override + public void run (){ + + } + } + + +} diff --git a/src/task5/Controller.java b/src/task5/Controller.java new file mode 100644 index 0000000..7a6ed58 --- /dev/null +++ b/src/task5/Controller.java @@ -0,0 +1,76 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package task5; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import javax.swing.filechooser.FileNameExtensionFilter; + +/** + * + * @author Mura23 + */ +public class Controller implements ActionListener { + + private Application model; + private View view; + + public Controller(){ + model = new Application(); + view = new View(); + view.setVisible(true); + view.addActionListener(this); + view.setListMusic(model.getMusicList()); + } + + + @Override + public void actionPerformed(ActionEvent ae) { + Object click = ae.getSource(); + + try{ + if(click.equals(view.getButtonAdd())){ + JFileChooser fc = new JFileChooser(); + FileNameExtensionFilter filter = new FileNameExtensionFilter("mp3 Files", "mp3", "mp3"); + fc.setFileFilter(filter); + int returnVal = fc.showOpenDialog(view); + + if(returnVal == JFileChooser.APPROVE_OPTION){ + String path = fc.getSelectedFile().getAbsolutePath(); + model.addMusic(path); + view.setListMusic(model.getMusicList()); + } + } + else if(click.equals(view.getButtonDelete())){ + int selected = view.getSelectedMusic(); + model.removeMusic(selected); + view.setListMusic(model.getMusicList()); + } + else if(click.equals(view.getButtonNext())){ + model.next(); + view.setFieldPlaying(model.getNowPlayed()); + } + else if(click.equals(view.getButtonPlay())){ + int selected = view.getSelectedMusic(); + model.stop(); + model.play(selected); + view.setFieldPlaying(model.getNowPlayed()); + } + else if(click.equals(view.getButtonPrev())){ + model.prev(); + view.setFieldPlaying(model.getNowPlayed()); + } + else if(click.equals(view.getButtonStop())){ + model.stop(); + view.setFieldPlaying(""); + } + }catch(Exception e){ + JOptionPane.showMessageDialog(view, e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/task5/Driver.java b/src/task5/Driver.java new file mode 100644 index 0000000..ed4005c --- /dev/null +++ b/src/task5/Driver.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package task5; + +/** + * + * @author Mura23 + */ +public class Driver { + public static void main(String[] args) { + Controller a = new Controller(); + + } +} diff --git a/src/task5/View.form b/src/task5/View.form new file mode 100644 index 0000000..c9a650c --- /dev/null +++ b/src/task5/View.form @@ -0,0 +1,191 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/task5/View.java b/src/task5/View.java new file mode 100644 index 0000000..4ce49aa --- /dev/null +++ b/src/task5/View.java @@ -0,0 +1,204 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package task5; + +import java.awt.event.ActionListener; +import javax.swing.JButton; + +/** + * + * @author Alienware + */ +public class View extends javax.swing.JFrame { + + /** + * Creates new form View + */ + public View() { + initComponents(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + jScrollPane1 = new javax.swing.JScrollPane(); + jList1 = new javax.swing.JList<>(); + label1 = new java.awt.Label(); + jScrollPane2 = new javax.swing.JScrollPane(); + jList = new javax.swing.JList<>(); + label2 = new java.awt.Label(); + jTextFieldNP = new javax.swing.JTextField(); + jButtonAdd = new javax.swing.JButton(); + jButtonDelete = new javax.swing.JButton(); + jButtonPrev = new javax.swing.JButton(); + jButtonPlay = new javax.swing.JButton(); + jButtonStop = new javax.swing.JButton(); + jButtonNext = new javax.swing.JButton(); + + jList1.setModel(new javax.swing.AbstractListModel() { + String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" }; + public int getSize() { return strings.length; } + public String getElementAt(int i) { return strings[i]; } + }); + jScrollPane1.setViewportView(jList1); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + + label1.setFont(new java.awt.Font("Dialog", 0, 18)); // NOI18N + label1.setName(""); // NOI18N + label1.setText("Simple Music Player"); + + jScrollPane2.setViewportView(jList); + jList.getAccessibleContext().setAccessibleParent(jList1); + + label2.setFont(new java.awt.Font("Dialog", 0, 18)); // NOI18N + label2.setText("Playing"); + + jButtonAdd.setText("Add"); + + jButtonDelete.setText("Delete"); + + jButtonPrev.setText("<<"); + + jButtonPlay.setText("Play"); + + jButtonStop.setText("Stop"); + + jButtonNext.setText(">>"); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(26, 26, 26) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jTextFieldNP, javax.swing.GroupLayout.PREFERRED_SIZE, 441, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 537, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jButtonAdd) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jButtonDelete) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jButtonPrev) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jButtonPlay) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jButtonStop) + .addGap(18, 18, 18) + .addComponent(jButtonNext))) + .addContainerGap(24, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 226, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jTextFieldNP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(19, 19, 19) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jButtonAdd) + .addComponent(jButtonDelete) + .addComponent(jButtonPrev) + .addComponent(jButtonPlay) + .addComponent(jButtonStop) + .addComponent(jButtonNext)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + label1.getAccessibleContext().setAccessibleName("Simple Music Player"); + + pack(); + }// //GEN-END:initComponents + + /** + * @param args the command line arguments + */ + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton jButtonAdd; + private javax.swing.JButton jButtonDelete; + private javax.swing.JButton jButtonNext; + private javax.swing.JButton jButtonPlay; + private javax.swing.JButton jButtonPrev; + private javax.swing.JButton jButtonStop; + private javax.swing.JList jList; + private javax.swing.JList jList1; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JTextField jTextFieldNP; + private java.awt.Label label1; + private java.awt.Label label2; + // End of variables declaration//GEN-END:variables + + public void addActionListener(ActionListener a){ + jButtonAdd.addActionListener(a); + jButtonDelete.addActionListener(a); + jButtonNext.addActionListener(a); + jButtonPlay.addActionListener(a); + jButtonPrev.addActionListener(a); + jButtonStop.addActionListener(a); + } + + public JButton getButtonAdd(){ + return jButtonAdd; + } + + public JButton getButtonDelete(){ + return jButtonDelete; + } + + public JButton getButtonNext(){ + return jButtonNext; + } + + public JButton getButtonPlay(){ + return jButtonPlay; + } + + public JButton getButtonPrev(){ + return jButtonPrev; + } + + public JButton getButtonStop(){ + return jButtonStop; + } + + public void setListMusic(String[] musicList){ + jList.setListData(musicList); + } + + public void setFieldPlaying(String filename){ + jTextFieldNP.setText(filename); + } + + public int getSelectedMusic(){ + if(jList.getSelectedIndex() == -1){ + throw new IllegalStateException("Please select any music"); + } + return jList.getSelectedIndex(); + } +}

fxF803M`o-hostVQw`J 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

+ * Instances of this class are thread-safe. + * + * @since 0.0.8 + * @author Mat McGowan + */ + +public class FactoryRegistry extends AudioDeviceFactory +{ + static private FactoryRegistry instance = null; + + static synchronized public FactoryRegistry systemRegistry() + { + if (instance==null) + { + instance = new FactoryRegistry(); + instance.registerDefaultFactories(); + } + return instance; + } + + + protected Hashtable factories = new Hashtable(); + + /** + * Registers an AudioDeviceFactory instance + * with this registry. + */ + public void addFactory(AudioDeviceFactory factory) + { + factories.put(factory.getClass(), factory); + } + + public void removeFactoryType(Class cls) + { + factories.remove(cls); + } + + public void removeFactory(AudioDeviceFactory factory) + { + factories.remove(factory.getClass()); + } + + public AudioDevice createAudioDevice() throws JavaLayerException + { + AudioDevice device = null; + AudioDeviceFactory[] factories = getFactoriesPriority(); + + if (factories==null) + throw new JavaLayerException(this+": no factories registered"); + + JavaLayerException lastEx = null; + for (int i=0; (device==null) && (iJavaSoundAudioDevice implements an audio + * device by using the JavaSound API. + * + * @since 0.0.8 + * @author Mat McGowan + */ +public class JavaSoundAudioDevice extends AudioDeviceBase +{ + private SourceDataLine source = null; + + private AudioFormat fmt = null; + + private byte[] byteBuf = new byte[4096]; + + protected void setAudioFormat(AudioFormat fmt0) + { + fmt = fmt0; + } + + protected AudioFormat getAudioFormat() + { + if (fmt==null) + { + Decoder decoder = getDecoder(); + fmt = new AudioFormat(decoder.getOutputFrequency(), + 16, + decoder.getOutputChannels(), + true, + false); + } + return fmt; + } + + protected DataLine.Info getSourceLineInfo() + { + AudioFormat fmt = getAudioFormat(); + //DataLine.Info info = new DataLine.Info(SourceDataLine.class, fmt, 4000); + DataLine.Info info = new DataLine.Info(SourceDataLine.class, fmt); + return info; + } + + public void open(AudioFormat fmt) throws JavaLayerException + { + if (!isOpen()) + { + setAudioFormat(fmt); + openImpl(); + setOpen(true); + } + } + + protected void openImpl() + throws JavaLayerException + { + } + + + // createSource fix. + protected void createSource() throws JavaLayerException + { + Throwable t = null; + try + { + Line line = AudioSystem.getLine(getSourceLineInfo()); + if (line instanceof SourceDataLine) + { + source = (SourceDataLine)line; + //source.open(fmt, millisecondsToBytes(fmt, 2000)); + source.open(fmt); + /* + if (source.isControlSupported(FloatControl.Type.MASTER_GAIN)) + { + FloatControl c = (FloatControl)source.getControl(FloatControl.Type.MASTER_GAIN); + c.setValue(c.getMaximum()); + }*/ + source.start(); + + } + } catch (RuntimeException ex) + { + t = ex; + } + catch (LinkageError ex) + { + t = ex; + } + catch (LineUnavailableException ex) + { + t = ex; + } + if (source==null) throw new JavaLayerException("cannot obtain source audio line", t); + } + + public int millisecondsToBytes(AudioFormat fmt, int time) + { + return (int)(time*(fmt.getSampleRate()*fmt.getChannels()*fmt.getSampleSizeInBits())/8000.0); + } + + protected void closeImpl() + { + if (source!=null) + { + source.close(); + } + } + + protected void writeImpl(short[] samples, int offs, int len) + throws JavaLayerException + { + if (source==null) + createSource(); + + byte[] b = toByteArray(samples, offs, len); + source.write(b, 0, len*2); + } + + protected byte[] getByteArray(int length) + { + if (byteBuf.length < length) + { + byteBuf = new byte[length+1024]; + } + return byteBuf; + } + + protected byte[] toByteArray(short[] samples, int offs, int len) + { + byte[] b = getByteArray(len*2); + int idx = 0; + short s; + while (len-- > 0) + { + s = samples[offs++]; + b[idx++] = (byte)s; + b[idx++] = (byte)(s>>>8); + } + return b; + } + + protected void flushImpl() + { + if (source!=null) + { + source.drain(); + } + } + + public int getPosition() + { + int pos = 0; + if (source!=null) + { + pos = (int)(source.getMicrosecondPosition()/1000); + } + return pos; + } + + /** + * Runs a short test by playing a short silent sound. + */ + public void test() + throws JavaLayerException + { + try + { + open(new AudioFormat(22050, 16, 1, true, false)); + short[] data = new short[22050/10]; + write(data, 0, data.length); + flush(); + close(); + } + catch (RuntimeException ex) + { + throw new JavaLayerException("Device test failed: "+ex); + } + + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/player/JavaSoundAudioDeviceFactory.java b/JLayer1.0.1/src/javazoom/jl/player/JavaSoundAudioDeviceFactory.java new file mode 100644 index 0000000..92af492 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/JavaSoundAudioDeviceFactory.java @@ -0,0 +1,85 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 29/01/00 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player; + +import javazoom.jl.decoder.JavaLayerException; + +/** + * This class is responsible for creating instances of the + * JavaSoundAudioDevice. The audio device implementation is loaded + * and tested dynamically as not all systems will have support + * for JavaSound, or they may have the incorrect version. + */ +public class JavaSoundAudioDeviceFactory extends AudioDeviceFactory +{ + private boolean tested = false; + + static private final String DEVICE_CLASS_NAME = "javazoom.jl.player.JavaSoundAudioDevice"; + + public synchronized AudioDevice createAudioDevice() + throws JavaLayerException + { + if (!tested) + { + testAudioDevice(); + tested = true; + } + + try + { + return createAudioDeviceImpl(); + } + catch (Exception ex) + { + throw new JavaLayerException("unable to create JavaSound device: "+ex); + } + catch (LinkageError ex) + { + throw new JavaLayerException("unable to create JavaSound device: "+ex); + } + } + + protected JavaSoundAudioDevice createAudioDeviceImpl() + throws JavaLayerException + { + ClassLoader loader = getClass().getClassLoader(); + try + { + JavaSoundAudioDevice dev = (JavaSoundAudioDevice)instantiate(loader, DEVICE_CLASS_NAME); + return dev; + } + catch (Exception ex) + { + throw new JavaLayerException("Cannot create JavaSound device", ex); + } + catch (LinkageError ex) + { + throw new JavaLayerException("Cannot create JavaSound device", ex); + } + + } + + public void testAudioDevice() throws JavaLayerException + { + JavaSoundAudioDevice dev = createAudioDeviceImpl(); + dev.test(); + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/player/NullAudioDevice.java b/JLayer1.0.1/src/javazoom/jl/player/NullAudioDevice.java new file mode 100644 index 0000000..4145fee --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/NullAudioDevice.java @@ -0,0 +1,37 @@ +/* + * 11/19/04 1.0 moved o LGPL. + * 29/01/00 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player; + +/** + * The NullAudioDevice implements a silent, no-op + * audio device. This is useful for testing purposes. + * + * @since 0.0.8 + * @author Mat McGowan + */ +public class NullAudioDevice extends AudioDeviceBase +{ + + public int getPosition() + { + return 0; + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/player/Player.java b/JLayer1.0.1/src/javazoom/jl/player/Player.java new file mode 100644 index 0000000..32fb1f3 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/Player.java @@ -0,0 +1,251 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 29/01/00 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player; + +import java.io.InputStream; + +import javazoom.jl.decoder.Bitstream; +import javazoom.jl.decoder.BitstreamException; +import javazoom.jl.decoder.Decoder; +import javazoom.jl.decoder.Header; +import javazoom.jl.decoder.JavaLayerException; +import javazoom.jl.decoder.SampleBuffer; + +/** + * The Player class implements a simple player for playback + * of an MPEG audio stream. + * + * @author Mat McGowan + * @since 0.0.8 + */ + +// REVIEW: the audio device should not be opened until the +// first MPEG audio frame has been decoded. +public class Player +{ + /** + * The current frame number. + */ + private int frame = 0; + + /** + * The MPEG audio bitstream. + */ + // javac blank final bug. + /*final*/ private Bitstream bitstream; + + /** + * The MPEG audio decoder. + */ + /*final*/ private Decoder decoder; + + /** + * The AudioDevice the audio samples are written to. + */ + private AudioDevice audio; + + /** + * Has the player been closed? + */ + private boolean closed = false; + + /** + * Has the player played back all frames from the stream? + */ + private boolean complete = false; + + private int lastPosition = 0; + + /** + * Creates a new Player instance. + */ + public Player(InputStream stream) throws JavaLayerException + { + this(stream, null); + } + + public Player(InputStream stream, AudioDevice device) throws JavaLayerException + { + bitstream = new Bitstream(stream); + decoder = new Decoder(); + + if (device!=null) + { + audio = device; + } + else + { + FactoryRegistry r = FactoryRegistry.systemRegistry(); + audio = r.createAudioDevice(); + } + audio.open(decoder); + } + + public void play() throws JavaLayerException + { + play(Integer.MAX_VALUE); + } + + /** + * Plays a number of MPEG audio frames. + * + * @param frames The number of frames to play. + * @return true if the last frame was played, or false if there are + * more frames. + */ + public boolean play(int frames) throws JavaLayerException + { + boolean ret = true; + + while (frames-- > 0 && ret) + { + ret = decodeFrame(); + } + + if (!ret) + { + // last frame, ensure all data flushed to the audio device. + AudioDevice out = audio; + if (out!=null) + { + out.flush(); + synchronized (this) + { + complete = (!closed); + close(); + } + } + } + return ret; + } + + /** + * Cloases this player. Any audio currently playing is stopped + * immediately. + */ + public synchronized void close() + { + AudioDevice out = audio; + if (out!=null) + { + closed = true; + audio = null; + // this may fail, so ensure object state is set up before + // calling this method. + out.close(); + lastPosition = out.getPosition(); + try + { + bitstream.close(); + } + catch (BitstreamException ex) + { + } + } + } + + /** + * Returns the completed status of this player. + * + * @return true if all available MPEG audio frames have been + * decoded, or false otherwise. + */ + public synchronized boolean isComplete() + { + return complete; + } + + /** + * Retrieves the position in milliseconds of the current audio + * sample being played. This method delegates to the + * AudioDevice that is used by this player to sound + * the decoded audio samples. + */ + public int getPosition() + { + int position = lastPosition; + + AudioDevice out = audio; + if (out!=null) + { + position = out.getPosition(); + } + return position; + } + + /** + * Decodes a single frame. + * + * @return true if there are no more frames to decode, false otherwise. + */ + protected boolean decodeFrame() throws JavaLayerException + { + try + { + AudioDevice out = audio; + if (out==null) + return false; + + Header h = bitstream.readFrame(); + + if (h==null) + return false; + + // sample buffer set when decoder constructed + SampleBuffer output = (SampleBuffer)decoder.decodeFrame(h, bitstream); + + synchronized (this) + { + out = audio; + if (out!=null) + { + out.write(output.getBuffer(), 0, output.getBufferLength()); + } + } + + bitstream.closeFrame(); + } + catch (RuntimeException ex) + { + throw new JavaLayerException("Exception decoding audio frame", ex); + } +/* + catch (IOException ex) + { + System.out.println("exception decoding audio frame: "+ex); + return false; + } + catch (BitstreamException bitex) + { + System.out.println("exception decoding audio frame: "+bitex); + return false; + } + catch (DecoderException decex) + { + System.out.println("exception decoding audio frame: "+decex); + return false; + } +*/ + return true; + } + + +} diff --git a/JLayer1.0.1/src/javazoom/jl/player/PlayerApplet.java b/JLayer1.0.1/src/javazoom/jl/player/PlayerApplet.java new file mode 100644 index 0000000..d7c7dc2 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/PlayerApplet.java @@ -0,0 +1,246 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * 29/01/00 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player; + +import java.applet.Applet; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import javazoom.jl.decoder.JavaLayerException; + +/** + * A simple applet that plays an MPEG audio file. + * The URL (relative to the document base) + * is passed as the "audioURL" parameter. + * + * @author Mat McGowan + * @since 0.0.8 + */ +public class PlayerApplet extends Applet implements Runnable +{ + static public final String AUDIO_PARAMETER = "audioURL"; + + /** + * The Player used to play the MPEG audio file. + */ + private Player player = null; + + /** + * The thread that runs the player. + */ + private Thread playerThread = null; + + private String fileName = null; + + + /** + * Retrieves the AudioDevice instance that will + * be used to sound the audio data. + * + * @return an audio device instance that will be used to + * sound the audio stream. + */ + protected AudioDevice getAudioDevice() throws JavaLayerException + { + return FactoryRegistry.systemRegistry().createAudioDevice(); + } + + /** + * Retrieves the InputStream that provides the MPEG audio + * stream data. + * + * @return an InputStream from which the MPEG audio data + * is read, or null if an error occurs. + */ + protected InputStream getAudioStream() + { + InputStream in = null; + + try + { + URL url = getAudioURL(); + if (url!=null) + in = url.openStream(); + } + catch (IOException ex) + { + System.err.println(ex); + } + return in; + } + + protected String getAudioFileName() + { + String urlString = fileName; + if (urlString==null) + { + urlString = getParameter(AUDIO_PARAMETER); + } + return urlString; + } + + protected URL getAudioURL() + { + String urlString = getAudioFileName(); + URL url = null; + if (urlString!=null) + { + try + { + url = new URL(getDocumentBase(), urlString); + } + catch (Exception ex) + { + System.err.println(ex); + } + } + return url; + } + + /** + * Sets the URL of the audio stream to play. + */ + public void setFileName(String name) + { + fileName = name; + } + + public String getFileName() + { + return fileName; + } + + /** + * Stops the audio player. If the player is already stopped + * this method is a no-op. + */ + protected void stopPlayer() throws JavaLayerException + { + if (player!=null) + { + player.close(); + player = null; + playerThread = null; + } + } + + /** + * Decompresses audio data from an InputStream and plays it + * back through an AudioDevice. The playback is run on a newly + * created thread. + * + * @param in The InputStream that provides the MPEG audio data. + * @param dev The AudioDevice to use to sound the decompressed data. + * + * @throws JavaLayerException if there was a problem decoding + * or playing the audio data. + */ + protected void play(InputStream in, AudioDevice dev) throws JavaLayerException + { + stopPlayer(); + + if (in!=null && dev!=null) + { + player = new Player(in, dev); + playerThread = createPlayerThread(); + playerThread.start(); + } + } + + /** + * Creates a new thread used to run the audio player. + * @return A new Thread that, once started, runs the audio player. + */ + protected Thread createPlayerThread() + { + return new Thread(this, "Audio player thread"); + } + + /** + * Initializes this applet. + */ + public void init() + { + } + + /** + * Starts this applet. An input stream and audio device + * are created and passed to the play() method. + */ + public void start() + { + String name = getAudioFileName(); + try + { + InputStream in = getAudioStream(); + AudioDevice dev = getAudioDevice(); + play(in, dev); + } + catch (JavaLayerException ex) + { + synchronized (System.err) + { + System.err.println("Unable to play "+name); + ex.printStackTrace(System.err); + } + } + } + + /** + * Stops this applet. If audio is currently playing, it is + * stopped. + */ + public void stop() + { + try + { + stopPlayer(); + } + catch (JavaLayerException ex) + { + System.err.println(ex); + } + } + + public void destroy() + { + } + + /** + * The run method for the audio player thread. Simply calls + * play() on the player to play the entire stream. + */ + public void run() + { + if (player!=null) + { + try + { + player.play(); + } + catch (JavaLayerException ex) + { + System.err.println("Problem playing audio: "+ex); + } + } + } +} diff --git a/JLayer1.0.1/src/javazoom/jl/player/advanced/AdvancedPlayer.java b/JLayer1.0.1/src/javazoom/jl/player/advanced/AdvancedPlayer.java new file mode 100644 index 0000000..45a31e4 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/advanced/AdvancedPlayer.java @@ -0,0 +1,242 @@ +/* + * 11/19/04 1.0 moved to LGPL. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player.advanced; + +import java.io.InputStream; + +import javazoom.jl.decoder.Bitstream; +import javazoom.jl.decoder.BitstreamException; +import javazoom.jl.decoder.Decoder; +import javazoom.jl.decoder.Header; +import javazoom.jl.decoder.JavaLayerException; +import javazoom.jl.decoder.SampleBuffer; +import javazoom.jl.player.AudioDevice; +import javazoom.jl.player.FactoryRegistry; + +/** + * a hybrid of javazoom.jl.player.Player tweeked to include play(startFrame, endFrame) + * hopefully this will be included in the api + */ +public class AdvancedPlayer +{ + /** The MPEG audio bitstream.*/ + private Bitstream bitstream; + /** The MPEG audio decoder. */ + private Decoder decoder; + /** The AudioDevice the audio samples are written to. */ + private AudioDevice audio; + /** Has the player been closed? */ + private boolean closed = false; + /** Has the player played back all frames from the stream? */ + private boolean complete = false; + private int lastPosition = 0; + /** Listener for the playback process */ + private PlaybackListener listener; + + /** + * Creates a new Player instance. + */ + public AdvancedPlayer(InputStream stream) throws JavaLayerException + { + this(stream, null); + } + + public AdvancedPlayer(InputStream stream, AudioDevice device) throws JavaLayerException + { + bitstream = new Bitstream(stream); + + if (device!=null) audio = device; + else audio = FactoryRegistry.systemRegistry().createAudioDevice(); + audio.open(decoder = new Decoder()); + } + + public void play() throws JavaLayerException + { + play(Integer.MAX_VALUE); + } + + /** + * Plays a number of MPEG audio frames. + * + * @param frames The number of frames to play. + * @return true if the last frame was played, or false if there are + * more frames. + */ + public boolean play(int frames) throws JavaLayerException + { + boolean ret = true; + + // report to listener + if(listener != null) listener.playbackStarted(createEvent(PlaybackEvent.STARTED)); + + while (frames-- > 0 && ret) + { + ret = decodeFrame(); + } + +// if (!ret) + { + // last frame, ensure all data flushed to the audio device. + AudioDevice out = audio; + if (out != null) + { +// System.out.println(audio.getPosition()); + out.flush(); +// System.out.println(audio.getPosition()); + synchronized (this) + { + complete = (!closed); + close(); + } + + // report to listener + if(listener != null) listener.playbackFinished(createEvent(out, PlaybackEvent.STOPPED)); + } + } + return ret; + } + + /** + * Cloases this player. Any audio currently playing is stopped + * immediately. + */ + public synchronized void close() + { + AudioDevice out = audio; + if (out != null) + { + closed = true; + audio = null; + // this may fail, so ensure object state is set up before + // calling this method. + out.close(); + lastPosition = out.getPosition(); + try + { + bitstream.close(); + } + catch (BitstreamException ex) + {} + } + } + + /** + * Decodes a single frame. + * + * @return true if there are no more frames to decode, false otherwise. + */ + protected boolean decodeFrame() throws JavaLayerException + { + try + { + AudioDevice out = audio; + if (out == null) return false; + + Header h = bitstream.readFrame(); + if (h == null) return false; + + // sample buffer set when decoder constructed + SampleBuffer output = (SampleBuffer) decoder.decodeFrame(h, bitstream); + + synchronized (this) + { + out = audio; + if(out != null) + { + out.write(output.getBuffer(), 0, output.getBufferLength()); + } + } + + bitstream.closeFrame(); + } + catch (RuntimeException ex) + { + throw new JavaLayerException("Exception decoding audio frame", ex); + } + return true; + } + + /** + * skips over a single frame + * @return false if there are no more frames to decode, true otherwise. + */ + protected boolean skipFrame() throws JavaLayerException + { + Header h = bitstream.readFrame(); + if (h == null) return false; + bitstream.closeFrame(); + return true; + } + + /** + * Plays a range of MPEG audio frames + * @param start The first frame to play + * @param end The last frame to play + * @return true if the last frame was played, or false if there are more frames. + */ + public boolean play(final int start, final int end) throws JavaLayerException + { + boolean ret = true; + int offset = start; + while (offset-- > 0 && ret) ret = skipFrame(); + return play(end - start); + } + + /** + * Constructs a PlaybackEvent + */ + private PlaybackEvent createEvent(int id) + { + return createEvent(audio, id); + } + + /** + * Constructs a PlaybackEvent + */ + private PlaybackEvent createEvent(AudioDevice dev, int id) + { + return new PlaybackEvent(this, id, dev.getPosition()); + } + + /** + * sets the PlaybackListener + */ + public void setPlayBackListener(PlaybackListener listener) + { + this.listener = listener; + } + + /** + * gets the PlaybackListener + */ + public PlaybackListener getPlayBackListener() + { + return listener; + } + + /** + * closes the player and notifies PlaybackListener + */ + public void stop() + { + listener.playbackFinished(createEvent(PlaybackEvent.STOPPED)); + close(); + } +} \ No newline at end of file diff --git a/JLayer1.0.1/src/javazoom/jl/player/advanced/PlaybackEvent.java b/JLayer1.0.1/src/javazoom/jl/player/advanced/PlaybackEvent.java new file mode 100644 index 0000000..08e3cae --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/advanced/PlaybackEvent.java @@ -0,0 +1,51 @@ +/* + * 11/19/04 1.0 moved to LGPL. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player.advanced; + +/** + * An event which indicates a Player has performed an 'playback action' + * @author Paul Stanton (http://wanto.f2o.org/) + */ +public class PlaybackEvent +{ + public static int STOPPED = 1; + public static int STARTED = 2; + + private AdvancedPlayer source; + private int frame; + private int id; + + public PlaybackEvent(AdvancedPlayer source, int id, int frame) + { + this.id = id; + this.source = source; + this.frame = frame; + } + + public int getId(){return id;} + public void setId(int id){this.id = id;} + + public int getFrame(){return frame;} + public void setFrame(int frame){this.frame = frame;} + + public AdvancedPlayer getSource(){return source;} + public void setSource(AdvancedPlayer source){this.source = source;} + +} diff --git a/JLayer1.0.1/src/javazoom/jl/player/advanced/PlaybackListener.java b/JLayer1.0.1/src/javazoom/jl/player/advanced/PlaybackListener.java new file mode 100644 index 0000000..9b04298 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/advanced/PlaybackListener.java @@ -0,0 +1,30 @@ +/* + * 11/19/04 1.0 moved to LGPL. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player.advanced; + +/** + * Listener for javalayer Player playback + * @author Paul Stanton (http://wanto.f2o.org/) + */ +public abstract class PlaybackListener +{ + public void playbackStarted(PlaybackEvent evt){} + public void playbackFinished(PlaybackEvent evt){} +} diff --git a/JLayer1.0.1/src/javazoom/jl/player/advanced/jlap.java b/JLayer1.0.1/src/javazoom/jl/player/advanced/jlap.java new file mode 100644 index 0000000..beedea6 --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/advanced/jlap.java @@ -0,0 +1,116 @@ +/* + * 11/19/04 1.0 moved to LGPL. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player.advanced; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +import javazoom.jl.decoder.JavaLayerException; + +/** + * This class implements a sample player using Playback listener. + */ +public class jlap +{ + + public static void main(String[] args) + { + jlap test = new jlap(); + if (args.length != 1) + { + test.showUsage(); + System.exit(0); + } + else + { + try + { + test.play(args[0]); + } + catch (Exception ex) + { + System.err.println(ex.getMessage()); + System.exit(0); + } + } + } + + public void play(String filename) throws JavaLayerException, IOException + { + InfoListener lst = new InfoListener(); + playMp3(new File(filename), lst); + } + + public void showUsage() + { + System.out.println("Usage: jla "); + System.out.println(""); + System.out.println(" e.g. : java javazoom.jl.player.advanced.jlap localfile.mp3"); + } + + public static AdvancedPlayer playMp3(File mp3, PlaybackListener listener) throws IOException, JavaLayerException + { + return playMp3(mp3, 0, Integer.MAX_VALUE, listener); + } + + public static AdvancedPlayer playMp3(File mp3, int start, int end, PlaybackListener listener) throws IOException, JavaLayerException + { + return playMp3(new BufferedInputStream(new FileInputStream(mp3)), start, end, listener); + } + + public static AdvancedPlayer playMp3(final InputStream is, final int start, final int end, PlaybackListener listener) throws JavaLayerException + { + final AdvancedPlayer player = new AdvancedPlayer(is); + player.setPlayBackListener(listener); + // run in new thread + new Thread() + { + public void run() + { + try + { + player.play(start, end); + } + catch (Exception e) + { + throw new RuntimeException(e.getMessage()); + } + } + }.start(); + return player; + } + + public class InfoListener extends PlaybackListener + { + public void playbackStarted(PlaybackEvent evt) + { + System.out.println("Play started from frame " + evt.getFrame()); + } + + public void playbackFinished(PlaybackEvent evt) + { + System.out.println("Play completed at frame " + evt.getFrame()); + System.exit(0); + } + } +} \ No newline at end of file diff --git a/JLayer1.0.1/src/javazoom/jl/player/jlp.java b/JLayer1.0.1/src/javazoom/jl/player/jlp.java new file mode 100644 index 0000000..ddb3d5e --- /dev/null +++ b/JLayer1.0.1/src/javazoom/jl/player/jlp.java @@ -0,0 +1,176 @@ +/* + * 11/19/04 1.0 moved to LGPL. + * + * 06/04/01 Streaming support added. javalayer@javazoom.net + * + * 29/01/00 Initial version. mdm@techie.com + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player; + +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import javazoom.jl.decoder.JavaLayerException; + +/** + * The jlp class implements a simple command-line + * player for MPEG audio files. + * + * @author Mat McGowan (mdm@techie.com) + */ +public class jlp +{ + private String fFilename = null; + private boolean remote = false; + + public static void main(String[] args) + { + int retval = 0; + try + { + jlp player = createInstance(args); + if (player!=null) + player.play(); + } + catch (Exception ex) + { + System.err.println(ex); + ex.printStackTrace(System.err); + retval = 1; + } + System.exit(retval); + } + + static public jlp createInstance(String[] args) + { + jlp player = new jlp(); + if (!player.parseArgs(args)) + player = null; + return player; + } + + private jlp() + { + } + + public jlp(String filename) + { + init(filename); + } + + protected void init(String filename) + { + fFilename = filename; + } + + protected boolean parseArgs(String[] args) + { + boolean parsed = false; + if (args.length == 1) + { + init(args[0]); + parsed = true; + remote = false; + } + else if (args.length == 2) + { + if (!(args[0].equals("-url"))) + { + showUsage(); + } + else + { + init(args[1]); + parsed = true; + remote = true; + } + } + else + { + showUsage(); + } + return parsed; + } + + public void showUsage() + { + System.out.println("Usage: jlp [-url] "); + System.out.println(""); + System.out.println(" e.g. : java javazoom.jl.player.jlp localfile.mp3"); + System.out.println(" java javazoom.jl.player.jlp -url http://www.server.com/remotefile.mp3"); + System.out.println(" java javazoom.jl.player.jlp -url http://www.shoutcastserver.com:8000"); + } + + public void play() + throws JavaLayerException + { + try + { + System.out.println("playing "+fFilename+"..."); + InputStream in = null; + if (remote == true) in = getURLInputStream(); + else in = getInputStream(); + AudioDevice dev = getAudioDevice(); + Player player = new Player(in, dev); + player.play(); + } + catch (IOException ex) + { + throw new JavaLayerException("Problem playing file "+fFilename, ex); + } + catch (Exception ex) + { + throw new JavaLayerException("Problem playing file "+fFilename, ex); + } + } + + /** + * Playing file from URL (Streaming). + */ + protected InputStream getURLInputStream() + throws Exception + { + + URL url = new URL(fFilename); + InputStream fin = url.openStream(); + BufferedInputStream bin = new BufferedInputStream(fin); + return bin; + } + + /** + * Playing file from FileInputStream. + */ + protected InputStream getInputStream() + throws IOException + { + FileInputStream fin = new FileInputStream(fFilename); + BufferedInputStream bin = new BufferedInputStream(fin); + return bin; + } + + protected AudioDevice getAudioDevice() + throws JavaLayerException + { + return FactoryRegistry.systemRegistry().createAudioDevice(); + } + +} diff --git a/JLayer1.0.1/srctest/AllTests.java b/JLayer1.0.1/srctest/AllTests.java new file mode 100644 index 0000000..976f5f3 --- /dev/null +++ b/JLayer1.0.1/srctest/AllTests.java @@ -0,0 +1,39 @@ +/* + * 11/19/04 1.0 moved to LGPL. + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +import javazoom.jl.decoder.BitstreamTest; +import javazoom.jl.player.jlpTest; +import junit.framework.Test; +import junit.framework.TestSuite; + +/** + * JavaLayer test suite. + */ +public class AllTests +{ + public static Test suite() + { + TestSuite suite = new TestSuite("Test for javazoom.jl.decoder"); + //$JUnit-BEGIN$ + suite.addTest(new TestSuite(BitstreamTest.class)); + suite.addTest(new TestSuite(jlpTest.class)); + //$JUnit-END$ + return suite; + } +} diff --git a/JLayer1.0.1/srctest/javazoom/jl/decoder/BitstreamTest.java b/JLayer1.0.1/srctest/javazoom/jl/decoder/BitstreamTest.java new file mode 100644 index 0000000..746f089 --- /dev/null +++ b/JLayer1.0.1/srctest/javazoom/jl/decoder/BitstreamTest.java @@ -0,0 +1,155 @@ +/* + * 11/19/2004 : 1.0 moved to LGPL. + * 01/01/2004 : Initial version by E.B javalayer@javazoom.net + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.decoder; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Properties; + +import junit.framework.TestCase; + +/** + * Bitstream unit test. + * It matches test.mp3 properties to test.mp3.properties expected results. + * As we don't ship test.mp3, you have to generate your own test.mp3.properties + * Uncomment out = System.out; in setUp() method to generated it on stdout from + * your own MP3 file. + * @since 0.4 + */ +public class BitstreamTest extends TestCase +{ + private String basefile = null; + private String name = null; + private String filename = null; + private PrintStream out = null; + private Properties props = null; + private FileInputStream mp3in = null; + private Bitstream in = null; + + /** + * Constructor for BitstreamTest. + * @param arg0 + */ + public BitstreamTest(String arg0) + { + super(arg0); + } + /* + * @see TestCase#setUp() + */ + protected void setUp() throws Exception + { + super.setUp(); + props = new Properties(); + InputStream pin = getClass().getClassLoader().getResourceAsStream("test.mp3.properties"); + props.load(pin); + basefile = (String) props.getProperty("basefile"); + name = (String) props.getProperty("filename"); + filename = basefile + name; + mp3in = new FileInputStream(filename); + in = new Bitstream(mp3in); + //out = System.out; + } + /* + * @see TestCase#tearDown() + */ + protected void tearDown() throws Exception + { + super.tearDown(); + in.close(); + mp3in.close(); + } + + public void testStream() + { + try + { + InputStream id3in = in.getRawID3v2(); + int size = id3in.available(); + Header header = in.readFrame(); + if (out != null) + { + out.println("--- "+filename+" ---"); + out.println("ID3v2Size="+size); + out.println("version="+header.version()); + out.println("version_string="+header.version_string()); + out.println("layer="+header.layer()); + out.println("frequency="+header.frequency()); + out.println("frequency_string="+header.sample_frequency_string()); + out.println("bitrate="+header.bitrate()); + out.println("bitrate_string="+header.bitrate_string()); + out.println("mode="+header.mode()); + out.println("mode_string="+header.mode_string()); + out.println("slots="+header.slots()); + out.println("vbr="+header.vbr()); + out.println("vbr_scale="+header.vbr_scale()); + out.println("max_number_of_frames="+header.max_number_of_frames(mp3in.available())); + out.println("min_number_of_frames="+header.min_number_of_frames(mp3in.available())); + out.println("ms_per_frame="+header.ms_per_frame()); + out.println("frames_per_second="+(float) ((1.0 / (header.ms_per_frame())) * 1000.0)); + out.println("total_ms="+header.total_ms(mp3in.available())); + out.println("SyncHeader="+header.getSyncHeader()); + out.println("checksums="+header.checksums()); + out.println("copyright="+header.copyright()); + out.println("original="+header.original()); + out.println("padding="+header.padding()); + out.println("framesize="+header.calculate_framesize()); + out.println("number_of_subbands="+header.number_of_subbands()); + } + assertEquals("ID3v2Size",Integer.parseInt((String)props.getProperty("ID3v2Size")),size); + assertEquals("version",Integer.parseInt((String)props.getProperty("version")),header.version()); + assertEquals("version_string",(String)props.getProperty("version_string"),header.version_string()); + assertEquals("layer",Integer.parseInt((String)props.getProperty("layer")),header.layer()); + assertEquals("frequency",Integer.parseInt((String)props.getProperty("frequency")),header.frequency()); + assertEquals("frequency_string",(String)props.getProperty("frequency_string"),header.sample_frequency_string()); + assertEquals("bitrate",Integer.parseInt((String)props.getProperty("bitrate")),header.bitrate()); + assertEquals("bitrate_string",(String)props.getProperty("bitrate_string"),header.bitrate_string()); + assertEquals("mode",Integer.parseInt((String)props.getProperty("mode")),header.mode()); + assertEquals("mode_string",(String)props.getProperty("mode_string"),header.mode_string()); + assertEquals("slots",Integer.parseInt((String)props.getProperty("slots")),header.slots()); + assertEquals("vbr",Boolean.valueOf((String)props.getProperty("vbr")),new Boolean(header.vbr())); + assertEquals("vbr_scale",Integer.parseInt((String)props.getProperty("vbr_scale")),header.vbr_scale()); + assertEquals("max_number_of_frames",Integer.parseInt((String)props.getProperty("max_number_of_frames")),header.max_number_of_frames(mp3in.available())); + assertEquals("min_number_of_frames",Integer.parseInt((String)props.getProperty("min_number_of_frames")),header.min_number_of_frames(mp3in.available())); + assertTrue("ms_per_frame",Float.parseFloat((String)props.getProperty("ms_per_frame"))==header.ms_per_frame()); + assertTrue("frames_per_second",Float.parseFloat((String)props.getProperty("frames_per_second"))==(float) ((1.0 / (header.ms_per_frame())) * 1000.0)); + assertTrue("total_ms",Float.parseFloat((String)props.getProperty("total_ms"))==header.total_ms(mp3in.available())); + assertEquals("SyncHeader",Integer.parseInt((String)props.getProperty("SyncHeader")),header.getSyncHeader()); + assertEquals("checksums",Boolean.valueOf((String)props.getProperty("checksums")),new Boolean(header.checksums())); + assertEquals("copyright",Boolean.valueOf((String)props.getProperty("copyright")),new Boolean(header.copyright())); + assertEquals("original",Boolean.valueOf((String)props.getProperty("original")),new Boolean(header.original())); + assertEquals("padding",Boolean.valueOf((String)props.getProperty("padding")),new Boolean(header.padding())); + assertEquals("framesize",Integer.parseInt((String)props.getProperty("framesize")),header.calculate_framesize()); + assertEquals("number_of_subbands",Integer.parseInt((String)props.getProperty("number_of_subbands")),header.number_of_subbands()); + in.closeFrame(); + } + catch (BitstreamException e) + { + assertTrue("BitstreamException : "+e.getMessage(),false); + } + catch (IOException e) + { + assertTrue("IOException : "+e.getMessage(),false); + } + } +} diff --git a/JLayer1.0.1/srctest/javazoom/jl/player/jlpTest.java b/JLayer1.0.1/srctest/javazoom/jl/player/jlpTest.java new file mode 100644 index 0000000..c885769 --- /dev/null +++ b/JLayer1.0.1/srctest/javazoom/jl/player/jlpTest.java @@ -0,0 +1,87 @@ +/* + * 11/19/2004 : 1.0 moved to LGPL. + * 01/01/2004 : Initial version by E.B javalayer@javazoom.net + *----------------------------------------------------------------------- + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *---------------------------------------------------------------------- + */ + +package javazoom.jl.player; + +import java.io.InputStream; +import java.util.Properties; + +import javazoom.jl.decoder.JavaLayerException; +import junit.framework.TestCase; + +/** + * Simple player unit test. + * It takes around 3-6% of CPU and 10MB RAM under Win2K/PIII/1GHz/JDK1.5.0 + * It takes around 10-12% of CPU and 10MB RAM under Win2K/PIII/1GHz/JDK1.4.1 + * It takes around 08-10% of CPU and 10MB RAM under Win2K/PIII/1GHz/JDK1.3.1 + * @since 0.4 + */ +public class jlpTest extends TestCase +{ + private Properties props = null; + private String filename = null; + + /** + * Constructor for jlpTest. + * @param arg0 + */ + public jlpTest(String arg0) + { + super(arg0); + } + /* + * @see TestCase#setUp() + */ + protected void setUp() throws Exception + { + super.setUp(); + props = new Properties(); + InputStream pin = getClass().getClassLoader().getResourceAsStream("test.mp3.properties"); + props.load(pin); + String basefile = (String) props.getProperty("basefile"); + String name = (String) props.getProperty("filename"); + filename = basefile + name; + //out = System.out; + } + /* + * @see TestCase#tearDown() + */ + protected void tearDown() throws Exception + { + super.tearDown(); + } + + public void testPlay() + { + String[] args = new String[1]; + args[0] = filename; + jlp player = jlp.createInstance(args); + try + { + player.play(); + assertTrue("Play",true); + } + catch (JavaLayerException e) + { + e.printStackTrace(); + assertTrue("JavaLayerException : "+e.getMessage(),false); + } + } +} diff --git a/JLayer1.0.1/srctest/test.mp3.properties b/JLayer1.0.1/srctest/test.mp3.properties new file mode 100644 index 0000000..a536d2a --- /dev/null +++ b/JLayer1.0.1/srctest/test.mp3.properties @@ -0,0 +1,30 @@ +# MP3 file +basefile=c:/data/ +filename=test.mp3 + +# BitStream properties +ID3v2Size=2150 +version=1 +version_string=MPEG-1 +layer=3 +frequency=44100 +frequency_string=44.1 kHz +bitrate=229000 +bitrate_string=229 kb/s +mode=1 +mode_string=Joint stereo +slots=381 +vbr=true +vbr_scale=78 +max_number_of_frames=8122 +min_number_of_frames=8122 +ms_per_frame=26.12245 +frames_per_second=38.28125 +total_ms=212166.53 +SyncHeader=-290752 +checksums=false +copyright=false +original=false +padding=false +framesize=413 +number_of_subbands=27 \ No newline at end of file diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..b82af13 --- /dev/null +++ b/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project Task5. + + + diff --git a/build/classes/.netbeans_automatic_build b/build/classes/.netbeans_automatic_build new file mode 100644 index 0000000..e69de29 diff --git a/build/classes/.netbeans_update_resources b/build/classes/.netbeans_update_resources new file mode 100644 index 0000000..e69de29 diff --git a/build/classes/AllTests.class b/build/classes/AllTests.class new file mode 100644 index 0000000000000000000000000000000000000000..05578c2fa7930934d737eecbb9d1c6b7841761e6 GIT binary patch literal 666 zcmaJ;O>Yx16ddPsv!t{H`avm`;gle;d*RepNEI!o6-Z5p#L?NB#p%Y5Y%i3b)l(&q z;LeXiJf~lP03Yo4X5Y-b(SHB&`73~D*pAW0S{v&THe%FpKf-1k58BvbXzeMj{BwqS ze=uffyfDX-VL4M;zN%&uX-8sG64J{|F3Pd6D)g6N!@pOKAm*4?5{w=)?Egn=F7gvm$Uo`)*ht5<@m!uN=NY1_1Pm)T zd%vDcWlmpL``HaR^j7I&cQD2ywCKNvQwK?)Lw8JFN-v|g`Q#kzjEWj=(cM~rTj)~V zy%@j}Zd2F6GFE6RkROv+IPn+M-uCL}XndoN{i3jqJA~BGBg?zjroZ!=f8ni>%Dn}1 F^(XdvoP_`Y literal 0 HcmV?d00001 diff --git a/build/classes/CHANGES.txt b/build/classes/CHANGES.txt new file mode 100644 index 0000000..9605c9f --- /dev/null +++ b/build/classes/CHANGES.txt @@ -0,0 +1,122 @@ + JLayer 1.0.1 + JavaZOOM 1999-2008 + + Project Homepage : + http://www.javazoom.net/javalayer/javalayer.html + + JAVA and MP3 online Forums : + http://www.javazoom.net/services/forums/index.jsp +----------------------------------------------------- + +11/16/2008: JLayer 1.0.1 +------------------------ +- Subband allocation bug fix. + + +11/28/2004: JLayer 1.0 +---------------------- +- VBRI frame header (Fraunhofer VBR) support added in Header.java. +- Frame controls improved. It fixes the following bugs : + + ArrayIndexOutOfBound Exception in t_43[] array. + + ArrayIndexOutOfBound Exception in huffman_decode() method. +- Licensing moved from GPL to LGPL : It means that you can use JLayer in + your own application without being restricted by GPL license issues. + It's more business friendly. +- JavaLayer renamed into JLayer to be compliant to SUN trademark rules. +- Tested under JRE 1.5.0. CPU usage < 1%, RAM usage < 12MB under P4/2Ghz. + + +01/02/2004: JavaLayer 0.4 +------------------------- +- XING VBR header frame support improved in Header.java : + + public boolean vbr() added. + + public int vbr_scale() added. + + public byte[] vbr_toc() added. + total_ms(), ms_per_frame(), min_number_of_frames(int), max_number_of_frames(int), + bitrate_string(), bitrate() methods check for VBR status. + +- ID3v2 frames support improved : + + public InputStream getRawID3v2() added in Bitstream.java + +- Misc : + Bug fixed in the decoder for some +320kbps stream. + Bug fixed : SYNC conflict with some ID3v2 frames. + + public int bitrate() added. + + public int bitrate_instant() added. + jUnit tests added (see srctest/ folder) + + +08/04/2003: JavaLayer 0.3.0 +--------------------------- +- Advanced threaded player classes added. + + +04/01/2002: JavaLayer 0.2.0 +--------------------------- + - MPEG 2.5 support added. + Encoded files with LAME are supported. + - Bug fixes for ms time computation with free format. + + Bench notes : + + Heap use range : 1380KB to 1900KB - 370 classes loaded. + + Footprint : ~8MB under WinNT4 + J2SE 1.3 (Hotspot). + + CPU usage : ~12% under PIII 800Mhz/WinNT4+J2SE 1.3 (Hotspot). + + CPU usage : ~11% under PIII 1Ghz/Win2K+J2SE 1.4 (Hotspot). + + +03/04/2002: JavaLayer 0.1.2 +--------------------------- + - API improved to let developers get MP3 bitrate, framelength and total time features. + - Additionnal files added (CHANGES.txt and LICENSE.txt). + + +10/01/2001: JavaLayer 0.1.1 +--------------------------- + - Bugs fixes in the decoder (Layer III). + + +07/02/2001: JavaLayer 0.1.0 +--------------------------- + - Streaming support added to the simple player (jlp). + - Bugs fixes in the simple player (too fast playback for low rate files). + + +06/04/2001: JavaLayer 0.0.9 +--------------------------- + - Bugs fixes in Layer I and Layer II decoder. + - ANT build script added. + - HTML page added to play MP3 through PlayerApplet in a JavaSound 1.0 (JDK 1.3) + compliant browser. + + +04/16/2000: JavaLayer 0.0.8 +--------------------------- +A simple player have been added and you can now play MP3 in real time with JVM +that supports JavaSound 1.0 (i.e JDK 1.3). + + - Bug fixes. + - Decoder improvements. + - Build Scripts have been added for Win32 and Unix platforms. + + +12/16/1999: JavaLayer 0.0.7 +--------------------------- +JavaLayer 0.0.7 contains significant improvements over version 0.0 : + + - API and documentation added. + - The decoder is much more faster. Fast enough for real-time decoding. + - Huffman/Layer3 tables serialization added. + - New buffers management. + - Exceptions + Utils added. + - Bugs fixes. + + +02/28/1999: JavaLayer 0.0 +------------------------- +JavaLayer V0.0 does not play any MP3 but it allows the MP3toWAV conversion. +This is the first step in this project. We do it thanks to free mp3 ressources +available on the net: + + - MAPlay for the OO MP3 decoder (C++). + - WAV format description from Microsoft. + +The MP3 decoder works now but it is too slow to allow real time implementation. diff --git a/build/classes/LICENSE.txt b/build/classes/LICENSE.txt new file mode 100644 index 0000000..b1e3f5a --- /dev/null +++ b/build/classes/LICENSE.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/build/classes/README.txt b/build/classes/README.txt new file mode 100644 index 0000000..51bb94e --- /dev/null +++ b/build/classes/README.txt @@ -0,0 +1,81 @@ + JLayer 1.0.1 + JavaZOOM 1999-2008 + + Project Homepage : + http://www.javazoom.net/javalayer/javalayer.html + + JAVA and MP3 online Forums : + http://www.javazoom.net/services/forums/index.jsp +----------------------------------------------------- + +DESCRIPTION : +----------- +JLayer is a library that decodes/plays/converts MPEG 1/2/2.5 Layer 1/2/3 +(i.e. MP3) in real time for the JAVA(tm) platform. This is a non-commercial project +and anyone can add his contribution. JLayer is licensed under LGPL (see LICENSE.txt). + + +FAQ : +--- + +- How to install JLayer ? + Before running JLayer you must set PATH and CLASSPATH for JAVA + and you must add jl1.0.1.jar to the CLASSPATH. + +- Do I need JMF to run JLayer player ? + No, JMF is not required. You just need a JVM JavaSound 1.0 compliant. + (i.e. JVM1.3 or higher). + +- How to run the MP3TOWAV converter ? + java javazoom.jl.converter.jlc -v -p output.wav yourfile.mp3 + (Note : MP3TOWAV converter should work under jdk1.1.x or higher) + +- How to run the simple MP3 player ? + java javazoom.jl.player.jlp localfile.mp3 + or + java javazoom.jl.player.jlp -url http://www.aserver.com/remotefile.mp3 + Note : MP3 simple player only works under JVM that supports JavaSound 1.0 (i.e JDK1.3.x+) + +- How to run the advanced (threaded) MP3 player ? + java javazoom.jl.player.advanced.jlap localfile.mp3 + +- Does simple MP3 player support streaming ? + Yes, use the following command to play music from stream : + java javazoom.jl.player.jlp -url http://www.shoutcastserver.com:8000 + (If JLayer returns without playing SHOUTcast stream then it might mean + that the server expect a winamp like "User-Agent" in HTTP request). + +- Does JLayer support MPEG 2.5 ? + Yes, it works fine for all files generated with LAME. + +- Does JLayer support VBR ? + Yes, It supports VBRI and XING VBR header too. + +- How to get ID3v1 or ID3v2 tags from JLayer API ? + The API provides a getRawID3v2() method to get an InputStream on ID3v2 frames. + +- How to skip frames to have a seek feature ? + See javazoom.jl.player.advanced.jlap source to learn how to skip frames. + +- How much memory/CPU JLayer needs to run ? + Here are our benchmark notes : + - Heap use range : 1380KB to 1900KB - 370 classes loaded. + - Footprint : ~8MB under WinNT4/Win2K + J2SE 1.3 (Hotspot). + ~10MB under WinNT4/Win2K + J2SE 1.4.1 (Hotspot). + - CPU usage : ~12% under PIII 800Mhz/WinNT4+J2SE 1.3 (Hotspot). + ~8% under PIII 1Ghz/Win2K+J2SE 1.3.1 (Hotspot). + ~12% under PIII 1Ghz/Win2K+J2SE 1.4.1 (Hotspot). + ~1% under PIII 1Ghz/Win2K+J2SE 1.5.0 (Hotspot). + +- How to contact JLayer developers ? + Try to post a thread on Java&MP3 online forums at : + http://www.javazoom.net/services/forums/index.jsp + You can also contact us at jlayer@javazoom.net for contributions. + + +KNOWN PROBLEMS : +-------------- +99% of MP3 plays well with JLayer but some (1%) return an ArrayIndexOutOfBoundsException +while playing. It might come from invalid audio frames. +Workaround : Just try/catch ArrayIndexOutOfBoundsException in your code to skip + non-detected invalid frames. \ No newline at end of file diff --git a/build/classes/build-unix.sh b/build/classes/build-unix.sh new file mode 100644 index 0000000..5f50fb3 --- /dev/null +++ b/build/classes/build-unix.sh @@ -0,0 +1,42 @@ +#!/bin/sh +####################################################### +# JLayer 1.0.1 Un*x Build Script +# +# Project Homepage : +# http://www.javazoom.net/javalayer/javalayer.html +# +# Java and MP3 online Forums : +# http://www.javazoom.net/services/forums/index.jsp +# +####################################################### + +# JAVA_HOME and JL must be set below +JAVA_HOME=/usr/local/java/jdk1.3.1 +JL=/home/javazoom/JLayer1.0.1 + +#--------------------------- +# Do not modify lines below +#--------------------------- +CLASSPATH=$JAVA_HOME/lib/tools.jar +PATH=$PATH:$JAVA_HOME/bin +JLDECODERSRC=$JL/src/javazoom/jl/decoder +JLCONVERTERSRC=$JL/src/javazoom/jl/converter +JLSIMPLEPLAYER=$JL/src/javazoom/jl/player +JLADVPLAYER=$JL/src/javazoom/jl/player/advanced +javac -classpath $CLASSPATH:$JL/classes -d $JL/classes $JLDECODERSRC/*.java +javac -classpath $CLASSPATH:$JL/classes -d $JL/classes $JLCONVERTERSRC/*.java +cd $JLDECODERSRC +cp *.ser $JL/classes/javazoom/jl/decoder + +# MP3 Simple + Advanced Player support : +# +# Comment both lines below for JDK1.1.x or JDK 1.2.x +cd $JLSIMPLEPLAYER +javac -classpath $JL/classes -d $JL/classes *.java +cd $JLADVPLAYER +javac -classpath $JL/classes -d $JL/classes *.java + +# Jar Generation +cd $JL/classes +jar cvf ../jl1.0.1.jar * +cd $JL diff --git a/build/classes/build-win32.bat b/build/classes/build-win32.bat new file mode 100644 index 0000000..bbbc7b8 --- /dev/null +++ b/build/classes/build-win32.bat @@ -0,0 +1,42 @@ +rem ####################################################### +rem # JLayer 1.0.1 WIN32 Build Script +rem # +rem # Project Homepage : +rem # http://www.javazoom.net/javalayer/javalayer.html +rem # +rem # Java and MP3 online Forums : +rem # http://www.javazoom.net/services/forums/index.jsp +rem # +rem ####################################################### + +rem # JAVA_HOME and JL must be set below +set JAVA_HOME=c:\jdk1.3.1 +set JL=c:\JLayer1.0.1 + +rem #--------------------------- +rem # Do not modify lines below +rem #--------------------------- +set CLASSPATH=%JAVA_HOME%\lib\tools.jar +set PATH=%PATH%;%JAVA_HOME%\bin +set JLDECODERSRC=%JL%\src\javazoom\jl\decoder +set JLCONVERTERSRC=%JL%\src\javazoom\jl\converter +set JLSIMPLEPLAYER=%JL%\src\javazoom\jl\player +set JLADVPLAYER=%JL%\src\javazoom\jl\player\advanced +javac -classpath %CLASSPATH%;%JL%\classes -d %JL%\classes %JLDECODERSRC%\*.java +javac -classpath %CLASSPATH%;%JL%\classes -d %JL%\classes %JLCONVERTERSRC%\*.java +cd %JLDECODERSRC% +copy *.ser %JL%\classes\javazoom\jl\decoder + +rem # MP3 Simple + Advanced Player support : +rem # +rem # Comment both lines below for JDK1.1.x or JDK 1.2.x +cd %JLSIMPLEPLAYER% +javac -classpath %JL%\classes -d %JL%\classes *.java + +cd %JLADVPLAYER% +javac -classpath %JL%\classes -d %JL%\classes *.java + +rem # JAR Generation +cd %JL%\classes +jar cvf ..\jl1.0.1.jar * +cd %JL% diff --git a/build/classes/build.xml b/build/classes/build.xml new file mode 100644 index 0000000..200340a --- /dev/null +++ b/build/classes/build.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/classes/classes/javazoom/jl/converter/Converter$PrintWriterProgressListener.class b/build/classes/classes/javazoom/jl/converter/Converter$PrintWriterProgressListener.class new file mode 100644 index 0000000000000000000000000000000000000000..540332f54296ff3e42057e875fd4dd5c11344367 GIT binary patch literal 2429 zcmcIlT~ixn6n@^2u$yFo7{CGnn_AE$6w+#~O4?dJLYtZrBz$Xamt=vZn@!x^K#L#s z!XMzRy>P}WF7!ej8)jt2AK;I2Jn!xXmXDz`&N!Jl?>Xmv-t&DnfB*C6UjVM*TLIGo z?gnuWxe$D~9|FV2A-suvkhlk&%y3XBIfv6A?09nKu$CNlJbE1T>jtv2u0#t_JOySW~c78mUXJ9#ow#lk) zTC#2}%357%p{OaEw(Rn3c5dDUawTJEU(C);6pC4o*2f@CWhWNydUOIq=)w51M-yW3 z)pi)V^IP(^oK~ypSwq#WB}26oBf}6bE0(Nkd1YJCC_r7=DO%-1-C~G&fU`z*!%$2! zubP&kD+amF>2ywNvS}(N!<|GfX?xhMRx9Z(EnTYW+loOx(v+ja4W46=BJodF%L+s5 zO;uN|+YG&lGegcL7a2s=oU-GlXXJU6q2tiuLai)Y+)yHyv%%q-Y?w-U+K?-xjwf=* z0xc^g@@u5;DKZ@yZarua@4_YLzA4^1|Mi)c3v2cDb=P$CFwE@Jl2WtOs?N~kW~#~h zMtXkJsP4#XnvzMb3V6bh;f?!`Wo76*qwNAT2^HuPK0uX|4>_qxxQc5M-ocQBF=Qls zff~aF+khQf(W24Wn5e57Rf;C9+1YYjf&r5gnwxNZombk7t9qOv5U-f=1oelXHN|i) zN0Soj*yb*F1Uw~M)2gP#RWmNro3>d)riM9Cl6_-D!gJJ=Lsk2f-L@lzNHbfjTVr-8 z&j{`YM*)vY*u{>7FL{c)_)5Un628H6hR9KFg|#iEMA2V;b+u2fLge&zTzrLU#K$nXh)ZDf_rP!&0(vosA>!YnFR%}9lbrC# zNs?0@d6?uY9(jc1QIDJ^8?;`wE!r?TMFjCKZjgufNs6PDIH2nQY~=vHmEY0g--o|% zAAw&<&;J={QC)P5tnq(_j?_L{Q^PMIr21b%{LKZ@_PW460{TeXp85k~>?a8RJ@{LG zad9_s%f+ei(+_x<3N#S>0ZXx;ZA_6U4~yIA9C(3%|2A0?8VK>@0O6H=NYSB?l|5Wf zMM8Fz!>6DZ2o~dBdyc(ndcO1jdG0;m^Ef8loWG}>1C;Z3%`EQoEXMrajQhOCdi^9h z74%{#Ok5zt~xT>K-^U~>oSQcH@ZQ0V0s84 f{)p(XgS_NEI2@h#D1#_r8M3%elYE)Zt=8bbLFPvs literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/converter/Converter$ProgressListener.class b/build/classes/classes/javazoom/jl/converter/Converter$ProgressListener.class new file mode 100644 index 0000000000000000000000000000000000000000..eb6412aa3b5eb14e701a75a8d1a333436ca86690 GIT binary patch literal 551 zcmah{O;5r=5S^+4z^QsB9!M>*2~a``2QOr47lf2uvRlyj(>(YC{87ef zsf0wMmwo$Y=FQB`?8oQZI{@55O@|X5&Iwe8{ri?{joX7(*BYD7u;&sWHi4okxC$u` zM>JTo6sib;Y7%Way^%F=F}~aHSgsYh4+xYz!8c5XOb%B*4H*HgZrgTaL?FMSQZc_R z=@QLXb-S~m8~Q55(pUtB&phEXX*@8B(2N9GiT5PDu=Rh_yT8@HW_Bj)=`=}Q*|llC zcx)BU1t(Ce$2udRd}g>$Qasa1z?zLm9jXLw_PgE54V=;Tz1MvyW|Aq@nX8a-CJB^( znhG{Yml;r{n8JuC>9(LVSuigoaQROi4VME4(X`!Lnw+*N>7-1ig`x;5 zDqiufAYPVhx%!|F@{)pGOO`LPmjA=G{1w)HCX-%5EWFr8dMzBP=Rg@ThXK984VoAq(rZL^ht%| z^4Ez9Uq*O`ChfpzC zfgufRF)U@%QfoxT8M(=5*d(19mCl(OS}?34tDzNRD$c5~ROA@e^jK-rK53nMFPKC{|?0zBt?zEY<_cC~!noltJ+OsLapeD2Cgs@0u zb5rMtF=0eAhB*}NwFz&i?fw&~svSC?6k~QeYm#UE52fZ9x{%F|Mn^JH7gAW!_5!%D zHkA6?)_g+6ID@~(u#8c{x%fZfEb=TRlEjJ?Jy=*b6u`+BhRZH~IvY)xW8*e4B#hBA z3@tMFP@yi;Si*(MWOm%NJBSZKgsd*_P;-JIkR21I<0V6L8Qz*5#Arz<9FHT$u?u@u zOmLjTd5!~UmnZvFOmbX6jG@*k5~T?@FmKt4WHagF068TiLI&#-Z!`g|%+8WW-;oe|vwj?)tB6OK>u8OP`N zf?<^tl+#BElN#1EGKVZHOO0CJJ#JI&G!_(djfN!}Q)wr1)7~NteaZ0^u5;X&=h`u} zfWohFQ^hyb^+oQaFGW;JjNF#c_$@<2`B>&UkY>ib+uZ{rB1to$?Ey;Ewo8nqtq;~N zon-44sub(U&8gdsiySS?DH;D|^lu$Ovah1Wa+R*G^HE8TL0N3I>ZMI$uC@ zq%Xx^+kdw>jicbGVV&t69~;YBwn#Z~pQ52IPiY}&l2PcE5adbq9P;t8lwnh>{-#92 z5pjop(Z%wNJE1M8j^0VSct#nPC&w*In08-!RCJ{?nKVr$x?GOX0HWELat0N{qb{$d z7>7wjSQKSrQ=;qybOmH2b>+&U@LmS(++=}4OPn1SW^$5xf#O?`B=r@qP1nwjv0_nSF3w@QzKNXCIT#TMOX}6qK zMyt{?4R%YuC(&Ja0v_je2nxJ(7HA2#GM0y@AQGn|AL&&%!fgwLeXek%oG_C&n=5>n zEc;1#M{6G58&FtROE?c-Txrpj)`;%QL(!Ey{8LyFS7uPrFLwc5nTB@v7C{HlfOQlM zu-KV>1^et8*SZP=4XwS-^h94(Ld zLW=heYAD3Ge+ISvx^J4?P-hU5sw?9aA;t4O)S6W>#TyIU#_F9~C=gP9z)yNb9(tVX z{GN3EW+W8Q`5n}Gq5JP4s`EV7_({_@1)mZN%Kam;su|Sxhk~K1)@eK%_v@sBy?6 zpeCJ5@~#Bf)NG&b{{wXrr+ErB@oKrPaJG8&U5aO=Ca%VKL<#Xwz#*c18WfoHN%A*+ zK3~LN&N{?avh_s!dbUxn2(S*8C`pq~enwCVW&Ksr>Y>%+`I(-ws_1*iEs-#lo;rPD2Z{O?)$}2ELMRm@5kt*j+D1j(Ql(l*-q;Ye*nAbKY=|6 F{0lqOaP9yA literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/converter/RiffFile$RiffChunkHeader.class b/build/classes/classes/javazoom/jl/converter/RiffFile$RiffChunkHeader.class new file mode 100644 index 0000000000000000000000000000000000000000..51208f8d54697d0906d4de681955fa615c0ab23e GIT binary patch literal 417 zcmah_O-sW-6r9(zNgG!iwSFEXU=KBd(X-+uA_fFO!Fx=%c9Xb)B=*pM<)H{3`~m(b z@vT>(vM@VucyDL+eSLp?0yx8d4;}Pf*zgQnH?ZMg;9!T)PV@MRKrz8i^9MDTOq!{x zho=PpHcMv7yewbBtO(Om&t%oeD!f;d$+arvIrm;Dt(r^1;po5Sqer%j%CQu1u_7R_ zE8w6j&_mb39^quU-O%_((^s9}$Yd-lLjR8s8dpAAe1Ji4yZ{C7Xa&{+mVx#g>t=qN L(dD~?O>6-_VzFGS literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/converter/RiffFile.class b/build/classes/classes/javazoom/jl/converter/RiffFile.class new file mode 100644 index 0000000000000000000000000000000000000000..cdddf70755b0a33c2c8a93c1f3337e1ca0585a65 GIT binary patch literal 3887 zcmb7HU2I!f5&mxOZ(O&%aqDi=q}wiCwvKJG0?!9*0CIU5; z=bV`{GiPSbcjnyw?mxf$HGosN>q89rW<)U~q+nv!2Mt$*nX^#zalG10$-IySVXv7e zSt$G9$8{l}Hc^pr(LzvJWremdrjQh1^V`qQIXll?s*k zLT+)fu&7|y&`^9jGZBv`G8qL*Qo-(cxwKf#m8zF=3rhvY26$@21If{ebV5Xmf)=q% zO=PE2!_#Alu~d3W7Mc|7k%i&pXkt2%PN&i$RTbDGO^#n07)=gM#|K77MXq_;6PZMM zdSEb>&WcojL|c4`++ZB(;j!t7@#n`=lj91Sg_}$#vk3*3%+ra1Au3gv^z@vU@X67u zxf{7#j#2w4M@ufsxs7fK2agj|;k zxzd%+Otn%hUFl28x;|McR=K4SdSTEJaFTH*-LA=FF`>bWugDX^7TT# z$_?WSag?UyY zG$IM_CM?p4?6g}11;J3VV|#5F@Njvl5|4|*_T`SG9~VF}jF0${z$pbM9`De_{)>LZ zLHKCt&uHmxN4WRKY>#gEtVRX@Ilulw;0A>YKeOuXU8w{gdh@8G+Bd=FE8q>vVJk!6}F&6mnIOGgux zN}2ZG#}5=d`M-1IEpmczK$d#(s&n4Q{vV9`92Dp0ldOc1pU)I;5go^ODEbb^K>X`B zT>zT`;H3D{^De@)ii13FfpzdXs+qZRg*eoB?o_rMS+YclCHjLe$!#DE2Or9&h880~ zm#YkT<^+efSjQHf?YUBLF5ty-vBVosmlTLc_C1UDK>&FPPqCTC*j;v`6(`yC6?}+X z6S~NEH}I#)_cZWl$Uob_f0%r41K&sfYy*Fee18M~9QpGNyzDp7z{`Gv4g49#M0_$f zO(5=!#5>0p#!UE=j*#o)y27zD{4SKRavx1$^*+?_ub@p)q~C`Tz6T>2@CJ7EAO4}T-u^Sne@crc z$0eAFGgq1zg?}m%*!?c{FfiMCVD)OPnkqruL$iJGarbZfZ8PgoL zhRK-jur)l!3}M}1IokrFSZ$$DjJ6;sHa-`BX3Qk;VisW+BlvVuGpGsn8jAc#X4X!b z-N9Sl7SKDcWc66|7)=HQ4Hh7&I zNa=30@x}!XuH5Nw6WXI4_BQ0`Zpic1Jef>9A@7^OzjY<3)9$u&I~y_&nj1J&k88)o z)3}Vh7uQ4`u3;XjB!0l@R4z>SO|C+c6ZrG-X7{%}yGykW$8M}Tu#Bnw1ZDe_HgoPS zBXBN#TmNAfiW_KubMx=Unz$p(9F*%ghU1<)emA(~QJ!EJ@)`S2^{gBzdnE8z{%TF~ zkT-u{c4*!JtM$Mdi*9R<(QUmkx~(-vAMT7%yVmJy%`qFb>)o&h=cvV<*i*giy!uuTm!sP$v73pJ` z@-Xxa%OR~L;JSM9{3@*R{Wx;|$lKHaEbQ`ZK8_bWn{Mx%j*881Yu)GwE9f0cI2P14 z@RXc%GhfU7bq}9-JP#ju*n@^o;!~c7)+6lzuw5JJD_o0>{<^Pp=0)xE^?BJ#c(I5Lyp(tOvsD zTm#eNXRGHu%YX!L7t9CNlxiQ%PH94PAqL54ST!T+1|pH#0~D#hKau+L6Y*Z3bM3WH PfKK}KaSx3xfD!%|UhX3i literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/converter/WaveFile$WaveFileSample.class b/build/classes/classes/javazoom/jl/converter/WaveFile$WaveFileSample.class new file mode 100644 index 0000000000000000000000000000000000000000..0bffdcb0440b02b442d5875b023837a9391a64fb GIT binary patch literal 386 zcmah_O-sW-5Pg#-T@%-u`gu|md#DjvJu6-cf*^P(=)uz(7n`u%ND^}JUwJ4(k^TUG zlsGwf@lY9{EWGnds@grnhq6N4_LmFckiQb}t32>= u5I`Kab{Qd#2&=xVOGJ-1SH%N z%xwj!1foa_ClkY+1m<=yAHs3bQE8Jz121=W`6&(dH8+M0DG9s`{&sbzbs= zzEIa@j#uw5#wpG3hpdX`pCHrk2@Nyv?s$g5FcA(jtflCCmQ!6#6{stvMq!hI5sa1^ zMQe{{8F!4DNsDaL3bP{ZxwFx(=5~GFdd^1TX$ix6E=}ZqSeSm@VPe|`F2atP+ z5RMA0^bkvT5gCntN1}&8fi0&TQ>EJ!Nu`Y(>FBm?A zkq)*(*k?j-q!yl9O^ewb%!b~D@EH2 literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/converter/WaveFile$WaveFormat_ChunkData.class b/build/classes/classes/javazoom/jl/converter/WaveFile$WaveFormat_ChunkData.class new file mode 100644 index 0000000000000000000000000000000000000000..a93949632ca2b9d805ab9b6282c79be00a53a39f GIT binary patch literal 725 zcmaix-%iv}5XQel%XYV0p(2RNzg1SDaHBC{OGq{`(WC?}&2c?$yPQ2WZCwMe z;cIwf0-A8a1MpD9nFjU7;LY#MOwae7nd#-#`2~RI*leJQWfvY+I9g?_FMtw60z(xUxLp!IqrC-NlA#^FeZgUn1+UaCAiloPd= zYW0HdzD!M8z7kmP{O@x2K){Z&4~kS#WE(ph`_@w%y^h(__*z1 zj&X<6dBy`QIoJ@`y1BD<)nc`%cTw`$9PP?d3e5kz?Dc7Xd8B1gDB7aW-l3Le7`}Nw zQiD>!>Tvg~H$RFN{V0!qumizkP(<6mK53XLr+KQAMygJl3h;ei0OeDpSj0Wzead>U zsRC>V8)p!~PfP{Y87zj)m}b-%4x=8}{B^G3`}PmG-$}_G(8~V!S>(umODtYtn`PDo irxcxHIw8~(zpmN#x>)63>51Qd9ddBVv5Cic3j6{#E0+WS literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/converter/WaveFile.class b/build/classes/classes/javazoom/jl/converter/WaveFile.class new file mode 100644 index 0000000000000000000000000000000000000000..5eefd20405b01ebe9da50fb7069b0a9c4c45a022 GIT binary patch literal 2475 zcma)8-BTM?6#p&BW|Oc$pbZ~F(6(qH(5AHowa`ikAVErzL};vZwdzHD@ ze01#GF1ollvyc!V#09j(483eBy1AkhDyoa>)+C^Lng~=00VMU3@0vbLPHa*_TY>plj}8QpQ(&@HM`X z5yg~@7?Wwt$e3kv8Pxp#hhL(hf>R&?XCCgMR)zzxyzqbY55Tnc!cNtm!eLlBiH!3j zZm8un#nST38kJHkCLnmk`{MWG&TPb|2_cz{gtkKuck~gD?og{aXM&-JrbSlE5i`i3 zVU#hv1auw|xP~7acLb;@OW?`dQ{dvG3UFu)SoZ#H0yB-gq(W&31UGT8hE$*aALv?j z8*&UzHN#4A%eqaEZsn$KnW_a_K55pc3PxrlTF`QIk5;`7(qgt~jS=6JlG)f)%uJq9 zJl~*xPVbIN9VckWpQZsTq6cRY0S!VPxAdWEVhmY4;m}$M&(=zirqxfn1aqPjv|FI> zlR)ca_#T9?Zy!xz*FId~U*S%XNZf~qc!_!MK78Rlcsl&|(Yz0tdD3mM41OjbAWsAv z+w8%Mk!LD$)iastGm%DF)!8VgTKJV*U#2 zruNVhy2-U04&6h@v7k9*Tb!fDHj%}EYl8Iq-FMKzL7JREk5Ba8hL@W1#6+)SO#{rf z?xK~O+Dz(P+&y$TN;KdaDn0N-1F)e|r{n2`2jSZ7a3Y0sImeeVXZz@L57Aztb(mx$w4R~WO-L98 F{smfQN*VwF literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/converter/WaveFileObuffer.class b/build/classes/classes/javazoom/jl/converter/WaveFileObuffer.class new file mode 100644 index 0000000000000000000000000000000000000000..a8453593288ff0a19473d0f490e164d5af1a9633 GIT binary patch literal 999 zcmaJa{8iis#m69XnoMhGUejtiD_?d-bw^4WjD zKk$p6O#~7#`q9LnV&Y#=&+T4fBKYN;-g}KW)5zk2hU1u2aWRFd zG$a_}JS~DL!X*`#)6hDwqWHQZf+fOL6*DTXF(jY0HaB_5kXSD>sGU=TAys?s_&)cV z49uoN(27=_HfI=rwC%K=H$hOhwmqvB_-!6WJhVi0$@Ta=aqF+|ce^In}q$;?8r4nD+0tnJENCdp7%I#eG>ifRgE_yH}FZb(7x={ zxnRxe7(`CTkO(J`@A8jcTE|HY>$r}Rjyc@WaTB)~Cjal$N^iBo-?$B4BR@i`U(Fkb z`=+muUrRx_Dr{mHIRs{x%hUApv>5Whi5#-oSTEb+Qd#U9X=8$(OO_s%f`r(dz7k^j zIMe=drVS}W_(?GdMn;{cSfJAjVk(rmxesP4pS4{iir2Q`T6WT&c{ zgrx~AL(5TP-&nzn$1#9?d(CHlRwZP(BM&= z>5iX*OwS)E5GW~n6-uL(I6o-~-qW2*k2Hp}UD7=w3C*+8U1@<(Vp2?&N_)sG#M%V; nUwJ=z&Bn>NjsbbfjGAep(H@Si_8{l_kW4I^g!fA4k1F90p^DBH literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/converter/jlc$jlcArgs.class b/build/classes/classes/javazoom/jl/converter/jlc$jlcArgs.class new file mode 100644 index 0000000000000000000000000000000000000000..f2ba829bd2c3dcbf8d80ee9b9cb0b3ec3dec2599 GIT binary patch literal 2073 zcmZ`(>vI!T6#w03)7_@aE6`#sj|&2(DNStEs^uXiQVde4VnL`_wwv2z>t;9XZju(? zitpEFzMk>5 zQB_f6P@5IYtjwAWtjN&q)`MC-n60`c!LYsVi&?kn%=)Hbi+RHgT#xjwklx0d35G4P z<-BDJ$EcEZ`s{+yF!HwHl=Bw?&vME~7__zTdP8_~E=7ofZE7EF(GWI6=TXbCg5wN{ z%)mtkr4T~uu6eF0e1F_4`wYFAnFoUm5WeKJZ*SakDQJnNuI*6juAYq z<2fmf;#r11iS>r-R`UyXz9dWv=H&~XIXtQ(j~oMZJR=o5hAJwq>+s;~IF1)}1gOjF zhK>fBIu@~{;|AVQ@ve^d@IJ%dwK|-uSLcK`;d)ggIJIbsT41@3iVt*rh>sW!7M+G+ zTO}UXf`_%p@oAr`$4k_Lx*gKHH ziDyEOT*qhlT#_%Sp94C+#8)y0nupOTTNu9JeodIx{1P`D9(9(tJI9UrKzKZ;2tHKf zZkWP89be-cnu`f)|2b+uKgJn)&QMX$8cU>Ia2?7?+Kn;n;e4nuvv`%af9-VTB;?4j zzx|=jnK@^g&N@VUXK3X{BPG(?CsRGf4@!7XRr<*vgkK~NjZ=bO!D zuHEjOBLWrQGVE*L$N@0hXz5@cpno)O>VJ}6bR6LoY{T~j&EeLy7M!135N5F9D(VVN zw76b3Y*O#Ztee`%;E0^sPP1Zo<7BL4iUS3Plph#g;9s(W%Kwbw_Y@k@dn-!?nss`? zU4DJe4_})!DGscQ6dN&YTZ3D40#TN;qSXw~7j%3?Byznj%L_|>AgUBocx2lX1+m=x z6g~5R;s~Qkk9~U>XX7<(oSIa!oks+sx1OM$QZL1iSpsfEqApk-UwvZ5T{-J|@7 zzXo@YBwEXh4d{yipUMMZy}=CCq>czh_fM&%l{0ozfo4GN^`WYo9GSeM(aDO8!hsv l;3G2pp$LBZ$(UziJ`nTnm=mbJ#7f))mw1Z24Z?;4?O&}8`n~`F literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/converter/jlc.class b/build/classes/classes/javazoom/jl/converter/jlc.class new file mode 100644 index 0000000000000000000000000000000000000000..78c04b74ba648a00b3b5c25297fd49682fce1123 GIT binary patch literal 1592 zcmah}-BS}+6#rebo0}|)@?pfF@?lXzP~%67HnCcy*n&ZjpcrU{Ww|iRY<4r74OO4} z&>8=N_OUO#_@dJZPBUft?BC+wpglJUkeH}Dv**q|=XcM!=bYa?Z{Pp32jB`eH1uOw zLkuGv@eoEiE@)7tO2tK~zr>Ny5XNwrG?%5g!f}=3>o6I=(Qp)F8rpGPT5d@3twbj| zQW9{J<2wyK7!Kid<-FH z6pmp~8lJmuF0o}NOxM{Ko-aJwm_xPe=$OK^j(bQm^tVP&?4Q#ygZnyWF~^Yl0(NMQ zuIev(7R8(M+)Ymu3Tdn03rd~g)Mu^Tm2@mOQHRp;0P`~Kj1&tx9)hZ{D8*weGn}u# z&$=+Fh+blvvQHb&gg5!r6nWor9UVVoo}s4_p{}NPik3|$7>?JnCG5b4VcA7bBnNc- zf+td}=valpv8KbsIzzNRYD0Y+nlih#B}~6Tm3c=H&U#n2l&Fw7SHe9^C2mSlwJp|P$#sY>+FhGh%K$Ps_LnrX{$jKY$;l|vY> z6^(<=bTktsTZ>lLs#LS*il&+72gD^ZHZqW&5EVgq)bOB@&kKiod9g*Pk)~KRqEM9@ z@YN2dK8FwaZuR{V$zshw^4Q4xYSC$MO4@1Cox}N>`9B1qk?!Ri92t-ADXU{jMEMti^k|?<$ppsKh#KGf z3*Dm;RauQk)T^1_RJQZsT^VY27r~?&RYyzUe}XG-5Go@~S}hrjs(+*H546cu-+>Ys z<7KpG%Q%{Sjbq9#IwE`*oykzN0_~Ex?r5ll<2&e2hF{}E89n6cWLLC=-e|alQze`( p;Y@&{yrR4Rir?`95xO~zM3TJ-&=~K-075j_!?;F&mj0z+_(nYdXV27cC2R z{sI$YjGJ!Um`F^F@dx-9-1tkZ=bJv9jcIbfd+y`hbMN%$pKm_^%wsx%IL1}r1m|Gj zhBP;&nUH4Ez%2t)0>;vlm5tS>4+O-j!0>Xt<_CpZuvw@cxB_M`yZz|?#zS(oIs$sV zT=w07PEZeu9v!oIP~I-S3fyh4bS$6}3MkLWHxy>PpqtPayqXs*vLZXPDWEOaOPpa; zd_Qoj)iBJScxBI(ygnhmrSIP zHZg*PiSyDVkq{W$FB}$L*Xu8G`_){@-KCI5ZpjPQUEggSQdCkF{Bm&jgq>gM^K?L`rO%K-r6CNnrErL zn6Y-!%12CDTUu%1JyvY(IBzqfW=>Tx`xb`QhNhn6+nwLNl8JvMk$gtmNwqr7#dhbH zlc7YrFTxsVoTCVZA|^u-niL@iNg1;Xj(oZt?6&&dHZr{x-f#i_^Uz|UCbg^fsUoZt zPMT{2l)M)O<57@|f_MZN5kD63wdR_gRz6@TJboK-$L2@qpMGp0>`rg3>F#YyaxGq2 ox9I6|t9KX)18IdT55C>?0l{4o$jxqB`f)xau?Hm5`!5Op0?!e&U;qFB literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/Bitstream.class b/build/classes/classes/javazoom/jl/decoder/Bitstream.class new file mode 100644 index 0000000000000000000000000000000000000000..1c44dd5fba6dac56469b04c9680630001496265b GIT binary patch literal 4774 zcmb7HZFEy-9sk|jo7^wz`R-@G`Pt(+9zPj>|9fxR!V2e@p8Nct=l}fQ z-|p>S{`>a30Pe+~1K5FQ8qkktW%;5kGIrb4OJj zby>cl??l#5@<@@ut5-&AlFPaq_h zw(?rLHj-^hf zx^so@z0;+M@l^VFB7b7KyuVz`rlxvH=m=F1wF#dr6sEe5O?GFpX-X}2KVqvSoi29J zBL!-@m?rt*73l|y>3icO_ZL&Aa+#i!_tESlxnikoyH9o7bNO7kU%}e;MZ=aG)NxRO zHfTGfws%O}CJU)d;$d4-Gi`SEj#;;sLdL+ZnRNCgefSQDOI6G5z85;6S`^M?~GEo6riAxsFmG(2TgVV)g zHecRbC^7SeJcH1l=wL?u!Z(mB(+9!OFFOc>6WR3fta}m8XHN-0 zm>K(6d%_9IWGa8O`@lr8a4I!EneF{QLZ#G%2gKZfhw(}yl>#B#IB5!29D#H zf#2bM1)GKM=CFOZs0{obV+KAU;hq#RAK(uL_Q-KqmOtXUh@Lj^c|2`kL~y6^q=C<& zD31Nfz)lPpcoh2#oD-5ka8$-_t6hOdux=T})tvY3wySJES@$x8T$>G8}6?uNU)DI4@TnyH^t=<`VjY2qD zpUC}=-dhH`_jV#1O7v)CcFFSqFOgZx_P=f?sE0YZHJGV*-O`X%Iqcj95};@xiU zJ@_~&*iQDI*|i}%%Z5y^4VhsZGOIRZ)7g;8Bn(Oa*^s4cLw1`D*>Hp&=_?zuwQR`l zB5b7%>JpBt^QUd?57NA%`FJXA}ahh~|ftAV7djwCg0BknlGM%Sk)+>THn&)n+t(f$8t(Ng z(BLEXaZg{T8K~k;5g+NZqKr#t7123t7@k9H*x84<4{mcWyxY93+O_Bfv|3SdVO1wp ztWsrpw~DsM=b#N=W_h$=4T~ejG_;_Na2+;cvwOCvx{VltUAPB5#9Q3S`9Y@hF`gyW zoK;*Up~qc=M;W#~=D+(pyHuZO>r#8n#4L7qX+7q{v*_>g_Lx1hh%dX3YrKqmiP7sE z;TfS{H8UpUI)SfetUqQ3#+*oHs8D01VtleV;>K(vKPsiB)`+Xu;Z-hO!Mdaz7O;M( z^AfKl2ONv8%^fa7m^5pv*f58tA=aXYLA~qRWs(9qzc|I!y2ee!=5WjvaE<~rxmAW( z#~X(zr&*hYDG^tz_=uEo^Bi{X>8fILQ1Q-Ui&TS6JBRM!yKS^~k>w>@K6hQ4!y1R$ zM$4AZUDs&7hksEfWfRlTgE--GyF4=GUArWyVttTyZ1K#pt{2eGeZYyqk~1Ee?k-a+ zoe`!cA+)$ORng%T?h=E7sYQlI=)1)Ge$rahvX!uta5LeS3s^_6mX9i>x21}%IT&_$ ztGL^a?iy^NCpSlz??Rd(B^7nOFfGqK1INXZrL*2l1)OkAKTk`%8rPz)Q8I8h zAMsXx5k8Xl4O(2AL$ei&kn6rGdg5A`&8%=35AmgVvumG4(RD3EQ6kJ|MXI>pDQX3! z+um#P!gcvqyP*$U!KP$HS-?k~%nHrPWi5;9K zJ}YU{AEE+t{VYPZDnVM>7&S*husS=V}t)=Lw%S&?9EM`a%OadTq@&Ep|w+IYaPSU2Zc=3Kmflv#>h zKrdCT?Tp5%*iM7I9Dw0iQp@yTz=qD~Gaf}fFjxC$SPOd@*(le(SlFBCpQ~Nx7JsSwY+1ZlTS2w=aK@`0<6s5gcZy QLl`}VDdRli1c-;)q%5jh6!lW%Z_)-p z8AbLjT4>yA#j_Ccd;$Yjhp4}TCU2qRPOk-u4*O4hACC5ioj62+*}kd zZuFeVRsB!!9&Nt(kg5rG^b;*C8yvWS7PPVN;BQ%bJ~H?i=UszOkb4IAkp~8!A`cBd LLq0cngje7f9Xm@R literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/BitstreamException.class b/build/classes/classes/javazoom/jl/decoder/BitstreamException.class new file mode 100644 index 0000000000000000000000000000000000000000..40973016c6cce298b0be9edae9304d2b8a91a3a0 GIT binary patch literal 755 zcmaKq+fLg+5QhKB$%$D4fj}TBZ6F*R1G2bI#RUkdskkdb>ZKv8)F{}|vYh%%y=Wy) z0*MFUp-^Xo0}+(U^6q%|n}2qG@5AHmJ%BZ=*btb?VF=SU4`nkL)W?`O?lS)NuKWa$=H3^x|K^W+Dg6nJ__$R*C@x!+FO{*YmHwIRAeyHfw z-|NUmeV35h>hi%$gz6Hc=}AQ9IU7)3!Kj}d`MlnABQ zN830KIxVRTxIidw1o}uT=^s{~+p7vJV#$IdP)A9?#WG>h==_YLL+_yDwWP5@dC$pP zXZy0NgD89l{L0DO{<%~GVD0~k#(*ONch9b6{BBoxAbi5N7(#K~#*0*PNeot*id@pg^RVYW+mNPoXZX3V-m PwtRyePgk&i_Y&|IQ+Kcw literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/Control.class b/build/classes/classes/javazoom/jl/decoder/Control.class new file mode 100644 index 0000000000000000000000000000000000000000..dbc8adb56991fbbacbf6a60f1d2344c5019a7e05 GIT binary patch literal 240 zcmYk0I}XAy5JYDo5dP3}0jMmFfS?CaP|%sgiW~(m${Hj%8U+X7PzWbVK{c8;v!nfd zUvB^_%wkMpObH$Fy7YwhVtFJ);`vJGTiF--VO>@Sr%=1RB7|XP z{GP>n%dReO1CxIiEw-)nro@dFHNKEk*<{Q>tVFq;4X literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/Crc16.class b/build/classes/classes/javazoom/jl/decoder/Crc16.class new file mode 100644 index 0000000000000000000000000000000000000000..b62c4357b7063cc294ec2924b4553a27682bbc8e GIT binary patch literal 436 zcmYk0%}&Bl5QWceZ)q(R`BBs$uCbejjjN^`R;*l*n6M({w$Wl~4L=5rF@#reB`?6n zjej9=;REa-$pb7$txoO8a9$qus3x(w$I?RWLO~gZ&l^DZD;(&^46&j(5 zP2{7AKgu}UqqL_LbII=9%ro=M&OUcPe|`H7UkD3JNMzWaV-{iY2)}kjq0AF+5W6IEp7K;?jJkpr~M#Vc2PkdQ+6%8@A1@2191^ z(D-N^JI+zz&??k;)v0l}un{(HI$wxUJy1hBZuR7{>&|>pFBHeUV+^Qq${A)1qtC@B%Lx0xM~0 zz0$Cbl5BN@VX9Ybt7%y~jwws_u?0ye3d#(#gU+$x=_IpbxW*BUDAF~w3hBx%Sw^G5 z$v@Jg@$Q*nwCC!a*4Vd569ZZN*GxKE-+uds$c%cO+ckzoPaQrT^-Ie)3{sd6?*)rj z;iJOwP=9LnB9~#Tzk_Z?Qe*0hp<#wTlBI!SML5F`s2 z*IQuv7X(fb)Y}N{wGci<IrS3d*oOan|SpSOP Z2^q4d4CV%eBi--{fm8w{@f6F5{RYP2N1Olv literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/Decoder.class b/build/classes/classes/javazoom/jl/decoder/Decoder.class new file mode 100644 index 0000000000000000000000000000000000000000..5066962afff340baa840320afffe09b39cb91a7b GIT binary patch literal 3559 zcma)8>30)V6#q>-$&krd+EUO`s~|fx;kcYLXLAfPU4i{PRDUS z9+2aMLU>4)hc!H+qYaPB;V})5>$nV0$l*y1Pw7|>OO~ev^NfaPb!-&OMm#MVpHox+ zoP?NqUc(ClU)0fsmo&UAKD{FT@>Z{Ecum9W3ZlDB$DA%IFw*(FDIvw~&>6pE# zA`^a>KxU~(Z$)H7sFS`(Rbr)o`;=oHpSAMYQwo$cW9eguj+hLw&EUpJHtpPL%TaK7 zsN#__gM@S@NKrhO&$&5IaFUw$leA4x+ZEI&I`2}T4lyYTu1bXJ4BRZ|N(34YTkfzm zWzO1exel&ObY6%w3#Mqf6*m=J5pJ}?(J%JmemqkwIr_OjTx5r3vb6d`y%@~7Mc1*+ z>HcsptM#RioXlD?Zmy7Lz*o}OU0z`hdiAGZUAXPCyg1v;;P^sI^2tCmqfHf3HK|qh zLA#JWmSK7otjb$+LEJ0;DCkV2!`)xb%It4Xq`gS=*k=B4&)y?WVa}Yets3_aQLxgn zTqkFpumYNbL*aM7u(;Ro+)HU-fnMv?Qe}ys*PeuW#kQ>NRkDHGafd9UoFHKXr&3P_ zQn=N?7Hl=JLzXx2rh&Jx$H3cohxHgH9XJ@YfPr^K#d~<)Kp*-Ie1H!PY?ECYw;3=o zq2VI~A7jkG4Y*Om83UhS)WA3nY53GYMh>6ha|1&dHZX!=4$AWwuGD~B@vMQHz~0>u zCa`RP3I7)cZpJM&ZuZ~dW#CI;AHbl3^|jRp;V^J74jT9hW9*AC?uZ3(27dP7EI_dq5yzIVr-ed8l{a-`GppqZac znOWC!MNM=bNKuOnMbaaQ11Tx&wPDxx8;wl1yizq{6HFpn&f1pgjQbB~jRY<2K1$3v zIoGO4sGK%*rM1=|A?=Is4y{hx&|!SOfw8O#!l(HKF_lNMcZq10!{23^)M@Xji%nIZ z+DIbp@o0&3N}|s{Nxl3Jr{FpmSSyo)|L*Ffkv+(c_aOV-gX~2Qvd28g=J6mq+kzbtg~Fw4)G4lga{=AGm`@zayaE#6ODl#Puc@P?tQ1`mqJ5 z^N4gULi-WX(PY;=wB*mwN?5V8`%lEVk93z1^Hs&L3%dhVYdk}MPPr2FKM?;uFn1^R z1Uy4@N6c;Y^&6w2u8ZmfmT=Kd!Uo?;1Ffv&vC%&^%CYQ!279SU?l%Ax5yH*nY<9DwS-Fq`u^>sxJv)p_}zuO15YJzb)-Zk z0xf03_h2lbHxWu;BUIG-9XAr!{h{QwW%7XvxiOGdn_}>(Do5Xa#LA`C&>yj_pF`VN z8xwb_@2T({T*4!f^m)3M@bF0pg7YV0UT}U@`qcJs$jskae&V;t&hbm}yOeimUqn0e zf7w`f7f%iR8u_)p+{Iq%fcQDYdE;w;LbO~xo9V62=*Kw@u1D-&ulAeP literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/DecoderErrors.class b/build/classes/classes/javazoom/jl/decoder/DecoderErrors.class new file mode 100644 index 0000000000000000000000000000000000000000..18fcd784b18b7d386073e603cf108aee54234aa0 GIT binary patch literal 276 zcmZvXK~BRk5Jmqa&`_Whmasz{z~TsQW1)a$S8fAh6`9sTib5>80SS)Q1qa|zs1Dt9 z!D{qo-k1LT{BFJh++v*JG{Y#v8DUha2c@4>C5+LAKt`o+tKLWm*R}nyU*5m5x?wA~^eY!w zzMCQhAJ&BP-eHYxUzvWX-LfOx{1>~AnzWxT?1F>X_^)1y6qh)_VdO#lGC>ykXpe`H KkN5Z_TG#@_gFG7m literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/DecoderException.class b/build/classes/classes/javazoom/jl/decoder/DecoderException.class new file mode 100644 index 0000000000000000000000000000000000000000..5bcefb71d7689481a01108d1aac02bcdb3c62896 GIT binary patch literal 749 zcmZ{i+fLg+5QhKB$%)y9CJ=IJOHyd+m>{dyL0q&%YAWtpRqCZ7t6-Gc(PB#4XW{}R zP6CMs=tEVVO`Ixff~=h#?|$>o&g}mFbN>k79a<&?N*OGnY_h3nQ!-FBk;IEMUh4Uk ziFMSpS2yt5z=nZMLPjbTsKcNq3DhN|c0At;cL}z&f9(Enoq_B3ozJ22{C<08<;#%@ z&fJ56Y&X9W5+B9_WvlxnBKk7y=v)&tZZ$bucDgu8Kqy$<=8Qy?SKv8v0$D5ztf5FK z{(rRhr{16^l?LAs@_SNOq-y_)s|hsl)_^6@L{Y%T7GYDX{0f5a&hfzMO+uU~v@<%C z!_W(SLSqs3i9`3@pHj_$^+n)RPnUi|;JUeADR(%Oevh!dpv&_Oh^lK7ayrH2PP%?5 z`%)2>!r-GEO*@zlgQ>e}%}cdW=eHq1c*Y~9d&(~;!9KT`ZJz%si1P2Ij>$0Dl3viLEdI literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/Equalizer$EQFunction.class b/build/classes/classes/javazoom/jl/decoder/Equalizer$EQFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..3226c9e2acae1862418f4d6981a3404255265345 GIT binary patch literal 279 zcmaKmzskZu5X5I=;%SWk9>7Adh+lJjy;vv;R$^m+CWj=%3ntORhZ3v=3m?FT5;tOD zE-GEp%mRQ%zZU{BLf6U0^*6J%HXth!8MI)7KtrOa6h)IM>GX|ZQD&Y!Hwbl{ka`~~X$hOZPi&?a~0yK~OD=ia&Pk3U~F0h~n6kNr5^h9J)P zDV*iu91rJtxZpcqM}J~cHn zefh@CnS6<%=gPeHP+Kz1h4g$iJ*$_^S-qCdKUmbNl_kA4#Ng(-QzTY&k~f9HSJy48 zV$4xZ#~rHR8Lk)=Ym~v6NZw*_Wl4f)i8}>;JdxPFLcG<|5XXB-y-+h382a{L+HiMG zCjzxKr&|-6F`G3P4LXvQ;+7UqayP|7lDv8ajBF-~JmIcZ7Aiz=CG6)x@w}jwEwe@) zx)Mp=WBY%3n!#|nYIiN62a1F!j!1~3kB69qqda#40}@g=F3~y+crh+v0$GOWt^=2F z7+v%-IVfG#jJfo+yYqUP942<Asu3;q82cc9r_0e2{X~F2!CtbrFZrwO!o+Q)T6w=Mx<7DFGYSCtybi z=Ac|?CrnMP!`Z^d_QJZFSemiG4#G_>00Zhe+^J1jc@3YetnvF1=V&ytica+-98onD z&1}F^T6VIvzrR{K&6*jZ6X!azBDjZ}+;w=j**{zCe&M29bQesiZxB#ZRB=aVvNh@krA}*sq($J;vA8c(MXhDNh+f9T9M2;{H0|Fe2A! zb_PyH28FD|vc#(V{9OI49DRuTB7Lw97qI3cMg{?p68)USymWp4q^#8B5=I6UY`UNt g;1;kkGB7eQ0iDFaz{mo$pMeF)X9e;=G#dj00DbZ;ng9R* literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/Header.class b/build/classes/classes/javazoom/jl/decoder/Header.class new file mode 100644 index 0000000000000000000000000000000000000000..d6d00d56bfbcfc179e5af012ebf024b1ac40cabf GIT binary patch literal 9487 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 HctZaNolUU9 literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/InputStreamSource.class b/build/classes/classes/javazoom/jl/decoder/InputStreamSource.class new file mode 100644 index 0000000000000000000000000000000000000000..015b74f889f5925d467df473e76840458ff124f0 GIT binary patch literal 719 zcmaJfgc5Pcgvabuh`O&chsEg${BP7W3qE=3%QIHW=p5ebQMa-CJ!bZb|M1E{~L z9FTxYAi)ud9|gR1O@pAq(s(?c_h#PC?Drp^z5uv`whI?44pwL2xhUa!6;<4DaTB-7 zKa0n~nuB!*8v-Sj2(%szqgPR=(y*HxO|o7#lF{LoK;@oFRCZrr(Z3K8JQJ`VqzNv-qD z4udiO)A>6Aql%WvAbaVdj@tsOxm+D3gYfZ0>nEv7GC4YLXi&Zf4>bpYhdDF_HVoxB zO%KDN4*N2u=+U32?WL1ZObv}`>D~RIj5C3yi>SZx^Euv3Zuh)@eguxDRZJ}x%Au-c zuw_Ozl?kul-MCGpCvQG>S^E8|A1zHQ2izan?!Az+@30(O%XPs5x gy};Fi*I-M-vlrmJr8h#BDBw)G$y$G9m;b}XFA3w07XSbN literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/JavaLayerError.class b/build/classes/classes/javazoom/jl/decoder/JavaLayerError.class new file mode 100644 index 0000000000000000000000000000000000000000..8c774f155b80ae1349803daf55c5c8464961458d GIT binary patch literal 148 zcmX^0Z`VEs1_nb0E-nUU26lD^4t54kMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvExD76w*E z2BoaTvc#(V{9OI49Q~BkWS~ruz86r;C$TcM$hD{_zlf26AEZb>CowNwA1uP4$iM_N d9|RbI5NHsPWCQX9!F&b=R;}#}j2poU7yyy}9S;Bi literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/JavaLayerErrors.class b/build/classes/classes/javazoom/jl/decoder/JavaLayerErrors.class new file mode 100644 index 0000000000000000000000000000000000000000..c32689931944ed0bf211b337c67f54e2bf807e61 GIT binary patch literal 183 zcmX^0Z`VEs1_nb0ZgvJvb_Om+27V{ckl>IYS4ZD?*PtN(AVvm8Peuk_=ls0llEl1{ zu*96wRAvSSpfCfki>tH0i)#=>AyAMBD5#v3Se96opP#Frm7|}Mnw+1KTBPp<6!S@} zOf7OPD#|Y^W@HcmsnX9$%uCnzPs&P7E@1;1$OLo>6N4lJGXo2d#|q}L0r~7md=8)} F0|5A9CJ+Ds literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/JavaLayerException.class b/build/classes/classes/javazoom/jl/decoder/JavaLayerException.class new file mode 100644 index 0000000000000000000000000000000000000000..186f20ab602e9e8301922c6becae9f1f04dfb0b7 GIT binary patch literal 670 zcmZuuO;5r=5Pi#6X({q;@mnM@P)!=o7%#?);a~#sUSWepXi05U{6k*VC?p=dn)suP zvr=edxXjGH_jcy(?Dx;dCx9bV704)wuqq=7O-31O3RUX@qp*QZ30o4j8D##@;Umv- zY=%;^Z{C^4z_fct``UHx&8q=#FeHvG+wx8rqP6-ZL+sS)a#Ghq@|NdXcCR65eF+{? z291SS?Q!ocaG=%dOQj5%5e@KKp4qu+yJm;xm;E`GV_eKQmzzVfph87jgp3LWDG56& zc2QALKvBY;$Z3Xs@zzJj85;e8(d8X_lWUw4)-=c54S6aAO9`Rb0BwzLJwBxEaMxWd z@t-S(P@BaHP@zwe>CYGs>wdZ6*}c8Gs`Leuc-PiG@TlJ Q&4wkOporrH((D3$0q7uzX#fBK literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/JavaLayerHook.class b/build/classes/classes/javazoom/jl/decoder/JavaLayerHook.class new file mode 100644 index 0000000000000000000000000000000000000000..8c9cde9192e1a80a7d28e9b215b75452c2040518 GIT binary patch literal 159 zcmX^0Z`VEs1_nb0c6J64WF#UvPAuy z#JqHUpkQWRy0s=mC^KK*Gq0eu1ftZMkwFopvMN76S3fI9KP5FeKP9zD-wP<_lUSKr mby>PKV30)DrEH+B(J~9Ht#dUuMX*caIz!5XrR#+_x3*3U}?A zQ=|w_g}{C=6rN#~w};mrwI`COREyt2&1;*fFfSt4lFL0&1%@Mm-?MAwyObL)hsT2$ zpY6jiKpu@ar`@1(tvW>G4Rf}o$PDu7qUmcy#Ux&4I4ES5@jd5jrg_;mERQ?QDwC3m zrYrV(Do)~*gqn(bxZiN}@$ZqcN~JLTScx}wkM1ZzgsgL zUeby}bjKJv42xmNXGP!vYDA}k$^#Y4SYgmw+~UxXCNmh%LjR7G%yed0987opP zTt7P9(sZG86`$iF!${5I52|#HC|G}8E83N+Z4tI6QYGOF6<^{jhCP8fI7O=%ZbkQs zbliDdAPF=hT8K~@Z1D~Rf39Yj)FCL9HA`PKx#roLY3n6QcyLX$qbk0}Hw=s(vN%nZ zwridk7nd0JH%2-Egd@m}`~liEeR#W6soNZZ_0aWnc_ zTm6br<1yS^D4i{C0ai9~lVM-$#zrKQ6^IHoxlp4FyTj`i=spA>9e8$-ysbOJ9zr|l z{)L1FHevXS)E_0o4Z9n4U}6*(4vjJg5{s0|;kQf@L?(3Uq0M<;T2BcvN7~b?Rc@6S z((O_g>7AQoK+J|(xrtWOPfqWB$MAUDqBOEgDI66=d1{eG@53m)!;aGnnDQ;OK~D-j zQ=_5r1pV7ZGo!gHSqJ-#9)KRvR_F~a%#-M(FEE~Zf*tGVDD-#M5!* zLV6YPI(7*}hCvJy*3K=+bVWks6+)KCYBgE*3*_OBp9Q&rLjUeM_G~2Auy>wt2d82~ zu~qDAFdq`k#mfGvuA#2fFJVB>iRIyrM;J=4VfaM%p6=mCq3M7yrMJiWD$azA&QhdZ z#AuQZJvg6!g0Xds6xN{?>KN@mw2HAL{raD$VHJn#II@vW4X@#-ptc?NHJlA`PlokK zHFG#FB5lT<2r`-!8BNViP)a9)qP9wsz%W{(d}6;Nj5Z-! xUT94dC!vi|mM8l^h|`$-6URD`e~cXi$jnVpkT2v@K|nIz*rYlE+{K#b;(vb9r)2;D literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIDecoder$Subband.class b/build/classes/classes/javazoom/jl/decoder/LayerIDecoder$Subband.class new file mode 100644 index 0000000000000000000000000000000000000000..cb56034296571b96e596d5b8a38aaf022754f71a GIT binary patch literal 1444 zcmbu-+fEZv6vpwjWoS#OQWna|0|xbG$)!9&5343v!YqitY}s=E1D6_h-O4Hq8ZVQXj(KanifrqrbW}Dx~MLyi|V4f zs4hAqIsy)=0&#RT3pi-+UvJ>mO&NJtEt+toi^-^WGgo*Xkd?oM$Ox`n^@(Px5>&wmVFJ&vBpclP!@x9kLtqTzonnS6k^?LQ5+tL{Ot zee_mE8;RAXkGgqS4W77u#b2&?!QY{q`ʸ-Q3xAOM#-1X6t@m@#jG( z8frG}x9zn-{J7@ub5qnOpBkeO{_zmFvy4$Et_s)I@pq)&U_hFpYqWx!tMUTZ>$tN< z>kYX<8;$Etx&@6;@y9~y73Shky@=0#2-z*ii?+tcigqiv6zx!~Xop!V+7WIo+VK#F z&@hM52uIL1ZbPFSMccU@jWOO6Kh9Vueu7V+9o&J&IgWO6C(6ud7k8m2`6POZPodr1 zjrMR4+RMFYANQgC+>f5-)94vKgP!HH=s7-z4)6dv$b;w*523?6jGpK7=m?LXqdba^ z@fdo6FQ5rdph-@m<2;UDXqK~Rj&rEN25Pd2<~fgAY@vnr;#(>-ju3}-4`&g@b(ZeXmKOO2r1xUp literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1.class b/build/classes/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1.class new file mode 100644 index 0000000000000000000000000000000000000000..2371df334b17c580c86f0b81c600a5ee4cd7dac7 GIT binary patch literal 1960 zcmbtU-*XdH6#h23+1+k7O?p+ZRV_=qqnL!L#zB5^($#eeuD6!v8>cWJU%(cazl8iK8<<Pw|>Sl#*kE~{Vo;SQ^RaOWph|L~7{tp3rTMA_V=C{?qx zZdUsllw~wEv_NL2 zoVO%|E0&qh>Vnu3CkBHqz4A*2ptR7V2iI-V8Yl<;ify&$|vj4LSVa8OpTE+O77%$#}2 zs-&912IdTQnF#O_+_DaWxYGqzc+TGY~^|12m$X-Y}h*Y4K#yiw^^EjN>;`D+X> zeI(t@?!;}=S&g4ttCTN@kIkF0?sjV42$GVS&o`9<(UkWc=sO0G0_<;hdsjc{vnx1a zVp_uzh|YRieeEtkR8REMe^#9S2Q_qyW|7w|T1A$LVel-?gJ)?JJWIXvEOpqk)JD%z zpFK-mCM!dtfk+Y_rBx68srkr;W49s2dTQ{+{5AN$q%9ET7+$1fK|D`^8QHV3VdWOs zVhw>v_&UPhK{mR4KIt};`p7TPM`AY-AciXJRSd?2Wy>{m#J++i7KdvHlCL-YP$SlH z(q>cPv9E*Nhw0VV38n{B?uSC*}=Vx zJl`#Jv4)I_6izo~e)cK`)FR>UWy2p#8;tX`5#W!c4VgchHWdC?+EDqPv=Nc{UP6UG zPN?#3!Vdlfp~ia%gZxQCo$n(I@uvto`P1pIq3uxa70P`=xnC&n7s>;~l=&c`!k-~j v`2oTX9wpTH5MhwV2z5S87~%&BJNXDH>#gEusSccqdI%YqP-!YN$TRgXglOdr literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1IntensityStereo.class b/build/classes/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1IntensityStereo.class new file mode 100644 index 0000000000000000000000000000000000000000..014c0b6ca45afac95f87860bcc586bb65e35eae5 GIT binary patch literal 1394 zcmbtU+fEZv6kP|Vol=I2h=La6R<#$PEefJwRSLu=#1|41@u8Vc4>HYkhRhrc_}~Zl z2m0h2FTQ955+D2kKgzfdGo^)$8e^K-XPT1rlhGxWJ!uT^x*atvLVj?M5QwNck!>u(&Vk*iy|8aJrW&8?Wi6I9$- z3Qa#H819DWO0H2@Sdv5IYx@S@m2*55cNzLmr=R0m{Gai1hW|#M-q^KxO&2=D8+cV_}x2SEJ|-_7{Fx>S8!FsJQg(E!=j4& z8XjOt!!j;u=$9se5e*NeSCr@^M;)#Y8lvJ!T6vIwvLqFhddDTC!)hx9`_h>|2U4J=NvvmG7KT0dZr1|N4pSNnL%sQ z1`+9aNlG3K!#a~EL+lk7l`6^A*E*qex1rEYXdZC1c|W4g_O{0b(f0hWX74qsoG#8( z*r*FfOC(KOil+%1Nv)sWu!*qdbBBa+y1{+)A3#jy;gc63pL9ZYkah#;pdS#;Bu>CS zlP7CQLKKzxLF!Xzjb*aaGbiZqD~2edP~9*+*Kj?+%2TY9GRe$WbiT(}<_nZ;fAkoU z{1FXk->J<>q{X1S#Uy)z*eAk~Oh$1d$iE}(D8=6T==&L3yXcA6$#hqb(3SXrd=QM* z7nQ(O>x+@;A-U6z(K9m?3A{thCzOv!v~{$~4l&$nS6XqU$*Vw2B;#JpB99n-<5}E6 F>=$zDVwC^@ literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1Stereo.class b/build/classes/classes/javazoom/jl/decoder/LayerIDecoder$SubbandLayer1Stereo.class new file mode 100644 index 0000000000000000000000000000000000000000..76d8759661a38ff85834dd424d277b37aa6490e1 GIT binary patch literal 1770 zcmbtU%Tg0T6g>?Sf}zoXfMW2C8WLha1W^{hg4Es-a-k#JmD{%;i!GsA&dM*GYI;t8IH zkrNmUddvy^g{ow)x=-6ZwU*E8X3=r>PtlcBnIs$Nm06N;Wz5hmOIZTxeD`1Gz=j)K$}#Eqw*c{p9A_N?y^p9}Vhnn}h^p$z+lG`V7T0 zPPd1Hifdk&l-EK3n1BXotT{p&i^o|>UCv4pa#j+Wvy#?m4MDJO$sVCyE9&TvcoMNq zh);w-k)!A)FUQ}Yo|u7GiDY;Kb?d12ftLD?_Eh2v>M0OnpfO;_TO3R9s?Dzx@n?j2 z)3=UB!aF=1p;hw|HBM~u5;aPcULxaWx2a>)ghs6$r{4+0z4p(Lubv`FW_^nms@s{2 zHc+QjxywDG)*1EhNK@vK#EF7Qx)RAvv|Mnjq6y|~BBs~tXzlt)asDzikzUn3IyywY zOd{5s+QjZ@w{AG5y~hCIR{F_hGR=81(dA(+_72h19*uTw8)*N4=HBW?^ZBn6Bfm)p O#&Hde^v2`3fyQ6Y9k|l~ literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIDecoder.class b/build/classes/classes/javazoom/jl/decoder/LayerIDecoder.class new file mode 100644 index 0000000000000000000000000000000000000000..ea084667219626da2d3adb4168309d0da27e9a27 GIT binary patch literal 2810 zcmb_eOLG)e6#i~zG95adhhWGPNJ7MJv|*}!lWlo_W;2M zTE)sL%bitmBgI13Rxv}Bly0r^KUn1gi+^GK?(LogVpk#PqR+W~&vzd8^gZ9qZ-4#t z3xH94u44$P9oUc8G`y}O7QCF4J8wvFN{Z7`yeY*Q9d98mS8r>0N9qN+^R8UIr&BCS zaaM|R((t}qeIUh$8ZtUMab9j)8nQZia9)G0qfc(OASZ<*#gY^kbmURcu&m*thN8f( zbS0a$+}ufP%_)zjeW&b{1dNpHI^~(7<#~=L(Dwi+<@%2675ue2y5#}0fEKL8f`>;ISi+1dAz`zt zK5O}YIMREouaV}kmyx#Z?R$Jsy_+dncysW{=gZa#%hu2?t4FC<+o7qz0uq+Delhl;+SYP12!mVq9_%VwPcbK;! zOi@LHc?Yq@+lX`dBMqSW6&wxWN6-L`dxPe|DjLm0RV2*ARcK~6@l9rTV--8hjzkrD z-S-$%HK;W_$n7XsMz#+-s|%-K^mWK0EpBBC_FEv;+=MuA`Zo z9ej2N;g2(1oIz(O$z@@Y-=LAHfG_FRp16U5*kmu4#!XzMYVEy)&c)u_=t^G~;)jiU z5*5FJqXCMAb>Bp12<(x--T-(v3^E?t`lM}77-Ta=l;^#m+PI|Juo+{lSk`!8({Zl~ zJ4V^aC&8zohP|r9KmK`I@^yIH7Dkb674;+}@X&OGA6F(B+)UE*V3Hd4sRVcHzU2MT z_bV3INZ&7Fld&mTPz`OpnnUXbE)xZs$pPC z0e=s7cGP&4ZbAPRyY?i$<24|NkKFEC-?-JgzVUTXn!wZYAS|kfvvGj8xQ}|6x|4c@ Kx`o<|H~kHu{_;2g literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2.class b/build/classes/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2.class new file mode 100644 index 0000000000000000000000000000000000000000..1adbf04f0e669a5f9269befab1e8036c2769a8d1 GIT binary patch literal 23694 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 bb@RW7Wz7G4IK_FzvHzc4sq=>OmLLBgKZAwA literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2IntensityStereo.class b/build/classes/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2IntensityStereo.class new file mode 100644 index 0000000000000000000000000000000000000000..060b6c493acd5278b8a3b808a00fc661799ba61f GIT binary patch literal 2158 zcmbVM-%}e^6#g#RP10~%ur^W(wU$y1NsthHXZlBVJZCoxOD5>p+1c-&dwzW9-m~ZI(`SD^0WgWp3@+ex zhKW-cL@7hMGD}koZ)ET$uCetk-c}giW_X8Tnhi57U1ykOm}7XC;XQ_Vh6RQj3^y4T zGk71jQurW+4+YLxo2Kh3r(E@{bU5Qv%5u+qL~! z0WD{Y-KAxrQC9+eO=Z@rrsFg$)3+P0z)Egu%lyv#q0!i$*m5T7$|A?+#Juf$J~?ks zcQxN48rAG>TWDI7*QPn?g&><}9bTsDDMwjh;_J_q_=vo}lU!i-xhUIr;RA=|@yzWV zN7YT=6d3t0%CS`n+u8N2uKM1uhM@v?az@v>E$_Mhrt)lW(RTck3fSp1wkmNMBNC&y zD)AA9Q}|fo6MQPMjA4l()_f-MIqpj2FedQ@zLdC#mnAMSyuy%2L1Kjss~oh3uOzhT$VLgQnfw^vtvSjY5reWL&`(|``w^lRVdY~;EuCH9r_VSJ)$U@EDwx0_afpor5 z96vx$W?k&rC@g=~?mIvG+dBw2`OOiq zBgkhi-{BICjvU6z?_eGYL zGxYYADjF^QiSpmb4zTz_qEw^hY@)PP(T0A;w*y*5C&i1YUvNI~I7fy7R%Ny-dJ9u* z>`zD5Y-H^XtRd-3ky4Vf7_baH#`*DphNTvM9MT?OzMZJ=Fi{JaBmPjy{4L19foYG} zxTfJbLr*#$d3J=;sSd;GFtPCb3Y9~xU9^m>8!oY2$X$B13LHZv^ Cg$sTF literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2Stereo.class b/build/classes/classes/javazoom/jl/decoder/LayerIIDecoder$SubbandLayer2Stereo.class new file mode 100644 index 0000000000000000000000000000000000000000..d35474b08b453a046d05ff5b933922fc2350bd23 GIT binary patch literal 2540 zcmbVN-%}G;6#kaoY~r$!fJVfCRHSX#1PN%Pf}jcc(1&v);+d(PdL|NQ;} zz&O6t(2q+;5W!_8lT4+c3CD7)rfplLiHun)m2;+BEZY*Kw1lHgkCR(* ziW0&t2D4Uaxp>lk5TFo`l*#;1OKrsH#DbUegq9RoP+hp8iroQ^zO2ANFYybg;~ z-oP0hLrl&xSwTU^1-zqU6-6CMT-33~8DB6dG1|Hg8)ZK#5|Zs&X3l(MRnzGkUIz^? zY-F>hofp=L1uE7mQ`fh(>S-Fl>TJn$9PaAG|3#M&+=naSc)@a8+PpDdgYCa&qXTI6 z2HNf290myi2F}uOc#}mLTI;jX*DhW3ETx+Hd_C0{O^d1Y)gKnUWkv}3M5Ss~%&Jvy zrwn&`(Jn|BdFA=j>E+ZiuN3!kuuv^;R4C0gvn3jRd6^#(-Rn?$V?AqCC3K3Qh8A?Z zZ`RPywyWkqcM@dL=KgQAzAu^*wGFjP-rpnCgb{k40SyXwEJ+IYso>P0f>VzQPHieU z4T0b^2ZGZ82u>p*I86m{6%x-3(NWTF!iNsxmyO5{Btvj6xV#LDAHUc#qX-eAYE_z3e-*ALooh)fW zYM>?PPv{-+7NN<6HpS6T(PzYb0!)wZLXVSCC%uyaTAaa#Gsw;cD2;d>^lt~V4pY+K|bs*{QQ^IPWFYHguKlV$HRq1ej z3lA7T-h=&?bXiWUJ?ScZKhHkp6+Yh~zJBk!&?}3J^}3$YT&Psn6C)BI-N6ZJH&NO* z5#>j0@u(io6BIvxgq2sjL9|}F&t-d^OPsCA zN=M&tMTNx;6KMV1)iQi8h}+W=rrZ7gYS?Z&HkxM7Xt~|Q0Yq(w`=(1+47}rM+wlN= zO-Q$NLNX9nwe(_Hx+0sfVaqOj?RH_q?zbUfBO7S@_l`idM=kS_3yL!^he+{oPJ(cm z$2`Q6CxF*$e3E~OWh8$J`otR`jJbjO0}u2F|9hW5#z^!K=};xf+t3jXScH>b5P6wA zMYR5o=;QA*i3%TL+e0ZQh#g_Z2gW5Z;Q@d8Bx}BIRO(cpWN<~0`5Ln`J_<25{0Ydn#weIz`NcQbV-)>o6s=d-HxtZV8DjsCCoVGPiyUhxu+1tK K_-lu86QwVmgM709 literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$SBI.class b/build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$SBI.class new file mode 100644 index 0000000000000000000000000000000000000000..6717293bae1dcb32db7afa5ed346ef9bdf734ce8 GIT binary patch literal 348 zcma)%&q~8U5XQer(ry#iHvXv|yeJlIqp*0F9;}xI!Gq9CPHVeJLrfqkg1(gpDTw$0 zK9o2cd+5>2?9A-%oB8JZ=i>{&B@QCAupJ^m*M*+Ij=(;Fa)Os?PHIB?YEdkfV}d^% zO$ouIoLhnzraIN5sYHlKq75O@fe`2u&NB0CUd!@HWx1N$84D_PYhG-nwZ8eQ2lv-J z-*2MSMPaK+ZtB|d!q~}GZi+{B_mJ7yl5qNui8$sHT6~uWHVwfUIZNvf+vIwStCNNR v`pF8E#D|~JJG>V1+cTM9+$sdRZuV5PHdJ+pd}r6G(!ff90VFB7T4$ zCC;L#$6R*i&Aj(!c0N8|-vONBpp6!M4>mS*wyB>j2ip$13@l?XVnIp8VApp^)jwf4 znxyhUJ{84%lxERF&5MO9qltV}r4Zus8=sNjJjs*#f*}YRDF#ypYfNSgqh^X }bz z@UX(cvB%-S?n%4|w zpqD*t;Ex_1)TUFLpb>B>V|qcr_x0X{4XSXg(z`~ePuQT?4Tnpx@C8QbzIjWSp{;}U hOg-(vvHqjz5#OR(=T9-x{NsP@UFv(pZ=r)7;0qLMaJ~Ql literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$gr_info_s.class b/build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$gr_info_s.class new file mode 100644 index 0000000000000000000000000000000000000000..5225cf6f47659078e05d0d16362710b6a1badcef GIT binary patch literal 810 zcma))OK;Oa6ot|)yZkLh%?kp2~*3(5hjR0+1`l-xNbgHFk#Q?luloH`{>PRW*2GVhf9JEaJmQVLEf z2&aPMq85Qi4ib5z1CO%4BcAJf1;6W O=^4={4e=OHvG@~|_Moc( literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire.class b/build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder$temporaire.class new file mode 100644 index 0000000000000000000000000000000000000000..b6b90c4e8eee73180ee2e826e31434756f171ec6 GIT binary patch literal 468 zcmb7=%Syvw5QWd=_BS!rw%%O{y08Ho-Kw~$n?S*ZAV?P_rhh|9n#i9Z=vxVvg0~0o zp~Q)zxU8Ew^DWMq%lpUE8-PP>IS^>tu+S1%sdUwWj;6qxzy`rAqEV3$w0^)PRs=g% zgCrZ}gM#1&SteCC4U0lD9`t+T@HV{9^NBxB{h^HVp;Ue^ypt*jg0pYl{S7!KSSLxA zl&1uJuYE}{y6kYVh$R;_*aDk`{eNY;a8M_7<}sCWa+9ktQIg>Ng+}G}(=dzu^XsvU zO2W<@f!OB%3I3}Fs@CU@gHiuds;**gFdf0*4(NC@kSAW8DKyV~g+7JhJ;KnRpk904^|=NU+mK7b5`~G!@trI3!R>h!%!TLx>l_C6{@Xw^xj3 z=eLB;tX?^V0hEG3PoWPfa756BeYDSYz1BskS8mB|UfTgPWYUJ&x}A}KXw#W{85gCVjeP05VHf0 ivsX}-j<<4yC`;1e2jXah&I{MV-vfRnYZtrNNADY)EkIrX literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder.class b/build/classes/classes/javazoom/jl/decoder/LayerIIIDecoder.class new file mode 100644 index 0000000000000000000000000000000000000000..b3ead01a14f2e276c53682640973a7d3d665fdce GIT binary patch literal 25071 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 literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/Obuffer.class b/build/classes/classes/javazoom/jl/decoder/Obuffer.class new file mode 100644 index 0000000000000000000000000000000000000000..5d4e0e35a2e3b3d037a644eaa1399f6fa5105ea7 GIT binary patch literal 533 zcmYjNJx?1!6rA<#*REUDc4NaOLrJzOPkMJ)rZ!ZR=+1Z&l^Y*=ceExe6U>Wmir0^+?Bxckx%gw?ze!9^G;Mkh&Uen^$zSeUBH=|fG!LZct5l)LW53PN&CzTJX^ZKRCTeyPdQtCxgHfFifoP z%KP#QUEhoEs_}x7*9%G|o~;?>nvvX*HBC{g2?m#$npnI)2GLH+(4n_LDfG0W@1-?^ zVKS5s|6g_?NmUu#b0w{0EKn6<<`{a5%1IA)M<&i03e#9RPoqh_#tXWYXEj-^5;0`f zjjOU&jAx(hDtRLje#GF}k*hmaEzewDwX0FOoP;3^OBmrI$i*mz8OHc*tSo6&Rf@8@ zSSi-_6wOFI&nso4q-zZQr=Sg^Qqqb`wUSChlyC`ghQ746FRP_OFmFvW$R|7-l(2{; zE|LcPL31jG?E^Q<|#BAW-%i+vPTJvca)`Mvra=EN%1%_DjIIJEM)@H1?wX{vk z9&9Y`?6AksEe1nR=J#rE}2TP^6CbNZ<=P z0mtp2b45O*PRZqpR3hvE$`!l1^eWQFPs% z%c3iB(M>ik6byn?moEG-g1?~kzWEZQn|J5lbI(2J&i!@v?FWGSxHAOSJP2Qko z2bIu5yn%I5%U0+HOZ58 z6=F+vPT8>oo$C1fdoa&V6tCfWq!`|W{#$IOK*tM@At13~0^LZUW%4Nzv>>lpLL)kc TWzjJh9piUA?PfyxZyNprK2)c| literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/Source.class b/build/classes/classes/javazoom/jl/decoder/Source.class new file mode 100644 index 0000000000000000000000000000000000000000..256d1a9926f46d9ef90672bcfecbfe0f05700454 GIT binary patch literal 324 zcmX|-TTa6;6h!B?X##~pp*#dDNWLt#P*l+rlt`3^1Ruyvtdi8kC~*OGX?(B%76sf! z5&jv?nepTL`{(luz!{D`9C$b+>|Bkai<|M&ZFCvM_Yr|6gx8$(1oLBG)2SiAhx{re;|td_aF43N4Gdh-bM literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/SynthesisFilter.class b/build/classes/classes/javazoom/jl/decoder/SynthesisFilter.class new file mode 100644 index 0000000000000000000000000000000000000000..74e63d299217d7d7a7885d49c526903e24040581 GIT binary patch literal 15349 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 Y^-|Hlt9qG-2mHOO=2dvOUv|0qZ`clYd;kCd literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/au2lin.ser b/build/classes/classes/javazoom/jl/decoder/au2lin.ser new file mode 100644 index 0000000000000000000000000000000000000000..0b20bc8bbd97303c0e82602289279017a3d51517 GIT binary patch literal 539 zcmV+$0_6Ry?EnRJasUEbQ}2T=2IXC_`T_s|cyIs!0RVykh6IWTjtr6!mKB;Ao*kkg zrY5Q?t}e1Nwl}&vzCXc2!$ieL$4SXc%T3Ks&r#7+(^b`2*IL}_?=j-U~>Fw(7>+kIF?eXsO@AUAr@ipgn^*Qyr_B!^v z_dEBz_&oTX_}%#(`Cj>+`QG{-`d|8=`rrE>`(XQ^`{4W_{9*i&{IUGe{PFz}{WASh z{c`=1{j&Yi{qp`2{xkkl{&W6|{+s@*{=5Fm{@ecR{`>z6{~Z4;|2+Rp|6KoU|9t<5 z|B(Nf|DgY<|FHkK|G@vq|Iq)~|KR`V|M36#004dfdHi+warABPY3pU@VdGujS=v?B zQPNG$Ny$aULBT%0JiI!&IJY*nG_x|XFt0AHEUPN0D5fT)B%&gqAf6u_9vdAR92pxJ z8W$NB7!?;3784Z`6cG~;5)Tm#5DX7Y4$BTp4ayBl49N^g3&;yc3dagY3C0OU2*n6Q z2gCa0Hgqv0E7T|0B`_k d0AK)E08ju(06+jZ05AY303ZMu01yBO001A}1w;S< literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/huffcodetab.class b/build/classes/classes/javazoom/jl/decoder/huffcodetab.class new file mode 100644 index 0000000000000000000000000000000000000000..330d49878eb208c6a002a99216b0fb91237f4e03 GIT binary patch literal 49460 zcmd6Q2bfjGvUMM4hB*ua>`ewq0uqKiWKmS2m_SJ)Dsf1X8KMg2oU@oPV!(h1D9MNc z6*K0Xb559E_p04hwOhu^^WOXaPrq-@UaMDC$KBQEoMNBNf2`eTjA?IPE-(k06Uv)v z=0x}BB=_fJ_vaM%=hS>N#=V|aU`{t@xT`bWpR?Sbv)!L_+@EvZpYw8#wGIo+`Q`%m z=R(I_ly5H1noHc}r3LoSWm&Vtfy=Yz3iom6Bhr+ZzIHFvq!m05GQdtH?^tKI9GthvX% z-kUXRvu0h^tk0SaS+g-~?#r6{v*rO;_+ZvNlr;}$&8Dn*Bx@ecn#Z!{@vPbG3ZKZD zC*A8)`DUbh-I8yf&X~Ld4jIt5Z^mT$XH3Oj)2GcY9X+jd=;$ePN^8z3xa$(yvc=Q-saXwwy8j~wqU2@fduR8Ko zC%)>;S6%q3D_?cXm~7(NR^l&hE&kG0<1cMJ{?b@=}7 zV;YUvfAZ+LqZdw}KDF)SDQ(Au>h$i#WZ>`&Hz zS1J5hU)yb6&q<{Rm&`7iHMgXD3p+_!*C@LUSvV*&vfXj~Vaw0A} zxywno?CdTlf@qBH)&K`|T@!$Ai) z=l};DT&w27sDo?OJU3Dc&B%<2+}P6U8Zc&Z$ymEm6-5iqF2}JGN6*^ZmgP3@-@^o zcERA)t`@x7rGi(xPVj0M3100A!K+;!c(rQ-uXbVJ)vgM>+9iQkyB_dr7Xx1HO2DgK z26(k=0Izmh@oHxZuXdX3Yk7AU0NWX}ueo+a>?*e-c8oiK`QOlgwro5B2%*91cQOi7B4swTW&8ZFEJHc=CsPm88Ki$jw7=+4>d*(HCDsb2o_KM%LoJ4GFqnv3m4PE>rg9U^yOnG;*vuCyt)Fn7^_ z+PUsB&t1CywaIl?t#GwyKzGQ8%dK>msrrb?T@f|fV5+S&RV~a}XQ~aaQa#81w^Jr_ zm#LAn#?%~S3vy9VD=#l8s2$}eC3z^RQ?6W6vU3zCCFM|3mrLq#Nj^&Ib2SZoHCYri z%+F7p?GiOeoJHiV5f?R>Bm+cI2|DDr_c&Hmb0#6jnrGyU6~RxNRS2{`7t;p|qHXrh^}vs4_}AD!Wd~ zE<$N%SDKrPx$B}zW0ZDvrFrF|$W5&-u7cujuDD#3|JU-WDBsPM=SP+QT3!w1-CenL zu;*U|)gjm&f^2O5{Hvk{6nj8X5a(=1Q4@+DP*jW?Y)4TG3R^vzi9y&a-pTl(t&QTn zU2!&Q5Y=*{pv&u^yr(NiFa9Ff8G>FAY*+Ky&*t1|Kg$^6n&s5Zzt%lKI%i! z7m5mT{&o}%py&q$2I4QZG=yTGTwY=QM=O$9x z*i}|Lig&EC{G=h|z*kLmxu&D)?N;WskrLawhexFLj-&Fac1H!=@Tj3vR}j35!-Z*i zMJcZ0iYujyD|2z4D~%XNjodKUtyPA>w}{5vH=o8lnWf<}j&4}X8uAGJOb?kJ1~*;* zmxiI<_SR#AsDX@)AC2v;M?Y@q{;FAb-Tfy^B+4d>FIgkLqGXNuHt8jTB|}TZO&KPg zmI$k9g<$PsLCF${u!3lfNZm2k4A)&Hy}+ubR@CsQn&5VBmaC`bHMqE(E3L^es_Jm9 zw7Rwww|B*L(#1PVaj`3|n=Y;=#f@EYeZd{v;}Pci1O%qhll3TL=+)K6yEH{m~f3(I|y-VBrN4IRa9 zNE6J%LfgD=(~jN3aE5!9?qPesQk0Bneq}k(1haQF!B`Ie=pN>#(*(0~bq`}bs2Rq3 zpc!WCGA9@_Nb`%1VmZ(~%yp>=#&T%Dw{*T+xD5fL0zWLf0CUxi0NGh%Hjegk)=dQO z?eMN?c~dE_=8Bu8iK%G&~Jw-jpse1_?>~Qb2ypI(3am9TF4{;I0 zz6q55gvWz66h9o>J1_aN|G=4m$EoaqfgM5}8*$6inINj>Ahe;#hCv$&uexMI;o4|FfjRaY+E2Kc z_7fCi15q0aHVoQOc${cIVQbn>V2$mD_7h-iAZkOwjzJrWw3T)gc1Ifu%&}vXxuIY? zqWuJFY#_9uh;!Od*g5SdkYj)OM;i)zqYVY#u!GQ!!o_Ms!H!Y(hJyVj+)(TXM`}ay z$9>vR{9OF6kD%N*dPCyc?%u5FH(;^DbOM!V`A<(M5jLFv!Uv5i0vl zMuZ(kPAE8IY=2APQKKCNGmagGb`&n&{s{$gY#DS!k*3p@!c8rEN5Ppxc9f`^nV$#~Mx9Wwh0vD5UD?4M#or>y8HERi zb`A!hTixbTD&nVm&*-#=JO4N>mErSjzQaNoYTzQ#0 z3brRYqM&CulhB63b#MQO0y*{oI-_u1w4tyy?I%!Uzo88U82b(FC~Qp|3R}~D;?%gs z)mt8HH*`W_HNE43Zyad0e?pNdqa%u}E;^#fUAMzW6zn&$q2Ml5CzMfcW2F-cw^hC6 z8SRSI38jX^w4unZP8*7}jW!e>H#(xQceS5j?^8#Vj?O#nCm1OlpUT`&BJ5_gqp)|i zpH={EOx2^0ArKxL6UwO~d+2MYIXF9wOu#Ha1siHq&-kA3V=Em(O<~5!9 z{=nRr1JddPMU9PjfZ##SdZ1w3D+d9~G#m`f-Uk74TLz0Yw$>qnv6l`NJjT^FENy;> z6wh$Q!_&owN-^$^5rW4#`C-8FPUUc5ZtD?%+}4p|J8&m9tZ^U+r-N1|+pD&;;#BvJWQGGw=6us>imdVad;alP@g>UW|g>N1g z6}=J7>GK8D*2MLUqBmPp@Mdd@-B9DG&`wr9B4T^NDtfawir(yvf;YS&eyZq=_^F~d zqInX%`LkAv-t3NoH{2oEmmR&aepK{s>UvJmo4rx+hBrhJdON_y>g@o6IYnb&B57Rf^tRTiL-I(V2obydyfR z=#6+w(VH7f!5eaf-yII#IJT(Zje`dTZ+1?x8_p4pRq)2Sgo3wBGDUChDFtu#MzI^- z`nu(*f;WOS1#gy9?1miCm|`~&p(_i0vwPk9S?);oyx>|8E9wo2{jSxBs4pg17HK1#jPd3f|~#WSdLz z*uh+jvgyF0w6W`2nZetg3U)lFB+sb}X%peVP!ZU-x$Kk@`rwa3H+q3kPqCY=cPMnj z8sU~=w;!RX2AYCmL|=;CTuiYW#qC^AD0p+R#BOZd6uO~Cc%|4K)$sw5g0~z>>Ziwn zVmCW)C`~JNb?+h=p}r9?%Nt8^_|6*;^`3E<1Q5 zSX1z3Zxp+oHTFh|-Ef9rOu?I*Lb02TRp>@2FP4rXIF}u}5vx_~Mm(h0EuRV`v75iR zqS!5yM8TUIS9a`1{8X_U5wGmnjg6aPH%0;*HwAC5tjyRQAzZ59jdKMBZ+OG8gn~DF z>x+ToaqTDLh;szRZdl{kLBU&gS_UKXl8ajZe?{1etRjGbna*S1EL(YY3Mrb|bWx z9lH_Q%ZT0lhLB=6&k}`huAD+QD#uAc#csrAirp+%p&PN8LO0CEyOElko>U6mY)z3H zYQ*LRGB7w8EKHBvzZtsQ+Pqnb-M$eNx?LMwOr_AxGe_~*ODP(oxh|5I8M|FzFY9|a z{^+_q`X)PEL3*Srq`OYR8&x-S-YIxHjM!c&t*#6RHQrcnKX^;s6uo&#R84!UCf*vk zx+!?WJHjzVZ$C&X+Yft=3f>6)6ufza|0dfHM*)i7?3{u(>P9%G;0=s${2zGd4QDEN zM}6%mV@i|Y%~MFhTR!Wf=q+8N@Xc*k(Hqgc?C6c70!44M2Em@fH%}6UZ+1@68|o%* zk|=xwBf3-kX1NOA2-gtAdiru|kzbSS@j@VAYTjq$~dCStL=*>-~;LYACcEcNDJq2%I zEN+V4ELXuBp`U^`1pmQe8U_#X)@w;Ba- z?rGWa8;1oIzY$?6exo)V9!lVy8$;n6#W*cc{N`c`-zY{nSMeJGnc{b}kKaZpe#@t% zQ>ZWgy<|iIocl5@-53hrsI8Wp28!Pf$L4rPPz2}JsQ}*G6;l9b?-amUt>X7Mr>6Lg z+WI<70UQ`7ABy0z;wXZ%_c8-`Y)*9Ujz-_$ZXbt_N%wUT7suvYSH75usJzAYK1mta z+kyqLIS-2CnTcwHH~|C?zikN-{=G+RP9nmem|}A>2;ZyNoC53zEjFhDqZ{so7Ms(A zaHpu)oE})5A%dY0oGFAmXT|0$5K`yafroR%z@5D800}W3#Cc4_<^(Y3gWYZ#- zu~|uk|1KvscN5{aso1OnA(OHiSSDo+u$z?FT#HKXVJ0d9ac|&aZQx=Z8^q=!SgdCz z8V+JZV6u?~vAGV4`SX*=6E-q{ z`9Lu%!F(7v`G^%!cL+WX1fPgt0R*2i5t|#qd_ralq8;xY|DNdFru9}mIDE`g#EE24!EG-e_; zmw{;lMh1D;z(rGKu?ZHMw9S}_ru=fJcMOxmy_ zY7If#K+sMEM?uh@iP$_3rWj1r(ck5n4n+7*SmI1aBKXje=>$T0(ivEK(ghfI{T`^J zD-*GK1WdQU#cqL%?rafFfx+%f#O7u&djuvulwt`Kdn)DyFnfWKQ%7cR5Ym;Nz|xgo z%Edi!(OWTRfaw$1^kqeK00jM*h|Qy5_5mZ+_77a_%NEhmFxZcY*t`g4|G?w`Rz!zG za3B*lpn@3yhQBL_GXp_LGY$fl-XE-7yaN}5n6cR|Ztoo&xEK<+7%B#pU@%OGHXsgR zA~x@W84gCx(xD)vog;vyorftG@4?04%tTW`91)m|WI=4sgkqFp-Ul-pj8r=&@G(|d zd;p7aidhS$L@{5384o6E$~W8uBK()aab_Y2sdo~vbayf^?eX8h=aI}r4M0o*A?J|H zR1o5G8nF1B&K_cO3tY@l%;jKaD&}4=vjQ)(SrPSspfnK7VL@!RLNQk{kAay7Ms51@ ziI7cy0SIaQLiQ0I2p2~Mf}>dwo0p(ChMDLX5Q_qn#Vm-;txy~rD2`)AbOZ#)GZCA| z!JGg_O~Z+SkCWIWstk*h1HmaQuy4tsIF*@b8i>;Zlhaucn{S~wgPEu;h%-Uhe{o2k zs>hkLh>$gSHW4!B=YWs}bS|*W!Fj;6C|^b;=PTwcFc&Zr?Fr&S5Ndob0wG>6W{cQ- z2a`(z#idH|ArzM>W;2*2fz9Pg@jVn*FcS>`aU}?~2VDh1`hPXBv~($Zh|M~F~KC5ZuLr*!&2^O2s?@=58?3{Z)aF)yiT$EY>LI zHZb=n=2bBFf>E=(7KF5Yoih0eChNgSLpB5!8`&aS1cUp8SPbHRCSr3omzNinyBc|M%pG7pRLtvOJ_@{itQ1?I_(U z!F(0ie618uL-CDbz6A3v7^(NWz{mH>;w@PGpqQ_~{218$q!fQb@pGW~MJc|3Vq2j2 zRVjXl;1RjDN`}c=_iRvuKcCO&4K+bmOOKXhpkA|9h|zQ;GPb*0%mz@DQ@D5+X(LEa9d!0qnadA$f&nZ zyDJv+j?TP8y11hh4|K(y7-t>qoK|oKCP>C|Hdk8^ljT3#Z>vt03b!Oa|=0L)*-C;x~+_R~pJ?$3S6zd+>1 z9f@Kds43#Tuk$`t@N9>trRCG5xQi>EA-KfhnZR7xthDuPQ4e+MQpQR0&YZM^cGFaZ{q3(*3^6(H=_0?B7B=1L;`E*+bzi16EVY_2B4@6)ka z3PKuw4Y0rK>{t81uJ1n8;yPxM)Qal^7dHehZWM#^X!kN9=7G4037>m$GZ<;sEx^*O zTiGJ&1{cej@ZVbB7MR@5iX?sG4kmp1#+_hz@3vpm6X7>+pGYC?Sjj$;Y>m4?h+q{9 z>{z3vtC_JCxfQx5Fu8{XKA+=WW|Dl4wIF18)&(xsvw=^}*uYGZoUt)5xsL@t8RLFt zl4OhrK=8k{v0sT2A-Po#5h3ICFbElrO~ACAu0!u12^5dABFX1?j0u~X1(V0YNbffX zE}meEB-!9eCVaBNQ-R4ARz&-vj;ERMIUvt~Q5(s#Afy@30ZU(>XBSDr!V65q=1$b| zqGDEn*$PISz62~zUuKIWY2+0qd=|v3in$9;UjxJE`PjTpgb%&3c>{!0`zEkd`xY>^ zz(e8kZ6R8Mcqg!Umjymg;yuM&0-N^(n-7#?B@`b9ijPLshKDbh@Octn1}0yzg1&(^Uo&CTjo{=PFjDKcfs5~y#ig+LUNNVE`600R zkrnozR=J(yCnjvZ7MP#GL<2b_{6a({Cbkj5pU0bDiI98tHxSbF-+^Vo{s6{W7=cRv z6rz>AC0w0Z)#WS#I!c3ACu`3fkZKNp}X;?F0X;^b*u?9|CFcTdGq9`zF zDS~_-Ry0Icjlh}<3pC-{AjJl_H2O(YA16aD!L%CRjcI>H`d%*0am>0n84Mx27 z1QxHol*Jja=*>)$CebG_>B|D2HqnonBrRee5Rx&Q=}!c2q?vt*;InmRKO*GT*dK(n z`~YBS`GLT6YrKe-4`3!qwHO$b0E^F&>>)Py!o?`XTn=V*U^7N3 z-h*PSVzz=A2S(~G34DxaizLHif)G96VPar0i3PEF42sE$ITOs0VB|e{W(pB}2K!$n zQoIkJGq{!{J7FdW8NyjC@YxBonMtw}NakanB| zEbTa%J;df~_&kM~ByHkUCVZO2X@Qf|S&^hooWVqFK7`jZ!Kh@Ovxt!W=4>Kl0i6Rv zntm>@H2pka+HYP)CFd*VJ1`dnHW#uYNvybt37h;2lZ(NqA-p8;aVeW5DG-+hf+Z}l z|1t(XFIUVfV6F&ku2hP3P+X;$&0wwuqZZjx5Hdp70Lutnt6VIHi|Z8g5t!=(n;Te> zd_8|76S4ULCdLD~sD;@ql7}0`p*C^AIbd#SlEqL~Q6= z@=ajW^gjYZ+VLo`jK^cj#Z_?nxMH3JvpKMNLMeWR;z`Av1Li3(Qty_)$J5H#=yeJ>IrTh~?)(z2I;Wkg;ErmgF0_ zo`T|a#e4?l4KPygn}LtFl*L9^ysemRVBQIA-c^b_pm-K`G5$yXFdcW zE&B*qM&x5)8j;W8^Ap8v0rRP1eg*Rx81ec!uz3AKS=Ef4W2p_mg}7-=95El+m$u4^!<7%pdh6KQ+bUQZMbTzE~GKZw&-DcDNxh zTkn##ZY1ixoVqdNdVuuShu~cu-ZO2zSK4}SQ6s0K zr{GS`x|iTV4)+F@_1A~6-|~~332tjY6mwhm5pScMxBh~0GwdrE865ki&G(n$8qWLx z!N`#~5Lh;i0l?gtfq>kYgT%V2^LDV{!43~f%LhwwA6Gm?@K}e30&``<($IN&@epS{ zPB3yPN`SemTvN0@3J6OniN|HD#U3|0@ zmpX692=3?bqO^Q57gJ7!&zbPO*AJgSl7-Kiz(N^sJ^G{xPI&Q26LQM?cb+}rvno#G zh9+4Rr>8m+n=?c(2hBQ@37;f!78t(>ebR(<^&GZHk|@q)!skSsrx_sJ% zc)gHKl4o^X1VRKCi+~aZE)ilb>bNwpxQqq=PaZ$vQy`XdwMh!ZH9@}5 zVc~iZG6y#VF7&4eOVRmd;-Ub=O+wTGaWe?s#O=Sg3Y^}`7CtXvd7!wB710Fvygd-y zA%bBL+$ltV5Gz2ag>YBkVkKMnT#dT}#VS@r^Wbwe6FygCO<;15Qd|R@djrKzME<59`6$@5htFN^CZOv7hYt9Gi_q6f#3@*otl@E-!k zPEv%XKO6`)iC{Pc^a%nib_4NfVDT7R_y=V?9w;^|#VPRd1T(3;3ALV{fbjNz{dw{ zVIS)P6Z+^tTK{!?Ia@fjQVoQThvNpc{*2u!{dK_M#riV2@2 z@iiFvr(otAA|#>cTO$0C#Qsw~5Yo`^fu*580J|H*r$qdymFbmC{WCEU@8PQg{(-PA5f7A|9F5(VAQ_@ zt4svXbtVEKy^VpTVO4;!3D!p|stVBtL^US-7njw+$nBJ=0YWON2`rV=Vi%Ngl&Q@` z^2C!&9mU*_dUp<-)MW)_?j%_gQcHanBu^_z9zTK3jeyUFkjP;&vkMV2UX4JA)5h#H zNla-H2zC|0Le$Ze3IFVoW?*D^ng=dgutkzXQpAMMWoa3hv{DMnGHI=t)6tMNVAM3V z4V<)NljJ!f?E^tE3u3bgK07dz{#1c5^4kz~D=)X|e zors}K>_G&l@n(7u;Xg8oGkX%@-@?Y3y+BA;_6C-v&=Z)pMM{$B#Y~bU(K|5d!vdcq z(U+MdNunPJsdb;gMSnK%&z9JinIyqszrbXF7WjmQ1DHt?8V&@Zw#@;7kAZAq!zaf4 zATZLHv z1zrwUig%zmB2bJ}id&!JGh>O6?PVMY>0Sx2bZ=j?CnyDdXMdt%)}h*yz^FU*WDwGqQ-Gx}rz#g8 z!NqBcxf0Cjfz268@i7!uWq7zmh_)au1rhb+=x`YkU71({LMpwSUHJ5qE67Bi#B?PQ{3bSY z6%qay0prZoL`Z~L3PNhR2AJ;l4QT1Lf#Nz=Bso9V2Z9?!a11=$$b`@FSq4Vk>o)~H zZdN9n;pCP;ajQ}+hhjN1Nyf%)AY^&m9=N!J4eZ-QxVTd>lqs-6F;7Bs7Z`bmnORAM z?5KBxkTG4QeB2Hns{_RvrFadBdlW<8gWnt2tW^s79(L59krae2TU|su)VRcr5VpxKg|c zo6TUP-X{W!CzZt;uy{%_pM%+=m@QzQW+q9NdWH#~EcPrIsrWfy>G1Q);yXBfK{4Nh zc`>lr%8Dev>ZL&NG7Ef0(ksj)=|r!BP>c1oz{l%s5gYrZw|yh|1{mqen}Nk!%Hl^@ zyv1@d(0&1HSdE^@$my9~MKl^IPmBbAq?4Bz3~K zBT1d`4N;jB_VHKNTP1Ewo`aPc>fhXA>sX4bIC&LdF0LxYja+fHba8blZs&??FfQj{ zO+e{bEnx0QZ9uN84ja=?WA7}us`FMiZCx*IU0>A2PTfFoV}~22t#?UVHxl(;PTiPs zzJpB|rV=OoF(pZy;Epv*J8v%5)tt8$f;%`|l$N)YV&qY@65PbeTLa7TXamfZw*}-; zZ70^foOOG_9UU$fe2~K(fW>=9VD{b#kiB;n>w(U?3uAow+La;YNpwqF?usk{N`Mn&2hx6DR!e_`C@}K0a*%AAL8sb=Ys+xsqr+h?7%|@;})@Z$?jm;#4u|3gR>n zQt9b|i!;O^Oq+;?!NXaB#o27(^D53^CY3j#x_%xM(u(r~pBJzP{|hGzD@hCV`2 zE9F{J_-JmwxdtH(zaCf`egiPg`vqv|jm#u@7Rv&Yn^@qJ4{l~Ac`(E+Af(n?0~gE1 zU>+*HjR~KfaC=~K2P=}?gFBh<4|!MtMy-{*Ku9xI0!!!bRxYkZJ6181Jmg_@V6uh< zKI7pYW|D_I+zUc#T^qPq#|A#JU_CR*6B{-JCL3AcpWtv`ptzqEN#=okbdaPCJP1W3 zKN;{45t3!`FbHY*CSVz^M}TRqT#w;;R52HWc`Wepc;I6*TO_FoPcY&03Z4v1o?=Ck zHn4>W|DFHSVECjLn`Z(a&nlC<(9q`s#q+F4(gt1-q9rU|3@o;?z(1eiCB>|S&C6ia z4f+ZZ{3St>G@+XQ8Wb|>uPdkL!s#1<;!Rd0zxwnR6aJAYZwDsyu>noxC2;yK+a%A0 zcn^fEhW7&(AFzS{fsGHDNpd1SV#4Pn1dE@86 z)1@I}!XV)`WB=VjszO{xJv-c{+SHR?H?a zO~A+y?#hZJk)SCP{^1kNz(}>t0~aln#Tryn#7y$_a?8M^l?dv=qBRr#$q;S8*lpCO z7PJK+&1eTKJ!#J_k~E!SCVZMshrpyGE0SkPbYj9MMRW!e4YAE|9~roNunQ<@NLOHK zNH=!!FCI4`CcCpqY?h#sJrwf-m>yvGJt!wm@b;1qoVkjG7 z7#OMckif@qWkIP0hbrbhcpVYg9Htaop*WnG)K7P)r`wE#LhZMsh>-nuGzeJ^W5j0< zR5CUYj1xf{2ug%F5XAVvVgd_%#=}I#oC%vrU}V512R@Ee7VpDiieg>@Gd1urE$}g& zEs{q?%wWR*aK%i;d;q7jz^DOSN4Z!F7jv0OzBis1n9OH^|C)F~pjfCB zSHS5}%p@5OM}tsH|CqqXBDV04WLO+1j%7uXgLYgXIGzPQndt;(l4Pb6LCEl&6u3B< z4SXWTDT<-Qi&F!e)0Bb|F-}*^W{k%fVC-2}d?NTAe&zxY(*FyAWqDi#OozASX!*s8`3TGR$RFyi!SU~&44viKJ5dX|~wVL8tQ zCeO3L|CG-Q%p{2zFM{CjqvFg~B4pXU1VY;NGO)Dk6<}I+-=kfxGLxiTycU?e&H|ry z@dh(V+Qpk7q}I0r7jLtH{~?=qm`QRd-VIFNV}Z}1ct22lz=|ZN;zK5UhQvo;R2csl zgf#RMU>TlIm5ZM-JfA6sQYbzTe0&l3_)=L=3dL87(FqeY4fNLH8)(%1^DPKz>UY4> z)bEv3N}>2cF_c2_V_@@>Qv8PQ{j3;Dq4))i)VnS4@vE}<9X@_j45d)~9@zY$6o0_x zPsJdGVy~!yWKj5C=CUfsTIB)p5S0V;4b2DghFLbWa{K)bY2A3^o3FH3B~au#ad|e* zbFcuAtKISRi9%;xiJjSHXmMp=-_9uFVtk1kGqfK@T6Gm*{$TQNeypRslUGkWufg6h z2sIf-7=>EEegKmPPjJiXh`N&Vy|dto4%Y={c|9qv?279Pwx8auH2wAba^R#1=CP$2 z_AR1G^EJ?%xhZsOK_(bemX@jn8O)%FF{m`ZzLsQueKpDS@=__}eqanMrhBbs7p`e` zoiPnDO)vK^`7su*nx>bluF7@Ms;wsY@28iRmYQEX}TTv_dO)7AW9q3-znVmYY! Zwe!8w?3Y<-szwdh7pyb~tT6cRe*g_r(2D>7 literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/decoder/l3reorder.ser b/build/classes/classes/javazoom/jl/decoder/l3reorder.ser new file mode 100644 index 0000000000000000000000000000000000000000..da216fcf469620b74fadec2ab33eb91cc99572d5 GIT binary patch literal 13925 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�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 Sg;}_TEfbnvLG~-#@%am{$*L^? literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/player/AudioDeviceFactory.class b/build/classes/classes/javazoom/jl/player/AudioDeviceFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..bf7576577ef6aa636e3a3073e0064818e4741719 GIT binary patch literal 783 zcmah{T~E|N6g`*i?m(%+DhMlz3%FPW)0p_QYfK12f^L=v6W_;n+;meqq#aQFL%zZb z8XkymCj2PEono*Ofj-Qgk8{txJ?EaD9iISr3Ezdlgo{Z$a505xyK4wM6qpfsM5w)v z)7ZQrRQ#on1ZPc0ick+TC5>9$jbi;)?ZqMA&HGE;f!vedwB8N|NwAa1eU$|zOo!mE ze+|`+iFKL_JSL3BX>Md{VrC<}_X~y~k!e3zOJtsRwTx8ODP4asS)BGex7HGv6?h`h z^e~JOfjJNJSP*#Xp@jtxi+Dzuy}4mR>t?`)42{nA3F8)b(f8J;feH;_v78#IkcG>F zcMR)VT`qMXH2>xn|J>7NL+_^1{~?=6qWUsf4MUaZ*FY{cWt~fqu`7iL;j-pWr5wVm&9msgHZX*&() a2u{1&sQyB=_u{~E7F@$zx{iCe51a!CYtSVC literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/player/FactoryRegistry.class b/build/classes/classes/javazoom/jl/player/FactoryRegistry.class new file mode 100644 index 0000000000000000000000000000000000000000..f32bdde250ad5efdf0d9afde3eb973e66ffedab2 GIT binary patch literal 2069 zcma)7Yf~Fl7=8|HvSHbz+|m+SYFZ1D3yoI6N)V+$Z86XbNX2?vl0#S~+0E>3u<2+2 zM8Eoluk{v28C%EB$c+C&e~9%xyPL2eGi7J?oZa_4@BMQA`uEpo0N#SGAb|-PlL|U8 z(SC3?;Ywj!+tD7IW;M56$<-=agIl?q zTG27B#(iGaZO3Zl8M-!IlFn_0xXY5OJ9;H|OS88eZKJ{o6Q0%$-I-zN980Y+NONY1 z6vXU??eJ<#7Q^UR>U264tyJE=A&(Tm(i=7s8Bi&xE^7HPFnBRd8> z0lA81lyh?x&9+@=^azw#ix$@$9uUlM`DBX&81i0OcvR#yM>h=$(Lk9yo4L`T$`KDH{9Ll5oO&2R}tW{jW2t&Wf;jx6MxQy3TByouxcy*3d zyp0hV_f@Q5RmCS*Q}FqhA$5h^WLrBP4R>IAzUEJBYr?{$+KGN0o0hsW=esJpyE75#Hs4y{(>Mu}nk6&y!0MWuWM z?;YlYHXX-D9MdC-F8e=_B*udlv?Nla`d#h0>eB<>t!`Q7H|}(C2a2sfrbedea+?Cq zE4<1Lhng+X(&K#x-d(oF9dX4rj&_Klqt)ujJ0iE;(^rZK|();LG-$UomkiI7xkir`n^O2(@ zOFTnAAasEKeS`@r|A-L%HxZ%rse8_dEA8_Pk#xZoOaBBZ(?l1&$^%a}Lk3wNca~5B zr}((;HfFpnE8%0JEm=(*!l)7HSU6NCN5iyhtdMR(UCJKd;y$A5`-qXfXNcC**V{y2 z6a9M_c+QqPC#B2*l5r{f>^mf~ap_uq~!#t%<>z;U}0J{tbx&srP6@ zLf2{Fp1cZ~l4WM2$E literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/player/JavaSoundAudioDevice.class b/build/classes/classes/javazoom/jl/player/JavaSoundAudioDevice.class new file mode 100644 index 0000000000000000000000000000000000000000..0cf72b05027077d76a8985106c5c7c4acb50d495 GIT binary patch literal 3179 zcmah~`F9gl6#iZ_$)xE}y8u$!+JY=;QjMsfQY=tPHJFOf0=9LVCewCmGE-+J(BiIG zS5Vyd1(&+uf=5%a9ME6%9RC6T1^){5-kC|8Vz4JC_szU_x9{HjzWL+tpU(r>gzqD` z0fUv;f*}@nvA8=z;vO0IMsOcg7Q+#Qkml`-j1d{55maG}-*pz_EbeEKWs!@(fLR3v z6D%H(Vac#%I5P5K9FCv?N7&&cizyaILpv_)pnO1X6+FmJ9%At@zdpiGkMh%FEFKTK ziU|BA^_=boA5O4%g2j_89+Yt`f&>P`c#79)7EiNyhGRb~<2f163xsSlZ>2SXb*XXn zusWHbcO#Rq)!al@%Ov{T({9yKQ@Wvb2n0rQj=-9-$~*HJ-Rv=~oa&IKJUr!SUHK7# zilHtFv`sg3r;|KH+YSmyyUYwlt+q9%#EjC2F6o-ht4A-gyE59gq@h49nR$>HPSO}L zDHCr|l7^vKyRxcnYqr4pOZY36VjWu%O39qi41vh*$+R}%=%zuoVcttp0R@z_rKyhQ z#T2N|>DjDqYiZNS*!^Y~RmhFCWa`Pbq(EglYucLUxbldlJN~mA9qLOaxhx9dW2ZYU zOPvx3Mw4w^`zpr`!}b&tnzY-eKB0gK)b<5hcpcQP7F)3U0(r3bvv{ z!8Y8i-~}8PXel={CH<6fLcxo;Q^89tI&o6LE_BOynP#Y*?V|DutSzUrcqZBFD+*r4 zYYKLvOTlfN?CW?#!EW3t<4px`;T;7@K6@A21y-}uL{>FM6Z`Xqqvy2w<_WA^IHVD| zUmewUTb5}Fw3kbTr|5t|?)0oWoGtaUfz^+iW-c+FO=PIy8O=)Up}mwkrCB8bThgjw zm`zMT4rmjf-mqTi?0-%#@C#{ zHv$_=0Zn8Xg^P!}VPxEvd%pap6`}i@B??`tO&32x)7I^kg~rIgY(=ADy?h0_W{suM zFFF>eBWHW_&P3knv9t&BnvtgA=ezE0?i!;KYgxXT(Vk>-aFDM`6MMXv?uz3lu-W4w zZ%kZP=veZSvfGeu?{yi0Xl{^5koe7em!fXiOW&BjDcjL%Oprbq;^0~)A zUd0bI0gM%{82sD?Qp!v=S zth&@W*3bv~2Ks^rP{FiHPZi9p?n>lJ>tzsh?Y5KLL2v8mT+q5IHVY9GKca#~AXZz0 zbKxH$ouM;8V*c|j>d2yk_Cm2ZDHhL(dj0dw2)pNPu^$ll9j&nff~nXXLId#vr+7KKdQib7&Z-TTN&hFPw4Pl)$xE zNzoG2u*==G6RRk#g`@>~al2oe4SqhWo2Ch96aAZ~$4Oo>JwASXIalQaB%NP!$C~g%C;Mmq`Lki(>A@wiZzy6HID|X>_*`0^ z?A3v7jPy6u@p2X$=?Wv7duCgsS6YFA`SG~RpY~hb39pOQ)JX1Z7Z9%vzjv-O6^jSr z=L=}3LS9Axt7p(c6WuT{hs3}vuBqEpz_rxA>k7Dj7Mp1#xKUBWX(Sepz%BI7cdrT> MdQgeC@hz|a0%IKtq5uE@ literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/player/JavaSoundAudioDeviceFactory.class b/build/classes/classes/javazoom/jl/player/JavaSoundAudioDeviceFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..c0280b03afbb92cf67f36893bc39338b0c1b4318 GIT binary patch literal 1557 zcmah}Yg5xu5IvXHriAclf%5P{0eJ;z#kYWHDMbq@ID^9seqlnJsi`69gcQY};;+CN zEi*DBe)dN>?oC=6q~LVA_vYTSXU}eS^ZU<_p8)3YMnpd*TG59|k<1h~vVds;GXiEs z2$%>X!Pg`=_qdr85yE`|4@5k~BN31BB#fur^O=D8Fc$dzqKIxh7qBGY1w+Wu4jiq( zz}_)LRx;b!bY?fLq_(zpH&VF_LsTiLhicML&0=!Pv30Y!z|fwy%mYU?oo&^qXvDIp zo4T{a5SX0WW(cOO0-Z+kwx&8-s#4Ic741;Z)7i-6luP*8vi6fDBUv`oBh60wFhnnA zKIOHtqf-!u-b*am{j$L@-JEHS)NWZ7vv85JljrF>l5ht@5(Y3RVVv*oVvM1?k?Xkx zhH-vc7hKTtl$@R9aTKoI2kdLOd!<^g=mvoqMk}VeXJ~Q9ihJqAxxcG3UT{k@AD8eF zDQ=b}q_M&kW*A}(PDM9As6{Pf+mM4D!LSTIvS}W`U~B; vnd2N65bc>cLGPJ=PtM_50KN|Y6M()cR0S`?7=`2+iaaBQ5{P+KXvo1|VMdfN literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/player/NullAudioDevice.class b/build/classes/classes/javazoom/jl/player/NullAudioDevice.class new file mode 100644 index 0000000000000000000000000000000000000000..b471b19635109d789ef39a2249af9763f432f1ff GIT binary patch literal 215 zcmX^0Z`VEs1_nb09xeuE22OScE_McPMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvG9r?)21> zfc)ajlFa-(u#_hc0}BHyBZE>_Vp(EUetxcgR*rr_PGV(hk-lGPPL5+~N@l)GYFTD7 zP&YP3ND7=1i&GgC8JK|100AZjptTIFK#~o}69m$XK$=x+I|JiJkUWsf&cFec=7UNz KF|Ps3F#rHX1S+)v literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/player/Player.class b/build/classes/classes/javazoom/jl/player/Player.class new file mode 100644 index 0000000000000000000000000000000000000000..ffc7e73271b5490c5376552fde6f4624a920228f GIT binary patch literal 2222 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 literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/player/advanced/jlap$1.class b/build/classes/classes/javazoom/jl/player/advanced/jlap$1.class new file mode 100644 index 0000000000000000000000000000000000000000..2a79ecf79c1286687dfa337144e445e00c15be7d GIT binary patch literal 872 zcmb7CTWb?R6#gcgW}EG5w>I%oTTO4e*;LmcK1Bp6eOO39tW@-E%ns?s&Fr!}3F;s6 zxsbG=pzr=D@k|mdB1C+cbIzPOxB0&FVC<0@8dI9jZsYQnS8zyZU${*51V+4GM+bVaJ7geq=adS4EuiU#8Mqm2i6 zsEhavJBy&`$2{F@GJwGjq!ig<%=29249;csSErfa1V-&&l?XYFbtiqykk0_~qr?wn zI#kDsiVRvoun|We zq*dHm=NalWJW)oQQl0;5%EjDUKS7OlbcGhza2!n}K$^ImYNC@~3Ut5A8wfO(q}6uhko4DSNPGxBRbDyYt*pTL;rZ+l}39#iZX#yOT=e}>ck3iD0l9LpCd ee?OxH>Pan1qzkxCvWOeFiG8vxdbLOc%fA55oZJBb literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/player/advanced/jlap$InfoListener.class b/build/classes/classes/javazoom/jl/player/advanced/jlap$InfoListener.class new file mode 100644 index 0000000000000000000000000000000000000000..4a9c30dc6d468b1b18c0c1496d8ff8fb2a8c395b GIT binary patch literal 1056 zcma)5YflqF6g@*L+pa6EJOmVU3q^NZ%7Sk#@&O`A6F!iTnD}w%4rOs)*&Q13Uuj}7 zn)n0!QN}wh#cEA4o6OGLJ?Gqe&z<@4^Xqp28`#QY0&_YFn9t)j?r2!hk;Qxti|Tz> z$32*8S5nK8j%Ac{SkVc4UxTHg$}ldEy|lc}u(Wr=+x$Zm1sDT@p;&C4rJnmt?g6KcSXW5rxeY!m)<-|qJS122-Cni zHZ(jm@Cc7p@WjAVJk#*pzze+WGn-Km`+`b0xx8f7v8mw|L+vW-%8l?S+VfH=LRE}0 z6w>D%pQouv8CFNB^^N&0ma)3_40L`*c>;z^bSfEUx`T4O$k``DB-tW(phn5#ScEi* zT5l4AuGQ@xY1l|2+W%8tcWw;1mXN#3W~#=r8w?9pW0ZDIM!mT)Ok2Z1%0AWY^UrP= zv{?1#ht%%Bx={yFy!XhBEaj)j9Myw5>nPFHD$p%s#iBZAw9A0eVVk0Lnxb16qX*C{ z)z4s+bBukYi13)9e?5#%9EDl@gv>W&-=5>zuPm$cditu#P0 W{-$NV;6|TXp&UBpoWKLvV7~wieG)kU literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/player/advanced/jlap.class b/build/classes/classes/javazoom/jl/player/advanced/jlap.class new file mode 100644 index 0000000000000000000000000000000000000000..bb10b2875bd9c62495d5cbde774f786cd05b71ec GIT binary patch literal 1970 zcmcIkU3VH)6x}yWGBBCehBQf$7->E#fxwvHXNc7%wv`Gd8rzEXYXTPphk?aRYU_(X z#mBzdK0ubN)gR!GGM+O)m}rwexP&!x=iYnv+2`JK_WAR#Kb`|vM@7R`WK_JRVGJ35 zy{+LLyvtwjsdzs`lT8gOvKqGVfr{%ICh?()k2GAs4K~|mo1Gv&4&r7Iw*tQ&A0PAj zZ55xW$Z43v9SyVilo#_V3L2t3iQ+RAyBZd-$FI*-d?BFc>`F6Vb6jc5wl}45$1)v9 zIsy}0HM{0s7YM{x?+GY7&9bDSVb*Mc+4zHe-F#>omT6aweYah+t69&iWtoo!X5ug2 z)^0v3$(CDd+K!5S6<-R3oFAJ%-*wC?c~==-Xk`TI0|&LHajRy@tmp2RX0u_`ErYFO z+c3)yO}iw^#vaWN%+gQ8vt(D#HNP>yF-*3z0@gpsa=CNy|CP=e(dF#cp-a~%%|`Zr zW!15a6@eHh?W}98TV_i~8Y?R9>bQsdI#!Vom>y;NBz-!*LQ%)pc%b4N9pAED>SfNC z{RPJneMeR2IUl5%*AhAmys6`R6seB9!q|*aXtAvd6@qOxB-JDYvN4&irem~6M>;uI zx^AWW<&hqi2Q8VcnAI$q7JEoHS{bHT7l;nIw+|~7*_LHrIt1p1yIg?29S-sbewplM zLm>`j)JXe0h#bgIc;0WVSFrQ2WHaeJif^gv(f@>XwI?#CUDY=Ls zh9zQTjgWjP2IgEEIGyWZvPisop@$2_WEU6Lj_}I;eiTVEoFKp&QUs<(Fo20pAQ1`l5p+0^!TaBh36x6JW@YB90J?aA3ZOaRLCdJKesguU8BlyUQ$N<>L@@LCTG#fTD}@8b0iVi9HJMxo=Z U(X&LbFu9qeXOZR$GzWrz1I)tym;e9( literal 0 HcmV?d00001 diff --git a/build/classes/classes/javazoom/jl/player/jlp.class b/build/classes/classes/javazoom/jl/player/jlp.class new file mode 100644 index 0000000000000000000000000000000000000000..d9b2006156826fc817ee72d7eb34ee31eb273610 GIT binary patch literal 2665 zcmbVN+jA3T6#p$**v+!E5Lzy_YA6!ZBuxs4VwFFGkS6KF{imZn7xWF&3v4@K)US}t7 zsCZL_q2iK?oPxZDotRW1m`|xFFrQ|tB9j>=mlc>AdQf6Q8I=`SDk>TxxT3(;(2FV) zM?p5<;07W7bHSM!ArhaO`5aFeqVzElQR{ zr_y-|a>*!`C2Wgccv!Xf9GxGv@}%09vxVV^k#f~B$~hABt!d!;xMo?U)Qp*`n8v)Y z>8Zj&)5UVpIV2$vWw)KtM}%W7s-a@oRdLuZR3DWZr5>zKTXSctMuF0iIhX|P_|=@K zI7O>WhFc24IeR8EQm)h-Dqa{R3EQK+jle}KIm@RV2J)Z5V z`g}TrItD=GD260#ZMFVERtnzM@eZylxS``+yr<)Re4yh)d_;A!{wm+pI~{2Z>39)` zb?nD8Iu77j9WQ`dDfiWEQ^ChNKEbCtj0&rN{($ab2Jx?*=zaB{4amgR?W#7Rj1{6;9!4$KizMu>5X|mQY)HyVM|cCCR%{7j?eK0 z&0#W`)bS<0(s3NaI$mOO0wWT3u5l6L?kw|NeBHcRo}kkYZdO9XZlSALJg70*Ej~{gW$n|Y@J-L{0`qGTZ(Z2aa6Z2I^(53{0Oa-|f|##m{-Er%hwpY(;9(=@SoZuGQ7Bd& zn^3Z?>fUin5Lp}9RvA)5wlqEizEZG@K3)6hd%BMPgir1hK@{>9iw+4)8qOC@j5oh>8>RxcgSuX+7WWCf()#lr?49f=vaoD zT|_VwkJX{w!g?ta|CJ(eE`*t$b{D-7+MzwRh>bDn9`sn?9yZ-^6(wG<)oxcR#^QCf zHMC`hT~9mYC9xqECzs80LTT@OlG5gKPXvbI_vPE@h{Xf@$df$ehF?H`{Qmmeh>$eY zUdQHJ(5Q+n3)m5h%buc4c`iU}4`ZLOn&d8fy>d3?LacMxxu zOkXE5u>GLoKsit + + + + + +All Classes + + + + + + + + + + +All Classes +
+ + + + + +
AdvancedPlayer +
+AudioDevice +
+AudioDeviceBase +
+AudioDeviceFactory +
+Bitstream +
+BitstreamErrors +
+BitstreamException +
+Control +
+Converter +
+Converter.PrintWriterProgressListener +
+Converter.ProgressListener +
+Crc16 +
+Decoder +
+Decoder.Params +
+DecoderErrors +
+DecoderException +
+Equalizer +
+Equalizer.EQFunction +
+FactoryRegistry +
+FrameDecoder +
+Header +
+InputStreamSource +
+JavaLayerError +
+JavaLayerErrors +
+JavaLayerException +
+JavaLayerHook +
+JavaLayerUtils +
+JavaSoundAudioDevice +
+JavaSoundAudioDeviceFactory +
+jlap +
+jlc +
+jlp +
+Manager +
+NullAudioDevice +
+Obuffer +
+OutputChannels +
+PlaybackEvent +
+PlaybackListener +
+Player +
+PlayerApplet +
+RiffFile +
+SampleBuffer +
+Source +
+WaveFile +
+WaveFileObuffer +
+
+ + + diff --git a/build/classes/doc/allclasses-noframe.html b/build/classes/doc/allclasses-noframe.html new file mode 100644 index 0000000..92bc889 --- /dev/null +++ b/build/classes/doc/allclasses-noframe.html @@ -0,0 +1,118 @@ + + + + + + +All Classes + + + + + + + + + + +All Classes +
+ + + + + +
AdvancedPlayer +
+AudioDevice +
+AudioDeviceBase +
+AudioDeviceFactory +
+Bitstream +
+BitstreamErrors +
+BitstreamException +
+Control +
+Converter +
+Converter.PrintWriterProgressListener +
+Converter.ProgressListener +
+Crc16 +
+Decoder +
+Decoder.Params +
+DecoderErrors +
+DecoderException +
+Equalizer +
+Equalizer.EQFunction +
+FactoryRegistry +
+FrameDecoder +
+Header +
+InputStreamSource +
+JavaLayerError +
+JavaLayerErrors +
+JavaLayerException +
+JavaLayerHook +
+JavaLayerUtils +
+JavaSoundAudioDevice +
+JavaSoundAudioDeviceFactory +
+jlap +
+jlc +
+jlp +
+Manager +
+NullAudioDevice +
+Obuffer +
+OutputChannels +
+PlaybackEvent +
+PlaybackListener +
+Player +
+PlayerApplet +
+RiffFile +
+SampleBuffer +
+Source +
+WaveFile +
+WaveFileObuffer +
+
+ + + diff --git a/build/classes/doc/constant-values.html b/build/classes/doc/constant-values.html new file mode 100644 index 0000000..3ba3e67 --- /dev/null +++ b/build/classes/doc/constant-values.html @@ -0,0 +1,600 @@ + + + + + + +Constant Field Values + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ +
+ + + +