From 5c4b7b5fdcebe7a2ea9fead5e370a36b159203ef Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Sat, 16 Mar 2024 03:49:13 +0900 Subject: [PATCH 01/14] clean up --- .../java/unknown/sound/ChunkInputStream.java | 2 -- src/main/java/unknown/sound/Message.java | 2 -- .../sound/converter/MIDIToMLDInputStream.java | 2 -- .../unknown/sound/converter/Preferences.java | 2 -- .../unknown/sound/mfi/MLDChunkInputStream.java | 2 -- .../java/unknown/sound/mfi/MLDInputStream.java | 2 -- .../sound/mfi/UnknownChunkInputStream.java | 2 -- .../java/unknown/sound/mfi/UnknownMessage.java | 2 -- .../unknown/sound/mfi/info/CuepMessage.java | 2 -- .../sound/mfi/info/InformationChunkHeader.java | 2 -- .../mfi/info/InformationChunkInputStream.java | 2 -- .../unknown/sound/midi/DeltaTimedMessage.java | 2 -- .../unknown/sound/midi/MIDIInputStream.java | 2 -- .../sound/midi/header/HeaderMessage.java | 2 -- .../sound/midi/track/MetaEventMessage.java | 2 -- .../unknown/sound/midi/track/ModeMessage.java | 2 -- .../sound/midi/track/NoteOffMessage.java | 2 -- .../sound/midi/track/NoteOnMessage.java | 2 -- .../track/PolyphonicKeyPressureMessage.java | 2 -- .../midi/track/TrackChunkInputStream.java | 2 -- .../unknown/sound/midi/track/TrackMessage.java | 2 -- .../vavi/apps/packetcast/AudioSplitter.java | 2 -- .../vavi/apps/packetcast/MovieProcessor.java | 2 -- .../vavi/apps/packetcast/PacketCaster.java | 2 -- .../vavi/apps/packetcast/SplitDataSource.java | 2 -- .../java/vavi/apps/packetcast/StateWaiter.java | 2 -- .../apps/packetcast/SuperCutDataSource.java | 2 -- .../vavi/apps/packetcast/VideoEncoder.java | 2 -- src/main/java/vavi/sound/ilbc/Ilbc.java | 2 -- src/main/java/vavi/sound/ldcelp/Constants.java | 2 -- src/main/java/vavi/sound/ldcelp/LdCelp.java | 2 -- .../mfi/ittake/IttakeMfiDeviceProvider.java | 2 -- .../sound/mfi/ittake/IttakeMidiConverter.java | 2 -- .../java/vavi/sound/mfi/ittake/MfiContext.java | 2 -- .../midi/jsyn/JSynMidiDeviceProvider.java | 2 -- .../vavi/sound/midi/jsyn/JSynSoundbank.java | 2 -- .../vavi/sound/midi/jsyn/JSynSynthesizer.java | 8 +++----- .../midi/opl3/Opl3MidiDeviceProvider.java | 2 -- .../sound/midi/opl3/Opl3MidiFileReader.java | 2 -- .../vavi/sound/midi/opl3/Opl3Soundbank.java | 2 -- .../vavi/sound/midi/opl3/Opl3Synthesizer.java | 12 +++++------- .../rococoa/RococoaMidiDeviceProvider.java | 2 -- .../sound/midi/rococoa/RococoaSoundbank.java | 2 -- .../sound/midi/rococoa/RococoaSynthesizer.java | 2 -- src/main/java/vavi/sound/mp3/Mp3Decoder.java | 2 -- .../java/vavi/sound/mp3/Mp3InputStream.java | 2 -- src/main/java/vavi/sound/opl3/Adlib.java | 2 -- .../vavi/sound/opl3/AdvancedSierraFile.java | 2 -- src/main/java/vavi/sound/opl3/CmfFile.java | 2 -- src/main/java/vavi/sound/opl3/LucasFile.java | 2 -- src/main/java/vavi/sound/opl3/MidiFile.java | 2 -- .../java/vavi/sound/opl3/OldLucasFile.java | 2 -- src/main/java/vavi/sound/opl3/SierraFile.java | 2 -- .../vavi/sound/pcm/equalizing/Normalizer.java | 2 -- .../sound/pcm/equalizing/sse/Equalizer.java | 2 -- .../pcm/resampling/laoe/LaoeInputStream.java | 2 -- .../sound/pcm/resampling/laoe/Resampler.java | 2 -- .../sound/pcm/resampling/rohm/Resampler.java | 2 -- .../pcm/resampling/rohm/RohmInputStream.java | 2 -- .../vavi/sound/pcm/resampling/sox/Fifo.java | 2 -- .../pcm/resampling/sox/PerfectResampler.java | 2 -- .../sound/pcm/resampling/sox/Polyphase.java | 2 -- .../resampling/sox/PolyphaseInputStream.java | 2 -- .../sound/pcm/resampling/sox/Resampler.java | 2 -- .../resampling/sox/ResamplerInputStream.java | 2 -- .../sampled/opl3/Opl3AudioFileReader.java | 4 ++-- .../vavi/sound/sampled/opl3/Opl3Encoding.java | 2 -- .../sound/sampled/opl3/Opl3FileFormatType.java | 2 -- .../opl3/Opl3FormatConversionProvider.java | 2 -- .../sampled/opus/Opus2PcmAudioInputStream.java | 2 -- .../sampled/opus/OpusAudioFileReader.java | 4 ++-- .../vavi/sound/sampled/opus/OpusEncoding.java | 2 -- .../sound/sampled/opus/OpusFileFormatType.java | 2 -- .../opus/OpusFormatConversionProvider.java | 2 -- .../sound/sampled/rococoa/RcococaEncoding.java | 2 -- .../rococoa/Rococoa2PcmAudioInputStream.java | 2 -- .../sound/sampled/rococoa/RococoaClip.java | 12 +++++------- .../sampled/rococoa/RococoaFileFormatType.java | 2 -- .../RococoaFormatConversionProvider.java | 18 ++++++++---------- .../sound/sampled/rococoa/RococoaMixer.java | 2 -- .../sampled/rococoa/RococoaMixerPropvider.java | 2 -- .../sampled/rococoa/RococoaMixerProvider.java | 2 -- src/main/java/vavi/sound/twinvq/BFile.java | 2 -- src/main/java/vavi/sound/twinvq/BStream.java | 2 -- .../java/vavi/sound/twinvq/HeaderManager.java | 2 -- src/main/java/vavi/sound/twinvq/Player.java | 2 -- src/main/java/vavi/sound/twinvq/TwinVQ.java | 2 -- .../vavi/sound/twinvq/TwinVQInputStream.java | 2 -- .../vavi/sound/twinvq/TwinVQOutputStream.java | 2 -- src/main/java/vavi/sound/vsq/Block.java | 2 -- src/main/java/vavi/sound/vsq/VSQ.java | 2 -- src/main/java/vavi/sound/vsq/block/BPList.java | 2 -- src/main/java/vavi/sound/vsq/block/Common.java | 2 -- src/main/java/vavi/sound/vsq/block/Event.java | 2 -- .../java/vavi/sound/vsq/block/EventList.java | 2 -- src/main/java/vavi/sound/vsq/block/Handle.java | 2 -- src/main/java/vavi/sound/vsq/block/Master.java | 2 -- src/main/java/vavi/sound/vsq/block/Mixer.java | 2 -- .../rococoa/avfoundation/AVFoundation.java | 2 -- .../rococoa/avfoundation/AudioToolbox.java | 2 -- .../rococoa/ituneslibrary/ITunesLibrary.java | 2 -- src/samples/java/jmf/AVReceive2.java | 2 -- src/samples/java/jmf/JMF_Movie_Processor.java | 2 -- src/samples/java/jmf/RtpReceiver.java | 2 -- src/samples/java/jmf/RtpTransmitter.java | 2 -- src/samples/java/jmf/Transcode.java | 2 -- src/samples/java/jmf/Transcoder.java | 2 -- src/samples/java/jse/AudioChannel.java | 2 -- src/samples/java/jse/AudioChannelPlayer.java | 2 -- src/samples/java/jse/AudioConcat.java | 2 -- src/samples/java/jse/AudioDecoder.java | 2 -- src/samples/java/jse/AudioFileInfo.java | 2 -- .../java/jse/AudioFileTypeConverter.java | 2 -- src/samples/java/jse/AudioLoop.java | 2 -- src/samples/java/jse/AudioPlayer.java | 2 -- .../java/jse/AudioPlayerApplication.java | 2 -- src/samples/java/jse/AudioPlayerPanel.java | 2 -- src/samples/java/jse/AudioRecorder.java | 2 -- src/samples/java/jse/AudioStream.java | 2 -- src/samples/java/jse/AudioStreamPlayer.java | 2 -- src/samples/java/jse/AudioUtils.java | 2 -- src/samples/java/jse/BaseAudioStream.java | 2 -- src/samples/java/jse/CaptureStream.java | 2 -- .../java/jse/CaptureStreamRecorder.java | 2 -- src/samples/java/jse/CddaPlayer.java | 2 -- src/samples/java/jse/CddaRipper.java | 2 -- src/samples/java/jse/ClipPlayer.java | 2 -- src/samples/java/jse/Convert.java | 2 -- src/samples/java/jse/CookieCadence.java | 2 -- src/samples/java/jse/DecodingAudioPlayer.java | 2 -- .../java/jse/DirectRecordingStream.java | 2 -- src/samples/java/jse/DumpReceiver.java | 2 -- src/samples/java/jse/DumpSequence.java | 2 -- src/samples/java/jse/GSMEncoder.java | 2 -- src/samples/java/jse/MidiConverter.java | 2 -- .../java/jse/MidiDestinationListModel.java | 2 -- src/samples/java/jse/MidiFileInfo.java | 2 -- src/samples/java/jse/MidiInDump.java | 2 -- src/samples/java/jse/MidiLoop.java | 2 -- src/samples/java/jse/MidiNote.java | 2 -- src/samples/java/jse/MidiPlayer.java | 2 -- .../java/jse/MidiPlayerApplication.java | 2 -- src/samples/java/jse/MidiPlayerPanel.java | 2 -- src/samples/java/jse/MidiRecorder.java | 2 -- src/samples/java/jse/MidiRouter.java | 2 -- .../java/jse/MixingAudioInputStream.java | 2 -- src/samples/java/jse/Mp3Encoder.java | 2 -- .../java/jse/MultiAudioStreamPlayer.java | 2 -- src/samples/java/jse/Oscillator.java | 2 -- src/samples/java/jse/OscillatorFile.java | 2 -- src/samples/java/jse/OscillatorFileAOS.java | 2 -- src/samples/java/jse/OscillatorPlayer.java | 2 -- .../java/jse/SequenceAudioInputStream.java | 2 -- src/samples/java/jse/SimpleAudioPlayer.java | 2 -- src/samples/java/jse/SimpleAudioRecorder.java | 2 -- src/samples/java/jse/SimpleAudioStream.java | 2 -- src/samples/java/jse/SimpleMidiPlayer.java | 2 -- src/samples/java/jse/SynthNote.java | 2 -- src/test/java/AnalyzeMLD.java | 2 -- src/test/java/ClipTest.java | 4 ---- src/test/java/LineTest.java | 2 -- src/test/java/LineTest2.java | 2 -- src/test/java/LineTest3.java | 2 -- src/test/java/MidiTest.java | 2 -- src/test/java/PlayG721Adpcm.java | 2 -- src/test/java/PlaySMAF.java | 2 -- src/test/java/ResamplingTest.java | 2 -- .../audio/AmplitudeAudioInputStreamTest.java | 2 -- src/test/java/vavi/sound/DebugInputStream.java | 2 -- src/test/java/vavi/sound/ilbc/IlbcTest.java | 2 -- .../sound/ldcelp/LdCelpInputStreamTest.java | 2 -- .../mfi/ittake/IttakeMidiConverterTest.java | 2 -- .../sound/midi/jsyn/JSynSynthesizerTest.java | 2 -- .../midi/mocha/MochaMidiDeviceProvider.java | 2 -- .../vavi/sound/midi/mocha/MochaSoundbank.java | 2 -- .../sound/midi/mocha/MochaSynthesizer.java | 12 +++++------- .../sound/midi/opl3/Opl3SynthesizerTest.java | 2 -- .../midi/rococoa/RococoaSynthesizerTest.java | 2 -- .../vavi/sound/mp3/Mp3InputStreamTest.java | 2 -- .../sound/pcm/equalizing/NormalizerTest.java | 2 -- .../pcm/equalizing/sse/EqualizerTest.java | 2 -- .../vavi/sound/pcm/equalizing/sse/Test1.java | 2 -- .../vavi/sound/pcm/equalizing/sse/Test2.java | 2 -- .../pcm/resampling/laoe/ResamplerTest.java | 2 -- .../pcm/resampling/rohm/ResamplerTest.java | 2 -- .../resampling/sox/PerfectResamplerTest.java | 2 -- .../pcm/resampling/sox/PolyphaseTest.java | 2 -- .../pcm/resampling/sox/ResamplerTest.java | 2 -- .../SimpleResamplingInputFilterTest.java | 2 -- .../sampled/opl3/Opl3AudioFileReaderTest.java | 2 -- .../opus/OpusFormatConversionProviderTest.java | 2 -- .../SampleRateConversionProviderTest.java | 2 -- .../sound/sampled/rococoa/RococoaClipTest.java | 2 -- .../RococoaFormatConversionProviderTest.java | 2 -- src/test/java/vavi/sound/vsq/Test.java | 2 -- src/test/java/vavi/sound/vsq/Test2.java | 2 -- .../rococoa/avfoundation/AVFoundationTest.java | 2 -- .../rococoa/ituneslibrary/ITLibraryTest.java | 2 -- .../vavix/rococoa/ituneslibrary/iTunes2.java | 2 -- 199 files changed, 30 insertions(+), 426 deletions(-) diff --git a/src/main/java/unknown/sound/ChunkInputStream.java b/src/main/java/unknown/sound/ChunkInputStream.java index 7e29851..c440e13 100644 --- a/src/main/java/unknown/sound/ChunkInputStream.java +++ b/src/main/java/unknown/sound/ChunkInputStream.java @@ -58,5 +58,3 @@ public byte[] readMessageBytes(int byteLength) private String chunkTag; private byte[] chunkDataBytes; } - -/* */ diff --git a/src/main/java/unknown/sound/Message.java b/src/main/java/unknown/sound/Message.java index 6c1b87b..630b29f 100644 --- a/src/main/java/unknown/sound/Message.java +++ b/src/main/java/unknown/sound/Message.java @@ -75,5 +75,3 @@ protected Message() { this(new byte[0]); } } - -/* */ diff --git a/src/main/java/unknown/sound/converter/MIDIToMLDInputStream.java b/src/main/java/unknown/sound/converter/MIDIToMLDInputStream.java index c8a7e5f..be6ca0b 100644 --- a/src/main/java/unknown/sound/converter/MIDIToMLDInputStream.java +++ b/src/main/java/unknown/sound/converter/MIDIToMLDInputStream.java @@ -221,5 +221,3 @@ private void createHeaderChunk() { 63, 63, 63, 63 }; } - -/* */ diff --git a/src/main/java/unknown/sound/converter/Preferences.java b/src/main/java/unknown/sound/converter/Preferences.java index 2e9f548..2a6e533 100644 --- a/src/main/java/unknown/sound/converter/Preferences.java +++ b/src/main/java/unknown/sound/converter/Preferences.java @@ -38,5 +38,3 @@ public Preferences() { MIDIToMLDInputStream.DEFAULT_SOUND); } } - -/* */ diff --git a/src/main/java/unknown/sound/mfi/MLDChunkInputStream.java b/src/main/java/unknown/sound/mfi/MLDChunkInputStream.java index c8f2bf6..c59f79f 100644 --- a/src/main/java/unknown/sound/mfi/MLDChunkInputStream.java +++ b/src/main/java/unknown/sound/mfi/MLDChunkInputStream.java @@ -20,5 +20,3 @@ public MLDChunkInputStream(String tag, byte[] dataBytes) { super(tag, dataBytes); } } - -/* */ diff --git a/src/main/java/unknown/sound/mfi/MLDInputStream.java b/src/main/java/unknown/sound/mfi/MLDInputStream.java index 2e08f22..491701e 100644 --- a/src/main/java/unknown/sound/mfi/MLDInputStream.java +++ b/src/main/java/unknown/sound/mfi/MLDInputStream.java @@ -66,5 +66,3 @@ public MLDChunkInputStream readMLDChunk() return chunk; } } - -/* */ diff --git a/src/main/java/unknown/sound/mfi/UnknownChunkInputStream.java b/src/main/java/unknown/sound/mfi/UnknownChunkInputStream.java index 964946f..594653f 100644 --- a/src/main/java/unknown/sound/mfi/UnknownChunkInputStream.java +++ b/src/main/java/unknown/sound/mfi/UnknownChunkInputStream.java @@ -18,5 +18,3 @@ public UnknownChunkInputStream(String tag, byte[] dataBytes) { super(tag, dataBytes); } } - -/* */ diff --git a/src/main/java/unknown/sound/mfi/UnknownMessage.java b/src/main/java/unknown/sound/mfi/UnknownMessage.java index 752052a..110ad8e 100644 --- a/src/main/java/unknown/sound/mfi/UnknownMessage.java +++ b/src/main/java/unknown/sound/mfi/UnknownMessage.java @@ -13,5 +13,3 @@ public UnknownMessage(byte[] dataBytes) { super(dataBytes); } } - -/* */ diff --git a/src/main/java/unknown/sound/mfi/info/CuepMessage.java b/src/main/java/unknown/sound/mfi/info/CuepMessage.java index 62c7235..9ef4345 100644 --- a/src/main/java/unknown/sound/mfi/info/CuepMessage.java +++ b/src/main/java/unknown/sound/mfi/info/CuepMessage.java @@ -37,5 +37,3 @@ public CuepMessage() { this(MYBYTE); } } - -/* */ diff --git a/src/main/java/unknown/sound/mfi/info/InformationChunkHeader.java b/src/main/java/unknown/sound/mfi/info/InformationChunkHeader.java index 6e0b08c..74316f9 100644 --- a/src/main/java/unknown/sound/mfi/info/InformationChunkHeader.java +++ b/src/main/java/unknown/sound/mfi/info/InformationChunkHeader.java @@ -73,5 +73,3 @@ public InformationChunkHeader(int melodyLength, int informationLength, setTrackCount(count); } } - -/* */ diff --git a/src/main/java/unknown/sound/mfi/info/InformationChunkInputStream.java b/src/main/java/unknown/sound/mfi/info/InformationChunkInputStream.java index 70c305a..a12d710 100644 --- a/src/main/java/unknown/sound/mfi/info/InformationChunkInputStream.java +++ b/src/main/java/unknown/sound/mfi/info/InformationChunkInputStream.java @@ -77,5 +77,3 @@ public InformationChunkInputStream(int melodyDataLength, byte[] dataBytes) setTrackCount(read()); } } - -/* */ diff --git a/src/main/java/unknown/sound/midi/DeltaTimedMessage.java b/src/main/java/unknown/sound/midi/DeltaTimedMessage.java index 01784d1..b23aa21 100644 --- a/src/main/java/unknown/sound/midi/DeltaTimedMessage.java +++ b/src/main/java/unknown/sound/midi/DeltaTimedMessage.java @@ -84,5 +84,3 @@ public DeltaTimedMessage(int deltaTime, byte[] dataBytes) { protected DeltaTimedMessage() { } } - -/* */ diff --git a/src/main/java/unknown/sound/midi/MIDIInputStream.java b/src/main/java/unknown/sound/midi/MIDIInputStream.java index f44685a..87d084a 100644 --- a/src/main/java/unknown/sound/midi/MIDIInputStream.java +++ b/src/main/java/unknown/sound/midi/MIDIInputStream.java @@ -47,5 +47,3 @@ public MIDIChunkInputStream readMIDIChunk() return chunk; } } - -/* */ diff --git a/src/main/java/unknown/sound/midi/header/HeaderMessage.java b/src/main/java/unknown/sound/midi/header/HeaderMessage.java index 03434af..cb832ba 100644 --- a/src/main/java/unknown/sound/midi/header/HeaderMessage.java +++ b/src/main/java/unknown/sound/midi/header/HeaderMessage.java @@ -55,5 +55,3 @@ public HeaderMessage(int formatType, int trackCount, int resolution) { setResolution(resolution); } } - -/* */ diff --git a/src/main/java/unknown/sound/midi/track/MetaEventMessage.java b/src/main/java/unknown/sound/midi/track/MetaEventMessage.java index ffac211..df890e2 100644 --- a/src/main/java/unknown/sound/midi/track/MetaEventMessage.java +++ b/src/main/java/unknown/sound/midi/track/MetaEventMessage.java @@ -41,5 +41,3 @@ public MetaEventMessage(int deltaTime, int dataType, byte[] data) { protected MetaEventMessage() { } } - -/* */ diff --git a/src/main/java/unknown/sound/midi/track/ModeMessage.java b/src/main/java/unknown/sound/midi/track/ModeMessage.java index e6ef8af..4e59d7d 100644 --- a/src/main/java/unknown/sound/midi/track/ModeMessage.java +++ b/src/main/java/unknown/sound/midi/track/ModeMessage.java @@ -46,5 +46,3 @@ public ModeMessage(int deltaTime, int statusByte, int mode, int data) { setData(data); } } - -/* */ diff --git a/src/main/java/unknown/sound/midi/track/NoteOffMessage.java b/src/main/java/unknown/sound/midi/track/NoteOffMessage.java index 9cd9ca6..62ee6ab 100644 --- a/src/main/java/unknown/sound/midi/track/NoteOffMessage.java +++ b/src/main/java/unknown/sound/midi/track/NoteOffMessage.java @@ -46,5 +46,3 @@ public NoteOffMessage(int deltaTime, int statusByte, int note, int velocity) { setVelocity(velocity); } } - -/* */ diff --git a/src/main/java/unknown/sound/midi/track/NoteOnMessage.java b/src/main/java/unknown/sound/midi/track/NoteOnMessage.java index f47fd39..30e986f 100644 --- a/src/main/java/unknown/sound/midi/track/NoteOnMessage.java +++ b/src/main/java/unknown/sound/midi/track/NoteOnMessage.java @@ -46,5 +46,3 @@ public NoteOnMessage(int deltaTime, int statusByte, int note, int velocity) { setVelocity(velocity); } } - -/* */ diff --git a/src/main/java/unknown/sound/midi/track/PolyphonicKeyPressureMessage.java b/src/main/java/unknown/sound/midi/track/PolyphonicKeyPressureMessage.java index da7036b..f4eded9 100644 --- a/src/main/java/unknown/sound/midi/track/PolyphonicKeyPressureMessage.java +++ b/src/main/java/unknown/sound/midi/track/PolyphonicKeyPressureMessage.java @@ -48,5 +48,3 @@ public PolyphonicKeyPressureMessage(int deltaTime, int statusByte, setPressure(pressure); } } - -/* */ diff --git a/src/main/java/unknown/sound/midi/track/TrackChunkInputStream.java b/src/main/java/unknown/sound/midi/track/TrackChunkInputStream.java index 456c45d..c2417c0 100644 --- a/src/main/java/unknown/sound/midi/track/TrackChunkInputStream.java +++ b/src/main/java/unknown/sound/midi/track/TrackChunkInputStream.java @@ -185,5 +185,3 @@ public TrackChunkInputStream(byte[] dataBytes) { trackAbsoluteTime = 0L; } } - -/* */ diff --git a/src/main/java/unknown/sound/midi/track/TrackMessage.java b/src/main/java/unknown/sound/midi/track/TrackMessage.java index 275b5ca..30b2a2c 100644 --- a/src/main/java/unknown/sound/midi/track/TrackMessage.java +++ b/src/main/java/unknown/sound/midi/track/TrackMessage.java @@ -10,5 +10,3 @@ public TrackMessage(int deltaTime, byte[] data) { protected TrackMessage() {} } - -/* */ diff --git a/src/main/java/vavi/apps/packetcast/AudioSplitter.java b/src/main/java/vavi/apps/packetcast/AudioSplitter.java index 19e851e..8992bdf 100644 --- a/src/main/java/vavi/apps/packetcast/AudioSplitter.java +++ b/src/main/java/vavi/apps/packetcast/AudioSplitter.java @@ -405,5 +405,3 @@ void doneFile() { } } } - -/* */ diff --git a/src/main/java/vavi/apps/packetcast/MovieProcessor.java b/src/main/java/vavi/apps/packetcast/MovieProcessor.java index 6d0edef..ddb4d0e 100644 --- a/src/main/java/vavi/apps/packetcast/MovieProcessor.java +++ b/src/main/java/vavi/apps/packetcast/MovieProcessor.java @@ -264,5 +264,3 @@ public void kill() { player.close(); } } - -/* */ diff --git a/src/main/java/vavi/apps/packetcast/PacketCaster.java b/src/main/java/vavi/apps/packetcast/PacketCaster.java index 4753d40..1d873d4 100644 --- a/src/main/java/vavi/apps/packetcast/PacketCaster.java +++ b/src/main/java/vavi/apps/packetcast/PacketCaster.java @@ -249,5 +249,3 @@ interface UrlMaker { String getUrl(); } } - -/* */ diff --git a/src/main/java/vavi/apps/packetcast/SplitDataSource.java b/src/main/java/vavi/apps/packetcast/SplitDataSource.java index 1825d84..3394c9b 100644 --- a/src/main/java/vavi/apps/packetcast/SplitDataSource.java +++ b/src/main/java/vavi/apps/packetcast/SplitDataSource.java @@ -165,5 +165,3 @@ public synchronized void transferData(PushBufferStream pbs) { } } } - -/* */ diff --git a/src/main/java/vavi/apps/packetcast/StateWaiter.java b/src/main/java/vavi/apps/packetcast/StateWaiter.java index 7f163c8..331de7d 100644 --- a/src/main/java/vavi/apps/packetcast/StateWaiter.java +++ b/src/main/java/vavi/apps/packetcast/StateWaiter.java @@ -97,5 +97,3 @@ boolean waitForFileDone() { return fileSuccess; } } - -/* */ diff --git a/src/main/java/vavi/apps/packetcast/SuperCutDataSource.java b/src/main/java/vavi/apps/packetcast/SuperCutDataSource.java index d67f408..fb0f7a8 100644 --- a/src/main/java/vavi/apps/packetcast/SuperCutDataSource.java +++ b/src/main/java/vavi/apps/packetcast/SuperCutDataSource.java @@ -420,5 +420,3 @@ static boolean isRawAudio(Format format) { } } } - -/* */ diff --git a/src/main/java/vavi/apps/packetcast/VideoEncoder.java b/src/main/java/vavi/apps/packetcast/VideoEncoder.java index 7c8bf82..18b035b 100644 --- a/src/main/java/vavi/apps/packetcast/VideoEncoder.java +++ b/src/main/java/vavi/apps/packetcast/VideoEncoder.java @@ -130,5 +130,3 @@ public static void main(String[] args) { frm.dispose(); } } - -/* */ diff --git a/src/main/java/vavi/sound/ilbc/Ilbc.java b/src/main/java/vavi/sound/ilbc/Ilbc.java index 10172dd..a054d3a 100644 --- a/src/main/java/vavi/sound/ilbc/Ilbc.java +++ b/src/main/java/vavi/sound/ilbc/Ilbc.java @@ -4996,5 +4996,3 @@ private static void syntFilter(double[] Out, int oP, double[] a, int aP, int len System.arraycopy(Out, po + len - LPC_FILTERORDER, mem, 0, LPC_FILTERORDER); } } - -/* */ diff --git a/src/main/java/vavi/sound/ldcelp/Constants.java b/src/main/java/vavi/sound/ldcelp/Constants.java index f957c1a..9087bd8 100644 --- a/src/main/java/vavi/sound/ldcelp/Constants.java +++ b/src/main/java/vavi/sound/ldcelp/Constants.java @@ -74,5 +74,3 @@ final class Constants { static final float MAX = 4095.0f; static final float MIN = -4095.0f; } - -/* */ diff --git a/src/main/java/vavi/sound/ldcelp/LdCelp.java b/src/main/java/vavi/sound/ldcelp/LdCelp.java index 1f8868b..6995fa0 100644 --- a/src/main/java/vavi/sound/ldcelp/LdCelp.java +++ b/src/main/java/vavi/sound/ldcelp/LdCelp.java @@ -2142,5 +2142,3 @@ static void init_postfilter() { } } } - -/* */ diff --git a/src/main/java/vavi/sound/mfi/ittake/IttakeMfiDeviceProvider.java b/src/main/java/vavi/sound/mfi/ittake/IttakeMfiDeviceProvider.java index 9c543c1..90c1c1e 100644 --- a/src/main/java/vavi/sound/mfi/ittake/IttakeMfiDeviceProvider.java +++ b/src/main/java/vavi/sound/mfi/ittake/IttakeMfiDeviceProvider.java @@ -62,5 +62,3 @@ public MfiDevice getDevice(MfiDevice.Info info) throw new IllegalArgumentException(info + " is not supported"); } } - -/* */ diff --git a/src/main/java/vavi/sound/mfi/ittake/IttakeMidiConverter.java b/src/main/java/vavi/sound/mfi/ittake/IttakeMidiConverter.java index 11cdcaa..cf18801 100644 --- a/src/main/java/vavi/sound/mfi/ittake/IttakeMidiConverter.java +++ b/src/main/java/vavi/sound/mfi/ittake/IttakeMidiConverter.java @@ -303,5 +303,3 @@ protected static Sequence convert(vavi.sound.mfi.Sequence sequence) throw new UnsupportedOperationException("not implemented"); } } - -/* */ diff --git a/src/main/java/vavi/sound/mfi/ittake/MfiContext.java b/src/main/java/vavi/sound/mfi/ittake/MfiContext.java index dca5d39..fa7c7c4 100644 --- a/src/main/java/vavi/sound/mfi/ittake/MfiContext.java +++ b/src/main/java/vavi/sound/mfi/ittake/MfiContext.java @@ -57,5 +57,3 @@ public void setMidiResolution(int midiResolution) { this.midiResolution = midiResolution; } } - -/* */ diff --git a/src/main/java/vavi/sound/midi/jsyn/JSynMidiDeviceProvider.java b/src/main/java/vavi/sound/midi/jsyn/JSynMidiDeviceProvider.java index 9be8e55..dcb962d 100644 --- a/src/main/java/vavi/sound/midi/jsyn/JSynMidiDeviceProvider.java +++ b/src/main/java/vavi/sound/midi/jsyn/JSynMidiDeviceProvider.java @@ -49,5 +49,3 @@ public MidiDevice getDevice(MidiDevice.Info info) } } } - -/* */ diff --git a/src/main/java/vavi/sound/midi/jsyn/JSynSoundbank.java b/src/main/java/vavi/sound/midi/jsyn/JSynSoundbank.java index 096b68a..795edf4 100644 --- a/src/main/java/vavi/sound/midi/jsyn/JSynSoundbank.java +++ b/src/main/java/vavi/sound/midi/jsyn/JSynSoundbank.java @@ -113,5 +113,3 @@ public String getVoiceClassName() { } } } - -/* */ diff --git a/src/main/java/vavi/sound/midi/jsyn/JSynSynthesizer.java b/src/main/java/vavi/sound/midi/jsyn/JSynSynthesizer.java index f05e4a5..083c4b7 100644 --- a/src/main/java/vavi/sound/midi/jsyn/JSynSynthesizer.java +++ b/src/main/java/vavi/sound/midi/jsyn/JSynSynthesizer.java @@ -68,7 +68,7 @@ public class JSynSynthesizer implements Synthesizer { // TODO voice != channel ( = getMaxPolyphony()) private final VoiceStatus[] voiceStatus = new VoiceStatus[MAX_CHANNEL]; - private long timestump; + private long timestamp; @Override public Info getDeviceInfo() { @@ -126,7 +126,7 @@ public boolean isOpen() { @Override public long getMicrosecondPosition() { - return timestump; + return timestamp; } @Override @@ -424,7 +424,7 @@ public JSynReceiver() { @Override public void send(MidiMessage message, long timeStamp) { - timestump = timeStamp; + timestamp = timeStamp; if (isOpen) { if (message instanceof ShortMessage shortMessage) { int channel = shortMessage.getChannel(); @@ -490,5 +490,3 @@ public void close() { } } } - -/* */ diff --git a/src/main/java/vavi/sound/midi/opl3/Opl3MidiDeviceProvider.java b/src/main/java/vavi/sound/midi/opl3/Opl3MidiDeviceProvider.java index ed3b782..218eef4 100644 --- a/src/main/java/vavi/sound/midi/opl3/Opl3MidiDeviceProvider.java +++ b/src/main/java/vavi/sound/midi/opl3/Opl3MidiDeviceProvider.java @@ -49,5 +49,3 @@ public MidiDevice getDevice(MidiDevice.Info info) } } } - -/* */ diff --git a/src/main/java/vavi/sound/midi/opl3/Opl3MidiFileReader.java b/src/main/java/vavi/sound/midi/opl3/Opl3MidiFileReader.java index b1ddd3b..916abf7 100644 --- a/src/main/java/vavi/sound/midi/opl3/Opl3MidiFileReader.java +++ b/src/main/java/vavi/sound/midi/opl3/Opl3MidiFileReader.java @@ -49,5 +49,3 @@ public OplSequence(float divisionType, int resolution) throws InvalidMidiDataExc } } - -/* */ diff --git a/src/main/java/vavi/sound/midi/opl3/Opl3Soundbank.java b/src/main/java/vavi/sound/midi/opl3/Opl3Soundbank.java index a9fe468..8bc0092 100644 --- a/src/main/java/vavi/sound/midi/opl3/Opl3Soundbank.java +++ b/src/main/java/vavi/sound/midi/opl3/Opl3Soundbank.java @@ -95,5 +95,3 @@ public Object getData() { } } } - -/* */ diff --git a/src/main/java/vavi/sound/midi/opl3/Opl3Synthesizer.java b/src/main/java/vavi/sound/midi/opl3/Opl3Synthesizer.java index d38cd48..589f2ea 100644 --- a/src/main/java/vavi/sound/midi/opl3/Opl3Synthesizer.java +++ b/src/main/java/vavi/sound/midi/opl3/Opl3Synthesizer.java @@ -79,7 +79,7 @@ public class Opl3Synthesizer implements Synthesizer { // TODO voice != channel ( = getMaxPolyphony()) private final VoiceStatus[] voiceStatus = new VoiceStatus[MAX_CHANNEL]; - private long timestump; + private long timestamp; private boolean isOpen; @@ -197,7 +197,7 @@ private void init() throws MidiUnavailableException { throw (MidiUnavailableException) new MidiUnavailableException().initCause(e); } - timestump = 0; + timestamp = 0; } /** */ @@ -207,8 +207,8 @@ private void play() { while (isOpen) { try { - long msec = System.currentTimeMillis() - timestump; - timestump = System.currentTimeMillis(); + long msec = System.currentTimeMillis() - timestamp; + timestamp = System.currentTimeMillis(); msec = msec > 100 ? 100 : msec; int l = adlib.read(buf, 0, 4 * (int) (audioFormat.getSampleRate() * msec / 1000.0)); //Debug.printf("adlib: %d", l); @@ -242,7 +242,7 @@ public boolean isOpen() { @Override public long getMicrosecondPosition() { - return timestump; + return timestamp; } @Override @@ -740,5 +740,3 @@ public void close() { } } } - -/* */ diff --git a/src/main/java/vavi/sound/midi/rococoa/RococoaMidiDeviceProvider.java b/src/main/java/vavi/sound/midi/rococoa/RococoaMidiDeviceProvider.java index fd3f5b0..e91e177 100644 --- a/src/main/java/vavi/sound/midi/rococoa/RococoaMidiDeviceProvider.java +++ b/src/main/java/vavi/sound/midi/rococoa/RococoaMidiDeviceProvider.java @@ -49,5 +49,3 @@ public MidiDevice getDevice(MidiDevice.Info info) } } } - -/* */ diff --git a/src/main/java/vavi/sound/midi/rococoa/RococoaSoundbank.java b/src/main/java/vavi/sound/midi/rococoa/RococoaSoundbank.java index b2dcc8a..93181a2 100644 --- a/src/main/java/vavi/sound/midi/rococoa/RococoaSoundbank.java +++ b/src/main/java/vavi/sound/midi/rococoa/RococoaSoundbank.java @@ -84,5 +84,3 @@ public Object getData() { } } } - -/* */ diff --git a/src/main/java/vavi/sound/midi/rococoa/RococoaSynthesizer.java b/src/main/java/vavi/sound/midi/rococoa/RococoaSynthesizer.java index 4a10904..0751587 100644 --- a/src/main/java/vavi/sound/midi/rococoa/RococoaSynthesizer.java +++ b/src/main/java/vavi/sound/midi/rococoa/RococoaSynthesizer.java @@ -477,5 +477,3 @@ public void close() { } } } - -/* */ diff --git a/src/main/java/vavi/sound/mp3/Mp3Decoder.java b/src/main/java/vavi/sound/mp3/Mp3Decoder.java index c9c38f5..806fc7f 100644 --- a/src/main/java/vavi/sound/mp3/Mp3Decoder.java +++ b/src/main/java/vavi/sound/mp3/Mp3Decoder.java @@ -1023,5 +1023,3 @@ private void l3dsubband(float[] sample, int sample_p, float[] s, int ch) { m_dxoff[ch] = (m_dxoff[ch] - SCALE_RANGE) & ((HAN_SIZE * 2) - 1); } } - -/* */ diff --git a/src/main/java/vavi/sound/mp3/Mp3InputStream.java b/src/main/java/vavi/sound/mp3/Mp3InputStream.java index d3cc9c9..130cf2c 100644 --- a/src/main/java/vavi/sound/mp3/Mp3InputStream.java +++ b/src/main/java/vavi/sound/mp3/Mp3InputStream.java @@ -254,5 +254,3 @@ private void seek(int seekSample) throws IOException { } } } - -/* */ diff --git a/src/main/java/vavi/sound/opl3/Adlib.java b/src/main/java/vavi/sound/opl3/Adlib.java index 2516734..4039caf 100644 --- a/src/main/java/vavi/sound/opl3/Adlib.java +++ b/src/main/java/vavi/sound/opl3/Adlib.java @@ -338,5 +338,3 @@ public int read(byte[] buf, int ofs, int len) { return len; } } - -/* */ diff --git a/src/main/java/vavi/sound/opl3/AdvancedSierraFile.java b/src/main/java/vavi/sound/opl3/AdvancedSierraFile.java index d97fe40..4afcd3d 100644 --- a/src/main/java/vavi/sound/opl3/AdvancedSierraFile.java +++ b/src/main/java/vavi/sound/opl3/AdvancedSierraFile.java @@ -148,5 +148,3 @@ public void init(Context context) { context.adlib().style = Adlib.SIERRA_STYLE | Adlib.MIDI_STYLE; // advanced sierra tunes use volume; } } - -/* */ diff --git a/src/main/java/vavi/sound/opl3/CmfFile.java b/src/main/java/vavi/sound/opl3/CmfFile.java index c2784b9..358e85f 100644 --- a/src/main/java/vavi/sound/opl3/CmfFile.java +++ b/src/main/java/vavi/sound/opl3/CmfFile.java @@ -106,5 +106,3 @@ public void init(Context context) { context.adlib().style = Adlib.CMF_STYLE; } } - -/* */ diff --git a/src/main/java/vavi/sound/opl3/LucasFile.java b/src/main/java/vavi/sound/opl3/LucasFile.java index 01be863..25a72f7 100644 --- a/src/main/java/vavi/sound/opl3/LucasFile.java +++ b/src/main/java/vavi/sound/opl3/LucasFile.java @@ -44,5 +44,3 @@ public void init(Context context) { super.init(context); } } - -/* */ diff --git a/src/main/java/vavi/sound/opl3/MidiFile.java b/src/main/java/vavi/sound/opl3/MidiFile.java index d9a7592..6641d39 100644 --- a/src/main/java/vavi/sound/opl3/MidiFile.java +++ b/src/main/java/vavi/sound/opl3/MidiFile.java @@ -66,5 +66,3 @@ void rewind(int subSong, MidPlayer player) throws IOException { public void init(Context context) { } } - -/* */ diff --git a/src/main/java/vavi/sound/opl3/OldLucasFile.java b/src/main/java/vavi/sound/opl3/OldLucasFile.java index d3ebbda..3cf6603 100644 --- a/src/main/java/vavi/sound/opl3/OldLucasFile.java +++ b/src/main/java/vavi/sound/opl3/OldLucasFile.java @@ -104,5 +104,3 @@ public void init(Context context) { context.adlib().style = Adlib.LUCAS_STYLE | Adlib.MIDI_STYLE; } } - -/* */ diff --git a/src/main/java/vavi/sound/opl3/SierraFile.java b/src/main/java/vavi/sound/opl3/SierraFile.java index 284705c..aeea38e 100644 --- a/src/main/java/vavi/sound/opl3/SierraFile.java +++ b/src/main/java/vavi/sound/opl3/SierraFile.java @@ -74,5 +74,3 @@ public void init(Context context) { context.adlib().style = Adlib.SIERRA_STYLE | Adlib.MIDI_STYLE; } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/equalizing/Normalizer.java b/src/main/java/vavi/sound/pcm/equalizing/Normalizer.java index b3adebf..4fb277d 100644 --- a/src/main/java/vavi/sound/pcm/equalizing/Normalizer.java +++ b/src/main/java/vavi/sound/pcm/equalizing/Normalizer.java @@ -237,5 +237,3 @@ static int normalize(String inname, String outname) throws IOException { return 0; } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/equalizing/sse/Equalizer.java b/src/main/java/vavi/sound/pcm/equalizing/sse/Equalizer.java index 36fc5d3..c2ba076 100644 --- a/src/main/java/vavi/sound/pcm/equalizing/sse/Equalizer.java +++ b/src/main/java/vavi/sound/pcm/equalizing/sse/Equalizer.java @@ -997,5 +997,3 @@ public void write(int b) throws IOException { } } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/resampling/laoe/LaoeInputStream.java b/src/main/java/vavi/sound/pcm/resampling/laoe/LaoeInputStream.java index 6a30122..dedd1fd 100644 --- a/src/main/java/vavi/sound/pcm/resampling/laoe/LaoeInputStream.java +++ b/src/main/java/vavi/sound/pcm/resampling/laoe/LaoeInputStream.java @@ -93,5 +93,3 @@ public void finish() throws IOException { } } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/resampling/laoe/Resampler.java b/src/main/java/vavi/sound/pcm/resampling/laoe/Resampler.java index a483a5c..a4a669a 100644 --- a/src/main/java/vavi/sound/pcm/resampling/laoe/Resampler.java +++ b/src/main/java/vavi/sound/pcm/resampling/laoe/Resampler.java @@ -248,5 +248,3 @@ private static int interpolate3(int[] data, double index) { } } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/resampling/rohm/Resampler.java b/src/main/java/vavi/sound/pcm/resampling/rohm/Resampler.java index 33c4031..0b2635f 100644 --- a/src/main/java/vavi/sound/pcm/resampling/rohm/Resampler.java +++ b/src/main/java/vavi/sound/pcm/resampling/rohm/Resampler.java @@ -111,5 +111,3 @@ int[] resample(int[] pbyPcmData) { return pbyNewPcm; } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/resampling/rohm/RohmInputStream.java b/src/main/java/vavi/sound/pcm/resampling/rohm/RohmInputStream.java index 99e0373..c9aafcb 100644 --- a/src/main/java/vavi/sound/pcm/resampling/rohm/RohmInputStream.java +++ b/src/main/java/vavi/sound/pcm/resampling/rohm/RohmInputStream.java @@ -93,5 +93,3 @@ public void finish() throws IOException { } } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/resampling/sox/Fifo.java b/src/main/java/vavi/sound/pcm/resampling/sox/Fifo.java index 6714bdb..908887e 100644 --- a/src/main/java/vavi/sound/pcm/resampling/sox/Fifo.java +++ b/src/main/java/vavi/sound/pcm/resampling/sox/Fifo.java @@ -125,5 +125,3 @@ int read_ptr() { clear(); } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/resampling/sox/PerfectResampler.java b/src/main/java/vavi/sound/pcm/resampling/sox/PerfectResampler.java index 2b5ceb3..1fdbb9a 100644 --- a/src/main/java/vavi/sound/pcm/resampling/sox/PerfectResampler.java +++ b/src/main/java/vavi/sound/pcm/resampling/sox/PerfectResampler.java @@ -1424,5 +1424,3 @@ public void drain(int[] obuf, int[] osamp) { // "\n -b 74-99.7\t%" + // "\n -a\t\tallow aliasing" } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/resampling/sox/Polyphase.java b/src/main/java/vavi/sound/pcm/resampling/sox/Polyphase.java index 04e8c8e..ce8efc9 100644 --- a/src/main/java/vavi/sound/pcm/resampling/sox/Polyphase.java +++ b/src/main/java/vavi/sound/pcm/resampling/sox/Polyphase.java @@ -654,5 +654,3 @@ public int[] drain() { return resample(new int[0]); // TODO does not work } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/resampling/sox/PolyphaseInputStream.java b/src/main/java/vavi/sound/pcm/resampling/sox/PolyphaseInputStream.java index e64e500..81cfddc 100644 --- a/src/main/java/vavi/sound/pcm/resampling/sox/PolyphaseInputStream.java +++ b/src/main/java/vavi/sound/pcm/resampling/sox/PolyphaseInputStream.java @@ -91,5 +91,3 @@ public void finish() throws IOException { } } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/resampling/sox/Resampler.java b/src/main/java/vavi/sound/pcm/resampling/sox/Resampler.java index ee43a7a..5811613 100644 --- a/src/main/java/vavi/sound/pcm/resampling/sox/Resampler.java +++ b/src/main/java/vavi/sound/pcm/resampling/sox/Resampler.java @@ -667,5 +667,3 @@ private double[] lpFilter(int mWing) { return c; } } - -/* */ diff --git a/src/main/java/vavi/sound/pcm/resampling/sox/ResamplerInputStream.java b/src/main/java/vavi/sound/pcm/resampling/sox/ResamplerInputStream.java index c98b2b2..fdc067b 100644 --- a/src/main/java/vavi/sound/pcm/resampling/sox/ResamplerInputStream.java +++ b/src/main/java/vavi/sound/pcm/resampling/sox/ResamplerInputStream.java @@ -91,5 +91,3 @@ public void finish() throws IOException { } } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/opl3/Opl3AudioFileReader.java b/src/main/java/vavi/sound/sampled/opl3/Opl3AudioFileReader.java index c75d23f..e25238e 100644 --- a/src/main/java/vavi/sound/sampled/opl3/Opl3AudioFileReader.java +++ b/src/main/java/vavi/sound/sampled/opl3/Opl3AudioFileReader.java @@ -68,12 +68,12 @@ public AudioFileFormat getAudioFileFormat(InputStream stream) throws Unsupported * @throws IOException if an I/O exception occurs. */ protected AudioFileFormat getAudioFileFormat(InputStream bitStream, int mediaLength) throws UnsupportedAudioFileException, IOException { - Debug.println("exner: available: " + bitStream.available()); +Debug.println("enter: available: " + bitStream.available()); AudioFormat.Encoding encoding; try { encoding = FileType.getEncoding(bitStream); } catch (NoSuchElementException e) { - Debug.println("error exit: available: " + bitStream.available()); +Debug.println("error exit: available: " + bitStream.available()); throw (UnsupportedAudioFileException) new UnsupportedAudioFileException().initCause(e); } AudioFileFormat.Type type = FileType.getType(encoding); diff --git a/src/main/java/vavi/sound/sampled/opl3/Opl3Encoding.java b/src/main/java/vavi/sound/sampled/opl3/Opl3Encoding.java index 6cb77bb..7c09f50 100644 --- a/src/main/java/vavi/sound/sampled/opl3/Opl3Encoding.java +++ b/src/main/java/vavi/sound/sampled/opl3/Opl3Encoding.java @@ -32,5 +32,3 @@ public Opl3Encoding(String name) { super(name); } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/opl3/Opl3FileFormatType.java b/src/main/java/vavi/sound/sampled/opl3/Opl3FileFormatType.java index ab7efc5..03d67d6 100644 --- a/src/main/java/vavi/sound/sampled/opl3/Opl3FileFormatType.java +++ b/src/main/java/vavi/sound/sampled/opl3/Opl3FileFormatType.java @@ -34,5 +34,3 @@ public Opl3FileFormatType(String name, String extension) { super(name, extension); } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/opl3/Opl3FormatConversionProvider.java b/src/main/java/vavi/sound/sampled/opl3/Opl3FormatConversionProvider.java index 7b41c82..145692f 100644 --- a/src/main/java/vavi/sound/sampled/opl3/Opl3FormatConversionProvider.java +++ b/src/main/java/vavi/sound/sampled/opl3/Opl3FormatConversionProvider.java @@ -113,5 +113,3 @@ public AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInput } } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/opus/Opus2PcmAudioInputStream.java b/src/main/java/vavi/sound/sampled/opus/Opus2PcmAudioInputStream.java index 440588e..3c53fde 100644 --- a/src/main/java/vavi/sound/sampled/opus/Opus2PcmAudioInputStream.java +++ b/src/main/java/vavi/sound/sampled/opus/Opus2PcmAudioInputStream.java @@ -121,5 +121,3 @@ public void finish() throws IOException { } } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java b/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java index 7d33135..16695b6 100644 --- a/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java +++ b/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java @@ -69,7 +69,7 @@ public AudioFileFormat getAudioFileFormat(InputStream stream) throws Unsupported * @throws IOException if an I/O exception occurs. */ protected AudioFileFormat getAudioFileFormat(InputStream bitStream, int mediaLength) throws UnsupportedAudioFileException, IOException { - Debug.println(Level.FINE, "enter available: " + bitStream.available()); +Debug.println(Level.FINE, "enter available: " + bitStream.available()); OpusFile opus; try { bitStream.mark(32); @@ -90,7 +90,7 @@ protected AudioFileFormat getAudioFileFormat(InputStream bitStream, int mediaLen } catch (IOException e) { Debug.printStackTrace(e); } - Debug.println(Level.FINE, "finally available: " + bitStream.available()); +Debug.println(Level.FINE, "finally available: " + bitStream.available()); } AudioFormat format = new AudioFormat(OpusEncoding.OPUS, opus.getInfo().getSampleRate(), AudioSystem.NOT_SPECIFIED, opus.getInfo().getNumChannels(), AudioSystem.NOT_SPECIFIED, AudioSystem.NOT_SPECIFIED, true, new HashMap<>() {{ put("opus", opus); diff --git a/src/main/java/vavi/sound/sampled/opus/OpusEncoding.java b/src/main/java/vavi/sound/sampled/opus/OpusEncoding.java index 8d3193c..160bde8 100644 --- a/src/main/java/vavi/sound/sampled/opus/OpusEncoding.java +++ b/src/main/java/vavi/sound/sampled/opus/OpusEncoding.java @@ -30,5 +30,3 @@ public OpusEncoding(String name) { super(name); } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/opus/OpusFileFormatType.java b/src/main/java/vavi/sound/sampled/opus/OpusFileFormatType.java index 02fcbed..e6ef20a 100644 --- a/src/main/java/vavi/sound/sampled/opus/OpusFileFormatType.java +++ b/src/main/java/vavi/sound/sampled/opus/OpusFileFormatType.java @@ -32,5 +32,3 @@ public OpusFileFormatType(String name, String extension) { super(name, extension); } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/opus/OpusFormatConversionProvider.java b/src/main/java/vavi/sound/sampled/opus/OpusFormatConversionProvider.java index e9f4be4..6e27fba 100644 --- a/src/main/java/vavi/sound/sampled/opus/OpusFormatConversionProvider.java +++ b/src/main/java/vavi/sound/sampled/opus/OpusFormatConversionProvider.java @@ -135,5 +135,3 @@ public AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInput } } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/rococoa/RcococaEncoding.java b/src/main/java/vavi/sound/sampled/rococoa/RcococaEncoding.java index d4df70c..dc2868c 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RcococaEncoding.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RcococaEncoding.java @@ -29,5 +29,3 @@ public RcococaEncoding(String name) { super(name); } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/rococoa/Rococoa2PcmAudioInputStream.java b/src/main/java/vavi/sound/sampled/rococoa/Rococoa2PcmAudioInputStream.java index 4c846cb..6601502 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/Rococoa2PcmAudioInputStream.java +++ b/src/main/java/vavi/sound/sampled/rococoa/Rococoa2PcmAudioInputStream.java @@ -128,5 +128,3 @@ public void finish() throws IOException { } } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/rococoa/RococoaClip.java b/src/main/java/vavi/sound/sampled/rococoa/RococoaClip.java index b611fe3..d808e71 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RococoaClip.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RococoaClip.java @@ -82,13 +82,13 @@ public void start() { service.scheduleAtFixedRate(this::check, 100, 100, TimeUnit.MILLISECONDS); fireUpdate(new LineEvent(this, LineEvent.Type.START, 0)); } - Debug.println("play: " + r); +Debug.println("play: " + r); } // TODO use AVFoudation's delegate private void check() { if (!player.isPlaying()) { - Debug.println("stop detected"); +Debug.println("stop detected"); stopInternal(); } } @@ -117,7 +117,7 @@ public boolean isActive() { @Override public AudioFormat getFormat() { AVAudioFormat format = player.format(); - Debug.println(format + ", " + format.commonFormat()); +Debug.println(format + ", " + format.commonFormat()); return switch (format.commonFormat()) { default -> stream.getFormat(); case AVAudioFormat.PCMFormatFloat32 -> new AudioFormat(AudioFormat.Encoding.PCM_FLOAT, @@ -172,7 +172,7 @@ public javax.sound.sampled.Line.Info getLineInfo() { @Override public void open() throws LineUnavailableException { - Debug.println(Level.WARNING, "use #open(AudioInputStream)"); +Debug.println(Level.WARNING, "use #open(AudioInputStream)"); } @Override @@ -243,7 +243,7 @@ public void open(AudioInputStream stream) throws LineUnavailableException, IOExc // } // }); fireUpdate(new LineEvent(this, LineEvent.Type.OPEN, 0)); - Debug.println("player: " + player); +Debug.println("player: " + player); } @Override @@ -299,5 +299,3 @@ public float getLevel() { return player.volume(); } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/rococoa/RococoaFileFormatType.java b/src/main/java/vavi/sound/sampled/rococoa/RococoaFileFormatType.java index 0784db8..d9977ea 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RococoaFileFormatType.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RococoaFileFormatType.java @@ -32,5 +32,3 @@ public RococoaFileFormatType(String name, String extension) { super(name, extension); } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProvider.java b/src/main/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProvider.java index dbce51f..1633b39 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProvider.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProvider.java @@ -68,18 +68,18 @@ public AudioInputStream getAudioInputStream(AudioFormat.Encoding targetEncoding, } else if (sourceFormat.getEncoding() instanceof RcococaEncoding && targetFormat.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED)) { return new Rococoa2PcmAudioInputStream(sourceStream, targetFormat, -1); } else if (sourceFormat.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED) && targetFormat.getEncoding() instanceof RcococaEncoding) { - Debug.println("unable to convert " + sourceFormat + " to " + targetFormat); +Debug.println("unable to convert " + sourceFormat + " to " + targetFormat); throw new IllegalArgumentException("unable to convert " + sourceFormat + " to " + targetFormat); } else { - Debug.println("unable to convert " + sourceFormat + " to " + targetFormat); +Debug.println("unable to convert " + sourceFormat + " to " + targetFormat); throw new IllegalArgumentException("unable to convert " + sourceFormat + " to " + targetFormat); } } else { - Debug.println("target format not found"); +Debug.println("target format not found"); throw new IllegalArgumentException("target format not found"); } } else { - Debug.println("conversion not supported"); +Debug.println("conversion not supported"); throw new IllegalArgumentException("conversion not supported"); } } @@ -96,21 +96,19 @@ public AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInput targetFormat.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED)) { return new Rococoa2PcmAudioInputStream(sourceStream, targetFormat, -1); } else if (sourceFormat.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED) && targetFormat.getEncoding() instanceof RcococaEncoding) { - Debug.println("unable to convert " + sourceFormat + " to " + targetFormat); +Debug.println("unable to convert " + sourceFormat + " to " + targetFormat); throw new IllegalArgumentException("unable to convert " + sourceFormat + " to " + targetFormat); } else { - Debug.println("unable to convert " + sourceFormat + " to " + targetFormat); +Debug.println("unable to convert " + sourceFormat + " to " + targetFormat); throw new IllegalArgumentException("unable to convert " + sourceFormat + " to " + targetFormat); } } else { - Debug.println("target format not found"); +Debug.println("target format not found"); throw new IllegalArgumentException("target format not found"); } } else { - Debug.println("conversion not supported"); +Debug.println("conversion not supported"); throw new IllegalArgumentException("conversion not supported"); } } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/rococoa/RococoaMixer.java b/src/main/java/vavi/sound/sampled/rococoa/RococoaMixer.java index eee2571..12ba6b1 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RococoaMixer.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RococoaMixer.java @@ -166,5 +166,3 @@ public boolean isSynchronizationSupported(Line[] lines, boolean maintainSync) { return false; } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerPropvider.java b/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerPropvider.java index af969a6..c8814a3 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerPropvider.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerPropvider.java @@ -40,5 +40,3 @@ public Mixer getMixer(Info info) { } } } - -/* */ diff --git a/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerProvider.java b/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerProvider.java index c569270..93e34bf 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerProvider.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerProvider.java @@ -40,5 +40,3 @@ public Mixer getMixer(Info info) { } } } - -/* */ diff --git a/src/main/java/vavi/sound/twinvq/BFile.java b/src/main/java/vavi/sound/twinvq/BFile.java index c2879e5..8ea1c7d 100644 --- a/src/main/java/vavi/sound/twinvq/BFile.java +++ b/src/main/java/vavi/sound/twinvq/BFile.java @@ -254,5 +254,3 @@ int getBStream(int[] data, int offset, int nbits) throws IOException { return retval; } } - -/* */ diff --git a/src/main/java/vavi/sound/twinvq/BStream.java b/src/main/java/vavi/sound/twinvq/BStream.java index c7d57ad..df3b5d2 100644 --- a/src/main/java/vavi/sound/twinvq/BStream.java +++ b/src/main/java/vavi/sound/twinvq/BStream.java @@ -355,5 +355,3 @@ public static BStream getInstance() { return instance; } } - -/* */ diff --git a/src/main/java/vavi/sound/twinvq/HeaderManager.java b/src/main/java/vavi/sound/twinvq/HeaderManager.java index 640b150..7038889 100644 --- a/src/main/java/vavi/sound/twinvq/HeaderManager.java +++ b/src/main/java/vavi/sound/twinvq/HeaderManager.java @@ -286,5 +286,3 @@ public final int getSecondaryCharCode() { static class FailConstructionException extends RuntimeException { } } - -/* */ diff --git a/src/main/java/vavi/sound/twinvq/Player.java b/src/main/java/vavi/sound/twinvq/Player.java index b8665c4..d020847 100644 --- a/src/main/java/vavi/sound/twinvq/Player.java +++ b/src/main/java/vavi/sound/twinvq/Player.java @@ -205,5 +205,3 @@ private static int getStandardChunkInfo(HeaderManager theManager, HeaderInfo set return 0; } } - -/* */ diff --git a/src/main/java/vavi/sound/twinvq/TwinVQ.java b/src/main/java/vavi/sound/twinvq/TwinVQ.java index a7f15f1..ab6a7a4 100644 --- a/src/main/java/vavi/sound/twinvq/TwinVQ.java +++ b/src/main/java/vavi/sound/twinvq/TwinVQ.java @@ -372,5 +372,3 @@ public static TwinVQ getInstance() { return instance; } } - -/* */ diff --git a/src/main/java/vavi/sound/twinvq/TwinVQInputStream.java b/src/main/java/vavi/sound/twinvq/TwinVQInputStream.java index f43fbb1..0e96c7c 100644 --- a/src/main/java/vavi/sound/twinvq/TwinVQInputStream.java +++ b/src/main/java/vavi/sound/twinvq/TwinVQInputStream.java @@ -188,5 +188,3 @@ public int read(byte[] b, int off, int len) throws IOException { return i; } } - -/* */ diff --git a/src/main/java/vavi/sound/twinvq/TwinVQOutputStream.java b/src/main/java/vavi/sound/twinvq/TwinVQOutputStream.java index 6e3dbcd..77bc102 100644 --- a/src/main/java/vavi/sound/twinvq/TwinVQOutputStream.java +++ b/src/main/java/vavi/sound/twinvq/TwinVQOutputStream.java @@ -90,5 +90,3 @@ public void close() throws IOException { realOut.close(); } } - -/* */ diff --git a/src/main/java/vavi/sound/vsq/Block.java b/src/main/java/vavi/sound/vsq/Block.java index 2a9673b..03efb7f 100644 --- a/src/main/java/vavi/sound/vsq/Block.java +++ b/src/main/java/vavi/sound/vsq/Block.java @@ -93,5 +93,3 @@ public static Block getBlock(String label, List params) { } } } - -/* */ diff --git a/src/main/java/vavi/sound/vsq/VSQ.java b/src/main/java/vavi/sound/vsq/VSQ.java index c5361b3..250d22c 100644 --- a/src/main/java/vavi/sound/vsq/VSQ.java +++ b/src/main/java/vavi/sound/vsq/VSQ.java @@ -220,5 +220,3 @@ private static String[] getData(Sequence sequence) throws IOException { return results; } } - -/* */ diff --git a/src/main/java/vavi/sound/vsq/block/BPList.java b/src/main/java/vavi/sound/vsq/block/BPList.java index b7bf218..2e2f0a5 100644 --- a/src/main/java/vavi/sound/vsq/block/BPList.java +++ b/src/main/java/vavi/sound/vsq/block/BPList.java @@ -73,5 +73,3 @@ public static Block newInstance(String label, List params) { return block; } } - -/* */ diff --git a/src/main/java/vavi/sound/vsq/block/Common.java b/src/main/java/vavi/sound/vsq/block/Common.java index 4dc192e..1b29fca 100644 --- a/src/main/java/vavi/sound/vsq/block/Common.java +++ b/src/main/java/vavi/sound/vsq/block/Common.java @@ -58,5 +58,3 @@ public static Block newInstance(String label, List params) { return block; } } - -/* */ diff --git a/src/main/java/vavi/sound/vsq/block/Event.java b/src/main/java/vavi/sound/vsq/block/Event.java index 61b2126..fc46a1a 100644 --- a/src/main/java/vavi/sound/vsq/block/Event.java +++ b/src/main/java/vavi/sound/vsq/block/Event.java @@ -133,5 +133,3 @@ public MidiEvent[] toMidiEvents(VSQ context) throws InvalidMidiDataException { } } } - -/* */ diff --git a/src/main/java/vavi/sound/vsq/block/EventList.java b/src/main/java/vavi/sound/vsq/block/EventList.java index f770852..315f351 100644 --- a/src/main/java/vavi/sound/vsq/block/EventList.java +++ b/src/main/java/vavi/sound/vsq/block/EventList.java @@ -48,5 +48,3 @@ public static Block newInstance(String label, List params) { return block; } } - -/* */ diff --git a/src/main/java/vavi/sound/vsq/block/Handle.java b/src/main/java/vavi/sound/vsq/block/Handle.java index 196a55a..e7c2fa3 100644 --- a/src/main/java/vavi/sound/vsq/block/Handle.java +++ b/src/main/java/vavi/sound/vsq/block/Handle.java @@ -115,5 +115,3 @@ public String getLyric() { return l0.split(",")[0].replace("\"", ""); } } - -/* */ diff --git a/src/main/java/vavi/sound/vsq/block/Master.java b/src/main/java/vavi/sound/vsq/block/Master.java index b204d15..ecb12a6 100644 --- a/src/main/java/vavi/sound/vsq/block/Master.java +++ b/src/main/java/vavi/sound/vsq/block/Master.java @@ -37,5 +37,3 @@ public static Block newInstance(String label, List params) { return block; } } - -/* */ diff --git a/src/main/java/vavi/sound/vsq/block/Mixer.java b/src/main/java/vavi/sound/vsq/block/Mixer.java index 4687eb9..46bdaff 100644 --- a/src/main/java/vavi/sound/vsq/block/Mixer.java +++ b/src/main/java/vavi/sound/vsq/block/Mixer.java @@ -76,5 +76,3 @@ public static Block newInstance(String label, List params) { return block; } } - -/* */ diff --git a/src/main/java/vavix/rococoa/avfoundation/AVFoundation.java b/src/main/java/vavix/rococoa/avfoundation/AVFoundation.java index 4fbddfd..810aa85 100644 --- a/src/main/java/vavix/rococoa/avfoundation/AVFoundation.java +++ b/src/main/java/vavix/rococoa/avfoundation/AVFoundation.java @@ -16,5 +16,3 @@ public interface AVFoundation extends com.sun.jna.Library { AVFoundation instance = com.sun.jna.Native.load("AVFoundation", AVFoundation.class); } - -/* */ diff --git a/src/main/java/vavix/rococoa/avfoundation/AudioToolbox.java b/src/main/java/vavix/rococoa/avfoundation/AudioToolbox.java index 35f509a..686861d 100644 --- a/src/main/java/vavix/rococoa/avfoundation/AudioToolbox.java +++ b/src/main/java/vavix/rococoa/avfoundation/AudioToolbox.java @@ -86,5 +86,3 @@ static String AudioComponentName(Pointer inComponent) { return Foundation.toString(outName.getValue()); } } - -/* */ diff --git a/src/main/java/vavix/rococoa/ituneslibrary/ITunesLibrary.java b/src/main/java/vavix/rococoa/ituneslibrary/ITunesLibrary.java index 23e956a..a9a706c 100644 --- a/src/main/java/vavix/rococoa/ituneslibrary/ITunesLibrary.java +++ b/src/main/java/vavix/rococoa/ituneslibrary/ITunesLibrary.java @@ -19,5 +19,3 @@ public interface ITunesLibrary extends com.sun.jna.Library { } //delegate void ITLibMediaEntityEnumerateValuesHandler (NSString property, NSObject value, out bool stop); - -/* */ diff --git a/src/samples/java/jmf/AVReceive2.java b/src/samples/java/jmf/AVReceive2.java index c7d83f2..62fbe42 100644 --- a/src/samples/java/jmf/AVReceive2.java +++ b/src/samples/java/jmf/AVReceive2.java @@ -503,5 +503,3 @@ static void prUsage() { } } -/* */ - diff --git a/src/samples/java/jmf/JMF_Movie_Processor.java b/src/samples/java/jmf/JMF_Movie_Processor.java index ad7ea99..7831b4a 100644 --- a/src/samples/java/jmf/JMF_Movie_Processor.java +++ b/src/samples/java/jmf/JMF_Movie_Processor.java @@ -567,5 +567,3 @@ public void kill() { p.close(); } } - -/* */ diff --git a/src/samples/java/jmf/RtpReceiver.java b/src/samples/java/jmf/RtpReceiver.java index ef22b82..cfe14bc 100644 --- a/src/samples/java/jmf/RtpReceiver.java +++ b/src/samples/java/jmf/RtpReceiver.java @@ -278,5 +278,3 @@ interface UrlMaker { String getUrl(); } } - -/* */ diff --git a/src/samples/java/jmf/RtpTransmitter.java b/src/samples/java/jmf/RtpTransmitter.java index 0842842..12979c1 100644 --- a/src/samples/java/jmf/RtpTransmitter.java +++ b/src/samples/java/jmf/RtpTransmitter.java @@ -203,5 +203,3 @@ void writeTo(OutputStream os) throws IOException { } } } - -/* */ diff --git a/src/samples/java/jmf/Transcode.java b/src/samples/java/jmf/Transcode.java index c5f64b2..c58c32a 100644 --- a/src/samples/java/jmf/Transcode.java +++ b/src/samples/java/jmf/Transcode.java @@ -767,5 +767,3 @@ static void prUsage() { System.exit(0); } } - -/* */ diff --git a/src/samples/java/jmf/Transcoder.java b/src/samples/java/jmf/Transcoder.java index 26d8bbc..fc3489a 100644 --- a/src/samples/java/jmf/Transcoder.java +++ b/src/samples/java/jmf/Transcoder.java @@ -461,5 +461,3 @@ static MediaLocator createMediaLocator(String url) { return null; } } - -/* */ diff --git a/src/samples/java/jse/AudioChannel.java b/src/samples/java/jse/AudioChannel.java index b87d794..2b84783 100644 --- a/src/samples/java/jse/AudioChannel.java +++ b/src/samples/java/jse/AudioChannel.java @@ -161,5 +161,3 @@ public void stopChannel() { // b) stop the Thread } } - -/* */ diff --git a/src/samples/java/jse/AudioChannelPlayer.java b/src/samples/java/jse/AudioChannelPlayer.java index f7c7f74..fafedd4 100644 --- a/src/samples/java/jse/AudioChannelPlayer.java +++ b/src/samples/java/jse/AudioChannelPlayer.java @@ -128,5 +128,3 @@ private static void handleFile(String strFilename, AudioChannel channel) { private static void handleSilence(int nDuration, AudioChannel channel) { } } - -/* */ diff --git a/src/samples/java/jse/AudioConcat.java b/src/samples/java/jse/AudioConcat.java index 727c141..4f9c882 100644 --- a/src/samples/java/jse/AudioConcat.java +++ b/src/samples/java/jse/AudioConcat.java @@ -249,5 +249,3 @@ private static void printUsageAndExit() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/AudioDecoder.java b/src/samples/java/jse/AudioDecoder.java index 0813bfb..803513c 100644 --- a/src/samples/java/jse/AudioDecoder.java +++ b/src/samples/java/jse/AudioDecoder.java @@ -126,5 +126,3 @@ private static void printUsageAndExit() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/AudioFileInfo.java b/src/samples/java/jse/AudioFileInfo.java index 5b7c7dc..31c80f5 100644 --- a/src/samples/java/jse/AudioFileInfo.java +++ b/src/samples/java/jse/AudioFileInfo.java @@ -212,5 +212,3 @@ private static void printUsageAndExit() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/AudioFileTypeConverter.java b/src/samples/java/jse/AudioFileTypeConverter.java index 366d5ed..cec8d40 100644 --- a/src/samples/java/jse/AudioFileTypeConverter.java +++ b/src/samples/java/jse/AudioFileTypeConverter.java @@ -129,5 +129,3 @@ private static AudioFileFormat.Type findTargetType(String strExtension) { return null; } } - -/* */ diff --git a/src/samples/java/jse/AudioLoop.java b/src/samples/java/jse/AudioLoop.java index 6359807..c0eaf8b 100644 --- a/src/samples/java/jse/AudioLoop.java +++ b/src/samples/java/jse/AudioLoop.java @@ -310,5 +310,3 @@ private static Mixer.Info getMixerInfo(String strMixerName) { return null; } } - -/* */ diff --git a/src/samples/java/jse/AudioPlayer.java b/src/samples/java/jse/AudioPlayer.java index 17e1768..8165caf 100644 --- a/src/samples/java/jse/AudioPlayer.java +++ b/src/samples/java/jse/AudioPlayer.java @@ -410,5 +410,3 @@ private static SourceDataLine getSourceDataLine(String strMixerName, return line; } } - -/* */ diff --git a/src/samples/java/jse/AudioPlayerApplication.java b/src/samples/java/jse/AudioPlayerApplication.java index 4d979f2..c794f1c 100644 --- a/src/samples/java/jse/AudioPlayerApplication.java +++ b/src/samples/java/jse/AudioPlayerApplication.java @@ -91,5 +91,3 @@ public static void main(String[] args) { apa.setVisible(true); } } - -/* */ diff --git a/src/samples/java/jse/AudioPlayerPanel.java b/src/samples/java/jse/AudioPlayerPanel.java index cf8f833..7822ce2 100644 --- a/src/samples/java/jse/AudioPlayerPanel.java +++ b/src/samples/java/jse/AudioPlayerPanel.java @@ -228,5 +228,3 @@ private void changePan() { m_audioStream.setPan(fPan); } } - -/* */ diff --git a/src/samples/java/jse/AudioRecorder.java b/src/samples/java/jse/AudioRecorder.java index 5cb94c0..c5f4054 100644 --- a/src/samples/java/jse/AudioRecorder.java +++ b/src/samples/java/jse/AudioRecorder.java @@ -527,5 +527,3 @@ public boolean getBigEndian() { } } } - -/* */ diff --git a/src/samples/java/jse/AudioStream.java b/src/samples/java/jse/AudioStream.java index bf415dc..8d07bdc 100644 --- a/src/samples/java/jse/AudioStream.java +++ b/src/samples/java/jse/AudioStream.java @@ -504,5 +504,3 @@ private void fireMediaPositionPropertyChange(long lOldPosition, new Long(lNewPosition)); } } - -/* */ diff --git a/src/samples/java/jse/AudioStreamPlayer.java b/src/samples/java/jse/AudioStreamPlayer.java index b39bb2a..3ba2d95 100644 --- a/src/samples/java/jse/AudioStreamPlayer.java +++ b/src/samples/java/jse/AudioStreamPlayer.java @@ -132,5 +132,3 @@ private static void printUsageAndExit() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/AudioUtils.java b/src/samples/java/jse/AudioUtils.java index df8fadb..462a378 100644 --- a/src/samples/java/jse/AudioUtils.java +++ b/src/samples/java/jse/AudioUtils.java @@ -123,5 +123,3 @@ public static AudioInputStream getSuitableAudioInputStreamImpl(AudioInputStream } } } - -/* */ diff --git a/src/samples/java/jse/BaseAudioStream.java b/src/samples/java/jse/BaseAudioStream.java index ad02c58..272d98c 100644 --- a/src/samples/java/jse/BaseAudioStream.java +++ b/src/samples/java/jse/BaseAudioStream.java @@ -467,5 +467,3 @@ public void setPan(float fPan) { } } } - -/* */ diff --git a/src/samples/java/jse/CaptureStream.java b/src/samples/java/jse/CaptureStream.java index 8b30808..c3f523d 100644 --- a/src/samples/java/jse/CaptureStream.java +++ b/src/samples/java/jse/CaptureStream.java @@ -94,5 +94,3 @@ public void run() { } } } - -/* */ diff --git a/src/samples/java/jse/CaptureStreamRecorder.java b/src/samples/java/jse/CaptureStreamRecorder.java index b58eb3e..9e3f5aa 100644 --- a/src/samples/java/jse/CaptureStreamRecorder.java +++ b/src/samples/java/jse/CaptureStreamRecorder.java @@ -172,5 +172,3 @@ else if (args[nCurrentArg].equals("-i")) System.exit(0); } } - -/* */ diff --git a/src/samples/java/jse/CddaPlayer.java b/src/samples/java/jse/CddaPlayer.java index 0e82f05..2ddda32 100644 --- a/src/samples/java/jse/CddaPlayer.java +++ b/src/samples/java/jse/CddaPlayer.java @@ -161,5 +161,3 @@ private static void out(String strMessage) { System.out.println(strMessage); } } - -/* */ diff --git a/src/samples/java/jse/CddaRipper.java b/src/samples/java/jse/CddaRipper.java index 9e61cf2..9b17df9 100644 --- a/src/samples/java/jse/CddaRipper.java +++ b/src/samples/java/jse/CddaRipper.java @@ -148,5 +148,3 @@ private static void out(String strMessage) { System.out.println(strMessage); } } - -/* */ diff --git a/src/samples/java/jse/ClipPlayer.java b/src/samples/java/jse/ClipPlayer.java index 4d485d7..aefb7d3 100644 --- a/src/samples/java/jse/ClipPlayer.java +++ b/src/samples/java/jse/ClipPlayer.java @@ -91,5 +91,3 @@ public static void main(String[] args) { } } } - -/* */ diff --git a/src/samples/java/jse/Convert.java b/src/samples/java/jse/Convert.java index 05db465..ce016aa 100644 --- a/src/samples/java/jse/Convert.java +++ b/src/samples/java/jse/Convert.java @@ -119,5 +119,3 @@ private static AudioFileFormat.Type findTargetType(String strExtension) { return null; } } - -/* */ diff --git a/src/samples/java/jse/CookieCadence.java b/src/samples/java/jse/CookieCadence.java index a3a8705..89d22b9 100644 --- a/src/samples/java/jse/CookieCadence.java +++ b/src/samples/java/jse/CookieCadence.java @@ -102,5 +102,3 @@ private static MidiEvent createNoteEvent(int nCommand, int nKey, return event; } } - -/* */ diff --git a/src/samples/java/jse/DecodingAudioPlayer.java b/src/samples/java/jse/DecodingAudioPlayer.java index 981d9a3..60b6570 100644 --- a/src/samples/java/jse/DecodingAudioPlayer.java +++ b/src/samples/java/jse/DecodingAudioPlayer.java @@ -156,5 +156,3 @@ public static void printUsageAndExit() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/DirectRecordingStream.java b/src/samples/java/jse/DirectRecordingStream.java index 4ae003c..cca9da0 100644 --- a/src/samples/java/jse/DirectRecordingStream.java +++ b/src/samples/java/jse/DirectRecordingStream.java @@ -135,5 +135,3 @@ public void run() { } } } - -/* */ diff --git a/src/samples/java/jse/DumpReceiver.java b/src/samples/java/jse/DumpReceiver.java index 268d307..9fb0ace 100644 --- a/src/samples/java/jse/DumpReceiver.java +++ b/src/samples/java/jse/DumpReceiver.java @@ -548,5 +548,3 @@ private static String getHexString(byte[] aByte, int nStart, int nLength) { return new String(sbuf).trim(); } } - -/* */ diff --git a/src/samples/java/jse/DumpSequence.java b/src/samples/java/jse/DumpSequence.java index cec3e21..c836185 100644 --- a/src/samples/java/jse/DumpSequence.java +++ b/src/samples/java/jse/DumpSequence.java @@ -156,5 +156,3 @@ public static void output(MidiEvent event) { sm_receiver.send(message, lTicks); } } - -/* */ diff --git a/src/samples/java/jse/GSMEncoder.java b/src/samples/java/jse/GSMEncoder.java index 3d68fe1..1cf9376 100644 --- a/src/samples/java/jse/GSMEncoder.java +++ b/src/samples/java/jse/GSMEncoder.java @@ -131,5 +131,3 @@ private static void printUsageAndExit() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/MidiConverter.java b/src/samples/java/jse/MidiConverter.java index fcea6a0..4c708c0 100644 --- a/src/samples/java/jse/MidiConverter.java +++ b/src/samples/java/jse/MidiConverter.java @@ -176,5 +176,3 @@ public static void main(String[] args) { System.exit(0); } } - -/* */ diff --git a/src/samples/java/jse/MidiDestinationListModel.java b/src/samples/java/jse/MidiDestinationListModel.java index 9c06bcc..04657f6 100644 --- a/src/samples/java/jse/MidiDestinationListModel.java +++ b/src/samples/java/jse/MidiDestinationListModel.java @@ -74,5 +74,3 @@ private void setConnection(int nDestinationIndex) { } } } - -/* */ diff --git a/src/samples/java/jse/MidiFileInfo.java b/src/samples/java/jse/MidiFileInfo.java index 681dcbf..8a1cd7d 100644 --- a/src/samples/java/jse/MidiFileInfo.java +++ b/src/samples/java/jse/MidiFileInfo.java @@ -232,5 +232,3 @@ private static void printUsageAndExit() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/MidiInDump.java b/src/samples/java/jse/MidiInDump.java index 6a9b34b..b291e90 100644 --- a/src/samples/java/jse/MidiInDump.java +++ b/src/samples/java/jse/MidiInDump.java @@ -261,5 +261,3 @@ private static void out(Throwable t) { t.printStackTrace(); } } - -/* */ diff --git a/src/samples/java/jse/MidiLoop.java b/src/samples/java/jse/MidiLoop.java index 4ccfa9d..a0d31e6 100644 --- a/src/samples/java/jse/MidiLoop.java +++ b/src/samples/java/jse/MidiLoop.java @@ -220,5 +220,3 @@ private static void out(Throwable t) { t.printStackTrace(); } } - -/* */ diff --git a/src/samples/java/jse/MidiNote.java b/src/samples/java/jse/MidiNote.java index b92526b..3da3db7 100644 --- a/src/samples/java/jse/MidiNote.java +++ b/src/samples/java/jse/MidiNote.java @@ -302,5 +302,3 @@ private static void out(Throwable t) { t.printStackTrace(); } } - -/* */ diff --git a/src/samples/java/jse/MidiPlayer.java b/src/samples/java/jse/MidiPlayer.java index 8435732..208367d 100644 --- a/src/samples/java/jse/MidiPlayer.java +++ b/src/samples/java/jse/MidiPlayer.java @@ -515,5 +515,3 @@ private static void out(String strMessage) { System.out.println(strMessage); } } - -/* */ diff --git a/src/samples/java/jse/MidiPlayerApplication.java b/src/samples/java/jse/MidiPlayerApplication.java index baf6a34..9f4e6cc 100644 --- a/src/samples/java/jse/MidiPlayerApplication.java +++ b/src/samples/java/jse/MidiPlayerApplication.java @@ -125,5 +125,3 @@ public static void main(String[] args) { mpa.setVisible(true); } } - -/* */ diff --git a/src/samples/java/jse/MidiPlayerPanel.java b/src/samples/java/jse/MidiPlayerPanel.java index dacda75..89b5a23 100644 --- a/src/samples/java/jse/MidiPlayerPanel.java +++ b/src/samples/java/jse/MidiPlayerPanel.java @@ -241,5 +241,3 @@ private void changeTempoFactor() { m_sequencer.setTempoFactor(fTempoFactor); } } - -/* */ diff --git a/src/samples/java/jse/MidiRecorder.java b/src/samples/java/jse/MidiRecorder.java index 31e4970..f80e0bd 100644 --- a/src/samples/java/jse/MidiRecorder.java +++ b/src/samples/java/jse/MidiRecorder.java @@ -506,5 +506,3 @@ private static void out(String strMessage) { System.out.println(strMessage); } } - -/* */ diff --git a/src/samples/java/jse/MidiRouter.java b/src/samples/java/jse/MidiRouter.java index 67504b9..671dff9 100644 --- a/src/samples/java/jse/MidiRouter.java +++ b/src/samples/java/jse/MidiRouter.java @@ -207,5 +207,3 @@ private static void printUsageAndExit() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/MixingAudioInputStream.java b/src/samples/java/jse/MixingAudioInputStream.java index 717b462..651acf0 100644 --- a/src/samples/java/jse/MixingAudioInputStream.java +++ b/src/samples/java/jse/MixingAudioInputStream.java @@ -353,5 +353,3 @@ public boolean markSupported() { return true; } } - -/* */ diff --git a/src/samples/java/jse/Mp3Encoder.java b/src/samples/java/jse/Mp3Encoder.java index b81c8b5..b4717e2 100644 --- a/src/samples/java/jse/Mp3Encoder.java +++ b/src/samples/java/jse/Mp3Encoder.java @@ -416,5 +416,3 @@ public static void usage() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/MultiAudioStreamPlayer.java b/src/samples/java/jse/MultiAudioStreamPlayer.java index 0a43db2..1feecbc 100644 --- a/src/samples/java/jse/MultiAudioStreamPlayer.java +++ b/src/samples/java/jse/MultiAudioStreamPlayer.java @@ -119,5 +119,3 @@ public static void main(String[] args) { */ } } - -/* */ diff --git a/src/samples/java/jse/Oscillator.java b/src/samples/java/jse/Oscillator.java index 80c21df..c81b70e 100644 --- a/src/samples/java/jse/Oscillator.java +++ b/src/samples/java/jse/Oscillator.java @@ -173,5 +173,3 @@ public int read(byte[] abData, int nOffset, int nLength) return nReturn; } } - -/* */ diff --git a/src/samples/java/jse/OscillatorFile.java b/src/samples/java/jse/OscillatorFile.java index 7db42c1..a94b547 100644 --- a/src/samples/java/jse/OscillatorFile.java +++ b/src/samples/java/jse/OscillatorFile.java @@ -210,5 +210,3 @@ private static void out(String strMessage) { System.out.println(strMessage); } } - -/* */ diff --git a/src/samples/java/jse/OscillatorFileAOS.java b/src/samples/java/jse/OscillatorFileAOS.java index f4a2811..d4db3e9 100644 --- a/src/samples/java/jse/OscillatorFileAOS.java +++ b/src/samples/java/jse/OscillatorFileAOS.java @@ -230,5 +230,3 @@ private static void printUsageAndExit() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/OscillatorPlayer.java b/src/samples/java/jse/OscillatorPlayer.java index 3b26955..b6ce024 100644 --- a/src/samples/java/jse/OscillatorPlayer.java +++ b/src/samples/java/jse/OscillatorPlayer.java @@ -204,5 +204,3 @@ private static void out(String strMessage) { System.out.println(strMessage); } } - -/* */ diff --git a/src/samples/java/jse/SequenceAudioInputStream.java b/src/samples/java/jse/SequenceAudioInputStream.java index 1e3b8af..747e67c 100644 --- a/src/samples/java/jse/SequenceAudioInputStream.java +++ b/src/samples/java/jse/SequenceAudioInputStream.java @@ -191,5 +191,3 @@ public boolean markSupported() { return false; } } - -/* */ diff --git a/src/samples/java/jse/SimpleAudioPlayer.java b/src/samples/java/jse/SimpleAudioPlayer.java index 62e4792..318441c 100644 --- a/src/samples/java/jse/SimpleAudioPlayer.java +++ b/src/samples/java/jse/SimpleAudioPlayer.java @@ -217,5 +217,3 @@ public static void main(String[] args) { System.exit(0); } } - -/* */ diff --git a/src/samples/java/jse/SimpleAudioRecorder.java b/src/samples/java/jse/SimpleAudioRecorder.java index 04cb2e0..b20e525 100644 --- a/src/samples/java/jse/SimpleAudioRecorder.java +++ b/src/samples/java/jse/SimpleAudioRecorder.java @@ -181,5 +181,3 @@ private static void printUsageAndExit() { System.exit(0); } } - -/* */ diff --git a/src/samples/java/jse/SimpleAudioStream.java b/src/samples/java/jse/SimpleAudioStream.java index 431ece8..5bfa926 100644 --- a/src/samples/java/jse/SimpleAudioStream.java +++ b/src/samples/java/jse/SimpleAudioStream.java @@ -166,5 +166,3 @@ public void run() } */ } - -/* */ diff --git a/src/samples/java/jse/SimpleMidiPlayer.java b/src/samples/java/jse/SimpleMidiPlayer.java index 27d6ec0..1ed36cc 100644 --- a/src/samples/java/jse/SimpleMidiPlayer.java +++ b/src/samples/java/jse/SimpleMidiPlayer.java @@ -253,5 +253,3 @@ private static void printUsageAndExit() { System.exit(1); } } - -/* */ diff --git a/src/samples/java/jse/SynthNote.java b/src/samples/java/jse/SynthNote.java index d82826b..8511f79 100644 --- a/src/samples/java/jse/SynthNote.java +++ b/src/samples/java/jse/SynthNote.java @@ -154,5 +154,3 @@ public static void main(String[] args) { channels[0].noteOff(nNoteNumber); } } - -/* */ diff --git a/src/test/java/AnalyzeMLD.java b/src/test/java/AnalyzeMLD.java index 2362b30..b7ac1b2 100644 --- a/src/test/java/AnalyzeMLD.java +++ b/src/test/java/AnalyzeMLD.java @@ -50,5 +50,3 @@ public static void main(String[] args) throws Exception { fileDigger.dig(new File(args[0])); } } - -/* */ diff --git a/src/test/java/ClipTest.java b/src/test/java/ClipTest.java index abb5aa4..02302e2 100644 --- a/src/test/java/ClipTest.java +++ b/src/test/java/ClipTest.java @@ -42,8 +42,6 @@ public class ClipTest { System.setProperty("vavi.util.logging.VaviFormatter.extraClassMethod", "org.tritonus.share.TDebug#out"); System.setProperty("vavi.sound.opl3.MidiFile", "true"); // true: means using opl3 midi device when SMF format 0 - -// TDebug.TraceAudioFileReader = true; } static boolean localPropertiesExists() { @@ -120,5 +118,3 @@ public static void main(String[] args) throws Exception { clip.close(); } } - -/* */ diff --git a/src/test/java/LineTest.java b/src/test/java/LineTest.java index 1558d6c..1fef95c 100644 --- a/src/test/java/LineTest.java +++ b/src/test/java/LineTest.java @@ -60,5 +60,3 @@ public static void main(String[] args) throws Exception { speaker.close(); } } - -/* */ diff --git a/src/test/java/LineTest2.java b/src/test/java/LineTest2.java index a0ec068..f36ed9e 100644 --- a/src/test/java/LineTest2.java +++ b/src/test/java/LineTest2.java @@ -167,5 +167,3 @@ void test2() throws Exception { play(audioInputStream); } } - -/* */ diff --git a/src/test/java/LineTest3.java b/src/test/java/LineTest3.java index 96a8a0a..dcb0608 100644 --- a/src/test/java/LineTest3.java +++ b/src/test/java/LineTest3.java @@ -26,5 +26,3 @@ void test() throws Exception { Files.readAllLines(path).forEach(System.err::println); } } - -/* */ diff --git a/src/test/java/MidiTest.java b/src/test/java/MidiTest.java index e883f6c..ed85590 100644 --- a/src/test/java/MidiTest.java +++ b/src/test/java/MidiTest.java @@ -293,5 +293,3 @@ public static void main(String[] args) throws Exception { // app.t4(); } } - -/* */ diff --git a/src/test/java/PlayG721Adpcm.java b/src/test/java/PlayG721Adpcm.java index 7e02f5b..5172904 100644 --- a/src/test/java/PlayG721Adpcm.java +++ b/src/test/java/PlayG721Adpcm.java @@ -83,5 +83,3 @@ public static void main(String[] args) throws Exception { is.close(); } } - -/* */ diff --git a/src/test/java/PlaySMAF.java b/src/test/java/PlaySMAF.java index 133edfd..00ce4f8 100644 --- a/src/test/java/PlaySMAF.java +++ b/src/test/java/PlaySMAF.java @@ -42,5 +42,3 @@ public static void main(String[] args) throws Exception { } } } - -/* */ diff --git a/src/test/java/ResamplingTest.java b/src/test/java/ResamplingTest.java index 631d715..4fc2861 100644 --- a/src/test/java/ResamplingTest.java +++ b/src/test/java/ResamplingTest.java @@ -66,5 +66,3 @@ public static void main(String[] args) throws Exception { System.err.println("RESULT: " + r); } } - -/* */ diff --git a/src/test/java/org/klab/packetcast/audio/AmplitudeAudioInputStreamTest.java b/src/test/java/org/klab/packetcast/audio/AmplitudeAudioInputStreamTest.java index 6895941..a9d1e32 100644 --- a/src/test/java/org/klab/packetcast/audio/AmplitudeAudioInputStreamTest.java +++ b/src/test/java/org/klab/packetcast/audio/AmplitudeAudioInputStreamTest.java @@ -69,5 +69,3 @@ public void test00() throws Exception { AudioSystem.write(amplifiedAudioInputStream, targetType, targetFile); } } - -/* */ diff --git a/src/test/java/vavi/sound/DebugInputStream.java b/src/test/java/vavi/sound/DebugInputStream.java index e95db7f..7415a43 100644 --- a/src/test/java/vavi/sound/DebugInputStream.java +++ b/src/test/java/vavi/sound/DebugInputStream.java @@ -120,5 +120,3 @@ static void printStackTrace(Throwable e) { }); } } - -/* */ diff --git a/src/test/java/vavi/sound/ilbc/IlbcTest.java b/src/test/java/vavi/sound/ilbc/IlbcTest.java index 7f29bc2..e8d89ee 100644 --- a/src/test/java/vavi/sound/ilbc/IlbcTest.java +++ b/src/test/java/vavi/sound/ilbc/IlbcTest.java @@ -47,5 +47,3 @@ void test2() throws Exception { } } - -/* */ diff --git a/src/test/java/vavi/sound/ldcelp/LdCelpInputStreamTest.java b/src/test/java/vavi/sound/ldcelp/LdCelpInputStreamTest.java index c4a9f46..1ec012a 100644 --- a/src/test/java/vavi/sound/ldcelp/LdCelpInputStreamTest.java +++ b/src/test/java/vavi/sound/ldcelp/LdCelpInputStreamTest.java @@ -46,5 +46,3 @@ void test2() throws Exception { assertEquals(Checksum.getChecksum(new File(correctFile2)), Checksum.getChecksum(new File(outFile2))); } } - -/* */ diff --git a/src/test/java/vavi/sound/mfi/ittake/IttakeMidiConverterTest.java b/src/test/java/vavi/sound/mfi/ittake/IttakeMidiConverterTest.java index 8503283..688498b 100644 --- a/src/test/java/vavi/sound/mfi/ittake/IttakeMidiConverterTest.java +++ b/src/test/java/vavi/sound/mfi/ittake/IttakeMidiConverterTest.java @@ -50,5 +50,3 @@ public static void main(String[] args) throws Exception { System.exit(0); } } - -/* */ diff --git a/src/test/java/vavi/sound/midi/jsyn/JSynSynthesizerTest.java b/src/test/java/vavi/sound/midi/jsyn/JSynSynthesizerTest.java index b5a627d..1fcb6d1 100644 --- a/src/test/java/vavi/sound/midi/jsyn/JSynSynthesizerTest.java +++ b/src/test/java/vavi/sound/midi/jsyn/JSynSynthesizerTest.java @@ -154,5 +154,3 @@ void test3() throws Exception { synthesizer.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/midi/mocha/MochaMidiDeviceProvider.java b/src/test/java/vavi/sound/midi/mocha/MochaMidiDeviceProvider.java index d472b67..a7fae63 100644 --- a/src/test/java/vavi/sound/midi/mocha/MochaMidiDeviceProvider.java +++ b/src/test/java/vavi/sound/midi/mocha/MochaMidiDeviceProvider.java @@ -49,5 +49,3 @@ public MidiDevice getDevice(MidiDevice.Info info) { } } } - -/* */ diff --git a/src/test/java/vavi/sound/midi/mocha/MochaSoundbank.java b/src/test/java/vavi/sound/midi/mocha/MochaSoundbank.java index 1f5b722..119d45f 100644 --- a/src/test/java/vavi/sound/midi/mocha/MochaSoundbank.java +++ b/src/test/java/vavi/sound/midi/mocha/MochaSoundbank.java @@ -88,5 +88,3 @@ public Object getData() { } } } - -/* */ diff --git a/src/test/java/vavi/sound/midi/mocha/MochaSynthesizer.java b/src/test/java/vavi/sound/midi/mocha/MochaSynthesizer.java index 83e8c8b..c7415f4 100644 --- a/src/test/java/vavi/sound/midi/mocha/MochaSynthesizer.java +++ b/src/test/java/vavi/sound/midi/mocha/MochaSynthesizer.java @@ -68,7 +68,7 @@ public class MochaSynthesizer implements Synthesizer { private final VoiceStatus[] voiceStatus = new VoiceStatus[MAX_CHANNEL]; - private long timestump; + private long timestamp; private boolean isOpen; @@ -144,7 +144,7 @@ private void init() throws MidiUnavailableException { throw (MidiUnavailableException) new MidiUnavailableException().initCause(e); } - timestump = 0; + timestamp = 0; } /** */ @@ -160,8 +160,8 @@ private void play() { timeline.clear(); } - long msec = System.currentTimeMillis() - timestump; - timestump = System.currentTimeMillis(); + long msec = System.currentTimeMillis() - timestamp; + timestamp = System.currentTimeMillis(); msec = msec > 100 ? 100 : msec; int l = mocha.read(buf, 0, 4 * (int) (mocha.getFormat().getSampleRate() * msec / 1000.0)); //Debug.printf("adlib: %d", l); @@ -190,7 +190,7 @@ public boolean isOpen() { @Override public long getMicrosecondPosition() { - return timestump; + return timestamp; } @Override @@ -538,5 +538,3 @@ public void close() { } } } - -/* */ diff --git a/src/test/java/vavi/sound/midi/opl3/Opl3SynthesizerTest.java b/src/test/java/vavi/sound/midi/opl3/Opl3SynthesizerTest.java index 79bd1a2..9d5afd9 100644 --- a/src/test/java/vavi/sound/midi/opl3/Opl3SynthesizerTest.java +++ b/src/test/java/vavi/sound/midi/opl3/Opl3SynthesizerTest.java @@ -179,5 +179,3 @@ void test2() throws Exception { synthesizer.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/midi/rococoa/RococoaSynthesizerTest.java b/src/test/java/vavi/sound/midi/rococoa/RococoaSynthesizerTest.java index 46317ed..4506b7b 100644 --- a/src/test/java/vavi/sound/midi/rococoa/RococoaSynthesizerTest.java +++ b/src/test/java/vavi/sound/midi/rococoa/RococoaSynthesizerTest.java @@ -178,5 +178,3 @@ void test1() throws Exception { synthesizer.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/mp3/Mp3InputStreamTest.java b/src/test/java/vavi/sound/mp3/Mp3InputStreamTest.java index deef59d..19b9068 100644 --- a/src/test/java/vavi/sound/mp3/Mp3InputStreamTest.java +++ b/src/test/java/vavi/sound/mp3/Mp3InputStreamTest.java @@ -92,5 +92,3 @@ public static void main(String[] args) throws Exception { System.exit(0); } } - -/* */ diff --git a/src/test/java/vavi/sound/pcm/equalizing/NormalizerTest.java b/src/test/java/vavi/sound/pcm/equalizing/NormalizerTest.java index 695dc5f..79e4750 100644 --- a/src/test/java/vavi/sound/pcm/equalizing/NormalizerTest.java +++ b/src/test/java/vavi/sound/pcm/equalizing/NormalizerTest.java @@ -85,5 +85,3 @@ public static void main(String[] argv) throws Exception { new Normalizer().normalize(inname, outname); } } - -/* */ diff --git a/src/test/java/vavi/sound/pcm/equalizing/sse/EqualizerTest.java b/src/test/java/vavi/sound/pcm/equalizing/sse/EqualizerTest.java index eaa96f7..6b92d87 100644 --- a/src/test/java/vavi/sound/pcm/equalizing/sse/EqualizerTest.java +++ b/src/test/java/vavi/sound/pcm/equalizing/sse/EqualizerTest.java @@ -72,5 +72,3 @@ void test1() throws Exception { assertEquals(Checksum.getChecksum(new File(inFile)), Checksum.getChecksum(new File(outFile))); } } - -/* */ diff --git a/src/test/java/vavi/sound/pcm/equalizing/sse/Test1.java b/src/test/java/vavi/sound/pcm/equalizing/sse/Test1.java index 70e3f07..dca6b0c 100644 --- a/src/test/java/vavi/sound/pcm/equalizing/sse/Test1.java +++ b/src/test/java/vavi/sound/pcm/equalizing/sse/Test1.java @@ -23,5 +23,3 @@ public static void main(String[] args) { } } } - -/* */ diff --git a/src/test/java/vavi/sound/pcm/equalizing/sse/Test2.java b/src/test/java/vavi/sound/pcm/equalizing/sse/Test2.java index 05abdb8..bd304da 100644 --- a/src/test/java/vavi/sound/pcm/equalizing/sse/Test2.java +++ b/src/test/java/vavi/sound/pcm/equalizing/sse/Test2.java @@ -330,5 +330,3 @@ public void run() { } }; } - -/* */ diff --git a/src/test/java/vavi/sound/pcm/resampling/laoe/ResamplerTest.java b/src/test/java/vavi/sound/pcm/resampling/laoe/ResamplerTest.java index 9ea4e47..cd24980 100644 --- a/src/test/java/vavi/sound/pcm/resampling/laoe/ResamplerTest.java +++ b/src/test/java/vavi/sound/pcm/resampling/laoe/ResamplerTest.java @@ -177,5 +177,3 @@ void test2() throws Exception { sourceAis.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/pcm/resampling/rohm/ResamplerTest.java b/src/test/java/vavi/sound/pcm/resampling/rohm/ResamplerTest.java index 8f0d462..f7bdc43 100644 --- a/src/test/java/vavi/sound/pcm/resampling/rohm/ResamplerTest.java +++ b/src/test/java/vavi/sound/pcm/resampling/rohm/ResamplerTest.java @@ -168,5 +168,3 @@ void test2() throws Exception { sourceAis.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/pcm/resampling/sox/PerfectResamplerTest.java b/src/test/java/vavi/sound/pcm/resampling/sox/PerfectResamplerTest.java index 87327b0..f175a44 100644 --- a/src/test/java/vavi/sound/pcm/resampling/sox/PerfectResamplerTest.java +++ b/src/test/java/vavi/sound/pcm/resampling/sox/PerfectResamplerTest.java @@ -128,5 +128,3 @@ void test1() throws Exception { assertEquals((int) resamplingRate, (int) resultAis.getFormat().getSampleRate()); } } - -/* */ diff --git a/src/test/java/vavi/sound/pcm/resampling/sox/PolyphaseTest.java b/src/test/java/vavi/sound/pcm/resampling/sox/PolyphaseTest.java index e4e01ba..8adda29 100644 --- a/src/test/java/vavi/sound/pcm/resampling/sox/PolyphaseTest.java +++ b/src/test/java/vavi/sound/pcm/resampling/sox/PolyphaseTest.java @@ -317,5 +317,3 @@ public void test4() throws Exception { sourceAis.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/pcm/resampling/sox/ResamplerTest.java b/src/test/java/vavi/sound/pcm/resampling/sox/ResamplerTest.java index 2ad352c..382d41f 100644 --- a/src/test/java/vavi/sound/pcm/resampling/sox/ResamplerTest.java +++ b/src/test/java/vavi/sound/pcm/resampling/sox/ResamplerTest.java @@ -252,5 +252,3 @@ public void test3() throws Exception { sourceAis.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/sampled/SimpleResamplingInputFilterTest.java b/src/test/java/vavi/sound/sampled/SimpleResamplingInputFilterTest.java index 7596075..fe0e9ef 100644 --- a/src/test/java/vavi/sound/sampled/SimpleResamplingInputFilterTest.java +++ b/src/test/java/vavi/sound/sampled/SimpleResamplingInputFilterTest.java @@ -56,5 +56,3 @@ public void test1() throws Exception { assertEquals(outSamplingRate, (int) resultAis.getFormat().getSampleRate()); } } - -/* */ diff --git a/src/test/java/vavi/sound/sampled/opl3/Opl3AudioFileReaderTest.java b/src/test/java/vavi/sound/sampled/opl3/Opl3AudioFileReaderTest.java index 2a43fba..d5d599f 100644 --- a/src/test/java/vavi/sound/sampled/opl3/Opl3AudioFileReaderTest.java +++ b/src/test/java/vavi/sound/sampled/opl3/Opl3AudioFileReaderTest.java @@ -190,5 +190,3 @@ void test3(String flag) throws Exception { clip.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java b/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java index bf9105d..a0c486c 100644 --- a/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java +++ b/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java @@ -120,5 +120,3 @@ void test1() throws Exception { line.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/sampled/resampling/SampleRateConversionProviderTest.java b/src/test/java/vavi/sound/sampled/resampling/SampleRateConversionProviderTest.java index e5b0adb..5eadab9 100644 --- a/src/test/java/vavi/sound/sampled/resampling/SampleRateConversionProviderTest.java +++ b/src/test/java/vavi/sound/sampled/resampling/SampleRateConversionProviderTest.java @@ -118,5 +118,3 @@ public void test1() throws Exception { line.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/sampled/rococoa/RococoaClipTest.java b/src/test/java/vavi/sound/sampled/rococoa/RococoaClipTest.java index 79b21e5..3b85564 100644 --- a/src/test/java/vavi/sound/sampled/rococoa/RococoaClipTest.java +++ b/src/test/java/vavi/sound/sampled/rococoa/RococoaClipTest.java @@ -144,5 +144,3 @@ void test1() throws Exception { clip.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java b/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java index 3fbd114..1bc536c 100644 --- a/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java +++ b/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java @@ -141,5 +141,3 @@ public void test2() throws Exception { Debug.println(originalAudioFormat); } } - -/* */ diff --git a/src/test/java/vavi/sound/vsq/Test.java b/src/test/java/vavi/sound/vsq/Test.java index fa8c4d2..f571709 100644 --- a/src/test/java/vavi/sound/vsq/Test.java +++ b/src/test/java/vavi/sound/vsq/Test.java @@ -115,5 +115,3 @@ public void meta(MetaMessage meta) { sequencer.close(); } } - -/* */ diff --git a/src/test/java/vavi/sound/vsq/Test2.java b/src/test/java/vavi/sound/vsq/Test2.java index c56e3e9..f4f3ed4 100644 --- a/src/test/java/vavi/sound/vsq/Test2.java +++ b/src/test/java/vavi/sound/vsq/Test2.java @@ -70,5 +70,3 @@ public static void main(String[] args) throws Exception { sequencer.close(); } } - -/* */ diff --git a/src/test/java/vavix/rococoa/avfoundation/AVFoundationTest.java b/src/test/java/vavix/rococoa/avfoundation/AVFoundationTest.java index d7d407e..5bb3233 100644 --- a/src/test/java/vavix/rococoa/avfoundation/AVFoundationTest.java +++ b/src/test/java/vavix/rococoa/avfoundation/AVFoundationTest.java @@ -342,5 +342,3 @@ void test8() throws Exception { } } } - -/* */ diff --git a/src/test/java/vavix/rococoa/ituneslibrary/ITLibraryTest.java b/src/test/java/vavix/rococoa/ituneslibrary/ITLibraryTest.java index 92d2405..194639e 100644 --- a/src/test/java/vavix/rococoa/ituneslibrary/ITLibraryTest.java +++ b/src/test/java/vavix/rococoa/ituneslibrary/ITLibraryTest.java @@ -99,5 +99,3 @@ void test2() { }); } } - -/* */ diff --git a/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java b/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java index f2a6bde..b5ab467 100644 --- a/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java +++ b/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java @@ -567,5 +567,3 @@ public static void main(String[] args) throws Exception { app.processITunesLibrary(); } } - -/* */ From 5215d995ccda3d05e153ea126487bbb77b34b18c Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Mon, 1 Apr 2024 11:10:42 +0900 Subject: [PATCH 02/14] make test more effective --- .../java/vavi/sound/midi/jsyn/JSynSynthesizerTest.java | 2 +- .../java/vavi/sound/midi/mocha/MochaSynthesizerTest.java | 7 +++++++ .../java/vavi/sound/midi/opl3/Opl3SynthesizerTest.java | 2 +- .../vavi/sound/midi/rococoa/RococoaSynthesizerTest.java | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/test/java/vavi/sound/midi/jsyn/JSynSynthesizerTest.java b/src/test/java/vavi/sound/midi/jsyn/JSynSynthesizerTest.java index 1fcb6d1..2c8c668 100644 --- a/src/test/java/vavi/sound/midi/jsyn/JSynSynthesizerTest.java +++ b/src/test/java/vavi/sound/midi/jsyn/JSynSynthesizerTest.java @@ -50,7 +50,7 @@ static boolean localPropertiesExists() { return Files.exists(Paths.get("local.properties")); } - static float volume = (float) Double.parseDouble(System.getProperty("vavi.test.volume", "0.2")); + static float volume = (float) Double.parseDouble(System.getProperty("vavi.test.volume.midi", "0.2")); @Property(name = "jsyn.test") String jsynTest = "src/test/resources/test.mid"; diff --git a/src/test/java/vavi/sound/midi/mocha/MochaSynthesizerTest.java b/src/test/java/vavi/sound/midi/mocha/MochaSynthesizerTest.java index ff9b08e..5d1c6e2 100644 --- a/src/test/java/vavi/sound/midi/mocha/MochaSynthesizerTest.java +++ b/src/test/java/vavi/sound/midi/mocha/MochaSynthesizerTest.java @@ -24,6 +24,8 @@ import vavi.util.properties.annotation.Property; import vavi.util.properties.annotation.PropsEntity; +import static vavi.sound.midi.MidiUtil.volume; + /** * MochaSynthesizer. @@ -46,6 +48,8 @@ static boolean localPropertiesExists() { @Property(name = "mocha.test") String mochaTest = "src/test/resources/test.mid"; + static float volume = (float) Double.parseDouble(System.getProperty("vavi.test.volume.midi", "0.2")); + @BeforeEach void setup() throws Exception { if (localPropertiesExists()) { @@ -80,6 +84,9 @@ void test1() throws Exception { sequencer.addMetaEventListener(mel); System.err.println("START"); sequencer.start(); + + volume(receiver, volume); // volume works? + if (!System.getProperty("vavi.test", "").equals("ide")) { Thread.sleep(10 * 1000); sequencer.stop(); diff --git a/src/test/java/vavi/sound/midi/opl3/Opl3SynthesizerTest.java b/src/test/java/vavi/sound/midi/opl3/Opl3SynthesizerTest.java index 9d5afd9..47ca9cb 100644 --- a/src/test/java/vavi/sound/midi/opl3/Opl3SynthesizerTest.java +++ b/src/test/java/vavi/sound/midi/opl3/Opl3SynthesizerTest.java @@ -57,7 +57,7 @@ static boolean localPropertiesExists() { return Files.exists(Paths.get("local.properties")); } - static float volume = (float) Double.parseDouble(System.getProperty("vavi.test.volume", "0.2")); + static float volume = (float) Double.parseDouble(System.getProperty("vavi.test.volume.midi", "0.2")); @Property(name = "opl3.test") String opl3test = "src/test/resources/test.mid"; diff --git a/src/test/java/vavi/sound/midi/rococoa/RococoaSynthesizerTest.java b/src/test/java/vavi/sound/midi/rococoa/RococoaSynthesizerTest.java index 4506b7b..4a1b89b 100644 --- a/src/test/java/vavi/sound/midi/rococoa/RococoaSynthesizerTest.java +++ b/src/test/java/vavi/sound/midi/rococoa/RococoaSynthesizerTest.java @@ -74,7 +74,7 @@ static boolean localPropertiesExists() { return Files.exists(Paths.get("local.properties")); } - static float volume = (float) Double.parseDouble(System.getProperty("vavi.test.volume", "0.2")); + static float volume = (float) Double.parseDouble(System.getProperty("vavi.test.volume.midi", "0.2")); @Property(name = "rococoa.test") String rococoaTest = "src/test/resources/test.mid"; From ca29a2e4bc5db1731e40a27d3edd9020c003d819 Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Mon, 1 Apr 2024 11:11:08 +0900 Subject: [PATCH 03/14] make it interlock with maven project version --- .../vavi/sound/midi/jsyn/JSynSynthesizer.java | 22 ++++++++++++++--- .../vavi/sound/midi/opl3/Opl3Synthesizer.java | 23 +++++++++++++++--- .../sound/midi/rococoa/RococoaSoundbank.java | 22 ++++++++++++++++- .../midi/rococoa/RococoaSynthesizer.java | 20 +++++++++++++++- .../sound/midi/mocha/MochaSynthesizer.java | 24 +++++++++++++++---- 5 files changed, 99 insertions(+), 12 deletions(-) diff --git a/src/main/java/vavi/sound/midi/jsyn/JSynSynthesizer.java b/src/main/java/vavi/sound/midi/jsyn/JSynSynthesizer.java index 083c4b7..1d3e84e 100644 --- a/src/main/java/vavi/sound/midi/jsyn/JSynSynthesizer.java +++ b/src/main/java/vavi/sound/midi/jsyn/JSynSynthesizer.java @@ -6,10 +6,11 @@ package vavi.sound.midi.jsyn; +import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.Properties; import java.util.logging.Level; - import javax.sound.midi.Instrument; import javax.sound.midi.MidiChannel; import javax.sound.midi.MidiDevice; @@ -29,7 +30,6 @@ import com.jsyn.unitgen.LineOut; import com.jsyn.util.MultiChannelSynthesizer; import com.jsyn.util.VoiceDescription; - import vavi.util.Debug; import vavi.util.StringUtil; @@ -44,7 +44,23 @@ */ public class JSynSynthesizer implements Synthesizer { - private static final String version = "0.0.1"; + static { + try { + try (InputStream is = JSynSynthesizer.class.getResourceAsStream("/META-INF/maven/vavi/vavi-sound-sandbox/pom.properties")) { + if (is != null) { + Properties props = new Properties(); + props.load(is); + version = props.getProperty("version", "undefined in pom.properties"); + } else { + version = System.getProperty("vavi.test.version", "undefined"); + } + } + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + + private static final String version; /** the device information */ protected static final MidiDevice.Info info = diff --git a/src/main/java/vavi/sound/midi/opl3/Opl3Synthesizer.java b/src/main/java/vavi/sound/midi/opl3/Opl3Synthesizer.java index 589f2ea..2c10f33 100644 --- a/src/main/java/vavi/sound/midi/opl3/Opl3Synthesizer.java +++ b/src/main/java/vavi/sound/midi/opl3/Opl3Synthesizer.java @@ -6,14 +6,15 @@ package vavi.sound.midi.opl3; +import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Properties; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import java.util.logging.Logger; - import javax.sound.midi.Instrument; import javax.sound.midi.MetaMessage; import javax.sound.midi.MidiChannel; @@ -60,9 +61,25 @@ */ public class Opl3Synthesizer implements Synthesizer { + static { + try { + try (InputStream is = Opl3Synthesizer.class.getResourceAsStream("/META-INF/maven/vavi/vavi-sound-sandbox/pom.properties")) { + if (is != null) { + Properties props = new Properties(); + props.load(is); + version = props.getProperty("version", "undefined in pom.properties"); + } else { + version = System.getProperty("vavi.test.version", "undefined"); + } + } + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + private static final Logger logger = Logger.getLogger(Opl3Synthesizer.class.getName()); - private static final String version = "1.0.4"; + private static final String version; /** the device information */ protected static final MidiDevice.Info info = @@ -723,7 +740,7 @@ public void send(MidiMessage message, long timeStamp) { } break; } } else if (message instanceof MetaMessage metaMessage) { - Debug.printf("meta: %02x", metaMessage.getType()); +Debug.printf("meta: %02x", metaMessage.getType()); switch (metaMessage.getType()) { case 0x2f: break; diff --git a/src/main/java/vavi/sound/midi/rococoa/RococoaSoundbank.java b/src/main/java/vavi/sound/midi/rococoa/RococoaSoundbank.java index 93181a2..5c33c7a 100644 --- a/src/main/java/vavi/sound/midi/rococoa/RococoaSoundbank.java +++ b/src/main/java/vavi/sound/midi/rococoa/RococoaSoundbank.java @@ -6,6 +6,8 @@ package vavi.sound.midi.rococoa; +import java.io.InputStream; +import java.util.Properties; import javax.sound.midi.Instrument; import javax.sound.midi.Patch; import javax.sound.midi.Soundbank; @@ -22,6 +24,24 @@ */ public class RococoaSoundbank implements Soundbank { + static { + try { + try (InputStream is = RococoaSynthesizer.class.getResourceAsStream("/META-INF/maven/vavi/vavi-sound-sandbox/pom.properties")) { + if (is != null) { + Properties props = new Properties(); + props.load(is); + version = props.getProperty("version", "undefined in pom.properties"); + } else { + version = System.getProperty("vavi.test.version", "undefined"); + } + } + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + + private static final String version; + /** */ public RococoaSoundbank() { } @@ -36,7 +56,7 @@ public String getName() { @Override public String getVersion() { - return "0.0.1"; + return version; } @Override diff --git a/src/main/java/vavi/sound/midi/rococoa/RococoaSynthesizer.java b/src/main/java/vavi/sound/midi/rococoa/RococoaSynthesizer.java index 0751587..4569bf4 100644 --- a/src/main/java/vavi/sound/midi/rococoa/RococoaSynthesizer.java +++ b/src/main/java/vavi/sound/midi/rococoa/RococoaSynthesizer.java @@ -6,8 +6,10 @@ package vavi.sound.midi.rococoa; +import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.Properties; import javax.sound.midi.Instrument; import javax.sound.midi.MidiChannel; @@ -45,7 +47,23 @@ */ public class RococoaSynthesizer implements Synthesizer { - private static final String version = "1.0.4"; + static { + try { + try (InputStream is = RococoaSynthesizer.class.getResourceAsStream("/META-INF/maven/vavi/vavi-sound-sandbox/pom.properties")) { + if (is != null) { + Properties props = new Properties(); + props.load(is); + version = props.getProperty("version", "undefined in pom.properties"); + } else { + version = System.getProperty("vavi.test.version", "undefined"); + } + } + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + + private static final String version; /** the device information */ protected static final MidiDevice.Info info = diff --git a/src/test/java/vavi/sound/midi/mocha/MochaSynthesizer.java b/src/test/java/vavi/sound/midi/mocha/MochaSynthesizer.java index c7415f4..2d648dc 100644 --- a/src/test/java/vavi/sound/midi/mocha/MochaSynthesizer.java +++ b/src/test/java/vavi/sound/midi/mocha/MochaSynthesizer.java @@ -7,14 +7,15 @@ package vavi.sound.midi.mocha; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Properties; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import java.util.logging.Logger; - import javax.sound.midi.Instrument; import javax.sound.midi.MetaMessage; import javax.sound.midi.MidiChannel; @@ -34,10 +35,9 @@ import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.SourceDataLine; -import vavi.util.Debug; - import mocha.sound.Instrumental; import mocha.sound.TimeLine; +import vavi.util.Debug; /** @@ -50,9 +50,25 @@ */ public class MochaSynthesizer implements Synthesizer { + static { + try { + try (InputStream is = MochaSynthesizer.class.getResourceAsStream("/META-INF/maven/vavi/vavi-sound-sandbox/pom.properties")) { + if (is != null) { + Properties props = new Properties(); + props.load(is); + version = props.getProperty("version", "undefined in pom.properties"); + } else { + version = System.getProperty("vavi.test.version", "undefined"); + } + } + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + static Logger logger = Logger.getLogger(MochaSynthesizer.class.getName()); - private static final String version = "0.0.1."; + private static final String version; /** the device information */ protected static final MidiDevice.Info info = From 11669a55737c93248d043d23c70ff0c3e48aa817 Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Mon, 1 Apr 2024 11:11:31 +0900 Subject: [PATCH 04/14] make it more reliable --- .../sampled/opl3/Opl3AudioFileReader.java | 18 ++++----- .../sampled/opus/OpusAudioFileReader.java | 21 ++++++---- .../rococoa/RococoaAudioFileReader.java | 15 +++---- .../OpusFormatConversionProviderTest.java | 36 +++++++++++++++++ .../RococoaFormatConversionProviderTest.java | 39 +++++++++++++++++-- 5 files changed, 102 insertions(+), 27 deletions(-) diff --git a/src/main/java/vavi/sound/sampled/opl3/Opl3AudioFileReader.java b/src/main/java/vavi/sound/sampled/opl3/Opl3AudioFileReader.java index e25238e..0df2e8b 100644 --- a/src/main/java/vavi/sound/sampled/opl3/Opl3AudioFileReader.java +++ b/src/main/java/vavi/sound/sampled/opl3/Opl3AudioFileReader.java @@ -12,8 +12,7 @@ import java.io.InputStream; import java.net.URL; import java.nio.file.Files; -import java.util.NoSuchElementException; - +import java.util.logging.Level; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; @@ -59,8 +58,8 @@ public AudioFileFormat getAudioFileFormat(InputStream stream) throws Unsupported /** * Return the AudioFileFormat from the given InputStream. Implementation. * - * @param bitStream - * @param mediaLength + * @param bitStream input to decode + * @param mediaLength unused * @return an AudioInputStream object based on the audio file data contained * in the input stream. * @throws UnsupportedAudioFileException if the File does not point to a @@ -68,12 +67,13 @@ public AudioFileFormat getAudioFileFormat(InputStream stream) throws Unsupported * @throws IOException if an I/O exception occurs. */ protected AudioFileFormat getAudioFileFormat(InputStream bitStream, int mediaLength) throws UnsupportedAudioFileException, IOException { -Debug.println("enter: available: " + bitStream.available()); +Debug.println(Level.FINE, "enter: available: " + bitStream.available()); AudioFormat.Encoding encoding; try { encoding = FileType.getEncoding(bitStream); - } catch (NoSuchElementException e) { -Debug.println("error exit: available: " + bitStream.available()); + } catch (Exception e) { +Debug.println(Level.FINER, "error exit: available: " + bitStream.available()); +Debug.printStackTrace(Level.FINEST, e); throw (UnsupportedAudioFileException) new UnsupportedAudioFileException().initCause(e); } AudioFileFormat.Type type = FileType.getType(encoding); @@ -95,7 +95,7 @@ public AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFi @Override public AudioInputStream getAudioInputStream(URL url) throws UnsupportedAudioFileException, IOException { - InputStream inputStream = url.openStream(); + InputStream inputStream = new BufferedInputStream(url.openStream()); try { return getAudioInputStream(inputStream); } catch (UnsupportedAudioFileException | IOException e) { @@ -115,7 +115,7 @@ public AudioInputStream getAudioInputStream(InputStream stream) throws Unsupport * * @param inputStream the input stream from which the AudioInputStream * should be constructed. - * @param mediaLength + * @param mediaLength unused * @return an AudioInputStream object based on the audio file data contained * in the input stream. * @throws UnsupportedAudioFileException if the File does not point to a diff --git a/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java b/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java index 16695b6..7a2975a 100644 --- a/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java +++ b/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java @@ -6,6 +6,7 @@ package vavi.sound.sampled.opus; +import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.File; import java.io.IOException; @@ -40,14 +41,14 @@ public class OpusAudioFileReader extends AudioFileReader { @Override public AudioFileFormat getAudioFileFormat(File file) throws UnsupportedAudioFileException, IOException { - try (InputStream inputStream = Files.newInputStream(file.toPath())) { + try (InputStream inputStream = new BufferedInputStream(Files.newInputStream(file.toPath()))) { return getAudioFileFormat(inputStream, (int) file.length()); } } @Override public AudioFileFormat getAudioFileFormat(URL url) throws UnsupportedAudioFileException, IOException { - try (InputStream inputStream = url.openStream()) { + try (InputStream inputStream = new BufferedInputStream(url.openStream())) { return getAudioFileFormat(inputStream); } } @@ -60,8 +61,8 @@ public AudioFileFormat getAudioFileFormat(InputStream stream) throws Unsupported /** * Return the AudioFileFormat from the given InputStream. Implementation. * - * @param bitStream - * @param mediaLength + * @param bitStream input to decode + * @param mediaLength unused * @return an AudioInputStream object based on the audio file data contained * in the input stream. * @throws UnsupportedAudioFileException if the File does not point to a @@ -82,7 +83,11 @@ protected AudioFileFormat getAudioFileFormat(InputStream bitStream, int mediaLen } bitStream.reset(); opus = new OpusFile(new OggFile(bitStream)); - } catch (IOException | IllegalArgumentException e) { + } catch (IOException e) { + throw e; + } catch (Exception e) { +Debug.println(Level.FINER, e); +Debug.printStackTrace(Level.FINEST, e); throw (UnsupportedAudioFileException) new UnsupportedAudioFileException(e.getMessage()).initCause(e); } finally { try { @@ -100,7 +105,7 @@ protected AudioFileFormat getAudioFileFormat(InputStream bitStream, int mediaLen @Override public AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFileException, IOException { - InputStream inputStream = Files.newInputStream(file.toPath()); + InputStream inputStream = new BufferedInputStream(Files.newInputStream(file.toPath())); try { return getAudioInputStream(inputStream, (int) file.length()); } catch (UnsupportedAudioFileException | IOException e) { @@ -111,7 +116,7 @@ public AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFi @Override public AudioInputStream getAudioInputStream(URL url) throws UnsupportedAudioFileException, IOException { - InputStream inputStream = url.openStream(); + InputStream inputStream = new BufferedInputStream(url.openStream()); try { return getAudioInputStream(inputStream); } catch (UnsupportedAudioFileException | IOException e) { @@ -131,7 +136,7 @@ public AudioInputStream getAudioInputStream(InputStream stream) throws Unsupport * * @param inputStream the input stream from which the AudioInputStream * should be constructed. - * @param mediaLength + * @param mediaLength unused * @return an AudioInputStream object based on the audio file data contained * in the input stream. * @throws UnsupportedAudioFileException if the File does not point to a diff --git a/src/main/java/vavi/sound/sampled/rococoa/RococoaAudioFileReader.java b/src/main/java/vavi/sound/sampled/rococoa/RococoaAudioFileReader.java index 668dd2f..7d607e0 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RococoaAudioFileReader.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RococoaAudioFileReader.java @@ -6,6 +6,7 @@ package vavi.sound.sampled.rococoa; +import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -30,14 +31,14 @@ public class RococoaAudioFileReader extends AudioFileReader { @Override public AudioFileFormat getAudioFileFormat(File file) throws UnsupportedAudioFileException, IOException { - try (InputStream inputStream = Files.newInputStream(file.toPath())) { + try (InputStream inputStream = new BufferedInputStream(Files.newInputStream(file.toPath()))) { return getAudioFileFormat(inputStream, (int) file.length()); } } @Override public AudioFileFormat getAudioFileFormat(URL url) throws UnsupportedAudioFileException, IOException { - try (InputStream inputStream = url.openStream()) { + try (InputStream inputStream = new BufferedInputStream(url.openStream())) { return getAudioFileFormat(inputStream); } } @@ -50,8 +51,8 @@ public AudioFileFormat getAudioFileFormat(InputStream stream) throws Unsupported /** * Return the AudioFileFormat from the given InputStream. Implementation. * - * @param bitStream - * @param mediaLength + * @param bitStream input to decode + * @param mediaLength unused * @return an AudioInputStream object based on the audio file data contained * in the input stream. * @throws UnsupportedAudioFileException if the File does not point to a @@ -67,7 +68,7 @@ protected AudioFileFormat getAudioFileFormat(InputStream bitStream, int mediaLen @Override public AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFileException, IOException { - InputStream inputStream = Files.newInputStream(file.toPath()); + InputStream inputStream = new BufferedInputStream(Files.newInputStream(file.toPath())); try { return getAudioInputStream(inputStream, (int) file.length()); } catch (UnsupportedAudioFileException | IOException e) { @@ -78,7 +79,7 @@ public AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFi @Override public AudioInputStream getAudioInputStream(URL url) throws UnsupportedAudioFileException, IOException { - InputStream inputStream = url.openStream(); + InputStream inputStream = new BufferedInputStream(url.openStream()); try { return getAudioInputStream(inputStream); } catch (UnsupportedAudioFileException | IOException e) { @@ -98,7 +99,7 @@ public AudioInputStream getAudioInputStream(InputStream stream) throws Unsupport * * @param inputStream the input stream from which the AudioInputStream * should be constructed. - * @param mediaLength + * @param mediaLength unused * @return an AudioInputStream object based on the audio file data contained * in the input stream. * @throws UnsupportedAudioFileException if the File does not point to a diff --git a/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java b/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java index a0c486c..f7b9556 100644 --- a/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java +++ b/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java @@ -7,6 +7,9 @@ package vavi.sound.sampled.opus; import java.io.BufferedInputStream; +import java.io.File; +import java.io.InputStream; +import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -16,12 +19,16 @@ import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.SourceDataLine; +import javax.sound.sampled.UnsupportedAudioFileException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import vavi.sound.sampled.adpcm.ms.MsEncoding; import vavi.util.Debug; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static vavi.sound.SoundUtil.volume; @@ -119,4 +126,33 @@ void test1() throws Exception { line.stop(); line.close(); } + + @Test + @DisplayName("another input type 2") + void test2() throws Exception { + URL url = Paths.get("src/test/resources/" + inFile).toUri().toURL(); + AudioInputStream ais = AudioSystem.getAudioInputStream(url); + assertEquals(MsEncoding.MS, ais.getFormat().getEncoding()); + } + + @Test + @DisplayName("another input type 3") + void test3() throws Exception { + File file = Paths.get("src/test/resources/" + inFile).toFile(); + AudioInputStream ais = AudioSystem.getAudioInputStream(file); + assertEquals(MsEncoding.MS, ais.getFormat().getEncoding()); + } + + @Test + @DisplayName("when unsupported file coming") + void test5() throws Exception { + InputStream is = OpusFormatConversionProviderTest.class.getResourceAsStream("/test.caf"); + int available = is.available(); + UnsupportedAudioFileException e = assertThrows(UnsupportedAudioFileException.class, () -> { +Debug.println(is); + AudioSystem.getAudioInputStream(is); + }); +Debug.println(e.getMessage()); + assertEquals(available, is.available()); // spi must not consume input stream even one byte + } } diff --git a/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java b/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java index 1bc536c..c220f3e 100644 --- a/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java +++ b/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java @@ -8,25 +8,29 @@ import java.io.BufferedInputStream; import java.io.File; +import java.io.InputStream; +import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; - import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.SourceDataLine; +import javax.sound.sampled.UnsupportedAudioFileException; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledOnOs; import org.junit.jupiter.api.condition.OS; - +import vavi.sound.sampled.adpcm.ms.MsEncoding; import vavi.util.Debug; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import static vavi.sound.SoundUtil.volume; @@ -132,7 +136,7 @@ public void test1() throws Exception { @Test @Disabled("not completed yet") - public void test2() throws Exception { + public void test4() throws Exception { for (AudioFileFormat.Type type : AudioSystem.getAudioFileTypes()) { System.err.println(type); } @@ -140,4 +144,33 @@ public void test2() throws Exception { AudioFormat originalAudioFormat = originalAudioInputStream.getFormat(); Debug.println(originalAudioFormat); } + + @Test + @DisplayName("another input type 2") + void test2() throws Exception { + URL url = Paths.get("src/test/resources/" + inFile).toUri().toURL(); + AudioInputStream ais = AudioSystem.getAudioInputStream(url); + assertEquals(MsEncoding.MS, ais.getFormat().getEncoding()); + } + + @Test + @DisplayName("another input type 3") + void test3() throws Exception { + File file = Paths.get("src/test/resources/" + inFile).toFile(); + AudioInputStream ais = AudioSystem.getAudioInputStream(file); + assertEquals(MsEncoding.MS, ais.getFormat().getEncoding()); + } + + @Test + @DisplayName("when unsupported file coming") + void test5() throws Exception { + InputStream is = RococoaFormatConversionProviderTest.class.getResourceAsStream("/test.wma"); + int available = is.available(); + UnsupportedAudioFileException e = assertThrows(UnsupportedAudioFileException.class, () -> { +Debug.println(is); + AudioSystem.getAudioInputStream(is); + }); +Debug.println(e.getMessage()); + assertEquals(available, is.available()); // spi must not consume input stream even one byte + } } From 6cc761d48012384f6c983716727a370a526109dc Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Thu, 4 Apr 2024 09:07:34 +0900 Subject: [PATCH 05/14] anti i18n clean up --- .../kt/kemusiro/sound/ChangeInstrument.java | 10 +- .../or/rim/kt/kemusiro/sound/ChangeTempo.java | 2 +- .../kt/kemusiro/sound/ClipSoundPlayer.java | 14 +-- .../kemusiro/sound/FMGeneralInstrument.java | 2 +- .../or/rim/kt/kemusiro/sound/Instrument.java | 15 ++- .../or/rim/kt/kemusiro/sound/MMLCompiler.java | 2 +- .../rim/kt/kemusiro/sound/MMLException.java | 2 +- .../or/rim/kt/kemusiro/sound/MMLPlayer.java | 12 +- .../kt/kemusiro/sound/MMLPlayerApplet.java | 6 +- .../kemusiro/sound/MMLPlayerApplication.java | 2 +- .../or/rim/kt/kemusiro/sound/MusicEvent.java | 10 +- .../or/rim/kt/kemusiro/sound/MusicScore.java | 14 +-- .../jp/or/rim/kt/kemusiro/sound/NoteOff.java | 2 +- .../jp/or/rim/kt/kemusiro/sound/NoteOn.java | 2 +- .../kt/kemusiro/sound/SineWaveInstrument.java | 2 +- .../or/rim/kt/kemusiro/sound/SoundPlayer.java | 24 ++-- .../kemusiro/sound/SquareWaveInstrument.java | 2 +- .../kemusiro/sound/StreamingSoundPlayer.java | 20 +-- .../kt/kemusiro/sound/WaveInputStream.java | 2 +- .../kt/kemusiro/sound/tone/ADSREnvelope.java | 2 +- .../kt/kemusiro/sound/tone/DummyEnvelope.java | 2 +- .../rim/kt/kemusiro/sound/tone/Envelope.java | 2 +- .../kt/kemusiro/sound/tone/FMAlgorithm.java | 2 +- .../kt/kemusiro/sound/tone/FMAlgorithm0.java | 2 +- .../kt/kemusiro/sound/tone/FMAlgorithm1.java | 2 +- .../kt/kemusiro/sound/tone/FMAlgorithm2.java | 2 +- .../kt/kemusiro/sound/tone/FMAlgorithm3.java | 2 +- .../kt/kemusiro/sound/tone/FMAlgorithm4.java | 2 +- .../kt/kemusiro/sound/tone/FMAlgorithm5.java | 2 +- .../kt/kemusiro/sound/tone/FMAlgorithm6.java | 2 +- .../kt/kemusiro/sound/tone/FMAlgorithm7.java | 2 +- .../kt/kemusiro/sound/tone/FMOperator.java | 2 +- .../kt/kemusiro/sound/tone/FMParameter.java | 2 +- .../rim/kt/kemusiro/sound/tone/SawWave.java | 2 +- .../kemusiro/sound/tone/SimpleEnvelope.java | 2 +- .../rim/kt/kemusiro/sound/tone/SineWave.java | 10 +- .../kt/kemusiro/sound/tone/SquareWave.java | 10 +- .../kemusiro/sound/tone/WaveGeneratable.java | 10 +- .../unknown/sound/mfi/track/SoundMessage.java | 2 +- .../mfi/track/TrackBeginningMessage.java | 2 +- .../vavi/apps/packetcast/PacketCaster.java | 4 +- src/main/java/vavi/sound/ldcelp/LdCelp.java | 2 +- .../sound/mfi/ittake/IttakeMidiConverter.java | 4 +- src/main/java/vavi/sound/mp3/Mp3Decoder.java | 14 +-- .../vavi/sound/opl3/AdvancedSierraFile.java | 4 +- src/main/java/vavi/sound/opl3/CmfFile.java | 2 +- src/main/java/vavi/sound/opl3/Dro2Player.java | 18 +-- src/main/java/vavi/sound/opl3/DroPlayer.java | 14 +-- src/main/java/vavi/sound/opl3/MidPlayer.java | 12 +- src/main/java/vavi/sound/opl3/MidiFile.java | 10 +- .../java/vavi/sound/opl3/OldLucasFile.java | 2 +- src/main/java/vavi/sound/opl3/Opl3Player.java | 11 +- .../sound/pcm/equalizing/sse/Equalizer.java | 2 +- .../sound/pcm/resampling/rohm/Resampler.java | 34 +++--- .../opl3/Opl3ToPcmAudioInputStream.java | 4 +- src/main/java/vavi/sound/twinvq/Chunk.java | 88 +++++++------- .../java/vavi/sound/twinvq/HeaderManager.java | 115 +++++++++--------- .../vavi/sound/twinvq/TwinVQInputStream.java | 2 +- .../vavi/sound/twinvq/TwinVQOutputStream.java | 2 +- src/main/java/vavi/sound/vsq/Block.java | 2 +- src/main/java/vavi/sound/vsq/VSQ.java | 4 +- src/samples/java/jmf/RtpReceiver.java | 6 +- src/samples/java/jmf/RtpTransmitter.java | 72 +++++------ src/test/java/ClipTest.java | 4 +- src/test/java/MmlTest.java | 2 +- .../SampleRateConversionProviderTest.java | 4 +- src/test/java/vavi/sound/vsq/Test.java | 12 +- src/test/java/vavi/sound/vsq/Test2.java | 4 +- .../vavix/rococoa/ituneslibrary/iTunes2.java | 20 +-- 69 files changed, 344 insertions(+), 341 deletions(-) diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/ChangeInstrument.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/ChangeInstrument.java index 5283ac6..bdda868 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/ChangeInstrument.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/ChangeInstrument.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound; /** - * 音色を変えるイベントを表すクラス。 + * A class that represents an event that changes the tone. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.2 $ @@ -15,11 +15,11 @@ public class ChangeInstrument extends MusicEvent { private final Instrument instrument; /** - * 音色を変更するイベントを作成する。 + * Creates an event to change the tone. * - * @param newTick ティック - * @param newChannel チャネル番号 - * @param newInstrument 新しい音色 + * @param newTick tick + * @param newChannel channel number + * @param newInstrument new tone */ public ChangeInstrument(int newTick, int newChannel, Instrument newInstrument) { tick = newTick; diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/ChangeTempo.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/ChangeTempo.java index a3996aa..43baba0 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/ChangeTempo.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/ChangeTempo.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound; /** - * テンポを変えるイベントを表すクラス。 + * A class that represents an event that changes the tempo. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.2 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/ClipSoundPlayer.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/ClipSoundPlayer.java index d874788..e33a991 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/ClipSoundPlayer.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/ClipSoundPlayer.java @@ -12,7 +12,7 @@ /** - * すでにできあがったバイト配列を演奏する。 + * Play with the already created byte array. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ @@ -22,11 +22,11 @@ public class ClipSoundPlayer extends SoundPlayer { private Clip line = null; /** - * 音声再生用のオブジェクトを生成する。 + * Generate an object for audio playback. * - * @param rate サンプリングレート - * @param depth サンプリングビット長 - * @param array 再生する音声データの配列 + * @param rate sampling rate + * @param depth sampling bit length + * @param array array of audio data to play */ public ClipSoundPlayer(int rate, int depth, byte[] array) { format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, @@ -41,9 +41,9 @@ public ClipSoundPlayer(int rate, int depth, byte[] array) { } /** - * ラインを返す。 + * Return line. * - * @return ライン + * @return line */ @Override public DataLine getLine() { diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/FMGeneralInstrument.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/FMGeneralInstrument.java index bcae5d5..204a413 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/FMGeneralInstrument.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/FMGeneralInstrument.java @@ -26,7 +26,7 @@ /** - * 汎用FM音源楽器。 + * General-purpose FM sound source instrument. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.2 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/Instrument.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/Instrument.java index 7265527..b10d926 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/Instrument.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/Instrument.java @@ -9,7 +9,7 @@ /** - * 楽器を表すクラス。 + * A class representing musical instruments. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.2 $ @@ -27,12 +27,11 @@ public void setTimeStep(double newTimeStep) { } /** - * 現在時刻の波形値を得る。波形の振幅は1.0に正規化される。 - * 値を取得した後、あらかじめ設定しておいた時間幅だけ、現在時刻を - * 更新する。 + * Obtain the waveform value at the current time. The amplitude of the waveform is normalized to 1.0. + * After obtaining the value, update the current time by the preset time range. * - * @param number 音番号(0-127) - * @return 波形値 + * @param number note number (0-127) + * @return waveform value */ public double getValue(int number) { double value = envelope.getValue() * wave.getValue(number, currentTime); @@ -50,9 +49,9 @@ public void release() { } /** - * 楽器の名前を得る。 + * Get the name of the instrument. * - * @return 楽器名 + * @return instrument name */ public abstract String getName(); } diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLCompiler.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLCompiler.java index e8e1c2a..835e242 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLCompiler.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLCompiler.java @@ -8,7 +8,7 @@ /** - * MMLを楽譜に変換するクラス。 + * A class that converts MML to musical score. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.4 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLException.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLException.java index 9eb01c0..b32b03c 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLException.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLException.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound; /** - * MMLの文法エラーを表すクラス。 + * A class that represents MML syntax errors. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.2 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayer.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayer.java index 280466d..8957384 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayer.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayer.java @@ -11,7 +11,7 @@ /** - * MMLを演奏する。 + * Plays MML. * * TODO glitch at the end * @@ -44,12 +44,12 @@ public void setVolume(float gain) { } /** - * MML文字列を解析して再生する。 - * 演奏状態を監視し、演奏終了時にlockオブジェクトに対して - * notify()が発行される。 + * Parse and play MML string. + * The performance status is monitored, and notify() is issued + * to the lock object when the performance ends. * - * @param mmls MML文字列 - * @throws MMLException 不正なMML文字列か否か + * @param mmls MML string + * @throws MMLException invalid MML string * @see SoundPlayer */ public void play(String[] mmls) throws MMLException, IOException { diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayerApplet.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayerApplet.java index 64f3882..99c4692 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayerApplet.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayerApplet.java @@ -24,11 +24,11 @@ import javax.swing.border.EtchedBorder; import jp.or.rim.kt.kemusiro.sound.tone.FMParameter; +import vavi.util.Debug; /** - * MMLを演奏するクラス。アプレットとしてもアプリケーションとしても - * 動作する。 + * A class that plays MML. It works both as an applet and as an application. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.3 $ @@ -253,7 +253,7 @@ public void actionPerformed(ActionEvent event) { } } } catch (Exception e) { - e.printStackTrace(); + Debug.printStackTrace(e); } } } diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayerApplication.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayerApplication.java index 9c09429..82a1e2e 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayerApplication.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/MMLPlayerApplication.java @@ -10,7 +10,7 @@ /** - * MMLを演奏する。 + * Play MML. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision$ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/MusicEvent.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/MusicEvent.java index c5092f3..ba5fa44 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/MusicEvent.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/MusicEvent.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound; /** - * イベントを表すクラス。 + * A class that represents an event. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1.1.1 $ @@ -25,18 +25,18 @@ public int compareTo(MusicEvent o) { } /** - * ティック数を得る。 + * Get the number of ticks. * - * @return ティック数 + * @return the number of ticks. */ public int getTick() { return tick; } /** - * チャンネル番号を得る。 + * Get channel number. * - * @return チャネル番号 + * @return channel number */ public int getChannel() { return channel; diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/MusicScore.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/MusicScore.java index 6d48f4b..cc5413f 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/MusicScore.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/MusicScore.java @@ -9,7 +9,7 @@ /** - * 楽譜を表すクラス。 + * A class that represents musical scores. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.3 $ @@ -22,10 +22,10 @@ public final class MusicScore { private static final int defaultTempo = 100; /** - * 楽譜を新規に作成する。 + * Create a new score. * - * @param newTickPerBeat 1拍当たりのカウント数 - * @param newChannelCount チャネル数 + * @param newTickPerBeat Counts per beat + * @param newChannelCount Number of channels */ public MusicScore(int newTickPerBeat, int newChannelCount) { tickPerBeat = newTickPerBeat; @@ -51,10 +51,10 @@ public int getChannelCount() { } /** - * イベントを追加する。新しいイベントはリスト上で昇順に並ぶことを - * 保証する。 + * Adds an event. New events are guaranteed to be sorted + * in ascending order on the list. * - * @param event イベント + * @param event an event */ public void add(MusicEvent event) { for (int i = eventList.size() - 1; i >= 0; i--) { diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/NoteOff.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/NoteOff.java index 46cb300..b8dddab 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/NoteOff.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/NoteOff.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound; /** - * 消音イベントを表すクラス。 + * A class that represents a note off event. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.2 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/NoteOn.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/NoteOn.java index 5d93bb7..cb58400 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/NoteOn.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/NoteOn.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound; /** - * 発音イベントを表すクラス。 + * A class that represents a note on events. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.2 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/SineWaveInstrument.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/SineWaveInstrument.java index 0033183..5bf342b 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/SineWaveInstrument.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/SineWaveInstrument.java @@ -10,7 +10,7 @@ /** - * sin波を表すクラス。 + * A class representing a sine wave. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/SoundPlayer.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/SoundPlayer.java index 6f9fdc1..ad9d62c 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/SoundPlayer.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/SoundPlayer.java @@ -11,7 +11,7 @@ /** - * データを演奏する操作を提供する抽象クラス。 + * Abstract class that provides operations to play with data. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.2 $ @@ -21,59 +21,59 @@ public abstract class SoundPlayer { protected AudioFormat format; /** - * サンプリングレートをfloatで返す。 + * Returns the sampling rate as a float. * - * @return サンプリングレート + * @return sampling rate */ public float getSampleRate() { return format.getSampleRate(); } /** - * フレームサイズを返す。 + * Returns the frame size. * - * @return フレームサイズ + * @return frame size */ public int getFrameSize() { return format.getFrameSize(); } /** - * ラインを返す。 + * Returns line. * - * @return ライン + * @return line */ public abstract DataLine getLine(); /** - * 再生を開始する。 + * Starts playing. */ public void start() { getLine().start(); } /** - * バッファにたまっているデータを掃き出す。 + * Flush out data accumulated in the buffer. */ public void drain() { getLine().drain(); } /** - * 再生を終了する。 + * Ends playback. */ public void stop() { getLine().stop(); } /** - * ラインを閉じる。 + * Closes the line. */ public void close() { getLine().close(); } - /** change volume */ + /** Changes volume */ public void volume(float gain) { SoundUtil.volume(getLine(), gain); } diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/SquareWaveInstrument.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/SquareWaveInstrument.java index aede8d8..65eabed 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/SquareWaveInstrument.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/SquareWaveInstrument.java @@ -10,7 +10,7 @@ /** - * 方形波を表すクラス。 + * A class that represents a square wave. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/StreamingSoundPlayer.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/StreamingSoundPlayer.java index 8f1b5db..7241c3e 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/StreamingSoundPlayer.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/StreamingSoundPlayer.java @@ -11,9 +11,11 @@ import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.SourceDataLine; +import vavi.util.Debug; + /** - * ストリー民具データを演奏する。 + * Play streaming data. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.2 $ @@ -23,10 +25,10 @@ public class StreamingSoundPlayer extends SoundPlayer { private SourceDataLine line = null; /** - * 音声再生用のオブジェクトを生成する。 + * Generate an object for audio playback. * - * @param rate サンプリングレート - * @param depth サンプリングビット長 + * @param rate sampling rate + * @param depth sampling bit length */ public StreamingSoundPlayer(int rate, int depth, LineListener listener) { format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, @@ -39,14 +41,14 @@ public StreamingSoundPlayer(int rate, int depth, LineListener listener) { } line.open(format); } catch (LineUnavailableException e) { - e.printStackTrace(); + Debug.printStackTrace(e); } } /** - * ラインを返す。 + * Returns line. * - * @return ライン + * @return line */ @Override public DataLine getLine() { @@ -54,9 +56,9 @@ public DataLine getLine() { } /** - * ストリームにデータを出力する。 + * Outputs data to a stream. * - * @param buffer 再生するデータ + * @param buffer data to play */ public void write(byte[] buffer, int offset, int length) { line.write(buffer, offset, length); diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/WaveInputStream.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/WaveInputStream.java index 4675611..ac9b8c8 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/WaveInputStream.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/WaveInputStream.java @@ -11,7 +11,7 @@ /** - * 楽譜からバイナリデータを生成する。 + * Generates binary data from musical scores. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.2 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/ADSREnvelope.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/ADSREnvelope.java index 65853da..da8440e 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/ADSREnvelope.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/ADSREnvelope.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * エンベロープをあらわすクラス。 + * A class that represents an envelope. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/DummyEnvelope.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/DummyEnvelope.java index 2fae2ff..ece1379 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/DummyEnvelope.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/DummyEnvelope.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * ダミーエンベロープをあらわすクラス。 + * A class that represents a dummy envelope. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/Envelope.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/Envelope.java index cf78098..27c4e18 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/Envelope.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/Envelope.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * エンベロープをあらわすクラス。 + * A class that represents an envelope. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm.java index 3b63f70..67856d1 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源のアルゴリズム。 + * FM sound source algorithm. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm0.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm0.java index 90384cf..c7b329f 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm0.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm0.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源のアルゴリズム0。 + * FM sound source algorithm 0. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm1.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm1.java index 0b62448..5593b40 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm1.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm1.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源のアルゴリズム1。 + * FM sound source algorithm 1. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm2.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm2.java index 8ca2870..38f83ad 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm2.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm2.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源のアルゴリズム2。 + * FM sound source algorithm 2. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm3.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm3.java index 523a831..6097088 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm3.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm3.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源のアルゴリズム3。 + * FM sound source algorithm 3. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm4.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm4.java index 99ba6b0..b18e961 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm4.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm4.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源のアルゴリズム4。 + * FM sound source algorithm 4. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm5.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm5.java index b3827b2..adaa3f3 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm5.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm5.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源のアルゴリズム5。 + * FM sound source algorithm 5. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm6.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm6.java index 0c7769a..6009ccb 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm6.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm6.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源のアルゴリズム6。 + * FM sound source algorithm 6. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm7.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm7.java index 1c8fd54..562504b 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm7.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMAlgorithm7.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源のアルゴリズム7。 + * FM sound source algorithm 7. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMOperator.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMOperator.java index 1dcc0fc..7842756 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMOperator.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMOperator.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源のオペレータを表すクラス。 + * A class representing an FM sound source operator. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMParameter.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMParameter.java index 2e60df5..784b8db 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMParameter.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/FMParameter.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * FM音源の各種パラメータを保存する。 + * Save various parameters of FM sound source. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SawWave.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SawWave.java index 248e984..8584520 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SawWave.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SawWave.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * のこぎり波を発生する。 + * Generates a saw wave. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SimpleEnvelope.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SimpleEnvelope.java index 94c0f62..878e136 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SimpleEnvelope.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SimpleEnvelope.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * 単純エンベロープをあらわすクラス。 + * A class that represents a simple envelope. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SineWave.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SineWave.java index abd4d31..ff478f3 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SineWave.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SineWave.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * sin波を表すクラス。 + * A class representing a sine wave. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ @@ -28,11 +28,11 @@ public SineWave() { } /** - * 指定の時刻の値を得る。波形の振幅は1.0に正規化される。 + * Get the value at the specified time. The amplitude of the waveform is normalized to 1.0. * - * @param number 音番号(0-127) - * @param time 時刻 - * @return 波形値 + * @param number note number (0-127) + * @param time time + * @return waveform value */ @Override public double getValue(int number, double time) { diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SquareWave.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SquareWave.java index a0dbe2c..add8a02 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SquareWave.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/SquareWave.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * 方形波を表すクラス。 + * A class that represents a square wave. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ @@ -29,11 +29,11 @@ private static double normalize(double frequency, double time) { } /** - * 指定の時刻の値を得る。波形の振幅は1.0に正規化される。 + * Get the value at the specified time. The amplitude of the waveform is normalized to 1.0. * - * @param number 音番号(0-127) - * @param time 時刻 - * @return 波形値 + * @param number note number (0-127) + * @param time time + * @return waveform value */ @Override public double getValue(int number, double time) { diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/WaveGeneratable.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/WaveGeneratable.java index 6ef6288..4b36b97 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/WaveGeneratable.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/tone/WaveGeneratable.java @@ -5,7 +5,7 @@ package jp.or.rim.kt.kemusiro.sound.tone; /** - * 音声を発生しうるインターフェース。 + * An interface that can generate audio. * * @author Kenichi Miyata (kemusiro@kt.rim.or.jp) * @version $Revision: 1.1 $ @@ -13,11 +13,11 @@ public interface WaveGeneratable { /** - * 指定の時刻の値を得る。波形の振幅は1.0に正規化される。 + * Get the value at the specified time. The amplitude of the waveform is normalized to 1.0. * - * @param number 音番号(0-127) - * @param time 時刻 - * @return 波形値 + * @param number note number (0-127) + * @param time time + * @return waveform value */ double getValue(int number, double time); } diff --git a/src/main/java/unknown/sound/mfi/track/SoundMessage.java b/src/main/java/unknown/sound/mfi/track/SoundMessage.java index 5018bef..9dc6bbd 100644 --- a/src/main/java/unknown/sound/mfi/track/SoundMessage.java +++ b/src/main/java/unknown/sound/mfi/track/SoundMessage.java @@ -2,7 +2,7 @@ /** - * ボリューム変更 + * Volume change. * delta, 0xff, 0xe2, */ public class SoundMessage extends SystemMessage { diff --git a/src/main/java/unknown/sound/mfi/track/TrackBeginningMessage.java b/src/main/java/unknown/sound/mfi/track/TrackBeginningMessage.java index 3cabd3c..628b500 100644 --- a/src/main/java/unknown/sound/mfi/track/TrackBeginningMessage.java +++ b/src/main/java/unknown/sound/mfi/track/TrackBeginningMessage.java @@ -2,7 +2,7 @@ /** - * 演奏位置情報 (キューポイント) + * Performance position information (cue point) * delta, 0xff, 0xd0, */ public class TrackBeginningMessage extends SystemMessage { diff --git a/src/main/java/vavi/apps/packetcast/PacketCaster.java b/src/main/java/vavi/apps/packetcast/PacketCaster.java index 1d873d4..47e0faf 100644 --- a/src/main/java/vavi/apps/packetcast/PacketCaster.java +++ b/src/main/java/vavi/apps/packetcast/PacketCaster.java @@ -214,7 +214,7 @@ boolean waitForFileDone() { } }; - /** 現在の秒に対応するファイルを取得 {@link #interval} [mesc] おき */ + /** Get the file corresponding to the current second {@link #interval} [mesc] */ class MyUrlMaker implements UrlMaker { /** */ Calendar calendar = Calendar.getInstance(); @@ -222,7 +222,7 @@ class MyUrlMaker implements UrlMaker { MyUrlMaker() { calendar.roll(Calendar.SECOND, 10); } - /** 現在使用中の時間 */ + /** Time currently in use */ int currentNo = 0; /** */ diff --git a/src/main/java/vavi/sound/ldcelp/LdCelp.java b/src/main/java/vavi/sound/ldcelp/LdCelp.java index 6995fa0..fbdab8b 100644 --- a/src/main/java/vavi/sound/ldcelp/LdCelp.java +++ b/src/main/java/vavi/sound/ldcelp/LdCelp.java @@ -972,7 +972,7 @@ private void decode_vector(boolean ignore) throws IOException { //Debug.println("ix: " + ix); if (ix < 0) { Debug.println("decoder_done"); - decoder_done = true; // TODO eof なのにフラグ立てるだけ? + decoder_done = true; // TODO even though it's eof, just flag it? } UPDATE(sf_coeff, SF_COEFF); diff --git a/src/main/java/vavi/sound/mfi/ittake/IttakeMidiConverter.java b/src/main/java/vavi/sound/mfi/ittake/IttakeMidiConverter.java index cf18801..2baa598 100644 --- a/src/main/java/vavi/sound/mfi/ittake/IttakeMidiConverter.java +++ b/src/main/java/vavi/sound/mfi/ittake/IttakeMidiConverter.java @@ -102,7 +102,7 @@ public vavi.sound.mfi.Sequence toMfiSequence(Sequence midiSequence, int fileType /** * hack of Track - * TODO マジで動くの? + * TODO does it really work? */ private static void insert(Track track, MfiEvent event, int index) { try { @@ -232,7 +232,7 @@ protected static vavi.sound.mfi.Sequence convert(Sequence sequence, int type) } else if (midiMessage instanceof MetaMessage metaMessage) { int metaType = metaMessage.getType(); switch (metaType) { - case 81: // テンポ設定 + case 81: // Tempo setting TempoMessage tempoMessage = new TempoMessage(0, 0xff, context.getMidiResolution(), (metaMessage.getData()[0] << 8) | metaMessage.getData()[1]); mfiTrack.add(new MfiEvent(tempoMessage, presentTime)); break; diff --git a/src/main/java/vavi/sound/mp3/Mp3Decoder.java b/src/main/java/vavi/sound/mp3/Mp3Decoder.java index 806fc7f..30daee0 100644 --- a/src/main/java/vavi/sound/mp3/Mp3Decoder.java +++ b/src/main/java/vavi/sound/mp3/Mp3Decoder.java @@ -48,19 +48,19 @@ static class MpegDecodeParam { /** */ static class MpegDecodeInfo { MpegHeader header; - /** 出力チャネル */ + /** output channel */ int channels; - /** サンプリングレート[Hz] */ + /** sampling rate [Hz] */ int frequency; - /** ビットレート[bit/s] */ + /** bit rate [bit/s] */ int bitRate; - /** 1フレームの入力サイズ */ + /** 1 frame input size */ int inputSize; - /** 1フレームの出力サイズ */ + /** 1 frame output size */ int outputSize; } - /** ヘッダ情報 4 byte */ + /** header information 4 byte */ static class MpegHeader { static final int[][] m_bitrate = { // layer1 @@ -108,7 +108,7 @@ static class MpegHeader { * */ int mode; - /** ヘッダ情報の取得 */ + /** Gets header information. */ public MpegHeader(byte[] buf, int offset) { Debug.println("offset: " + offset); this.version = (buf[offset + 1] & 0x18) >> 3; diff --git a/src/main/java/vavi/sound/opl3/AdvancedSierraFile.java b/src/main/java/vavi/sound/opl3/AdvancedSierraFile.java index 4afcd3d..c3c75a3 100644 --- a/src/main/java/vavi/sound/opl3/AdvancedSierraFile.java +++ b/src/main/java/vavi/sound/opl3/AdvancedSierraFile.java @@ -93,7 +93,7 @@ private void sierra_next_section(MidPlayer player) throws IOException { player.tracks[t].on = false; } - logger.info("next adv sierra section:"); +logger.info("next adv sierra section:"); player.pos = sierraPos; int t = 0; @@ -105,7 +105,7 @@ private void sierra_next_section(MidPlayer player) throws IOException { player.tracks[t].tend = player.flen; player.tracks[t].iwait = 0; player.tracks[t].pv = 0; - logger.info(String.format("track %d starts at %x", t, player.tracks[t].spos)); +logger.info(String.format("track %d starts at %x", t, player.tracks[t].spos)); t++; player.takeBE(2); } diff --git a/src/main/java/vavi/sound/opl3/CmfFile.java b/src/main/java/vavi/sound/opl3/CmfFile.java index 358e85f..5471fd0 100644 --- a/src/main/java/vavi/sound/opl3/CmfFile.java +++ b/src/main/java/vavi/sound/opl3/CmfFile.java @@ -78,7 +78,7 @@ void rewind(int subSong, MidPlayer player) throws IOException { this.instruments = new Opl3Instrument[this.tins]; for (int p = 0; p < player.tins; ++p) { - logger.fine(String.format("\n%d: ", p)); +logger.fine(String.format("\n%d: ", p)); int[] x = new int[16]; for (int j = 0; j < 16; ++j) { diff --git a/src/main/java/vavi/sound/opl3/Dro2Player.java b/src/main/java/vavi/sound/opl3/Dro2Player.java index 3a76ab1..85878e6 100644 --- a/src/main/java/vavi/sound/opl3/Dro2Player.java +++ b/src/main/java/vavi/sound/opl3/Dro2Player.java @@ -76,13 +76,13 @@ public boolean matchFormat(InputStream bitStream) { return true; } catch (IOException e) { -Debug.println(Level.WARNING, e); + logger.log(Level.WARNING, e.getMessage(), e); return false; } finally { try { dis.reset(); } catch (IOException e) { -Debug.println(Level.SEVERE, e); + logger.fine(e.toString()); } } } @@ -121,13 +121,13 @@ public void load(InputStream is) throws IOException { toReg[i] = dis.readUnsignedByte(); } - logger.info("id: " + DroPlayer.ID); - logger.info("version: " + 2); - logger.info("length: " + length); - logger.info("mstotal: " + msTotal); - logger.info("opl3Type: " + opl3Type); - logger.info("delay256: " + delay256); - logger.info("delayShift8: " + delayShift8); +logger.fine("id: " + DroPlayer.ID); +logger.fine("version: " + 2); +logger.fine("length: " + length); +logger.fine("mstotal: " + msTotal); +logger.fine("opl3Type: " + opl3Type); +logger.fine("delay256: " + delay256); +logger.fine("delayShift8: " + delayShift8); data = dis; diff --git a/src/main/java/vavi/sound/opl3/DroPlayer.java b/src/main/java/vavi/sound/opl3/DroPlayer.java index 52483b9..396cede 100644 --- a/src/main/java/vavi/sound/opl3/DroPlayer.java +++ b/src/main/java/vavi/sound/opl3/DroPlayer.java @@ -84,13 +84,13 @@ public boolean matchFormat(InputStream bitStream) { return true; } catch (IOException e) { -Debug.println(Level.WARNING, e); + logger.log(Level.WARNING, e.getMessage(), e); return false; } finally { try { dis.reset(); } catch (IOException e) { -Debug.println(Level.SEVERE, e); + logger.fine(e.toString()); } } } @@ -114,11 +114,11 @@ public void load(InputStream is) throws IOException { dis.readUnsignedByte(); dis.readUnsignedByte(); - logger.info("id: " + ID); - logger.info("version: " + 1); - logger.info("mstotal: " + mstotal); - logger.info("length: " + length); - logger.info("oplType: " + opl3_mode); +logger.fine("id: " + ID); +logger.fine("version: " + 1); +logger.fine("mstotal: " + mstotal); +logger.fine("length: " + length); +logger.fine("oplType: " + opl3_mode); data = dis; diff --git a/src/main/java/vavi/sound/opl3/MidPlayer.java b/src/main/java/vavi/sound/opl3/MidPlayer.java index 3608d09..6b54e80 100644 --- a/src/main/java/vavi/sound/opl3/MidPlayer.java +++ b/src/main/java/vavi/sound/opl3/MidPlayer.java @@ -28,7 +28,6 @@ import java.util.NoSuchElementException; import java.util.logging.Level; import java.util.logging.Logger; - import javax.sound.midi.ControllerEventListener; import javax.sound.midi.InvalidMidiDataException; import javax.sound.midi.MetaEventListener; @@ -48,7 +47,6 @@ import vavi.sound.midi.opl3.Opl3Soundbank; import vavi.sound.midi.opl3.Opl3Synthesizer; import vavi.sound.midi.opl3.Opl3Synthesizer.Context; -import vavi.util.Debug; import vavi.util.StringUtil; @@ -148,13 +146,13 @@ boolean matchFormat(InputStream bitStream) { dis.mark(markSize()); return matchFormatImpl(dis); } catch (IOException e) { -Debug.println(Level.WARNING, e); + logger.log(Level.WARNING, e.getMessage(), e); return false; } finally { try { dis.reset(); } catch (IOException e) { -Debug.println(Level.SEVERE, e); + logger.log(Level.FINE, e.getMessage()); } } } @@ -474,8 +472,7 @@ public boolean update() throws IOException { break; } } catch (InvalidMidiDataException e) { - logger.warning(e.getMessage()); - e.printStackTrace(); + logger.log(Level.SEVERE, e.getMessage(), e); } if (midiMessage != null) { @@ -522,8 +519,7 @@ public boolean update() throws IOException { MidiMessage midiMessage = new MetaMessage(MetaEvent.META_END_OF_TRACK.number(), new byte[0], 0); transmitter.getReceiver().send(midiMessage, -1); } catch (InvalidMidiDataException e) { - logger.warning(e.getMessage()); - e.printStackTrace(); + logger.log(Level.WARNING, e.getMessage(), e); } } } diff --git a/src/main/java/vavi/sound/opl3/MidiFile.java b/src/main/java/vavi/sound/opl3/MidiFile.java index 6641d39..bf2d4cd 100644 --- a/src/main/java/vavi/sound/opl3/MidiFile.java +++ b/src/main/java/vavi/sound/opl3/MidiFile.java @@ -36,15 +36,15 @@ int markSize() { @Override boolean matchFormatImpl(DataInputStream dis) throws IOException { if (!Boolean.parseBoolean(System.getProperty("vavi.sound.opl3.MidiFile", "false"))) { -logger.info("vavi.sound.opl3.MidiFile: false"); +logger.fine("vavi.sound.opl3.MidiFile: false"); return false; } -logger.info("use vavi.sound.opl3.MidiFile"); +logger.fine("use vavi.sound.opl3.MidiFile"); byte[] chunkType = new byte[4]; dis.readFully(chunkType); dis.skipBytes(4); int format = dis.readUnsignedShort(); -logger.info("format: " + format); +logger.fine("format: " + format); return Arrays.equals("MThd".getBytes(), chunkType) && format == 0; } @@ -53,13 +53,13 @@ void rewind(int subSong, MidPlayer player) throws IOException { player.tins = 128; player.takeBE(4 + 4 + 2 + 2); // skip header player.deltas = player.takeBE(2); - logger.fine(String.format("deltas: %d", player.deltas)); +logger.fine(String.format("deltas: %d", player.deltas)); player.takeBE(4); player.tracks[0].on = true; player.tracks[0].tend = player.takeBE(4); player.tracks[0].spos = player.pos; - logger.info(String.format("tracklen: %d", player.tracks[0].tend)); +logger.fine(String.format("tracklen: %d", player.tracks[0].tend)); } @Override diff --git a/src/main/java/vavi/sound/opl3/OldLucasFile.java b/src/main/java/vavi/sound/opl3/OldLucasFile.java index 3cf6603..bdab536 100644 --- a/src/main/java/vavi/sound/opl3/OldLucasFile.java +++ b/src/main/java/vavi/sound/opl3/OldLucasFile.java @@ -70,7 +70,7 @@ void rewind(int subSong, MidPlayer player) throws IOException { this.instruments = new Opl3Instrument[this.tins]; for (int p = 0; p < v; ++p) { - logger.fine(String.format("\n%d: ", p)); +logger.fine(String.format("\n%d: ", p)); int[] ins = new int[16]; diff --git a/src/main/java/vavi/sound/opl3/Opl3Player.java b/src/main/java/vavi/sound/opl3/Opl3Player.java index de29e77..2cccce4 100644 --- a/src/main/java/vavi/sound/opl3/Opl3Player.java +++ b/src/main/java/vavi/sound/opl3/Opl3Player.java @@ -23,13 +23,12 @@ import java.io.IOException; import java.io.InputStream; import java.util.Arrays; - +import java.util.logging.Logger; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import vavi.sound.sampled.opl3.Opl3Encoding; import vavi.sound.sampled.opl3.Opl3FileFormatType; -import vavi.util.Debug; /** @@ -39,6 +38,8 @@ */ public abstract class Opl3Player { + private static final Logger logger = Logger.getLogger(Opl3Player.class.getName()); + /** TODO who defined 49700? */ public static final AudioFormat opl3 = new AudioFormat(49700.0f, 16, 2, true, false); @@ -56,7 +57,7 @@ public enum FileType { this.player = player; } public static Opl3Player getPlayer(AudioFormat.Encoding encoding) { -Debug.println("encoding: " + encoding); +logger.fine("encoding: " + encoding); return Arrays.stream(values()).filter(e -> e.encoding == encoding).findFirst().get().player; } /** @param ext lower case w/o '.' */ @@ -86,7 +87,7 @@ protected void write(int array, int address, int data) { public abstract void load(InputStream is) throws IOException; public byte[] read(int len) { -//LOGGER.warning("Enter in read method"); +//logger.warning("Enter in read method"); byte[] buf = new byte[len]; @@ -99,7 +100,7 @@ public byte[] read(int len) { buf[i + 2] = (byte) (chB & 0xff); buf[i + 3] = (byte) (chB >> 8 & 0xff); } -//LOGGER.info("read: " + len); +//logger.info("read: " + len); return buf; } diff --git a/src/main/java/vavi/sound/pcm/equalizing/sse/Equalizer.java b/src/main/java/vavi/sound/pcm/equalizing/sse/Equalizer.java index c2ba076..0decf21 100644 --- a/src/main/java/vavi/sound/pcm/equalizing/sse/Equalizer.java +++ b/src/main/java/vavi/sound/pcm/equalizing/sse/Equalizer.java @@ -244,7 +244,7 @@ private static double hn_imp(int n) { } /** - * @param param2 TODO index 0 に何か意味あり??? + * @param param2 TODO does index 0 have any meaning??? */ private double hn(int n, List param2, double fs) { double ret, lhn; diff --git a/src/main/java/vavi/sound/pcm/resampling/rohm/Resampler.java b/src/main/java/vavi/sound/pcm/resampling/rohm/Resampler.java index 0b2635f..f5c7ee0 100644 --- a/src/main/java/vavi/sound/pcm/resampling/rohm/Resampler.java +++ b/src/main/java/vavi/sound/pcm/resampling/rohm/Resampler.java @@ -14,18 +14,18 @@ */ public class Resampler { - /** 1 サンプル当たりの bit 数 */ + /** number of bits per sample */ private final int nBitPerSample = 16; - /** 周波数. */ + /** frequency */ private final float nFreq; /** */ private final float nSampleFreq; /** * - * @param nSampleFreq PCM データサンプリング周波数. (in) - * @param nAdpcmFreq エンコード後の ADPCM データのサンプリング周波数. (out) + * @param nSampleFreq PCM data sampling frequency (in) + * @param nAdpcmFreq sampling frequency of ADPCM data after encoding. (out) */ Resampler(float nSampleFreq, float nAdpcmFreq) { this.nFreq = nAdpcmFreq; @@ -39,36 +39,36 @@ public class Resampler { */ int[] resample(int[] pbyPcmData) { - // 1サンプルのバイト数. + // number of bytes per sample // int nBytes = nBitPerSample / 8; - // 周波数変換後のサンプル数. + // number of samples after frequency conversion. int nNewSampleNum = (int) (pbyPcmData.length * (nFreq / nSampleFreq)); //Debug.println(nFreq + ", "+ nSampleFreq + ", " + pbyPcmData.length + ", " + nNewSampleNum); - // 領域確保. + // memory allocation int[] pbyNewPcm = new int[nNewSampleNum]; - // 周波数変換. + // frequency conversion. for (int i = 0; i < nNewSampleNum; i++) { - // インデックス値. + // index value double dIndex = (double) i * pbyPcmData.length / nNewSampleNum; int nIndex1 = (int) dIndex; int nIndex2 = Math.min((nIndex1 + 1), pbyPcmData.length - 1); - // 乗値算出. + // multiplier calculation. double dRat1 = dIndex - nIndex1; double dRat2 = 1.0 - dRat1; - // 8bit. + // 8bit if (nBitPerSample == 8) { - // インデックス1と2の値. + // values of index 1 and 2 int c1 = pbyPcmData[nIndex1] - 128; int c2 = pbyPcmData[nIndex2] - 128; - // 値算出. + // value calculation double dRes = dRat1 * c2 + dRat2 * c1; if (dRes < -128) { dRes = -128; @@ -77,7 +77,7 @@ int[] resample(int[] pbyPcmData) { dRes = 127; } - // 値代入. + // value assignment short n = (short) dRes; n = (short) (n + 128); @@ -88,11 +88,11 @@ int[] resample(int[] pbyPcmData) { else { //Debug.println(nIndex1 + ", "+ nIndex2); - // インデックス1と2の値. + // values of index 1 and 2 int n1 = pbyPcmData[nIndex1]; int n2 = pbyPcmData[nIndex2]; - // 値算出. + // value calculation double dRes = dRat1 * n2 + dRat2 * n1; if (dRes < -32768) { dRes = -32768; @@ -101,7 +101,7 @@ int[] resample(int[] pbyPcmData) { dRes = 32767; } - // 値代入. + // value assignment short n = (short) dRes; pbyNewPcm[i] = n; diff --git a/src/main/java/vavi/sound/sampled/opl3/Opl3ToPcmAudioInputStream.java b/src/main/java/vavi/sound/sampled/opl3/Opl3ToPcmAudioInputStream.java index c6d1fdb..1e1c7a4 100644 --- a/src/main/java/vavi/sound/sampled/opl3/Opl3ToPcmAudioInputStream.java +++ b/src/main/java/vavi/sound/sampled/opl3/Opl3ToPcmAudioInputStream.java @@ -69,7 +69,7 @@ public void execute() throws IOException { } else { if (player.update()) { double sec = 1.0 / player.getRefresh(); -Debug.println(Level.FINER, "bytes: " + (int) (sampleRate * sec) + ", " + player.getRefresh()); +Debug.println(Level.FINEST, "bytes: " + (int) (sampleRate * sec) + ", " + player.getRefresh()); byte[] buf = player.read(4 * (int) (sampleRate * sec)); out.write(buf); @@ -87,7 +87,7 @@ public void execute() throws IOException { @Override public void finish() throws IOException { -//Debug.println("finish"); +Debug.println(Level.FINEST, "finish"); } } } diff --git a/src/main/java/vavi/sound/twinvq/Chunk.java b/src/main/java/vavi/sound/twinvq/Chunk.java index e5012b4..b9dacce 100644 --- a/src/main/java/vavi/sound/twinvq/Chunk.java +++ b/src/main/java/vavi/sound/twinvq/Chunk.java @@ -10,7 +10,7 @@ /** - * チャンクの基本構造を提供する。生のデータを入出力する + * Provides the basic structure of chunks. Input and output raw data. */ class Chunk { @@ -21,8 +21,8 @@ class Chunk { private int pos; /** - * 現在位置から size バイト整数を取得 - * @param size デフォルト:long整数 + * Gets size byte integer from current position. + * @param size default: long integer */ protected long getNInt(int size/* =sizeof(long) */) { final int mask = 0xff; @@ -39,8 +39,8 @@ protected long getNInt(int size/* =sizeof(long) */) { } /** - * 現在位置から size バイト分のベクトルを取得 - * @param size デフォルト:残り全部 + * Gets a vector of size bytes from the current position. + * @param size default: all the rest */ protected byte[] getVector(int size/* = 0 */) { @@ -61,8 +61,8 @@ protected byte[] getVector(int size/* = 0 */) { } /** - * 現在位置から length だけの文字列を取得 - * @param length デフォルト:残り全部 + * Gets length string from current position. + * @param length default: all the rest */ protected String getRndString(int length/* = 0 */) { if (length == 0) { @@ -82,9 +82,9 @@ protected String getRndString(int length/* = 0 */) { } /** - * 現在位置から size バイト整数を書き込み + * Writes size byte integer from current position. * - * @param size デフォルト:long整数 + * @param size default: long integer */ protected void putNInt(int inputData, int size/* =sizeof(long) */) { final int mask = 0xff; @@ -101,44 +101,44 @@ protected void putNInt(int inputData, int size/* =sizeof(long) */) { } } - /** 現在位置を先頭に戻す */ + /** Returns current position to the beginning. */ protected void rewindChunk() { pos = 0; } - /** データを消去する */ + /** Erases data. */ protected void deleteChunk() { data.clear(); rewindChunk(); } - /** 現在位置を取得する */ + /** Get current position. */ protected final int getCurrentPosition() { return pos; } - /** 例外 */ + /** exception */ protected static class FailPutException extends RuntimeException { } - /** コンストラクタ */ + /** constructor */ public Chunk(Chunk parent) { id = parent.id; pos = 0; } - /** コンストラクタ */ + /** constructor */ public Chunk(String ID) { id = ID; pos = 0; } - /** ID の取得 */ + /** Gets ID. */ public final String getID() { return id; } - /** チャンクサイズの取得 */ + /** Gets chunk size. */ public final int getSize() { return data.size(); } @@ -151,7 +151,7 @@ public final byte[] getData() { return retval; } - /** データを追加、キャラクタ配列型 */ + /** Adds data, character array type. */ public int putData(int size, byte[] inputData) { for (int ii = 0; ii < size; ii++) { data.add(inputData[ii]); @@ -160,7 +160,7 @@ public int putData(int size, byte[] inputData) { return 0; } - /** データを追加、ベクトル型 */ + /** Adds data, vector type. */ public int putData(byte[] inputData) { for (byte inputDatum : inputData) { data.add(inputDatum); @@ -168,7 +168,7 @@ public int putData(byte[] inputData) { return 0; } - /** データを追加、文字列型 */ + /** Adds data, string type. */ public int putData(String theString) { for (byte it : theString.getBytes()) { @@ -184,7 +184,7 @@ public String toString() { } /** - * 文字列のみを格納するチャンク、汎用チャンク型 + * Chunk that stores only strings, general-purpose chunk type. */ class StringChunk extends Chunk { public String getString() { @@ -208,12 +208,12 @@ public String toString() { } /** - * 整数を1つだけ格納するチャンク型のテンプレート、汎用チャンク型 + * Chunk type template that stores only one integer, general purpose chunk type. */ class IntChunk extends Chunk { int m_dataSize; - // 整数データを取得する + // Gets integer data. public final long getInt() { rewindChunk(); return getNInt(m_dataSize); @@ -241,10 +241,10 @@ public String toString() { } /** - * チャンクを格納するチャンク、汎用チャンク型 + * Chunk that stores chunks, general-purpose chunk type. */ class ChunkChunk extends Chunk { - /** 次のチャンクを返す */ + /** Returns next chunk. */ public Chunk GetNextChunk(int idSize/* = 4 */) { String id; if (!(id = this.getRndString(idSize)).isEmpty()) { @@ -264,7 +264,7 @@ public Chunk GetNextChunk(int idSize/* = 4 */) { return null; } - /** 巻き戻し */ + /** Rewinds. */ public void rewind() { rewindChunk(); } @@ -279,23 +279,23 @@ public void putChunk(Chunk src) { putData(data); } - /** オブジェクトを種にする */ + /** Seeds an object. */ public ChunkChunk(Chunk parent) { super(parent); } /** - * ID だけ与え空のチャンクを作成する + * Creates an empty chunk given just the ID. */ public ChunkChunk(String id) { super(id); } - /** チャンク取得に失敗 */ + /** Failed to get chunk. */ public static class FailGetChunkException extends RuntimeException { } - /** チャンク書き込みに失敗 */ + /** Chunk write failed. */ public static class FailPutChunkException extends Exception { } @@ -352,22 +352,22 @@ public CommChunk(int channelMode, int bitRate, int samplingRate, int securityLev } - /** チャネルモードを取得 */ + /** Gets channel mode. */ public int getChannelMode() { return channelMode; } - /** ビットレートを取得 */ + /** Gets bitrate. */ public int getBitRate() { return bitRate; } - /** サンプリング周波数を取得 */ + /** Gets sampling frequency. */ public int getSamplingRate() { return samplingRate; } - /** 追加情報を取得 */ + /** Gets additional information. */ public int getSecurityLevel() { return securityLevel; } @@ -377,7 +377,7 @@ public String getVersion() { return version; } - /** コンストラクションに失敗 */ + /** Construction failed. */ static class FailConstructionException extends Exception { } @@ -496,13 +496,13 @@ public String toString() { } // /////////////////////////////////////////////////////// -// 汎用チャンク型を利用するサブチャンク型の宣言 +// Declaration of a subchunk type that uses a generic chunk type // /////////////////////////////////////////////////////// -// TWIN チャンク +// TWIN Chunk // typedef CChunkChunk CTwinChunk; // TWIN // -// // 標準チャンク -// // COMM は汎用チャンクではない +// // Normal Chunk +// // COMM is not a normal chunk // typedef CStringChunk CNameChunk; // NAME // typedef CStringChunk CComtChunk; // COMT // typedef CStringChunk CAuthChunk; // AUTH @@ -511,10 +511,10 @@ public String toString() { // typedef CIntChunk CDsizChunk; // DSIZ // typedef CChunk CExtrChunk; // EXTR // -// // 拡張チャンク・通常 +// // Extended Chunk/Normal // typedef CStringChunk CAlbmChunk; // ALBM -// // YEAR は汎用チャンクではない -// // ENCD は汎用チャンクではない +// // YEAR is not a normal chunk +// // ENCD is not a normal chunk // typedef CIntChunk CTracChunk; // TRAC // typedef CStringChunk CLyrcChunk; // LYRC // typedef CChunk CGuidChunk; // GUID @@ -531,10 +531,10 @@ public String toString() { // typedef CStringChunk CLablChunk; // LABL // typedef CStringChunk CNoteChunk; // NOTE // -// // 拡張チャンク・補助 +// // Extended Chunk/Auxiliary // typedef CChunkChunk CScndChunk; // SCND // -// // 予約チャンク +// // Reserved Chunk // typedef CChunk C_Id3Chunk; // _ID3 // typedef CChunk C_YmhChunk; // _YMH // typedef CChunk C_NttChunk; // _NTT diff --git a/src/main/java/vavi/sound/twinvq/HeaderManager.java b/src/main/java/vavi/sound/twinvq/HeaderManager.java index 7038889..e8cac40 100644 --- a/src/main/java/vavi/sound/twinvq/HeaderManager.java +++ b/src/main/java/vavi/sound/twinvq/HeaderManager.java @@ -13,49 +13,48 @@ * HeaderManager */ class HeaderManager { - /** 通常チャンクのチャンクバンク */ + /** Chunk bank of normal chunks */ private Map primaryChunkBank; - /** 補助チャンクのチャンクバンク */ + /** Auxiliary chunk chunk bank */ private Map secondaryChunkBank; - /** TWIN チャンクのID、通常のIDと違い "TWIN"+<バージョン識別子>で構成される。 */ + /** TWIN chunk ID, unlike a normal ID, consists of "TWIN" + "version identifier". */ private String chunkID; - /** チャンクバンクからIDでチャンクを引き出す */ + /** Extracts chunks from chunk bank by ID. */ static Chunk getChunk(Map chunkBank, String id) { - // チャンクのあるなしを問い合わせる。 + // Query whether chunks are present or not. if (chunkBank.containsKey(id)) { - // あれば - // そのチャンクを戻す。 + // If it exists, return that chunk. return chunkBank.get(id); } - // チャンクがなければ処理を放棄する。 + // If there are no chunks, the process is abandoned. throw new FailGetChunkException(); } /** - * チャンクを入力して、サブチャンクを拾い出しチャンクバンクに預ける - * @param chunkBank In/Out チャンクバンク - * @param inputChunk 入力チャンク - * Chunk型のチャンクからサブチャンクを取り出しチャンクバンクに登録する + * Input a chunk, pick up sub-chunks and deposit them in the chunk bank + * @param chunkBank In/Out chunk bank + * @param inputChunk input chunk + * Extract sub-chunks from Chunk-type chunks and register them in the chunk bank. */ private static void PickUpSubChunks(Map chunkBank, ChunkChunk inputChunk) { - // 準備 - // チャンク ID のサイズ(4文字) + // preparation + // chunk ID size (4 characters) final int idSize = 4; - // チャンクを解析する前にまき戻しを行う + // rewinds before parsing chunks inputChunk.rewind(); Chunk subChunk; try { - // チャンクからサブチャンクを取り出す + // extract subchunk from chunk while ((subChunk = inputChunk.GetNextChunk(idSize)) != null) { String id = subChunk.getID(); - // 取り出したサブチャンクをチャンクバンクに登録 + // register the retrieved subchunk to the chunk bank chunkBank.put(id, subChunk); } } catch (ChunkChunk.FailGetChunkException e) { @@ -65,15 +64,15 @@ private static void PickUpSubChunks(Map chunkBank, ChunkChunk inp } /** - * ヘッダマネージャの初期化をする。Create() からのみ呼ばれる。 - * 初期化する。コンストラクタの代わりに使う + * Initializes the header manager. Called only from #create(). + * Uses instead of constructor for initializing. */ void init(ChunkChunk twinChunk) { try { - // 基本チャンクを基本チャンクバンクに収める。 + // put the basic chunks into the basic chunk bank. PickUpSubChunks(primaryChunkBank, twinChunk); - // 補助チャンクがあったら補助チャンクバンクに収める。 + // if there are auxiliary chunks, put them in the auxiliary chunk bank. ChunkChunk scndChunk = (ChunkChunk) getPrimaryChunk("SCND"); PickUpSubChunks(secondaryChunkBank, scndChunk); } catch (ChunkChunk.FailGetChunkException e) { @@ -84,22 +83,22 @@ void init(ChunkChunk twinChunk) { } /** - * コンストラクタ。ユーザは呼べない。代わりに Create() を使う。 - * 初期化の際にエラーが出る可能性があるためこのような仕様にした。 + * Constructor. User cannot call. Use Create() instead. + * This specification was made because there is a possibility that an error may occur during initialization. */ private HeaderManager() { } - /** チャンクの書式が正しくない */ + /** Chunk format is incorrect */ static class WrongChunkFormatException extends RuntimeException { } - /** 通常チャンクを引き出す */ + /** Pulls out regular chunks. */ public Chunk getPrimaryChunk(String id) { return getChunk(primaryChunkBank, id); } - /** 補助チャンクを引き出す */ + /** Pulls out auxiliary chunks. */ public Chunk getSecondaryChunk(String id) { return getChunk(secondaryChunkBank, id); } @@ -110,19 +109,19 @@ public final String getID() { } /** - * ヘッダマネージャを生成する。 - * チャンクマネージャを作り出す。コンストラクタの代わり + * Generates header manager. + * Create a chunk manager. instead of constructor. * - * @return 生成したヘッダマネージャへのポインタ、生成に失敗した場合は null + * @return pointer to the generated header manager, or null if generation fails */ static HeaderManager create(ChunkChunk twinChunk) { try { - // チャンクマネージャを生成する。 + // generate a chunk manager. HeaderManager theManager = null; theManager = new HeaderManager(); theManager.init(twinChunk); - // TWINチャンクのヘッダを取得する + // get TWIN chunk header theManager.chunkID = twinChunk.getID(); if (theManager.chunkID.isEmpty()) { return null; @@ -134,16 +133,16 @@ static HeaderManager create(ChunkChunk twinChunk) { } } - /** チャンクの取得に失敗した */ + /** Failed to get chunk */ static class FailGetChunkException extends RuntimeException { } } -// ヘッダマネージャからのデータ読み出しの支援クラス +// support class for reading data from header manager /** - * Unified string information, 文字列チャンクの総合情報、 - * ヘッダマネージャから取得することができる + * Unified string information, General information about string chunks, + * can be obtained from header manager */ class UniStringInfo { public enum CharCode { @@ -160,85 +159,85 @@ public enum CharCode { } } - /** チャンク ID */ + /** chunk ID */ private String id; - /** 基本文字列 */ + /** basic string */ private String primary; - /** 補助文字列 */ + /** auxiliary string */ private String secondary; - /** 基本文字列の文字コード */ + /** basic string character code */ private int primaryCharCode; - /** 補助文字列の文字コード */ + /** character code of auxiliary string */ private int secondaryCharCode; private void putPrimaryInfo(StringChunk theChunk) { - // ID をチェック + // check ID if (id.isEmpty()) { id = theChunk.getID(); } else if (!id.equals(theChunk.getID())) { throw new IDException(); } - // データを書き込み + // write data primary = theChunk.getString(); } private void putSecondaryInfo(StringChunk theChunk) { - // ID をチェック + // check ID if (id.isEmpty()) { id = theChunk.getID(); } else if (!id.equals(theChunk.getID())) { throw new IDException(); } - // データを書き込み + // write data String secondary = theChunk.getString(); - // 文字コード情報があるかどうかチェック + // check if there is character code information if (secondary.length() < 2) { throw new NoCharCodeException(); } - // 文字コードデータ + // character code data primaryCharCode = secondary.charAt(0) - '0'; secondaryCharCode = secondary.charAt(1) - '0'; secondary = secondary.substring(2); } - /** 初期化の際、基本チャンクと補助チャンクの ID が食い違っている */ + /** During initialization, the IDs of the basic chunk and auxiliary chunk are different. */ static class IDException extends RuntimeException { } - /** 補助チャンクに文字コード情報がない */ + /** There is no character code information in the auxiliary chunk */ static class NoCharCodeException extends RuntimeException { } - /** 基本文字列を返す */ + /** Returns basic string. */ public final String getPrimaryInfo() { return primary; } - /** 補助文字列を返す */ + /** Returns auxiliary string. */ public final String getSecondaryInfo() { return secondary; } - /** 基本文字列の文字コードを返す */ + /** Returns the character code of the basic string. */ public final int getPrimaryCharCode() { return primaryCharCode; } - /** 補助文字列の文字コードを返す */ + /** Returns the character code of the auxiliary string. */ public final int getSecondaryCharCode() { return secondaryCharCode; } /** - * コンストラクタ、必要な情報を全て与える + * Constructor, give all necessary information. * * @param secondary deault = "" * @param primCode default = unknown_code @@ -252,15 +251,15 @@ public final int getSecondaryCharCode() { this.secondaryCharCode = scndCode; } - /** コンストラクタ、ヘッダマネージャから読み出す */ + /** Constructor, read from header manager. */ UniStringInfo(String id, HeaderManager theManager) { - // ID を設定する + // set ID this.id = id; primaryCharCode = -1; secondaryCharCode = -1; int flag = 0; - // 基本チャンク情報をコピーする + // copy basic chunk information try { StringChunk primChunk = new StringChunk(theManager.getPrimaryChunk(id)); putPrimaryInfo(primChunk); @@ -272,7 +271,7 @@ public final int getSecondaryCharCode() { throw new FailConstructionException(); } - // 補助チャンク情報をコピーする + // copy auxiliary chunk information try { StringChunk scndChunk = new StringChunk(theManager.getSecondaryChunk(id)); putSecondaryInfo(scndChunk); @@ -282,7 +281,7 @@ public final int getSecondaryCharCode() { } } - /** コンストラクトの失敗 */ + /** Construction failure */ static class FailConstructionException extends RuntimeException { } } diff --git a/src/main/java/vavi/sound/twinvq/TwinVQInputStream.java b/src/main/java/vavi/sound/twinvq/TwinVQInputStream.java index 0e96c7c..bcbe6ca 100644 --- a/src/main/java/vavi/sound/twinvq/TwinVQInputStream.java +++ b/src/main/java/vavi/sound/twinvq/TwinVQInputStream.java @@ -38,7 +38,7 @@ */ public class TwinVQInputStream extends FilterInputStream { - /** このクラスで取得するストリームのバイトオーダー */ + /** byte order of the stream obtained with this class */ private final ByteOrder byteOrder; /** diff --git a/src/main/java/vavi/sound/twinvq/TwinVQOutputStream.java b/src/main/java/vavi/sound/twinvq/TwinVQOutputStream.java index 77bc102..555ee95 100644 --- a/src/main/java/vavi/sound/twinvq/TwinVQOutputStream.java +++ b/src/main/java/vavi/sound/twinvq/TwinVQOutputStream.java @@ -53,7 +53,7 @@ public TwinVQOutputStream(OutputStream out, ByteOrder byteOrder) } /** - * 必ず呼んでね。 + * Be sure to call me. */ @Override public void close() throws IOException { diff --git a/src/main/java/vavi/sound/vsq/Block.java b/src/main/java/vavi/sound/vsq/Block.java index 03efb7f..1274cda 100644 --- a/src/main/java/vavi/sound/vsq/Block.java +++ b/src/main/java/vavi/sound/vsq/Block.java @@ -65,7 +65,7 @@ public static Block getBlock(String label, List params) { } /** - * {@link Block} オブジェクトのファクトリメソッド集。 + * collection of factory methods for {@link Block} objects. */ private static final Map methods = new HashMap<>(); diff --git a/src/main/java/vavi/sound/vsq/VSQ.java b/src/main/java/vavi/sound/vsq/VSQ.java index 250d22c..3b7bf10 100644 --- a/src/main/java/vavi/sound/vsq/VSQ.java +++ b/src/main/java/vavi/sound/vsq/VSQ.java @@ -183,7 +183,7 @@ private static String[] getData(Sequence sequence) throws IOException { if (message instanceof MetaMessage meta) { //Debug.println(meta.getType()); switch (meta.getType()) { - case 1: // テキスト・イベント 127 bytes + case 1: // text event 127 bytes byte[] data = meta.getData(); //Debug.println(new String(data)); if (data[0] == 'D' && data[1] == 'M') { @@ -201,7 +201,7 @@ private static String[] getData(Sequence sequence) throws IOException { Debug.println(new String(data, Charset.forName("MS932"))); } break; - case 3: // トラック名 , + case 3: // track name, String trackName = new String(meta.getData()); Debug.println("trackName[" + t + "]: " + trackName); break; diff --git a/src/samples/java/jmf/RtpReceiver.java b/src/samples/java/jmf/RtpReceiver.java index cfe14bc..2476f56 100644 --- a/src/samples/java/jmf/RtpReceiver.java +++ b/src/samples/java/jmf/RtpReceiver.java @@ -32,7 +32,7 @@ /** - * RtpReceiver RTPパケットの受信機クラス + * RtpReceiver. Receiver class for RTP packets. * * @author Naohide Sano (nsano) * @version 0.00 0510156 nsano initial version
@@ -244,7 +244,7 @@ void checkTrackFormats(Processor p) { } } - /** 現在の秒に対応するファイルを取得 {@link #interval} [mesc] おき */ + /** Get the file corresponding to the current second {@link #interval} [mesc] */ class MyUrlMaker implements UrlMaker { /** */ Calendar calendar = Calendar.getInstance(); @@ -252,7 +252,7 @@ class MyUrlMaker implements UrlMaker { MyUrlMaker() { calendar.roll(Calendar.SECOND, 10); } - /** 現在使用中の時間 */ + /** time currently in use */ int currentNo = 0; /** */ diff --git a/src/samples/java/jmf/RtpTransmitter.java b/src/samples/java/jmf/RtpTransmitter.java index 12979c1..4319d22 100644 --- a/src/samples/java/jmf/RtpTransmitter.java +++ b/src/samples/java/jmf/RtpTransmitter.java @@ -16,7 +16,7 @@ /** - * RtpTransmitter RTPパケットの送信機クラス + * RtpTransmitter RTP packet transmitter class. * * @author fukugawa */ @@ -24,22 +24,24 @@ public class RtpTransmitter { // Socket private DatagramSocket socket; - // 宛先IPアドレス + // destination IP address private String destIP; - // 宛先UDPポート番号 + // destination UDP port number private String destPort; - // 送信スレッド + // sending thread private TransmitThread transmitThread; /** - * マイクから入力された音声データを、RTPパケットに加工し、 指定したソケットを使用して、指定した宛先IPアドレス、指定した宛先UDPポート番号 - * へ送信するRTPパケット送信機を生成します ディフォルトのメディアタイプは、G.711 u-law(0)を使用します + * Generates an RTP packet transmitter that processes the audio data input from the microphone + * into RTP packets and sends them to the specified destination IP address and + * specified destination UDP port number using the specified socket. + * Default media type uses G.711 u-law(0) * - * @param socket 使用するSocket - * @param destIP 宛先IPアドレス - * @param destPort 宛先UDPポート番号 + * @param socket socket to use + * @param destIP destination IP address + * @param destPort destination UDP port number */ public RtpTransmitter(DatagramSocket socket, String destIP, String destPort) { this.socket = socket; @@ -48,8 +50,9 @@ public RtpTransmitter(DatagramSocket socket, String destIP, String destPort) { } /** - * マイクからキャプチャーを開始し、相手へRTPパケットを送信し始めます このメソッドのスレッドはブロックせずにすぐに制御を返します - * キャプチャー・送信はstop()メソッドが呼ばれると停止します + * Starts capturing from the microphone and start sending RTP packets to the other party. + * The thread in this method returns immediately without blocking. + * Capturing and sending will stop when the stop() method is called. */ public void start() { this.transmitThread = new TransmitThread(this.socket, this.destIP, this.destPort); @@ -57,14 +60,15 @@ public void start() { } /** - * マイクからのキャプチャーを停止し、相手へのRTPパケットの送信を終えます + * Stops capturing from the microphone and finishes sending RTP packets to the other party */ public void stop() { this.transmitThread.transmitStop(); } /** - * 使用するメディアタイプを変更します ※このメソッドはまだ実装されていません + * Change the media type used. + * *This method has not been implemented yet. */ public void setMediaType(int mediaType) { @@ -72,7 +76,7 @@ public void setMediaType(int mediaType) { } /** - * キャプチャー -> 送信スレッド + * Capture -> Send thread */ class TransmitThread extends Thread { @@ -84,7 +88,7 @@ class TransmitThread extends Thread { private boolean isStop; - // コンストラクタ + // constructor public TransmitThread(DatagramSocket socket, String destIP, String destPort) { this.socket = socket; this.destIP = destIP; @@ -93,7 +97,7 @@ public TransmitThread(DatagramSocket socket, String destIP, String destPort) { } - // マイクキャプチャー -> 送信 スレッド開始 + // Microphone capture -> Send Start thread public void run() { try { byte[] voicePacket = new byte[160]; @@ -110,20 +114,20 @@ public void run() { targetDataLine.start(); AudioInputStream linearStream = new AudioInputStream(targetDataLine); - // リニアPCM 16bit 8000Hz から G.711 u-lawへ変換 + // convert from linear PCM 16bit 8000Hz to G.711 u-law AudioInputStream ulawStream = AudioSystem.getAudioInputStream(ulawFormat, linearStream); while (!isStop) { try { - // G.711 u-law 20ms分を取得する + // get G.711 u-law 20ms minutes ulawStream.read(voicePacket, 0, voicePacket.length); - // RTPヘッダーを付ける + // add RTP header ByteArrayOutputStream baos = new ByteArrayOutputStream(); new RtpHeader().writeTo(baos); System.arraycopy(voicePacket, 0, baos.toByteArray(), 0, 12); System.arraycopy(voicePacket, 0, rtpPacket, 12, 160); packet = new DatagramPacket(rtpPacket, rtpPacket.length, address); - // 相手へ送信 + // send to other party this.socket.send(packet); } catch (Exception ee) { ee.printStackTrace(); @@ -136,7 +140,7 @@ public void run() { } } - // マイクキャプチャー -> 送信開始 スレッド停止 + // Microphone capture -> Start transmission Stop thread public void transmitStop() { this.isStop = true; } @@ -151,31 +155,31 @@ class RtpHeader { this.marker = -128; } - // シーケンス番号 + // sequence number private short sequenceNum; - // タイムスタンプ + // time stamp private int timeStamp; - // 同期ソースID + // sync source ID private int syncSourceId; - // マーカービット + // marker bit private byte marker; - // バージョン番号10000000 + // version number 10000000 byte version = -128; - // パディング + // padding byte padding = 0; - // 拡張ビット + // expansion bit byte extention = 0; - // コントリビュートカウント + // contribution count byte contribute = 0; - // ペイロードタイプ + // payload type byte payload = 0; void writeTo(OutputStream os) throws IOException { - // RTPヘッダ + // RTP header byte[] rtpHeader = new byte[12]; - // RTPヘッダーの生成 + // generating RTP headers rtpHeader[0] = (byte) (version | padding | extention | contribute); rtpHeader[1] = (byte) (marker | payload); rtpHeader[2] = (byte) (this.sequenceNum >> 8); @@ -189,14 +193,14 @@ void writeTo(OutputStream os) throws IOException { rtpHeader[10] = (byte) (this.syncSourceId >> 8); rtpHeader[11] = (byte) (this.syncSourceId >> 0); - // シーケンス番号、タイムスタンプ、マーカービット移行 + // sequence number, timestamp, marker bit migration this.sequenceNum++; this.timeStamp += 160; if (this.marker == -128) { this.marker = 0; } - // RTPヘッダー+音声データ = RTPパケット + // RTP header + audio data = RTP packet ByteArrayOutputStream baos = new ByteArrayOutputStream(172); baos.write(rtpHeader, 0, 12); baos.writeTo(os); diff --git a/src/test/java/ClipTest.java b/src/test/java/ClipTest.java index 02302e2..59572a5 100644 --- a/src/test/java/ClipTest.java +++ b/src/test/java/ClipTest.java @@ -9,6 +9,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.concurrent.CountDownLatch; +import java.util.logging.Level; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; @@ -75,6 +76,7 @@ public static void main(String[] args) throws Exception { System.err.println(type); } Path file = Paths.get(inFile); +Debug.println(file); // URL clipURL = new URL(inFile); // AudioInputStream originalAudioInputStream = AudioSystem.getAudioInputStream(clipURL); @@ -105,7 +107,7 @@ public static void main(String[] args) throws Exception { try { volume(clip, volume); } catch (Exception e) { - Debug.println("volume: " + e); + Debug.println(Level.WARNING, "volume: " + e); } clip.start(); if (!System.getProperty("vavi.test", "").equals("ide")) { diff --git a/src/test/java/MmlTest.java b/src/test/java/MmlTest.java index bd31fd1..fd0a136 100644 --- a/src/test/java/MmlTest.java +++ b/src/test/java/MmlTest.java @@ -55,7 +55,7 @@ private static void usage() { } /** - * 引数で与えられたMML文字列を演奏する。 + * Plays the MML string given as an argument. * * @param args [-f instr.txt] mml1.mml [mm2.mml [mm3.mml]] */ diff --git a/src/test/java/vavi/sound/sampled/resampling/SampleRateConversionProviderTest.java b/src/test/java/vavi/sound/sampled/resampling/SampleRateConversionProviderTest.java index 5eadab9..2355e4c 100644 --- a/src/test/java/vavi/sound/sampled/resampling/SampleRateConversionProviderTest.java +++ b/src/test/java/vavi/sound/sampled/resampling/SampleRateConversionProviderTest.java @@ -50,8 +50,8 @@ static void setup() throws IOException { /** *
    - *
  • → mono に tritonus_remaining_###.jar が必要 - *
  • eclipse では jar の順位がしたの方から plugin が機能している??? + *
  • → mono requires tritonus_remaining_###.jar + *
  • In eclipse, is the plugin working according to the jar ranking??? *
*/ @Test diff --git a/src/test/java/vavi/sound/vsq/Test.java b/src/test/java/vavi/sound/vsq/Test.java index f571709..412fd50 100644 --- a/src/test/java/vavi/sound/vsq/Test.java +++ b/src/test/java/vavi/sound/vsq/Test.java @@ -57,20 +57,20 @@ public static void main(String[] args) throws Exception { public void meta(MetaMessage meta) { //Debug.println(meta.getType()); switch (meta.getType()) { - case 1: // テキスト・イベント 127 bytes + case 1: // text event 127 bytes //Debug.println(new String(meta.getData())); String text = new String(meta.getData(), Charset.forName("MS932")); String[] parts = text.split(":"); Debug.println(parts[0] + ":" + parts[1] + ":" + meta.getData().length); sb.append(parts[2]); break; - case 3: // トラック名 "Master Track", "Voice1" + case 3: // track name "Master Track", "Voice1" String trackName = new String(meta.getData()); Debug.println(trackName); break; - case 81: // テンポ設定 + case 81: // tempo setting break; - case 88: // 拍子記号 + case 88: // time signature break; case 47: try { @@ -97,10 +97,10 @@ public void meta(MetaMessage meta) { case 99: // NRPN MSB Debug.println("NRPN MSB: " + event.getData2()); break; - case 6: // データエントリ MSB + case 6: // data entry MSB Debug.println("データエントリ MSB: " + event.getData2()); break; - case 38: // データエントリ LSB + case 38: // data entry LSB Debug.println("データエントリ LSB: " + event.getData2()); break; default: diff --git a/src/test/java/vavi/sound/vsq/Test2.java b/src/test/java/vavi/sound/vsq/Test2.java index f4f3ed4..16b6f55 100644 --- a/src/test/java/vavi/sound/vsq/Test2.java +++ b/src/test/java/vavi/sound/vsq/Test2.java @@ -45,11 +45,11 @@ public static void main(String[] args) throws Exception { sequencer.setSequence(sequence); sequencer.addMetaEventListener(message -> { switch (MetaEvent.valueOf(message.getType())) { - case META_MACHINE_DEPEND: // シーケンサ固有のメタイベント + case META_MACHINE_DEPEND: // sequencer-specific meta-events byte[] data = message.getData(); Debug.printf("%02X, %s\n", data[0], StringUtil.getDump(data)); break; - case META_TEXT_EVENT: // テキスト・イベント 127 bytes + case META_TEXT_EVENT: // text event 127 bytes //Debug.println(new String(meta.getData())); String text = new String(message.getData(), Charset.forName("MS932")); if (!text.startsWith("DM")) { diff --git a/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java b/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java index b5ab467..3fefb76 100644 --- a/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java +++ b/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java @@ -59,7 +59,7 @@ public static iTunes2 getInstance() { return instance; } - /** アーティスト、作品名検索 */ + /** artist/work name search */ public static class MyInput implements InputHandler { /** * @param args 0: artist, 1: title @@ -123,7 +123,7 @@ public String toString() { } } - /** 作詞、作曲詳細 (単品) */ + /** lyrics and composition details (single) */ public static class MyInput2 implements InputHandler { /** * @param args 0: url @@ -139,7 +139,7 @@ public Reader getInput(String ... args) throws IOException { } } - /** 作詞、作曲詳細 (一行) */ + /** lyrics and composition details (one line) */ @WebScraper(input = MyInput2.class, // isDebug = true, parser = HtmlXPathParser.class) @@ -157,7 +157,7 @@ public String toString() { } } - /** 作品名で検索 */ + /** search by title*/ public static class MyInput3 implements InputHandler { /** * @param args 0: title @@ -210,7 +210,7 @@ WebElement nextAnchor(List anchors) { } } - /** 作品名指定の作品 (複数) */ + /** works with specified work name (multiple) */ @WebScraper(input = MyInput3.class, // isDebug = true, parser = HtmlXPathParser.class) @@ -230,7 +230,7 @@ public String toString() { } } - /** アーティストで検索 */ + /** search by artist*/ public static class MyInput4 implements InputHandler { /** * @param args 0: artist @@ -280,7 +280,7 @@ WebElement nextAnchor(List anchors) { } } - /** アーティスト指定の作品 (複数) */ + /** works specified by the artist (multiple) */ @WebScraper(input = MyInput4.class, // isDebug = true, parser = HtmlXPathParser.class) @@ -300,7 +300,7 @@ public String toString() { } } - /** アーティスト名で近い順 */ + /** Sort by artist name */ static class MyComparator3 implements Comparator { String artist; MyComparator3(String artist) { @@ -312,7 +312,7 @@ static class MyComparator3 implements Comparator { } } - /** 作品名で近い順 */ + /** Sort by title of work */ static class MyComparator4 implements Comparator { String name; MyComparator4(String name) { @@ -338,7 +338,7 @@ private static String capitalize(String s) { private static String normalizeComposer(String name) { Matcher matcher = normalizeComposerPattern.matcher(name); if (!matcher.matches()) { - return name; // 国内 + return name; // domestic (Japan) } name = name.replace("ー", "-"); StringBuilder result = new StringBuilder(); From 8f4621940f2bf97c603109c36a0beb7f1d9ef923 Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Thu, 4 Apr 2024 09:11:51 +0900 Subject: [PATCH 06/14] make tests more effective --- local.properties.sample | 5 +- pom.xml | 81 ++++++++++++++++++- src/test/java/IntegrationTest.java | 39 +++++++++ src/test/java/LineTest2.java | 50 +++++++----- src/test/java/LineTest3.java | 18 +++++ src/test/java/MidiTest.java | 5 +- .../sampled/opl3/Opl3AudioFileReaderTest.java | 5 +- .../OpusFormatConversionProviderTest.java | 16 ++-- .../RococoaFormatConversionProviderTest.java | 11 +-- .../resources/VaviInstrumentation.properties | 6 ++ src/test/resources/logging.properties | 3 +- 11 files changed, 200 insertions(+), 39 deletions(-) create mode 100644 src/test/java/IntegrationTest.java create mode 100644 src/test/resources/VaviInstrumentation.properties diff --git a/local.properties.sample b/local.properties.sample index bebdaf4..c75f5c3 100644 --- a/local.properties.sample +++ b/local.properties.sample @@ -1,4 +1,7 @@ opl3.test=/foo/bar/opl3.mid mocha.test=/foo/bar/mocha.mid jsyn.test=/foo/bar/jsyn.mid -clip.test=/foo/bar/jsyn.m4a \ No newline at end of file +clip.test=/foo/bar/jsyn.m4a + +vavi.test.volume=0.02 +vavi.test.volume.midi=0.2 diff --git a/pom.xml b/pom.xml index d972a55..dbc9c54 100644 --- a/pom.xml +++ b/pom.xml @@ -26,8 +26,45 @@ com.github.umjammer.rococoa 0.8.7 VERBOSE + 0.02 + 0.2 + false + + + local + + + ${basedir}/local.properties + + + + + + org.codehaus.mojo + properties-maven-plugin + 1.1.0 + + + read-properties + initialize + + read-project-properties + + + + ${basedir}/local.properties + + + + + + + + + + @@ -54,14 +91,47 @@ -Xmx4G - -Djava.util.logging.config.file=${project.build.testOutputDirectory}/logging.properties - -Dvavi.test.volume=0.02 --add-exports java.desktop/com.sun.media.sound=ALL-UNNAMED + -javaagent:${project.build.directory}/vavi-instrumentation.jar + -Dvavix.lang.instrumentation.VaviInstrumentation.1=vavix.lang.instrumentation.PropertiesClassFileTransformer + -Djava.util.logging.config.file=${project.build.testOutputDirectory}/logging.properties + -Dvavi.test.volume=${vavi.test.volume} + -Dvavi.test.volume.midi=${vavi.test.volume.midi} + -Dvavi.test.version=${project.version} false false + + + org.apache.maven.plugins + maven-antrun-plugin + 3.1.0 + + + IntegrationTest + + run + + integration-test + + ${maven.test.skip} + + + + + + + + + + + true + + + + @@ -303,5 +373,12 @@ 0.3.4 test + + + com.github.umjammer.vavi-commons + vavi-instrumentation + 1.1.12 + test + diff --git a/src/test/java/IntegrationTest.java b/src/test/java/IntegrationTest.java new file mode 100644 index 0000000..64c54de --- /dev/null +++ b/src/test/java/IntegrationTest.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024 by Naohide Sano, All rights reserved. + * + * Programmed by Naohide Sano + */ + +import javax.sound.midi.MidiDevice; +import javax.sound.midi.MidiSystem; + + +/** + * IntegrationTest. + * + * @author Naohide Sano (nsano) + * @version 0.00 2024-03-02 nsano initial version
+ */ +public class IntegrationTest { + + /** + * @param args none + */ + public static void main(String[] args) throws Exception { + MidiDevice device = null; + MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo(); + + for (int i = 0; i < infos.length; i++) { + device = MidiSystem.getMidiDevice(infos[i]); +System.err.println("---- [" + i + "] " + infos[i] +" (" + device.getClass().getName() + ")" + " ----"); +System.err.println("name : " + infos[i].getName()); +System.err.println("vendor : " + infos[i].getVendor()); +System.err.println("descriptor: " + infos[i].getDescription()); +System.err.println("version : " + infos[i].getVersion()); + } + } + + // for javaassist test + java.util.List $_; + void x() { java.util.List r = new java.util.ArrayList(); for (int i = 0; i < $_.size(); i++) { if (!$_.get(i).getClass().getName().contains("SoftMidiAudio")) { r.add($_.get(i)); }} $_ = r; } +} diff --git a/src/test/java/LineTest2.java b/src/test/java/LineTest2.java index f36ed9e..5afd061 100644 --- a/src/test/java/LineTest2.java +++ b/src/test/java/LineTest2.java @@ -22,8 +22,10 @@ import javax.sound.sampled.UnsupportedAudioFileException; import javax.sound.sampled.spi.AudioFileReader; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIf; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -32,6 +34,8 @@ import static vavi.sound.SoundUtil.volume; import javazoom.spi.mpeg.sampled.file.MpegAudioFileReader; +import vavi.util.properties.annotation.Property; +import vavi.util.properties.annotation.PropsEntity; /** @@ -40,8 +44,15 @@ * @author Naohide Sano (umjammer) * @version 0.00 2012/06/11 umjammer initial version
*/ + +@EnabledIf("localPropertiesExists") +@PropsEntity(url = "file:local.properties") class LineTest2 { + static boolean localPropertiesExists() { + return Files.exists(Paths.get("local.properties")); + } + static { System.setProperty("vavi.util.logging.VaviFormatter.extraClassMethod", "vavi\\.sound\\.DebugInputStream#\\w+"); @@ -49,23 +60,29 @@ class LineTest2 { static double volume = Double.parseDouble(System.getProperty("vavi.test.volume", "0.2")); - // static final String inFile = "/Users/nsano/Music/0/Mists of Time - 4T.ogg"; -// static final String inFile = "/Users/nsano/Music/0/11 - Blockade.flac"; -// static final String inFile = "/Users/nsano/Music/0/11 - Blockade.m4a"; // ALAC -// static final String inFile = "/Users/nsano/Music/0/rc.wav"; -// static final String inFile = "/Users/nsano/Music/0/Cyndi Lauper-Time After Time.m4a"; // AAC - static final String inFile = "tmp/hoshi.opus"; -// static final String inFile = "/Users/nsano/Music/iTunes/iTunes Music/NAMCO/Ace Combat 04 Shattered Skies Original Sound Tracks/1-11 Blockade.mp3"; + @Property(name = "line2.test") + String inFile = "src/test/resources/test.caf"; + + @BeforeEach + void setup() throws Exception { + if (localPropertiesExists()) { + PropsEntity.Util.bind(this); + } + } /** * @param args */ public static void main(String[] args) throws Exception { + LineTest2 app = new LineTest2(); + if (localPropertiesExists()) { + PropsEntity.Util.bind(app); + } + for (AudioFileFormat.Type type : AudioSystem.getAudioFileTypes()) { System.err.println(type); } - AudioInputStream originalAudioInputStream = AudioSystem.getAudioInputStream(new File(inFile).toURI().toURL()); - LineTest2 app = new LineTest2(); + AudioInputStream originalAudioInputStream = AudioSystem.getAudioInputStream(new File(app.inFile).toURI().toURL()); LineTest2.play(originalAudioInputStream); } @@ -73,7 +90,7 @@ public static void main(String[] args) throws Exception { static void play(AudioInputStream originalAudioInputStream) throws Exception { AudioFormat originalAudioFormat = originalAudioInputStream.getFormat(); Debug.println(originalAudioFormat); - AudioFormat targetAudioFormat = new AudioFormat( //PCM + AudioFormat targetAudioFormat = new AudioFormat( // PCM originalAudioFormat.getSampleRate(), 16, originalAudioFormat.getChannels(), @@ -85,14 +102,7 @@ static void play(AudioInputStream originalAudioInputStream) throws Exception { DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat, AudioSystem.NOT_SPECIFIED); SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info); Debug.println(line.getClass().getName()); - line.addLineListener(event -> { - if (event.getType().equals(LineEvent.Type.START)) { -Debug.println("play"); - } - if (event.getType().equals(LineEvent.Type.STOP)) { -Debug.println("done"); - } - }); + line.addLineListener(event -> Debug.println(event.getType())); line.open(audioFormat); byte[] buf = new byte[line.getBufferSize()]; @@ -130,7 +140,7 @@ void test(String file) throws Exception { play(audioInputStream); } catch (Throwable t) { Debug.println("file: " + file); - t.printStackTrace(); + Debug.printStackTrace(t); throw t; } } @@ -143,7 +153,7 @@ static AudioInputStream dummy(InputStream stream) throws UnsupportedAudioFileExc for (Object provider : providers) { AudioFileReader reader = (AudioFileReader) provider; - Debug.println("--------- " + reader.getClass().getName()); +Debug.println("--------- " + reader.getClass().getName()); try { audioStream = reader.getAudioInputStream(stream); // throws IOException break; diff --git a/src/test/java/LineTest3.java b/src/test/java/LineTest3.java index dcb0608..98367bf 100644 --- a/src/test/java/LineTest3.java +++ b/src/test/java/LineTest3.java @@ -7,9 +7,19 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Arrays; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.DataLine; +import javax.sound.sampled.Line; +import javax.sound.sampled.TargetDataLine; + +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import static javax.sound.sampled.AudioSystem.NOT_SPECIFIED; + /** * LineTest3. @@ -20,9 +30,17 @@ public class LineTest3 { @Test + @Disabled("+8 doesn't work?") void test() throws Exception { final String PROPERTIES_FILENAME = "sound.properties"; Path path = Paths.get(System.getProperty("java.home"), "lib", PROPERTIES_FILENAME); Files.readAllLines(path).forEach(System.err::println); } + + @Test + void test2() throws Exception { + AudioFormat targetFormat = new AudioFormat(NOT_SPECIFIED, NOT_SPECIFIED, NOT_SPECIFIED, true, true); + Line.Info targetInfo = new DataLine.Info(TargetDataLine.class, targetFormat); + Arrays.stream(AudioSystem.getTargetLineInfo(targetInfo)).forEach(System.err::println); + } } diff --git a/src/test/java/MidiTest.java b/src/test/java/MidiTest.java index ed85590..9723046 100644 --- a/src/test/java/MidiTest.java +++ b/src/test/java/MidiTest.java @@ -27,6 +27,8 @@ import vavi.util.properties.annotation.Property; import vavi.util.properties.annotation.PropsEntity; +import static vavi.sound.midi.MidiUtil.volume; + /** * MIDI test. (vavi-sound-sandbox) @@ -56,7 +58,7 @@ static boolean localPropertiesExists() { static final float volume = Float.parseFloat(System.getProperty("vavi.test.volume", "0.2")); - @Property(name = "sf2") + @Property(name = "midi.test") String filename; @Property(name = "sf2") @@ -235,6 +237,7 @@ void t3() throws Exception { sequencer.getTransmitter().setReceiver(receiver); sequencer.open(); Debug.println("sequencer: " + sequencer); + volume(receiver, volume); File file = new File(filename); Sequence seq = MidiSystem.getSequence(file); diff --git a/src/test/java/vavi/sound/sampled/opl3/Opl3AudioFileReaderTest.java b/src/test/java/vavi/sound/sampled/opl3/Opl3AudioFileReaderTest.java index d5d599f..c75e860 100644 --- a/src/test/java/vavi/sound/sampled/opl3/Opl3AudioFileReaderTest.java +++ b/src/test/java/vavi/sound/sampled/opl3/Opl3AudioFileReaderTest.java @@ -76,9 +76,10 @@ void test0(String filename) throws Exception { } }); clip.open(audioInputStream); -if (!(originalAudioFormat.getEncoding() instanceof Opl3Encoding)) { -// Debug.println("down volume: " + originalAudioFormat.getEncoding()); +try { volume(clip, volume); +} catch (Exception e) { + Debug.println("volume: " + e); } clip.start(); if (!System.getProperty("vavi.test", "").equals("ide")) { diff --git a/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java b/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java index f7b9556..c664627 100644 --- a/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java +++ b/src/test/java/vavi/sound/sampled/opus/OpusFormatConversionProviderTest.java @@ -8,12 +8,12 @@ import java.io.BufferedInputStream; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; - import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; @@ -23,14 +23,13 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; - -import vavi.sound.sampled.adpcm.ms.MsEncoding; import vavi.util.Debug; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static vavi.sound.SoundUtil.volume; +import static vavi.sound.sampled.opus.OpusEncoding.OPUS; /** @@ -132,7 +131,7 @@ void test1() throws Exception { void test2() throws Exception { URL url = Paths.get("src/test/resources/" + inFile).toUri().toURL(); AudioInputStream ais = AudioSystem.getAudioInputStream(url); - assertEquals(MsEncoding.MS, ais.getFormat().getEncoding()); + assertEquals(OPUS, ais.getFormat().getEncoding()); } @Test @@ -140,19 +139,22 @@ void test2() throws Exception { void test3() throws Exception { File file = Paths.get("src/test/resources/" + inFile).toFile(); AudioInputStream ais = AudioSystem.getAudioInputStream(file); - assertEquals(MsEncoding.MS, ais.getFormat().getEncoding()); + assertEquals(OPUS, ais.getFormat().getEncoding()); } + // com.sun.media.sound.SoftMidiAudioFileReader consumes 4byte unexpectedly. + // so it's excluded when test. see -agent jvm option at maven-surefire-plugin @Test @DisplayName("when unsupported file coming") void test5() throws Exception { InputStream is = OpusFormatConversionProviderTest.class.getResourceAsStream("/test.caf"); int available = is.available(); +Debug.println("1: " + is.available()); UnsupportedAudioFileException e = assertThrows(UnsupportedAudioFileException.class, () -> { -Debug.println(is); +Debug.println("2: " + is.available()); AudioSystem.getAudioInputStream(is); }); -Debug.println(e.getMessage()); +Debug.println("3: " + is.available()); assertEquals(available, is.available()); // spi must not consume input stream even one byte } } diff --git a/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java b/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java index c220f3e..f6ab749 100644 --- a/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java +++ b/src/test/java/vavi/sound/sampled/rococoa/RococoaFormatConversionProviderTest.java @@ -32,6 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static vavi.sound.SoundUtil.volume; +import static vavi.sound.sampled.rococoa.RcococaEncoding.ROCOCOA; /** @@ -41,6 +42,7 @@ * @version 0.00 060726 nsano initial version
* @see "https://github.com/iterate-ch/rococoa" */ +@Disabled("not implemented yet") @EnabledOnOs(OS.MAC) public class RococoaFormatConversionProviderTest { @@ -49,7 +51,6 @@ public class RococoaFormatConversionProviderTest { static double volume = Double.parseDouble(System.getProperty("vavi.test.volume", "0.2")); @Test - @Disabled("not implemented yet") @DisplayName("directly") public void test0() throws Exception { @@ -92,7 +93,6 @@ public void test0() throws Exception { } @Test - @Disabled("not implemented yet") @DisplayName("by spi") public void test1() throws Exception { @@ -135,7 +135,6 @@ public void test1() throws Exception { } @Test - @Disabled("not completed yet") public void test4() throws Exception { for (AudioFileFormat.Type type : AudioSystem.getAudioFileTypes()) { System.err.println(type); @@ -150,7 +149,7 @@ public void test4() throws Exception { void test2() throws Exception { URL url = Paths.get("src/test/resources/" + inFile).toUri().toURL(); AudioInputStream ais = AudioSystem.getAudioInputStream(url); - assertEquals(MsEncoding.MS, ais.getFormat().getEncoding()); + assertEquals(ROCOCOA, ais.getFormat().getEncoding()); } @Test @@ -158,9 +157,11 @@ void test2() throws Exception { void test3() throws Exception { File file = Paths.get("src/test/resources/" + inFile).toFile(); AudioInputStream ais = AudioSystem.getAudioInputStream(file); - assertEquals(MsEncoding.MS, ais.getFormat().getEncoding()); + assertEquals(ROCOCOA, ais.getFormat().getEncoding()); } + // com.sun.media.sound.SoftMidiAudioFileReader consumes 4byte unexpectedly. + // so it's excluded when test. see -agent jvm option at maven-surefire-plugin @Test @DisplayName("when unsupported file coming") void test5() throws Exception { diff --git a/src/test/resources/VaviInstrumentation.properties b/src/test/resources/VaviInstrumentation.properties new file mode 100644 index 0000000..c654043 --- /dev/null +++ b/src/test/resources/VaviInstrumentation.properties @@ -0,0 +1,6 @@ +# +# `com.sun.media.sound.SoftMidiAudioFileReader` has a bug that consume 4 bytes and not release (reset) those after examination +# +vavix.lang.instrumentation.PropertiesClassFileTransformer.1.class=javax/sound/sampled/AudioSystem +vavix.lang.instrumentation.PropertiesClassFileTransformer.1.method=getAudioFileReaders +vavix.lang.instrumentation.PropertiesClassFileTransformer.1.insertAfter={ java.util.List r = new java.util.ArrayList(); for (int i = 0; i < $_.size(); i++) { if (!$_.get(i).getClass().getName().contains("SoftMidiAudio")) { r.add($_.get(i)); }} $_ = r; } \ No newline at end of file diff --git a/src/test/resources/logging.properties b/src/test/resources/logging.properties index 6f2bd44..bcd9bc8 100644 --- a/src/test/resources/logging.properties +++ b/src/test/resources/logging.properties @@ -6,4 +6,5 @@ java.util.logging.ConsoleHandler.formatter=vavi.util.logging.VaviFormatter #org.uva.emulation.level=WARNING #org.rococoa.level=INFO org.rococoa.foundation.level=OFF -vavi.util.level=FINE +vavi.util.level=FINER +#org.tritonus.TraceAudioFileReader.level=INFO From cf2f9b49dbd4f4a998700dd1ee081567450234de Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Thu, 4 Apr 2024 09:12:06 +0900 Subject: [PATCH 07/14] make it more reliable --- src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java b/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java index 7a2975a..d3b209c 100644 --- a/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java +++ b/src/main/java/vavi/sound/sampled/opus/OpusAudioFileReader.java @@ -79,7 +79,7 @@ protected AudioFileFormat getAudioFileFormat(InputStream bitStream, int mediaLen dis.readFully(b); if (b[0] != 'O' || b[1] != 'g' || b[2] != 'g' || b[3] != 'S' || b[28] != 'O' || b[29] != 'p' || b[30] != 'u' || b[31] != 's') { // TODO 28 ~ fixed??? - throw new UnsupportedAudioFileException("not ogg/opus"); + throw new IllegalArgumentException("not ogg/opus"); } bitStream.reset(); opus = new OpusFile(new OggFile(bitStream)); From 193b214444bd9d3c644957a22a8050446a112717 Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Thu, 4 Apr 2024 09:12:55 +0900 Subject: [PATCH 08/14] [rococoa] avspeechsynthesizer try obj-c block --- .../avfoundation/AVSpeechSynthesizer.java | 9 ++++- .../rococoa/avfoundation/SpeechTest.java | 33 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/main/java/vavix/rococoa/avfoundation/AVSpeechSynthesizer.java b/src/main/java/vavix/rococoa/avfoundation/AVSpeechSynthesizer.java index 15238e0..36ca1d8 100644 --- a/src/main/java/vavix/rococoa/avfoundation/AVSpeechSynthesizer.java +++ b/src/main/java/vavix/rococoa/avfoundation/AVSpeechSynthesizer.java @@ -6,7 +6,10 @@ package vavix.rococoa.avfoundation; +import com.sun.jna.Pointer; import org.rococoa.ID; +import org.rococoa.ObjCBlock; +import org.rococoa.ObjCBlocks.BlockLiteral; import org.rococoa.ObjCClass; import org.rococoa.ObjCObject; import org.rococoa.Rococoa; @@ -82,5 +85,9 @@ public synchronized void setDelegate(AVSpeechSynthesizerDelegate delegate) { setDelegate(delegateProxy.id()); } - public abstract void writeUtterance_toBufferCallback(AVSpeechUtterance utterance, ID bufferCallback); + public interface AVSpeechSynthesizerBufferCallback extends ObjCBlock { + void apply(BlockLiteral literal, ID /* AVAudioBuffer */ buffer); + } + + public abstract void writeUtterance_toBufferCallback(AVSpeechUtterance utterance, BlockLiteral /* ^AVSpeechSynthesizerBufferCallback */ bufferCallback); } \ No newline at end of file diff --git a/src/test/java/vavix/rococoa/avfoundation/SpeechTest.java b/src/test/java/vavix/rococoa/avfoundation/SpeechTest.java index 67da291..a0993a4 100644 --- a/src/test/java/vavix/rococoa/avfoundation/SpeechTest.java +++ b/src/test/java/vavix/rococoa/avfoundation/SpeechTest.java @@ -8,9 +8,13 @@ import java.util.concurrent.CountDownLatch; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIfSystemProperty; import vavi.util.Debug; +import vavix.rococoa.avfoundation.AVSpeechSynthesizer.AVSpeechSynthesizerBufferCallback; + +import static org.rococoa.ObjCBlocks.block; /** @@ -50,4 +54,33 @@ void test1() throws Exception { cdl.await(); } + + @Test + @Disabled("crash") + @DisabledIfSystemProperty(named = "os.arch", matches = "x86_64") + void test2() throws Exception { + CountDownLatch cdl = new CountDownLatch(1); + + AVSpeechSynthesizer synthesizer = AVSpeechSynthesizer.newInstance(); + synthesizer.setDelegate(new AVSpeechSynthesizer.AVSpeechSynthesizerAdapter() { + @Override public void speechSynthesizer_didFinishSpeechUtterance(AVSpeechSynthesizer sender, AVSpeechUtterance utterance) { + cdl.countDown(); + } + }); + + AVSpeechSynthesisVoice voice = AVSpeechSynthesisVoice.withLanguage("en-US"); +Debug.println("voice: " + voice); + + AVSpeechUtterance utterance = AVSpeechUtterance.of("she sells seashells by the seashore"); + utterance.setVoice(voice); + utterance.setVolume(.2f); + utterance.setRate(.5f); + utterance.setPitchMultiplier(1.0f); + + synthesizer.writeUtterance_toBufferCallback(utterance, block((AVSpeechSynthesizerBufferCallback)((literal, buffer) -> { +// Debug.println("here!"); + }))); + + cdl.await(); + } } From da953f9fe67925c6ff1c9dd4918949502dac6a40 Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Thu, 4 Apr 2024 18:23:26 +0900 Subject: [PATCH 09/14] anti i18n clean up --- .../kt/kemusiro/sound/ClipSoundPlayer.java | 4 +- .../or/rim/kt/kemusiro/sound/SoundPlayer.java | 2 + src/main/java/unknown/sound/MTMWindow.java | 74 ++++++++++--------- .../sound/converter/MIDIToMLDInputStream.java | 9 +-- .../MIDITrackChunkToMLDTrackChunk.java | 2 +- src/samples/java/jse/DumpReceiver.java | 10 +-- src/test/java/vavi/sound/vsq/Test.java | 4 +- .../vavix/rococoa/ituneslibrary/iTunes2.java | 4 +- 8 files changed, 55 insertions(+), 54 deletions(-) diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/ClipSoundPlayer.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/ClipSoundPlayer.java index e33a991..6b5b563 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/ClipSoundPlayer.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/ClipSoundPlayer.java @@ -10,6 +10,8 @@ import javax.sound.sampled.DataLine; import javax.sound.sampled.LineUnavailableException; +import vavi.util.Debug; + /** * Play with the already created byte array. @@ -36,7 +38,7 @@ public ClipSoundPlayer(int rate, int depth, byte[] array) { line = (Clip) AudioSystem.getLine(info); line.open(format, array, 0, array.length); } catch (LineUnavailableException e) { - e.printStackTrace(); + Debug.printStackTrace(e); } } diff --git a/src/main/java/jp/or/rim/kt/kemusiro/sound/SoundPlayer.java b/src/main/java/jp/or/rim/kt/kemusiro/sound/SoundPlayer.java index ad9d62c..069e19f 100644 --- a/src/main/java/jp/or/rim/kt/kemusiro/sound/SoundPlayer.java +++ b/src/main/java/jp/or/rim/kt/kemusiro/sound/SoundPlayer.java @@ -8,6 +8,7 @@ import javax.sound.sampled.DataLine; import vavi.sound.SoundUtil; +import vavi.util.Debug; /** @@ -75,6 +76,7 @@ public void close() { /** Changes volume */ public void volume(float gain) { +Debug.println("volume: " + gain + ", " + getClass()); // works, but not so different SoundUtil.volume(getLine(), gain); } } diff --git a/src/main/java/unknown/sound/MTMWindow.java b/src/main/java/unknown/sound/MTMWindow.java index f423f4b..42a00f5 100644 --- a/src/main/java/unknown/sound/MTMWindow.java +++ b/src/main/java/unknown/sound/MTMWindow.java @@ -31,9 +31,11 @@ import java.io.IOException; import java.nio.file.Files; import java.util.Calendar; + import unknown.sound.converter.MIDIToMLDInputStream; import unknown.sound.converter.Preferences; import unknown.sound.midi.MIDIInputStream; +import vavi.util.Debug; public class MTMWindow extends Frame { @@ -115,7 +117,7 @@ class MTMFileButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent actionevent) { FileDialog filedialog = new FileDialog(MTMWindow.this, - "MIDIファイルを選択してください", 0); + "Select MIDI file", 0); if (midiFile == null) { filedialog.setDirectory(System.getProperty("user.dir")); } else { @@ -318,11 +320,11 @@ public void actionPerformed(ActionEvent actionevent) { do { fos.write(m2mis.readMessageAsBytes()); } while (true); - } catch (EOFException _ex) { + } catch (EOFException ignore) { } fos.close(); } catch (IOException _ex) { - System.out.println("IOExceptionが発生"); + Debug.printStackTrace(_ex); } } } @@ -414,34 +416,34 @@ public void windowClosing(WindowEvent windowevent) { } }); bar = new MenuBar(); - fileMenu = new Menu("ファイル"); - file_Open = new MenuItem("MIDIファイルを選択..."); + fileMenu = new Menu("File"); + file_Open = new MenuItem("Select MIDI File..."); file_Open.addActionListener(new MTMFileButtonListener()); fileMenu.add(file_Open); - file_Exchange = new MenuItem("MLDファイルに変換"); + file_Exchange = new MenuItem("Convert to MLD file"); file_Exchange.setEnabled(false); file_Exchange.addActionListener(new MTMMLDButtonListener()); fileMenu.add(file_Exchange); - file_Pref_Open = new MenuItem("詳細設定を表示"); + file_Pref_Open = new MenuItem("Show details"); file_Pref_Open.addActionListener(actionevent -> { setSize(510, 470); fileMenu.remove(file_Pref_Open); fileMenu.insert(file_Pref_Close, 3); }); fileMenu.add(file_Pref_Open); - file_Pref_Close = new MenuItem("詳細設定を隠す"); + file_Pref_Close = new MenuItem("Hide deteails"); file_Pref_Close.addActionListener(actionevent -> { setSize(270, 470); fileMenu.remove(file_Pref_Close); fileMenu.insert(file_Pref_Open, 3); }); fileMenu.addSeparator(); - file_Quit = new MenuItem("終了"); + file_Quit = new MenuItem("Quit"); fileMenu.add(file_Quit); bar.add(fileMenu); setSize(510, 470); setResizable(false); - titleCheckbox = new Checkbox("曲にタイトルを入れる", true); + titleCheckbox = new Checkbox("Add a title to the song", true); titleCheckbox.setBounds(35, 20, 120, 20); titleCheckbox.addItemListener(itemevent -> { boolean flag; @@ -464,7 +466,7 @@ public void windowClosing(WindowEvent windowevent) { }); add(titleCheckbox); titleGroup = new CheckboxGroup(); - titleFileCheckbox = new Checkbox("ファイル名をタイトルにする", true, titleGroup); + titleFileCheckbox = new Checkbox("Let filename title", true, titleGroup); titleFileCheckbox.setBounds(55, 40, 150, 20); titleFileCheckbox.addItemListener(itemevent -> { if (titleFileCheckbox.getState()) { @@ -492,7 +494,7 @@ public void windowClosing(WindowEvent windowevent) { } }); add(titleUserCheckbox); - titleUserText = new TextField("曲名を入力してください"); + titleUserText = new TextField("Enter the song name"); titleUserText.setBounds(75, 60, 150, 20); titleUserText.setEnabled(false); titleUserText.setEditable(false); @@ -500,21 +502,21 @@ public void windowClosing(WindowEvent windowevent) { add(titleUserText); MTMVolumeListener mtmvolumelistener = new MTMVolumeListener(); - volumeCheckbox = new Checkbox("音量を設定する", true); + volumeCheckbox = new Checkbox("Set the volume", true); volumeCheckbox.setBounds(35, 100, 90, 20); volumeCheckbox.addItemListener(mtmvolumelistener); add(volumeCheckbox); volumeGroup = new CheckboxGroup(); - volumeVelocityCheckbox = new Checkbox("音量にベロシティを利用する", false, + volumeVelocityCheckbox = new Checkbox("Use velocity for volume", false, volumeGroup); volumeVelocityCheckbox.setBounds(55, 120, 150, 20); volumeVelocityCheckbox.addItemListener(mtmvolumelistener); add(volumeVelocityCheckbox); - volumeConstCheckbox = new Checkbox("固定値を利用する(0-63)", true, volumeGroup); + volumeConstCheckbox = new Checkbox("Use fixed values (0-63)", true, volumeGroup); volumeConstCheckbox.setBounds(55, 140, 140, 20); volumeConstCheckbox.addItemListener(mtmvolumelistener); add(volumeConstCheckbox); - volumeCh1Checkbox = new Checkbox("チャンネル1", true); + volumeCh1Checkbox = new Checkbox("channel 1", true); volumeCh1Checkbox.setBounds(75, 160, 80, 20); volumeCh1Checkbox.addItemListener(mtmvolumelistener); add(volumeCh1Checkbox); @@ -522,7 +524,7 @@ public void windowClosing(WindowEvent windowevent) { volumeCh1Text.setBounds(155, 160, 40, 20); volumeCh1Text.addTextListener(mtmvolumelistener); add(volumeCh1Text); - volumeCh2Checkbox = new Checkbox("チャンネル2", true); + volumeCh2Checkbox = new Checkbox("channel 2", true); volumeCh2Checkbox.setBounds(75, 180, 80, 20); volumeCh2Checkbox.addItemListener(mtmvolumelistener); add(volumeCh2Checkbox); @@ -530,7 +532,7 @@ public void windowClosing(WindowEvent windowevent) { volumeCh2Text.setBounds(155, 180, 40, 20); volumeCh2Text.addTextListener(mtmvolumelistener); add(volumeCh2Text); - volumeCh3Checkbox = new Checkbox("チャンネル3", true); + volumeCh3Checkbox = new Checkbox("channel 3", true); volumeCh3Checkbox.setBounds(75, 200, 80, 20); volumeCh3Checkbox.addItemListener(mtmvolumelistener); add(volumeCh3Checkbox); @@ -538,7 +540,7 @@ public void windowClosing(WindowEvent windowevent) { volumeCh3Text.setBounds(155, 200, 40, 20); volumeCh3Text.addTextListener(mtmvolumelistener); add(volumeCh3Text); - volumeCh4Checkbox = new Checkbox("チャンネル4", true); + volumeCh4Checkbox = new Checkbox("channel 4", true); volumeCh4Checkbox.setBounds(75, 220, 80, 20); volumeCh4Checkbox.addItemListener(mtmvolumelistener); add(volumeCh4Checkbox); @@ -546,7 +548,7 @@ public void windowClosing(WindowEvent windowevent) { volumeCh4Text.setBounds(155, 220, 40, 20); volumeCh4Text.addTextListener(mtmvolumelistener); add(volumeCh4Text); - fileLabel = new Label("MIDIファイル"); + fileLabel = new Label("MIDI file"); fileLabel.setBounds(35, 330, 70, 20); add(fileLabel); filePathText = new TextArea("", 20, 2, 1); @@ -554,22 +556,22 @@ public void windowClosing(WindowEvent windowevent) { filePathText.setEditable(false); filePathText.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); add(filePathText); - fileButton = new Button("選択"); + fileButton = new Button("Select"); fileButton.setBounds(35, 350, 40, 20); fileButton.addActionListener(new MTMFileButtonListener()); add(fileButton); - fileCheckbox = new Checkbox("ディレクトリを選択する", false); + fileCheckbox = new Checkbox("Select directory", false); fileCheckbox.setBounds(95, 350, 130, 20); add(fileCheckbox); - mldButton = new Button("MLDファイルを作成する"); + mldButton = new Button("Create MLD file"); mldButton.setBounds(55, 440, 160, 20); mldButton.setEnabled(false); mldButton.addActionListener(new MTMMLDButtonListener()); add(mldButton); - prefLabel = new Label("詳細設定"); + prefLabel = new Label("Set details"); prefLabel.setBounds(280, 20, 40, 20); add(prefLabel); - resolutionLabel = new Label("4分音符の分解能"); + resolutionLabel = new Label("Quarter note resolution"); resolutionLabel.setBounds(35, 270, 80, 20); add(resolutionLabel); resolutionChoice = new Choice(); @@ -585,17 +587,17 @@ public void windowClosing(WindowEvent windowevent) { resolutionChoice.add("1536"); resolutionChoice.select("48"); add(resolutionChoice); - dateCheckbox = new Checkbox("作成日", false); + dateCheckbox = new Checkbox("Created date", false); dateCheckbox.setBounds(300, 40, 50, 20); dateCheckbox.addItemListener(new MTMDateListener()); add(dateCheckbox); dateGroup = new CheckboxGroup(); - dateTodayCheckbox = new Checkbox("今日の日付", true, dateGroup); + dateTodayCheckbox = new Checkbox("Today's date", true, dateGroup); dateTodayCheckbox.setBounds(320, 60, 70, 20); dateTodayCheckbox.setEnabled(false); dateTodayCheckbox.addItemListener(new MTMDateListener()); add(dateTodayCheckbox); - dateFileCheckbox = new Checkbox("ファイルの修正日", false, dateGroup); + dateFileCheckbox = new Checkbox("File modification date", false, dateGroup); dateFileCheckbox.setBounds(320, 80, 100, 20); dateFileCheckbox.setEnabled(false); dateFileCheckbox.addItemListener(new MTMDateListener()); @@ -610,16 +612,16 @@ public void windowClosing(WindowEvent windowevent) { dateUserText.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); dateUserText.setEnabled(false); add(dateUserText); - rightCheckbox = new Checkbox("著作権の有無", true); + rightCheckbox = new Checkbox("Copyright status", true); rightCheckbox.setBounds(300, 140, 80, 20); rightCheckbox.addItemListener(new MTMRightListener()); add(rightCheckbox); rightGroup = new CheckboxGroup(); - rightNoneCheckbox = new Checkbox("著作権なし ( 00 )", true, rightGroup); + rightNoneCheckbox = new Checkbox("No copyright (00)", true, rightGroup); rightNoneCheckbox.setBounds(320, 160, 110, 20); rightNoneCheckbox.addItemListener(new MTMRightListener()); add(rightNoneCheckbox); - rightIsCheckbox = new Checkbox("著作権あり ( 01 ) ", false, rightGroup); + rightIsCheckbox = new Checkbox("Copyrighted (01) ", false, rightGroup); rightIsCheckbox.setBounds(320, 180, 110, 20); rightIsCheckbox.addItemListener(new MTMRightListener()); add(rightIsCheckbox); @@ -636,12 +638,12 @@ public void windowClosing(WindowEvent windowevent) { Label label = new Label("(0 - 255)"); label.setBounds(380, 200, 50, 20); add(label); - informationCheckbox = new Checkbox("著作権情報", false); + informationCheckbox = new Checkbox("Copyright information", false); informationCheckbox.setBounds(300, 240, 70, 20); informationCheckbox.addItemListener(new MTMInformationListener()); add(informationCheckbox); informationGroup = new CheckboxGroup(); - informationFileCheckbox = new Checkbox("ファイルから取り込む", true, + informationFileCheckbox = new Checkbox("Import from file", true, informationGroup); informationFileCheckbox.setBounds(320, 260, 120, 20); informationFileCheckbox.setEnabled(false); @@ -658,12 +660,12 @@ public void windowClosing(WindowEvent windowevent) { informationUserText.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); informationUserText.setBounds(340, 280, 110, 60); add(informationUserText); - versionCheckbox = new Checkbox("バージョン", true); + versionCheckbox = new Checkbox("Version", true); versionCheckbox.setBounds(300, 360, 70, 20); versionCheckbox.addItemListener(new MTMVersionListener()); add(versionCheckbox); versionGroup = new CheckboxGroup(); - versionDefaultCheckbox = new Checkbox("標準 \"0100\"", true, versionGroup); + versionDefaultCheckbox = new Checkbox("Standard \"0100\"", true, versionGroup); versionDefaultCheckbox.setBounds(320, 380, 80, 20); versionDefaultCheckbox.addItemListener(new MTMVersionListener()); add(versionDefaultCheckbox); @@ -677,7 +679,7 @@ public void windowClosing(WindowEvent windowevent) { versionUserText.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); versionUserText.setBounds(340, 400, 100, 20); add(versionUserText); - fullCheckbox = new Checkbox("フルコーラス", false); + fullCheckbox = new Checkbox("Full chorus", false); fullCheckbox.setBounds(300, 435, 80, 20); add(fullCheckbox); setVisible(true); diff --git a/src/main/java/unknown/sound/converter/MIDIToMLDInputStream.java b/src/main/java/unknown/sound/converter/MIDIToMLDInputStream.java index be6ca0b..33e1ff1 100644 --- a/src/main/java/unknown/sound/converter/MIDIToMLDInputStream.java +++ b/src/main/java/unknown/sound/converter/MIDIToMLDInputStream.java @@ -17,6 +17,7 @@ import unknown.sound.midi.header.HeaderChunkInputStream; import unknown.sound.midi.header.HeaderMessage; import unknown.sound.midi.track.TrackChunkInputStream; +import vavi.util.Debug; /** */ @@ -35,11 +36,9 @@ public MIDIToMLDInputStream(MIDIInputStream stream, Preferences pref) { do { new MIDITrackChunkToMLDTrackChunk(this, (TrackChunkInputStream) getStream().readMIDIChunk()); } while (true); - } catch (EOFException e) { - } catch (IOException e) { - System.out.println("IOException 発生"); - } catch (InvalidMidiDataException e) { - System.out.println("MIDIFormat例外発生 "); + } catch (EOFException ignore) { + } catch (IOException | InvalidMidiDataException e) { + Debug.printStackTrace(e); } createHeaderChunk(); } diff --git a/src/main/java/unknown/sound/converter/MIDITrackChunkToMLDTrackChunk.java b/src/main/java/unknown/sound/converter/MIDITrackChunkToMLDTrackChunk.java index 6eeff51..8ce62fe 100644 --- a/src/main/java/unknown/sound/converter/MIDITrackChunkToMLDTrackChunk.java +++ b/src/main/java/unknown/sound/converter/MIDITrackChunkToMLDTrackChunk.java @@ -199,7 +199,7 @@ public MIDITrackChunkToMLDTrackChunk(MIDIToMLDInputStream inputStream, } else if (message instanceof TextMessage) { if (inputStream.getPreferences().fullChorus) { TextMessage text = (TextMessage) message; - if (text.getText().equals("MIDIToMLDフルコーラス")) { + if (text.getText().equals("MIDIToMLD Full chorus")) { TrackBeginningMessage beginning = new TrackBeginningMessage(0, 1); beginning.setAbsoluteTime(presentTime); diff --git a/src/samples/java/jse/DumpReceiver.java b/src/samples/java/jse/DumpReceiver.java index 9fb0ace..7b5569c 100644 --- a/src/samples/java/jse/DumpReceiver.java +++ b/src/samples/java/jse/DumpReceiver.java @@ -244,7 +244,7 @@ public void send(MidiMessage message, long lTimeStamp) { if (lTimeStamp == -1L) { strTimeStamp = "timestamp [unknown]: "; } else { - strTimeStamp = "timestamp " + lTimeStamp + " 挙: "; + strTimeStamp = "timestamp " + lTimeStamp + " : "; } } m_printStream.println(strTimeStamp + strMessage); @@ -456,12 +456,8 @@ private String decodeMessage(MetaMessage message) { // int nTempo = signedByteToUnsigned(abData[0]) * 65536 + // signedByteToUnsigned(abData[1]) * 256 + // signedByteToUnsigned(abData[2]); - // strMessage = "Set Tempo (オs/quarter note): " + nTempo; - int nTempo = ((abData[0] & 0xFF) << 16) | ((abData[1] & 0xFF) << 8) | (abData[2] & 0xFF); // tempo - // in - // microseconds - // per - // beat + // strMessage = "Set Tempo (1s/quarter note): " + nTempo; + int nTempo = ((abData[0] & 0xFF) << 16) | ((abData[1] & 0xFF) << 8) | (abData[2] & 0xFF); // tempo in microseconds per beat float bpm = convertTempo(nTempo); // truncate it to 2 digits after point diff --git a/src/test/java/vavi/sound/vsq/Test.java b/src/test/java/vavi/sound/vsq/Test.java index 412fd50..847f3cf 100644 --- a/src/test/java/vavi/sound/vsq/Test.java +++ b/src/test/java/vavi/sound/vsq/Test.java @@ -98,10 +98,10 @@ public void meta(MetaMessage meta) { Debug.println("NRPN MSB: " + event.getData2()); break; case 6: // data entry MSB -Debug.println("データエントリ MSB: " + event.getData2()); +Debug.println("Data Entry MSB: " + event.getData2()); break; case 38: // data entry LSB -Debug.println("データエントリ LSB: " + event.getData2()); +Debug.println("Data Entry LSB: " + event.getData2()); break; default: Debug.println("unhandled control change: " + event.getData1()); diff --git a/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java b/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java index 3fefb76..c6d50f0 100644 --- a/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java +++ b/src/test/java/vavix/rococoa/ituneslibrary/iTunes2.java @@ -202,7 +202,7 @@ public Reader getInput(String ... args) throws IOException { /** */ WebElement nextAnchor(List anchors) { for (WebElement anchor : anchors) { - if (anchor.getAttribute("title").equals("次ページの結果を表示します")) { + if (anchor.getAttribute("title").equals("Show results on next page")) { return anchor; } } @@ -272,7 +272,7 @@ public Reader getInput(String ... args) throws IOException { /** */ WebElement nextAnchor(List anchors) { for (WebElement anchor : anchors) { - if (anchor.getAttribute("title").equals("次ページの結果を表示します")) { + if (anchor.getAttribute("title").equals("Show results on next page")) { return anchor; } } From 08de8e7121cb16c5dedb44b278712ae8ee1ad952 Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Fri, 26 Apr 2024 17:17:19 +0900 Subject: [PATCH 10/14] move folder --- .../sound/twinvq/{ => obsolate}/BFile.java | 512 ++++---- .../sound/twinvq/{ => obsolate}/BStream.java | 714 +++++------ .../sound/twinvq/{ => obsolate}/Chunk.java | 1080 ++++++++--------- .../twinvq/{ => obsolate}/HeaderManager.java | 574 ++++----- .../sound/twinvq/{ => obsolate}/Player.java | 0 .../sound/twinvq/{ => obsolate}/TwinVQ.java | 748 ++++++------ .../{ => obsolate}/TwinVQInputStream.java | 0 .../{ => obsolate}/TwinVQOutputStream.java | 0 8 files changed, 1814 insertions(+), 1814 deletions(-) rename src/main/java/vavi/sound/twinvq/{ => obsolate}/BFile.java (96%) rename src/main/java/vavi/sound/twinvq/{ => obsolate}/BStream.java (96%) rename src/main/java/vavi/sound/twinvq/{ => obsolate}/Chunk.java (95%) rename src/main/java/vavi/sound/twinvq/{ => obsolate}/HeaderManager.java (96%) rename src/main/java/vavi/sound/twinvq/{ => obsolate}/Player.java (100%) rename src/main/java/vavi/sound/twinvq/{ => obsolate}/TwinVQ.java (95%) rename src/main/java/vavi/sound/twinvq/{ => obsolate}/TwinVQInputStream.java (100%) rename src/main/java/vavi/sound/twinvq/{ => obsolate}/TwinVQOutputStream.java (100%) diff --git a/src/main/java/vavi/sound/twinvq/BFile.java b/src/main/java/vavi/sound/twinvq/obsolate/BFile.java similarity index 96% rename from src/main/java/vavi/sound/twinvq/BFile.java rename to src/main/java/vavi/sound/twinvq/obsolate/BFile.java index 8ea1c7d..3077a58 100644 --- a/src/main/java/vavi/sound/twinvq/BFile.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/BFile.java @@ -1,256 +1,256 @@ -/* - * Copyright 1996-2000 (c) NTT Cyber Space Laboratories - * - * Released on 2000.05.22 by N. Iwakami - */ - -package vavi.sound.twinvq; - -import java.io.IOException; -import java.io.RandomAccessFile; - - -/** - * definitions related to the bitstream file operating tools - * - * @version 1.1 added function bseek() by N.Iwakami on 1999/2/24 - * @version 1.2 added a member "readable" to structure BFILE to improve bseek - * reliability, by NI, 1999/6/18 - * @version 0.0 written by N.Iwakami on 1994/4/21 - * @version 1.0 modified by N.Iwakami on 1999/1/8 - * @version 1.1 added function bseek() by N.Iwakami on 1999/2/24 - * @version 1.2 bugfix about skipping frames by NI, 1999/6/18 - * @version 1.3 bugfix about skipping frames by NI, 1999/6/24 - */ -class BFile { - - static final int BYTE_BIT = 8; - - /** Bit buffer size (bytes) */ - static final int BBUFSIZ = 1024; - - /** Bit buffer length (bits) */ - static final int BBUFLEN = (BBUFSIZ * BYTE_BIT); - - /** Number of bit files */ - static final int N_BFILE = 50; - - static final int CHAR_BITS = 8; - - static final int BSEEK_CUR = 0; // SEEK_CUR - static final int BSEEK_SET = 1; // SEEK_SET - static final int BSEEK_END = 2; // SEEK_END - - /** current point in the bit buffer */ - long ptr; - - /** bit buffer size */ - int nbuf; - - /* NI, 1999/6/18 */ - /** set to 1 if the bit buffer is readable */ - int readable; - - /** the bit buffer */ - byte[] buf = new byte[BBUFSIZ]; - - /** R/W mode */ - String mode; - - /** the file pointer */ - RandomAccessFile io; - - /** b-file pointer ID used in tealloc() */ - int _file_id; - - int[] _bfile_flag = new int[N_BFILE]; - - BFile[] _bfp_mem = new BFile[N_BFILE]; - - /** - * @param name Data file name - * @param mode Access mode - */ - BFile(String name, String mode) throws IOException { - - // Open file - this.io = new RandomAccessFile(name, mode); - // Clear pointer - this.ptr = 0; - // Reset the readable flag - this.readable = 0; - // Set mode - this.mode = mode; - } - - void bclose() throws IOException { - long iadr; - - // If mode is "w" output data remaining in the buffer - if (this.mode.equals("w")) { - iadr = (this.ptr + BYTE_BIT - 1) / BYTE_BIT; - this.io.write(this.buf, 0, (int) iadr); - } - // Close file - this.io.close(); - } - - long bseek(long offset, int origin) throws IOException { - long fs_ret; - - if (!this.mode.equals("w")) { - System.err.print("bseek(): No seek support in write mode.\n"); - return 2; - } - - switch (origin) { - case BSEEK_CUR: { - long offsetTest = offset; // this.ptr - // if seeking is within the buffer - if (0 <= offsetTest && offsetTest < this.nbuf) { - this.ptr = offsetTest; - } else { - if (offsetTest >= this.nbuf) { // forward seek - long nSeekStep = offsetTest / BBUFLEN; - if (this.readable == 1) { - nSeekStep -= 1; - } - fs_ret = this.io.getFilePointer(); - this.io.seek(fs_ret + nSeekStep * BBUFSIZ); - fs_ret += nSeekStep * BBUFSIZ; - if (fs_ret != 0) - return fs_ret; - - this.readable = 0; - this.ptr = offsetTest % BBUFLEN; - } else { // backward seek - long nSeekStep = (offsetTest - (BBUFLEN - 1)) / BBUFLEN; - if (this.readable == 1) { - nSeekStep -= 1; - } - fs_ret = this.io.getFilePointer(); - this.io.seek(nSeekStep * BBUFSIZ); - fs_ret += nSeekStep * BBUFSIZ; - if (fs_ret != 0) - return fs_ret; - - this.readable = 0; - this.ptr = (offsetTest - nSeekStep * BBUFLEN) % BBUFLEN; - } - } - } - break; - case BSEEK_SET: // top of the file - if (offset < 0) { - return 1; - } - this.io.seek((offset / BBUFLEN) * BBUFSIZ); - fs_ret = (offset / BBUFLEN) * BBUFSIZ; - if (fs_ret != 0) { - return fs_ret; - } - this.readable = 0; - this.nbuf *= 8; - this.ptr = offset % BBUFLEN; - break; - case BSEEK_END: - if (offset > 0) { - return 1; - } - this.io.seek(((offset - BBUFLEN + 1) / BBUFLEN - 1) * BBUFSIZ); - fs_ret = -1; // TODO SEEK_END - if (fs_ret != 0) - return fs_ret; - this.readable = 0; - this.nbuf *= 8; - this.ptr = (offset + BBUFLEN) % BBUFLEN; - break; - default: - System.err.printf("bseek(): %d: Invalid origin ID.\n", origin); - return 2; - } - return 0; - } - - /** - * @param data Output: Output data array - * @param size Length of each data - * @param nbits Number of bits to write - */ - int read(byte[] data, int size, int nbits) throws IOException { - // Variables - int ibits; - long iptr, ibufbit; - int icl, idata, ibufadr; - byte mask, tmpdat; - int retval; - - // Main operation - retval = 0; - mask = 0x1; - for (ibits = 0; ibits < nbits; ibits++) { - if (this.readable == 0) { // when the file data buffer is empty - this.nbuf = this.io.read(this.buf, 0, BBUFSIZ); - this.nbuf *= 8; - this.readable = 1; - } - // current file data buffer pointer - iptr = this.ptr; - // If data file is empty then return - if (iptr >= this.nbuf) { - return (retval); - } - // current file data buffer address - ibufadr = (int) (iptr / BYTE_BIT); - // current file data buffer bit - ibufbit = iptr % BYTE_BIT; - // tmpdat = stream.buf[ibufadr] >> (BYTE_BIT-ibufbit-1); - tmpdat = this.buf[ibufadr]; - tmpdat >>= (BYTE_BIT - ibufbit - 1); - // current data bit - - // output data address - idata = ibits * size; - // set output data - data[idata] = (byte) (tmpdat & mask); - for (icl = 1; icl < size; icl++) { - // clear the rest output data buffer - data[idata + icl] = 0; - } - // update data buffer pointer - this.ptr += 1; - if (this.ptr == BBUFLEN) { - this.ptr = 0; - this.readable = 0; - } - ++retval; - } - return (retval); - } - - static final int BITS_INT = (4 * 8); - - /** - * @param data input data - * @param nbits number of bits - */ - int getBStream(int[] data, int offset, int nbits) throws IOException { - byte[] tmpbit = new byte[BITS_INT]; - - if (nbits > BITS_INT) { - throw new IllegalArgumentException(String.format("get_bstm(): %d: %d Error.\n", nbits, BITS_INT)); - } - int retval = read(tmpbit, BITS_INT, nbits); - for (int ibit = retval; ibit < nbits; ibit++) { - tmpbit[ibit] = 0; - } - int mask = 0x1 << (nbits - 1); - int work = 0; - for (int ibit = 0; ibit < nbits; ibit++) { - work += mask * tmpbit[ibit]; - mask >>= 1; - } - data[offset] = work; - return retval; - } -} +/* + * Copyright 1996-2000 (c) NTT Cyber Space Laboratories + * + * Released on 2000.05.22 by N. Iwakami + */ + +package vavi.sound.twinvq; + +import java.io.IOException; +import java.io.RandomAccessFile; + + +/** + * definitions related to the bitstream file operating tools + * + * @version 1.1 added function bseek() by N.Iwakami on 1999/2/24 + * @version 1.2 added a member "readable" to structure BFILE to improve bseek + * reliability, by NI, 1999/6/18 + * @version 0.0 written by N.Iwakami on 1994/4/21 + * @version 1.0 modified by N.Iwakami on 1999/1/8 + * @version 1.1 added function bseek() by N.Iwakami on 1999/2/24 + * @version 1.2 bugfix about skipping frames by NI, 1999/6/18 + * @version 1.3 bugfix about skipping frames by NI, 1999/6/24 + */ +class BFile { + + static final int BYTE_BIT = 8; + + /** Bit buffer size (bytes) */ + static final int BBUFSIZ = 1024; + + /** Bit buffer length (bits) */ + static final int BBUFLEN = (BBUFSIZ * BYTE_BIT); + + /** Number of bit files */ + static final int N_BFILE = 50; + + static final int CHAR_BITS = 8; + + static final int BSEEK_CUR = 0; // SEEK_CUR + static final int BSEEK_SET = 1; // SEEK_SET + static final int BSEEK_END = 2; // SEEK_END + + /** current point in the bit buffer */ + long ptr; + + /** bit buffer size */ + int nbuf; + + /* NI, 1999/6/18 */ + /** set to 1 if the bit buffer is readable */ + int readable; + + /** the bit buffer */ + byte[] buf = new byte[BBUFSIZ]; + + /** R/W mode */ + String mode; + + /** the file pointer */ + RandomAccessFile io; + + /** b-file pointer ID used in tealloc() */ + int _file_id; + + int[] _bfile_flag = new int[N_BFILE]; + + BFile[] _bfp_mem = new BFile[N_BFILE]; + + /** + * @param name Data file name + * @param mode Access mode + */ + BFile(String name, String mode) throws IOException { + + // Open file + this.io = new RandomAccessFile(name, mode); + // Clear pointer + this.ptr = 0; + // Reset the readable flag + this.readable = 0; + // Set mode + this.mode = mode; + } + + void bclose() throws IOException { + long iadr; + + // If mode is "w" output data remaining in the buffer + if (this.mode.equals("w")) { + iadr = (this.ptr + BYTE_BIT - 1) / BYTE_BIT; + this.io.write(this.buf, 0, (int) iadr); + } + // Close file + this.io.close(); + } + + long bseek(long offset, int origin) throws IOException { + long fs_ret; + + if (!this.mode.equals("w")) { + System.err.print("bseek(): No seek support in write mode.\n"); + return 2; + } + + switch (origin) { + case BSEEK_CUR: { + long offsetTest = offset; // this.ptr + // if seeking is within the buffer + if (0 <= offsetTest && offsetTest < this.nbuf) { + this.ptr = offsetTest; + } else { + if (offsetTest >= this.nbuf) { // forward seek + long nSeekStep = offsetTest / BBUFLEN; + if (this.readable == 1) { + nSeekStep -= 1; + } + fs_ret = this.io.getFilePointer(); + this.io.seek(fs_ret + nSeekStep * BBUFSIZ); + fs_ret += nSeekStep * BBUFSIZ; + if (fs_ret != 0) + return fs_ret; + + this.readable = 0; + this.ptr = offsetTest % BBUFLEN; + } else { // backward seek + long nSeekStep = (offsetTest - (BBUFLEN - 1)) / BBUFLEN; + if (this.readable == 1) { + nSeekStep -= 1; + } + fs_ret = this.io.getFilePointer(); + this.io.seek(nSeekStep * BBUFSIZ); + fs_ret += nSeekStep * BBUFSIZ; + if (fs_ret != 0) + return fs_ret; + + this.readable = 0; + this.ptr = (offsetTest - nSeekStep * BBUFLEN) % BBUFLEN; + } + } + } + break; + case BSEEK_SET: // top of the file + if (offset < 0) { + return 1; + } + this.io.seek((offset / BBUFLEN) * BBUFSIZ); + fs_ret = (offset / BBUFLEN) * BBUFSIZ; + if (fs_ret != 0) { + return fs_ret; + } + this.readable = 0; + this.nbuf *= 8; + this.ptr = offset % BBUFLEN; + break; + case BSEEK_END: + if (offset > 0) { + return 1; + } + this.io.seek(((offset - BBUFLEN + 1) / BBUFLEN - 1) * BBUFSIZ); + fs_ret = -1; // TODO SEEK_END + if (fs_ret != 0) + return fs_ret; + this.readable = 0; + this.nbuf *= 8; + this.ptr = (offset + BBUFLEN) % BBUFLEN; + break; + default: + System.err.printf("bseek(): %d: Invalid origin ID.\n", origin); + return 2; + } + return 0; + } + + /** + * @param data Output: Output data array + * @param size Length of each data + * @param nbits Number of bits to write + */ + int read(byte[] data, int size, int nbits) throws IOException { + // Variables + int ibits; + long iptr, ibufbit; + int icl, idata, ibufadr; + byte mask, tmpdat; + int retval; + + // Main operation + retval = 0; + mask = 0x1; + for (ibits = 0; ibits < nbits; ibits++) { + if (this.readable == 0) { // when the file data buffer is empty + this.nbuf = this.io.read(this.buf, 0, BBUFSIZ); + this.nbuf *= 8; + this.readable = 1; + } + // current file data buffer pointer + iptr = this.ptr; + // If data file is empty then return + if (iptr >= this.nbuf) { + return (retval); + } + // current file data buffer address + ibufadr = (int) (iptr / BYTE_BIT); + // current file data buffer bit + ibufbit = iptr % BYTE_BIT; + // tmpdat = stream.buf[ibufadr] >> (BYTE_BIT-ibufbit-1); + tmpdat = this.buf[ibufadr]; + tmpdat >>= (BYTE_BIT - ibufbit - 1); + // current data bit + + // output data address + idata = ibits * size; + // set output data + data[idata] = (byte) (tmpdat & mask); + for (icl = 1; icl < size; icl++) { + // clear the rest output data buffer + data[idata + icl] = 0; + } + // update data buffer pointer + this.ptr += 1; + if (this.ptr == BBUFLEN) { + this.ptr = 0; + this.readable = 0; + } + ++retval; + } + return (retval); + } + + static final int BITS_INT = (4 * 8); + + /** + * @param data input data + * @param nbits number of bits + */ + int getBStream(int[] data, int offset, int nbits) throws IOException { + byte[] tmpbit = new byte[BITS_INT]; + + if (nbits > BITS_INT) { + throw new IllegalArgumentException(String.format("get_bstm(): %d: %d Error.\n", nbits, BITS_INT)); + } + int retval = read(tmpbit, BITS_INT, nbits); + for (int ibit = retval; ibit < nbits; ibit++) { + tmpbit[ibit] = 0; + } + int mask = 0x1 << (nbits - 1); + int work = 0; + for (int ibit = 0; ibit < nbits; ibit++) { + work += mask * tmpbit[ibit]; + mask >>= 1; + } + data[offset] = work; + return retval; + } +} diff --git a/src/main/java/vavi/sound/twinvq/BStream.java b/src/main/java/vavi/sound/twinvq/obsolate/BStream.java similarity index 96% rename from src/main/java/vavi/sound/twinvq/BStream.java rename to src/main/java/vavi/sound/twinvq/obsolate/BStream.java index df3b5d2..b16bb59 100644 --- a/src/main/java/vavi/sound/twinvq/BStream.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/BStream.java @@ -1,357 +1,357 @@ -/* - * Copyright 1996-2000 (c) NTT Cyber Space Laboratories - * - * Released on 2000.05.22 by N. Iwakami - * Released on 2000.09.06 by N. Iwakami - */ - -package vavi.sound.twinvq; - -import java.io.IOException; -import java.util.Arrays; - -import vavi.sound.twinvq.TwinVQ.BlockType; -import vavi.sound.twinvq.TwinVQ.Index; -import vavi.sound.twinvq.TwinVQ.HeaderInfo; -import vavi.sound.twinvq.TwinVQ.ConfInfo; -import vavi.sound.twinvq.TwinVQ.ConfInfoSubBlock; - - -class BStream { - - /** */ - TwinVQ twinVq = TwinVQ.getInstance(); - - /** - * bits table for VQ - */ - static int[][] bits_0 = new int[TwinVQ.N_INTR_TYPE][]; - - static int[][] bits_1 = new int[TwinVQ.N_INTR_TYPE][]; - - /** - * lookup parameters - */ - private ConfInfo cf; - - private int iframe; - - private int TVQ_VERSION; - - /** - * get string from the bitstream file - * - * @return none - */ - private static int getString(byte[] buf, int nbytes, BFile bfp) throws IOException { - int ichar, ibit; - int[] c = new int[1]; - - for (ichar = 0; ichar < nbytes; ichar++) { - ibit = bfp.getBStream(c, 0, BFile.CHAR_BITS); - if (ibit < BFile.CHAR_BITS) { - break; - } - buf[ichar] = (byte) c[0]; - } - - buf[ichar] = '\0'; - return ichar; - } - - /** - * load the TWIN chunk from a bitstream file - * - * @return the TWIN chunk - */ - ChunkChunk loadTwinChunk(BFile bfp) throws IOException { - int[] chunkSize = new int[1]; - - byte[] chunkID = new byte[TwinVQ.KEYWORD_BYTES + TwinVQ.VERSION_BYTES + 1]; - getString(chunkID, TwinVQ.KEYWORD_BYTES + TwinVQ.VERSION_BYTES, bfp); - TVQ_VERSION = twinVq.TvqCheckVersion(new String(chunkID)); - if (TVQ_VERSION == TwinVQ.TVQ_UNKNOWN_VERSION) { - throw new IllegalArgumentException(String.format("Header reading error: Unknown version (%s).\n", chunkID)); - } - - if (bfp.getBStream(chunkSize, 0, TwinVQ.ELEM_BYTES * BFile.CHAR_BITS) <= 0) { - throw new IllegalArgumentException("Header reading error: Failed to get header size."); - } - - byte[] chunkData = new byte[chunkSize[0] + 1]; - if (getString(chunkData, chunkSize[0], bfp) < chunkSize[0]) { - throw new IllegalArgumentException("Header reading error: Failed to read header data."); - } - - ChunkChunk TwinChunk = new ChunkChunk(new String(chunkID)); - TwinChunk.putData(chunkSize[0], chunkData); - - return TwinChunk; - } - - /** - * read bitstream header and create the header chunk data - * - * @param bfp bitstream file pointer - * @return returns 1 when error or 0 - */ - ChunkChunk getBsHeaderInfo(BFile bfp) throws IOException { - - ChunkChunk twinChunk = loadTwinChunk(bfp); - if (twinChunk == null) { - throw new IllegalArgumentException("Failed to read header. Check the bitstream file."); - } - - byte[] lbuf = new byte[TwinVQ.BUFSIZ]; - getString(lbuf, TwinVQ.KEYWORD_BYTES, bfp); - if (Arrays.equals(lbuf, "DATA".getBytes())) { - throw new IllegalArgumentException( - String.format("TwinVQ format error. No \"DATA\" chunk was found. found %s chunk", lbuf)); - } - - return twinChunk; - } - - /** - * initialize the bitstream reader Return: Returns 1 when error or returns 0 - */ - int initBsReader(HeaderInfo setupInfo) { - - TVQ_VERSION = twinVq.TvqCheckVersion(new String(setupInfo.id)); - if (TVQ_VERSION == TwinVQ.TVQ_UNKNOWN_VERSION) { - return 1; - } - - twinVq.TvqGetConfInfo(cf); - - twinVq.TvqGetVectorInfo(bits_0, bits_1); - - iframe = 0; - - return 0; - } - - /** - * get VQ information - * - * @return number of bits read - */ - private int getVqInfo(ConfInfoSubBlock cfg, int[] bits0, int[] bits1, int variableBits, Index index, BFile bfp) throws IOException { - int idiv; - int bitcount = 0; - - if (index.btype[0] == BlockType.BLK_LONG.ordinal()) { - twinVq.TvqUpdateVectorInfo(variableBits, cfg.ndiv, bits0, bits1); // re-calculate - // VQ - // bits - } - for (idiv = 0; idiv < cfg.ndiv[0]; idiv++) { - bitcount += bfp.getBStream(index.wvq, idiv, bits0[idiv]); /* CB 0 */ - bitcount += bfp.getBStream(index.wvq, idiv + cfg.ndiv[0], bits1[idiv]); /* CB 1 */ - } - - return bitcount; - } - - /** - * get BSE information - * - * @return number of bits read - */ - private static int getBseInfo(ConfInfo cf, ConfInfoSubBlock cfg, Index index, BFile bfp) throws IOException { - int i_sup, isf, itmp, idiv; - int bitcount = 0; - - for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { - for (isf = 0; isf < cfg.nsf; isf++) { - for (idiv = 0; idiv < cfg.fw_ndiv; idiv++) { - itmp = idiv + (isf + i_sup * cfg.nsf) * cfg.fw_ndiv; - bitcount += bfp.getBStream(index.fw, itmp, cfg.fw_nbit); - } - } - } - for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { - for (isf = 0; isf < cfg.nsf; isf++) { - bitcount += bfp.getBStream(index.fw_alf, i_sup * cfg.nsf + isf, cf.FW_ARSW_BITS); - } - } - - return bitcount; - } - - /** - * get gain information - * - * @return number of bits read - */ - private static int getGainInfo(ConfInfo cf, ConfInfoSubBlock cfg, Index index, BFile bfp) throws IOException { - int i_sup, iptop, isf; - int bitcount = 0; - - for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { - iptop = (cfg.nsubg + 1) * i_sup; - bitcount += bfp.getBStream(index.pow, iptop, cf.GAIN_BITS); - for (isf = 0; isf < cfg.nsubg; isf++) { - bitcount += bfp.getBStream(index.pow, iptop + isf + 1, cf.SUB_GAIN_BITS); - } - } - - return bitcount; - } - - /** - * get LSP information - * - * @return number of bits read - */ - private static int getLspInfo(ConfInfo cf, Index index, BFile bfp) throws IOException { - int i_sup, itmp; - int bitcount = 0; - - for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { - // pred. switch - bitcount += bfp.getBStream(index.lsp[i_sup], 0, cf.LSP_BIT0); - // first stage - bitcount += bfp.getBStream(index.lsp[i_sup], 1, cf.LSP_BIT1); - // second stage - for (itmp = 0; itmp < cf.LSP_SPLIT; itmp++) { - bitcount += bfp.getBStream(index.lsp[i_sup], itmp + 2, cf.LSP_BIT2); - } - } - - return bitcount; - } - - /** - * get PPC information - * - * @return number of bits read - */ - private static int getPpcInfo(ConfInfo cf, Index index, BFile bfp) throws IOException { - int idiv, i_sup; - int bitcount = 0; - - for (idiv = 0; idiv < cf.N_DIV_P; idiv++) { - bitcount += bfp.getBStream(index.pls, idiv, bits_0[TwinVQ.BlockType.BLK_PPC.ordinal()][idiv]); /* CB0 */ - bitcount += bfp.getBStream(index.pls, idiv + cf.N_DIV_P, bits_1[TwinVQ.BlockType.BLK_PPC.ordinal()][idiv]);/* CB1 */ - } - for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { - bitcount += bfp.getBStream(index.pit, i_sup, cf.BASF_BIT); - bitcount += bfp.getBStream(index.pgain, i_sup, cf.PGAIN_BIT); - } - - return bitcount; - } - - /** - * get EBC information - * - * @return number of bits read - */ - private static int getEbcInfo(ConfInfo cf, ConfInfoSubBlock cfg, Index index, BFile bfp) throws IOException { - int i_sup, isf, itmp; - int bitcount = 0; - - for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { - for (isf = 0; isf < cfg.nsf; isf++) { - int indexSfOffset = isf * (cfg.ncrb - cfg.ebc_crb_base) - cfg.ebc_crb_base; - for (itmp = cfg.ebc_crb_base; itmp < cfg.ncrb; itmp++) { - bitcount += bfp.getBStream(index.bc[i_sup], itmp + indexSfOffset, cfg.ebc_bits); - } - } - } - - return bitcount; - } - - /** - * read bitstream frame - * - * @param index Output: quantization indexes - * @param bfp file pointer - * @return 1: successful reading, 0: imcompleted reading - */ - int readBsFrame(Index index, BFile bfp) throws IOException { - // Variables - ConfInfoSubBlock cfg; - int variableBits; - int bitcount; - int numFixedBitsPerFrame = twinVq.TvqGetNumFixedBitsPerFrame(); - - // Initialization - variableBits = 0; - bitcount = 0; - - // read block independent factors - // Window type - bitcount += bfp.getBStream(index.w_type, 0, cf.BITS_WTYPE); - if (twinVq.TvqWtypeToBtype(index.w_type[0], index.btype) != 0) { - System.err.printf("Error: unknown window type: %d\n", index.w_type); - return 0; - } - int btype = index.btype[0]; - - // read block dependent factors - // set the block dependent parameters table - cfg = cf.cfg[btype]; - - bitcount += variableBits; - - // Interleaved vector quantization - bitcount += getVqInfo(cfg, bits_0[btype], bits_1[btype], variableBits, index, bfp); - - // Bark-scale envelope - bitcount += getBseInfo(cf, cfg, index, bfp); - // Gain - bitcount += getGainInfo(cf, cfg, index, bfp); - // LSP - bitcount += getLspInfo(cf, index, bfp); - // PPC - if (cfg.ppc_enable != 0) { - bitcount += getPpcInfo(cf, index, bfp); - } - // Energy Balance Calibration - if (cfg.ebc_enable != 0) { - bitcount += getEbcInfo(cf, cfg, index, bfp); - } - - iframe += 1; - - return bitcount == numFixedBitsPerFrame ? 1 : 0; - } - - /** - * skip frame - * - * @return skiped frames - */ - long skipFrame(BFile bfp, long step) throws IOException { - - int numBits = twinVq.TvqGetNumFixedBitsPerFrame(); - iframe += (int) step; - return bfp.bseek(numBits * step, BFile.BSEEK_CUR); - } - - /** - * returns current frame point - * - * @return current frame point - */ - int getBsFramePoint() { - return iframe; - } - - //---- - - /** */ - private static final BStream instance = new BStream(); - - /** */ - private BStream() { - } - - /** */ - public static BStream getInstance() { - return instance; - } -} +/* + * Copyright 1996-2000 (c) NTT Cyber Space Laboratories + * + * Released on 2000.05.22 by N. Iwakami + * Released on 2000.09.06 by N. Iwakami + */ + +package vavi.sound.twinvq; + +import java.io.IOException; +import java.util.Arrays; + +import vavi.sound.twinvq.TwinVQ.BlockType; +import vavi.sound.twinvq.TwinVQ.Index; +import vavi.sound.twinvq.TwinVQ.HeaderInfo; +import vavi.sound.twinvq.TwinVQ.ConfInfo; +import vavi.sound.twinvq.TwinVQ.ConfInfoSubBlock; + + +class BStream { + + /** */ + TwinVQ twinVq = TwinVQ.getInstance(); + + /** + * bits table for VQ + */ + static int[][] bits_0 = new int[TwinVQ.N_INTR_TYPE][]; + + static int[][] bits_1 = new int[TwinVQ.N_INTR_TYPE][]; + + /** + * lookup parameters + */ + private ConfInfo cf; + + private int iframe; + + private int TVQ_VERSION; + + /** + * get string from the bitstream file + * + * @return none + */ + private static int getString(byte[] buf, int nbytes, BFile bfp) throws IOException { + int ichar, ibit; + int[] c = new int[1]; + + for (ichar = 0; ichar < nbytes; ichar++) { + ibit = bfp.getBStream(c, 0, BFile.CHAR_BITS); + if (ibit < BFile.CHAR_BITS) { + break; + } + buf[ichar] = (byte) c[0]; + } + + buf[ichar] = '\0'; + return ichar; + } + + /** + * load the TWIN chunk from a bitstream file + * + * @return the TWIN chunk + */ + ChunkChunk loadTwinChunk(BFile bfp) throws IOException { + int[] chunkSize = new int[1]; + + byte[] chunkID = new byte[TwinVQ.KEYWORD_BYTES + TwinVQ.VERSION_BYTES + 1]; + getString(chunkID, TwinVQ.KEYWORD_BYTES + TwinVQ.VERSION_BYTES, bfp); + TVQ_VERSION = twinVq.TvqCheckVersion(new String(chunkID)); + if (TVQ_VERSION == TwinVQ.TVQ_UNKNOWN_VERSION) { + throw new IllegalArgumentException(String.format("Header reading error: Unknown version (%s).\n", chunkID)); + } + + if (bfp.getBStream(chunkSize, 0, TwinVQ.ELEM_BYTES * BFile.CHAR_BITS) <= 0) { + throw new IllegalArgumentException("Header reading error: Failed to get header size."); + } + + byte[] chunkData = new byte[chunkSize[0] + 1]; + if (getString(chunkData, chunkSize[0], bfp) < chunkSize[0]) { + throw new IllegalArgumentException("Header reading error: Failed to read header data."); + } + + ChunkChunk TwinChunk = new ChunkChunk(new String(chunkID)); + TwinChunk.putData(chunkSize[0], chunkData); + + return TwinChunk; + } + + /** + * read bitstream header and create the header chunk data + * + * @param bfp bitstream file pointer + * @return returns 1 when error or 0 + */ + ChunkChunk getBsHeaderInfo(BFile bfp) throws IOException { + + ChunkChunk twinChunk = loadTwinChunk(bfp); + if (twinChunk == null) { + throw new IllegalArgumentException("Failed to read header. Check the bitstream file."); + } + + byte[] lbuf = new byte[TwinVQ.BUFSIZ]; + getString(lbuf, TwinVQ.KEYWORD_BYTES, bfp); + if (Arrays.equals(lbuf, "DATA".getBytes())) { + throw new IllegalArgumentException( + String.format("TwinVQ format error. No \"DATA\" chunk was found. found %s chunk", lbuf)); + } + + return twinChunk; + } + + /** + * initialize the bitstream reader Return: Returns 1 when error or returns 0 + */ + int initBsReader(HeaderInfo setupInfo) { + + TVQ_VERSION = twinVq.TvqCheckVersion(new String(setupInfo.id)); + if (TVQ_VERSION == TwinVQ.TVQ_UNKNOWN_VERSION) { + return 1; + } + + twinVq.TvqGetConfInfo(cf); + + twinVq.TvqGetVectorInfo(bits_0, bits_1); + + iframe = 0; + + return 0; + } + + /** + * get VQ information + * + * @return number of bits read + */ + private int getVqInfo(ConfInfoSubBlock cfg, int[] bits0, int[] bits1, int variableBits, Index index, BFile bfp) throws IOException { + int idiv; + int bitcount = 0; + + if (index.btype[0] == BlockType.BLK_LONG.ordinal()) { + twinVq.TvqUpdateVectorInfo(variableBits, cfg.ndiv, bits0, bits1); // re-calculate + // VQ + // bits + } + for (idiv = 0; idiv < cfg.ndiv[0]; idiv++) { + bitcount += bfp.getBStream(index.wvq, idiv, bits0[idiv]); /* CB 0 */ + bitcount += bfp.getBStream(index.wvq, idiv + cfg.ndiv[0], bits1[idiv]); /* CB 1 */ + } + + return bitcount; + } + + /** + * get BSE information + * + * @return number of bits read + */ + private static int getBseInfo(ConfInfo cf, ConfInfoSubBlock cfg, Index index, BFile bfp) throws IOException { + int i_sup, isf, itmp, idiv; + int bitcount = 0; + + for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { + for (isf = 0; isf < cfg.nsf; isf++) { + for (idiv = 0; idiv < cfg.fw_ndiv; idiv++) { + itmp = idiv + (isf + i_sup * cfg.nsf) * cfg.fw_ndiv; + bitcount += bfp.getBStream(index.fw, itmp, cfg.fw_nbit); + } + } + } + for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { + for (isf = 0; isf < cfg.nsf; isf++) { + bitcount += bfp.getBStream(index.fw_alf, i_sup * cfg.nsf + isf, cf.FW_ARSW_BITS); + } + } + + return bitcount; + } + + /** + * get gain information + * + * @return number of bits read + */ + private static int getGainInfo(ConfInfo cf, ConfInfoSubBlock cfg, Index index, BFile bfp) throws IOException { + int i_sup, iptop, isf; + int bitcount = 0; + + for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { + iptop = (cfg.nsubg + 1) * i_sup; + bitcount += bfp.getBStream(index.pow, iptop, cf.GAIN_BITS); + for (isf = 0; isf < cfg.nsubg; isf++) { + bitcount += bfp.getBStream(index.pow, iptop + isf + 1, cf.SUB_GAIN_BITS); + } + } + + return bitcount; + } + + /** + * get LSP information + * + * @return number of bits read + */ + private static int getLspInfo(ConfInfo cf, Index index, BFile bfp) throws IOException { + int i_sup, itmp; + int bitcount = 0; + + for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { + // pred. switch + bitcount += bfp.getBStream(index.lsp[i_sup], 0, cf.LSP_BIT0); + // first stage + bitcount += bfp.getBStream(index.lsp[i_sup], 1, cf.LSP_BIT1); + // second stage + for (itmp = 0; itmp < cf.LSP_SPLIT; itmp++) { + bitcount += bfp.getBStream(index.lsp[i_sup], itmp + 2, cf.LSP_BIT2); + } + } + + return bitcount; + } + + /** + * get PPC information + * + * @return number of bits read + */ + private static int getPpcInfo(ConfInfo cf, Index index, BFile bfp) throws IOException { + int idiv, i_sup; + int bitcount = 0; + + for (idiv = 0; idiv < cf.N_DIV_P; idiv++) { + bitcount += bfp.getBStream(index.pls, idiv, bits_0[TwinVQ.BlockType.BLK_PPC.ordinal()][idiv]); /* CB0 */ + bitcount += bfp.getBStream(index.pls, idiv + cf.N_DIV_P, bits_1[TwinVQ.BlockType.BLK_PPC.ordinal()][idiv]);/* CB1 */ + } + for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { + bitcount += bfp.getBStream(index.pit, i_sup, cf.BASF_BIT); + bitcount += bfp.getBStream(index.pgain, i_sup, cf.PGAIN_BIT); + } + + return bitcount; + } + + /** + * get EBC information + * + * @return number of bits read + */ + private static int getEbcInfo(ConfInfo cf, ConfInfoSubBlock cfg, Index index, BFile bfp) throws IOException { + int i_sup, isf, itmp; + int bitcount = 0; + + for (i_sup = 0; i_sup < cf.N_CH; i_sup++) { + for (isf = 0; isf < cfg.nsf; isf++) { + int indexSfOffset = isf * (cfg.ncrb - cfg.ebc_crb_base) - cfg.ebc_crb_base; + for (itmp = cfg.ebc_crb_base; itmp < cfg.ncrb; itmp++) { + bitcount += bfp.getBStream(index.bc[i_sup], itmp + indexSfOffset, cfg.ebc_bits); + } + } + } + + return bitcount; + } + + /** + * read bitstream frame + * + * @param index Output: quantization indexes + * @param bfp file pointer + * @return 1: successful reading, 0: imcompleted reading + */ + int readBsFrame(Index index, BFile bfp) throws IOException { + // Variables + ConfInfoSubBlock cfg; + int variableBits; + int bitcount; + int numFixedBitsPerFrame = twinVq.TvqGetNumFixedBitsPerFrame(); + + // Initialization + variableBits = 0; + bitcount = 0; + + // read block independent factors + // Window type + bitcount += bfp.getBStream(index.w_type, 0, cf.BITS_WTYPE); + if (twinVq.TvqWtypeToBtype(index.w_type[0], index.btype) != 0) { + System.err.printf("Error: unknown window type: %d\n", index.w_type); + return 0; + } + int btype = index.btype[0]; + + // read block dependent factors + // set the block dependent parameters table + cfg = cf.cfg[btype]; + + bitcount += variableBits; + + // Interleaved vector quantization + bitcount += getVqInfo(cfg, bits_0[btype], bits_1[btype], variableBits, index, bfp); + + // Bark-scale envelope + bitcount += getBseInfo(cf, cfg, index, bfp); + // Gain + bitcount += getGainInfo(cf, cfg, index, bfp); + // LSP + bitcount += getLspInfo(cf, index, bfp); + // PPC + if (cfg.ppc_enable != 0) { + bitcount += getPpcInfo(cf, index, bfp); + } + // Energy Balance Calibration + if (cfg.ebc_enable != 0) { + bitcount += getEbcInfo(cf, cfg, index, bfp); + } + + iframe += 1; + + return bitcount == numFixedBitsPerFrame ? 1 : 0; + } + + /** + * skip frame + * + * @return skiped frames + */ + long skipFrame(BFile bfp, long step) throws IOException { + + int numBits = twinVq.TvqGetNumFixedBitsPerFrame(); + iframe += (int) step; + return bfp.bseek(numBits * step, BFile.BSEEK_CUR); + } + + /** + * returns current frame point + * + * @return current frame point + */ + int getBsFramePoint() { + return iframe; + } + + //---- + + /** */ + private static final BStream instance = new BStream(); + + /** */ + private BStream() { + } + + /** */ + public static BStream getInstance() { + return instance; + } +} diff --git a/src/main/java/vavi/sound/twinvq/Chunk.java b/src/main/java/vavi/sound/twinvq/obsolate/Chunk.java similarity index 95% rename from src/main/java/vavi/sound/twinvq/Chunk.java rename to src/main/java/vavi/sound/twinvq/obsolate/Chunk.java index b9dacce..e209229 100644 --- a/src/main/java/vavi/sound/twinvq/Chunk.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/Chunk.java @@ -1,540 +1,540 @@ -/* - * Copyright 1996-2000 (c) NTT Cyber Space Laboratories - * - * Modified on 2000.09.06 by N. Iwakami - */ - -package vavi.sound.twinvq; - -import java.util.List; - - -/** - * Provides the basic structure of chunks. Input and output raw data. - */ -class Chunk { - - private final String id; - - private List data; - - private int pos; - - /** - * Gets size byte integer from current position. - * @param size default: long integer - */ - protected long getNInt(int size/* =sizeof(long) */) { - final int mask = 0xff; - int ibyte; - long retval; - - retval = 0; - for (ibyte = 0; ibyte < size; ibyte++) { - retval <<= 8; - retval |= data.get(pos++) & mask; - } - - return retval; - } - - /** - * Gets a vector of size bytes from the current position. - * @param size default: all the rest - */ - protected byte[] getVector(int size/* = 0 */) { - - if (size == 0) { - size = data.size() - pos; - } - - byte[] retval = new byte[size]; - - if (pos + size > data.size()) { - return retval; - } - - for (int ii = 0; ii < size; ii++) { - retval[ii] = data.get(pos++); - } - return retval; - } - - /** - * Gets length string from current position. - * @param length default: all the rest - */ - protected String getRndString(int length/* = 0 */) { - if (length == 0) { - length = getSize(); - } - - if (pos + length > data.size()) { - return ""; - } - - StringBuilder theString = new StringBuilder(); - for (int ii = 0; ii < length; ii++) { - theString.append(data.get(pos++)); - } - - return theString.toString(); - } - - /** - * Writes size byte integer from current position. - * - * @param size default: long integer - */ - protected void putNInt(int inputData, int size/* =sizeof(long) */) { - final int mask = 0xff; - int ibyte; - byte data_tmp; - - if (size > 4) { - throw new FailPutException(); - } - - for (ibyte = 0; ibyte < size; ibyte++) { - data_tmp = (byte) ((inputData >> (8 * (size - ibyte - 1))) & mask); - data.add(data_tmp); - } - } - - /** Returns current position to the beginning. */ - protected void rewindChunk() { - pos = 0; - } - - /** Erases data. */ - protected void deleteChunk() { - data.clear(); - rewindChunk(); - } - - /** Get current position. */ - protected final int getCurrentPosition() { - return pos; - } - - /** exception */ - protected static class FailPutException extends RuntimeException { - } - - /** constructor */ - public Chunk(Chunk parent) { - id = parent.id; - pos = 0; - } - - /** constructor */ - public Chunk(String ID) { - id = ID; - pos = 0; - } - - /** Gets ID. */ - public final String getID() { - return id; - } - - /** Gets chunk size. */ - public final int getSize() { - return data.size(); - } - - public final byte[] getData() { - byte[] retval = new byte[data.size()]; - for (int ii = 0; ii < retval.length; ii++) { - retval[ii] = data.get(ii); - } - return retval; - } - - /** Adds data, character array type. */ - public int putData(int size, byte[] inputData) { - for (int ii = 0; ii < size; ii++) { - data.add(inputData[ii]); - } - - return 0; - } - - /** Adds data, vector type. */ - public int putData(byte[] inputData) { - for (byte inputDatum : inputData) { - data.add(inputDatum); - } - return 0; - } - - /** Adds data, string type. */ - public int putData(String theString) { - - for (byte it : theString.getBytes()) { - data.add(it); - } - - return 0; - } - - public String toString() { - return "Raw"; - } -} - -/** - * Chunk that stores only strings, general-purpose chunk type. - */ -class StringChunk extends Chunk { - public String getString() { - rewindChunk(); - return getRndString(0); - } - - public StringChunk(Chunk parent) { - super(parent); - } - - public StringChunk(String ID, String data/* ="" */) { - super(ID); - if (!data.isEmpty()) - putData(data); - } - - public String toString() { - return "String"; - } -} - -/** - * Chunk type template that stores only one integer, general purpose chunk type. - */ -class IntChunk extends Chunk { - int m_dataSize; - - // Gets integer data. - public final long getInt() { - rewindChunk(); - return getNInt(m_dataSize); - } - - public void putInt(long data) { - deleteChunk(); - putNInt((int) data, m_dataSize); - } - - public IntChunk(Chunk parent) { - super(parent); - m_dataSize = 8; - } - - public IntChunk(String id, long data) { - super(id); - m_dataSize = 8; - putNInt((int) data, m_dataSize); - } - - public String toString() { - return String.format("Integer, size=%d", m_dataSize); - } -} - -/** - * Chunk that stores chunks, general-purpose chunk type. - */ -class ChunkChunk extends Chunk { - /** Returns next chunk. */ - public Chunk GetNextChunk(int idSize/* = 4 */) { - String id; - if (!(id = this.getRndString(idSize)).isEmpty()) { - Chunk subChunk = new Chunk(id); - - int size = (int) this.getNInt(8); - if (size > 0) { - byte[] theData; - theData = this.getVector(size); - if (theData.length == 0) - throw new FailGetChunkException(); - subChunk.putData(theData); - } - return subChunk; - } - - return null; - } - - /** Rewinds. */ - public void rewind() { - rewindChunk(); - } - - public void putChunk(Chunk src) { - String id = src.getID(); - putData(id); - - putNInt(src.getSize(), 8); - - byte[] data = src.getData(); - putData(data); - } - - /** Seeds an object. */ - public ChunkChunk(Chunk parent) { - super(parent); - } - - /** - * Creates an empty chunk given just the ID. - */ - public ChunkChunk(String id) { - super(id); - } - - /** Failed to get chunk. */ - public static class FailGetChunkException extends RuntimeException { - } - - /** Chunk write failed. */ - public static class FailPutChunkException extends Exception { - } - - public String toString() { - return "Chunk"; - } -} - -/** - * CommChunk - */ -class CommChunk extends Chunk { - - private final String version; - - private final int channelMode; - - private final int bitRate; - - private final int samplingRate; - - private final int securityLevel; - - /** - * - * @param parent - * @param version ="TWIN97012000" - */ - public CommChunk(Chunk parent, String version) { - super(parent); - this.version = version; - - this.rewindChunk(); - this.channelMode = (int) this.getNInt(8); - this.bitRate = (int) this.getNInt(8); - this.samplingRate = (int) this.getNInt(8); - this.securityLevel = (int) this.getNInt(8); - } - - public CommChunk(int channelMode, int bitRate, int samplingRate, int securityLevel, String version/* ="TWIN97012000" */) { - super("COMM"); - this.version = version; - - this.channelMode = channelMode; - this.bitRate = bitRate; - this.samplingRate = samplingRate; - this.securityLevel = securityLevel; - - this.rewindChunk(); - this.putNInt(channelMode, 8); - this.putNInt(bitRate, 8); - this.putNInt(samplingRate, 8); - this.putNInt(securityLevel, 8); - - } - - /** Gets channel mode. */ - public int getChannelMode() { - return channelMode; - } - - /** Gets bitrate. */ - public int getBitRate() { - return bitRate; - } - - /** Gets sampling frequency. */ - public int getSamplingRate() { - return samplingRate; - } - - /** Gets additional information. */ - public int getSecurityLevel() { - return securityLevel; - } - - /** */ - public String getVersion() { - return version; - } - - /** Construction failed. */ - static class FailConstructionException extends Exception { - } - - public String toString() { - return "COMM"; - } -} - -/** - * YearChunk - */ -class YearChunk extends Chunk { - int year; - - int month; - - public final int getYear() { - return year; - } - - public final int getMonth() { - return month; - } - - public YearChunk(String id, short year, char month) { - super(id); - this.year = year; - this.month = month; - putNInt(year, 2); - putNInt(month, 1); - } - - public YearChunk(Chunk parent) { - super(parent); - rewindChunk(); - year = (int) getNInt(2); - month = (int) getNInt(1); - } - - public String toString() { - return "YEAR"; - } -} - -/** - * EncdChunk - */ -class EncdChunk extends Chunk { - int year; - - int month; - - int day; - - int hour; - - int minute; - - int timeZone; - - public final int getYear() { - return year; - } - - final int getMonth() { - return month; - } - - final int getDay() { - return day; - } - - final int getHour() { - return hour; - } - - final int getMinute() { - return minute; - } - - final int getTimeZone() { - return timeZone; - } - - EncdChunk(String id, int year, int month, int day, int hour, int minute, int timeZone) { - super(id); - this.year = year; - this.month = month; - this.day = day; - this.hour = hour; - this.minute = minute; - this.timeZone = timeZone; - - putNInt(year, 2); - putNInt(month, 1); - putNInt(day, 1); - putNInt(hour, 1); - putNInt(minute, 1); - putNInt(timeZone, 1); - } - - EncdChunk(Chunk parent) { - super(parent); - rewindChunk(); - year = (int) getNInt(2); - month = (int) getNInt(1); - day = (int) getNInt(1); - hour = (int) getNInt(1); - minute = (int) getNInt(1); - timeZone = (int) getNInt(1); - } - - public String toString() { - return "ENCD"; - } -} - -// /////////////////////////////////////////////////////// -// Declaration of a subchunk type that uses a generic chunk type -// /////////////////////////////////////////////////////// -// TWIN Chunk -// typedef CChunkChunk CTwinChunk; // TWIN -// -// // Normal Chunk -// // COMM is not a normal chunk -// typedef CStringChunk CNameChunk; // NAME -// typedef CStringChunk CComtChunk; // COMT -// typedef CStringChunk CAuthChunk; // AUTH -// typedef CStringChunk CCpyrChunk; // (c) -// typedef CStringChunk CFileChunk; // FILE -// typedef CIntChunk CDsizChunk; // DSIZ -// typedef CChunk CExtrChunk; // EXTR -// -// // Extended Chunk/Normal -// typedef CStringChunk CAlbmChunk; // ALBM -// // YEAR is not a normal chunk -// // ENCD is not a normal chunk -// typedef CIntChunk CTracChunk; // TRAC -// typedef CStringChunk CLyrcChunk; // LYRC -// typedef CChunk CGuidChunk; // GUID -// typedef CStringChunk CIsrcChunk; // ISRC -// typedef CStringChunk CWordChunk; // WORD -// typedef CStringChunk CMuscChunk; // MUSC -// typedef CStringChunk CArngChunk; // ARNG -// typedef CStringChunk CProdChunk; // PROD -// typedef CStringChunk CRemxChunk; // REMX -// typedef CStringChunk CCdctChunk; // CDCT -// typedef CStringChunk CSingChunk; // SING -// typedef CStringChunk CBandChunk; // BAND -// typedef CStringChunk CPrsnChunk; // PRSN -// typedef CStringChunk CLablChunk; // LABL -// typedef CStringChunk CNoteChunk; // NOTE -// -// // Extended Chunk/Auxiliary -// typedef CChunkChunk CScndChunk; // SCND -// -// // Reserved Chunk -// typedef CChunk C_Id3Chunk; // _ID3 -// typedef CChunk C_YmhChunk; // _YMH -// typedef CChunk C_NttChunk; // _NTT +/* + * Copyright 1996-2000 (c) NTT Cyber Space Laboratories + * + * Modified on 2000.09.06 by N. Iwakami + */ + +package vavi.sound.twinvq; + +import java.util.List; + + +/** + * Provides the basic structure of chunks. Input and output raw data. + */ +class Chunk { + + private final String id; + + private List data; + + private int pos; + + /** + * Gets size byte integer from current position. + * @param size default: long integer + */ + protected long getNInt(int size/* =sizeof(long) */) { + final int mask = 0xff; + int ibyte; + long retval; + + retval = 0; + for (ibyte = 0; ibyte < size; ibyte++) { + retval <<= 8; + retval |= data.get(pos++) & mask; + } + + return retval; + } + + /** + * Gets a vector of size bytes from the current position. + * @param size default: all the rest + */ + protected byte[] getVector(int size/* = 0 */) { + + if (size == 0) { + size = data.size() - pos; + } + + byte[] retval = new byte[size]; + + if (pos + size > data.size()) { + return retval; + } + + for (int ii = 0; ii < size; ii++) { + retval[ii] = data.get(pos++); + } + return retval; + } + + /** + * Gets length string from current position. + * @param length default: all the rest + */ + protected String getRndString(int length/* = 0 */) { + if (length == 0) { + length = getSize(); + } + + if (pos + length > data.size()) { + return ""; + } + + StringBuilder theString = new StringBuilder(); + for (int ii = 0; ii < length; ii++) { + theString.append(data.get(pos++)); + } + + return theString.toString(); + } + + /** + * Writes size byte integer from current position. + * + * @param size default: long integer + */ + protected void putNInt(int inputData, int size/* =sizeof(long) */) { + final int mask = 0xff; + int ibyte; + byte data_tmp; + + if (size > 4) { + throw new FailPutException(); + } + + for (ibyte = 0; ibyte < size; ibyte++) { + data_tmp = (byte) ((inputData >> (8 * (size - ibyte - 1))) & mask); + data.add(data_tmp); + } + } + + /** Returns current position to the beginning. */ + protected void rewindChunk() { + pos = 0; + } + + /** Erases data. */ + protected void deleteChunk() { + data.clear(); + rewindChunk(); + } + + /** Get current position. */ + protected final int getCurrentPosition() { + return pos; + } + + /** exception */ + protected static class FailPutException extends RuntimeException { + } + + /** constructor */ + public Chunk(Chunk parent) { + id = parent.id; + pos = 0; + } + + /** constructor */ + public Chunk(String ID) { + id = ID; + pos = 0; + } + + /** Gets ID. */ + public final String getID() { + return id; + } + + /** Gets chunk size. */ + public final int getSize() { + return data.size(); + } + + public final byte[] getData() { + byte[] retval = new byte[data.size()]; + for (int ii = 0; ii < retval.length; ii++) { + retval[ii] = data.get(ii); + } + return retval; + } + + /** Adds data, character array type. */ + public int putData(int size, byte[] inputData) { + for (int ii = 0; ii < size; ii++) { + data.add(inputData[ii]); + } + + return 0; + } + + /** Adds data, vector type. */ + public int putData(byte[] inputData) { + for (byte inputDatum : inputData) { + data.add(inputDatum); + } + return 0; + } + + /** Adds data, string type. */ + public int putData(String theString) { + + for (byte it : theString.getBytes()) { + data.add(it); + } + + return 0; + } + + public String toString() { + return "Raw"; + } +} + +/** + * Chunk that stores only strings, general-purpose chunk type. + */ +class StringChunk extends Chunk { + public String getString() { + rewindChunk(); + return getRndString(0); + } + + public StringChunk(Chunk parent) { + super(parent); + } + + public StringChunk(String ID, String data/* ="" */) { + super(ID); + if (!data.isEmpty()) + putData(data); + } + + public String toString() { + return "String"; + } +} + +/** + * Chunk type template that stores only one integer, general purpose chunk type. + */ +class IntChunk extends Chunk { + int m_dataSize; + + // Gets integer data. + public final long getInt() { + rewindChunk(); + return getNInt(m_dataSize); + } + + public void putInt(long data) { + deleteChunk(); + putNInt((int) data, m_dataSize); + } + + public IntChunk(Chunk parent) { + super(parent); + m_dataSize = 8; + } + + public IntChunk(String id, long data) { + super(id); + m_dataSize = 8; + putNInt((int) data, m_dataSize); + } + + public String toString() { + return String.format("Integer, size=%d", m_dataSize); + } +} + +/** + * Chunk that stores chunks, general-purpose chunk type. + */ +class ChunkChunk extends Chunk { + /** Returns next chunk. */ + public Chunk GetNextChunk(int idSize/* = 4 */) { + String id; + if (!(id = this.getRndString(idSize)).isEmpty()) { + Chunk subChunk = new Chunk(id); + + int size = (int) this.getNInt(8); + if (size > 0) { + byte[] theData; + theData = this.getVector(size); + if (theData.length == 0) + throw new FailGetChunkException(); + subChunk.putData(theData); + } + return subChunk; + } + + return null; + } + + /** Rewinds. */ + public void rewind() { + rewindChunk(); + } + + public void putChunk(Chunk src) { + String id = src.getID(); + putData(id); + + putNInt(src.getSize(), 8); + + byte[] data = src.getData(); + putData(data); + } + + /** Seeds an object. */ + public ChunkChunk(Chunk parent) { + super(parent); + } + + /** + * Creates an empty chunk given just the ID. + */ + public ChunkChunk(String id) { + super(id); + } + + /** Failed to get chunk. */ + public static class FailGetChunkException extends RuntimeException { + } + + /** Chunk write failed. */ + public static class FailPutChunkException extends Exception { + } + + public String toString() { + return "Chunk"; + } +} + +/** + * CommChunk + */ +class CommChunk extends Chunk { + + private final String version; + + private final int channelMode; + + private final int bitRate; + + private final int samplingRate; + + private final int securityLevel; + + /** + * + * @param parent + * @param version ="TWIN97012000" + */ + public CommChunk(Chunk parent, String version) { + super(parent); + this.version = version; + + this.rewindChunk(); + this.channelMode = (int) this.getNInt(8); + this.bitRate = (int) this.getNInt(8); + this.samplingRate = (int) this.getNInt(8); + this.securityLevel = (int) this.getNInt(8); + } + + public CommChunk(int channelMode, int bitRate, int samplingRate, int securityLevel, String version/* ="TWIN97012000" */) { + super("COMM"); + this.version = version; + + this.channelMode = channelMode; + this.bitRate = bitRate; + this.samplingRate = samplingRate; + this.securityLevel = securityLevel; + + this.rewindChunk(); + this.putNInt(channelMode, 8); + this.putNInt(bitRate, 8); + this.putNInt(samplingRate, 8); + this.putNInt(securityLevel, 8); + + } + + /** Gets channel mode. */ + public int getChannelMode() { + return channelMode; + } + + /** Gets bitrate. */ + public int getBitRate() { + return bitRate; + } + + /** Gets sampling frequency. */ + public int getSamplingRate() { + return samplingRate; + } + + /** Gets additional information. */ + public int getSecurityLevel() { + return securityLevel; + } + + /** */ + public String getVersion() { + return version; + } + + /** Construction failed. */ + static class FailConstructionException extends Exception { + } + + public String toString() { + return "COMM"; + } +} + +/** + * YearChunk + */ +class YearChunk extends Chunk { + int year; + + int month; + + public final int getYear() { + return year; + } + + public final int getMonth() { + return month; + } + + public YearChunk(String id, short year, char month) { + super(id); + this.year = year; + this.month = month; + putNInt(year, 2); + putNInt(month, 1); + } + + public YearChunk(Chunk parent) { + super(parent); + rewindChunk(); + year = (int) getNInt(2); + month = (int) getNInt(1); + } + + public String toString() { + return "YEAR"; + } +} + +/** + * EncdChunk + */ +class EncdChunk extends Chunk { + int year; + + int month; + + int day; + + int hour; + + int minute; + + int timeZone; + + public final int getYear() { + return year; + } + + final int getMonth() { + return month; + } + + final int getDay() { + return day; + } + + final int getHour() { + return hour; + } + + final int getMinute() { + return minute; + } + + final int getTimeZone() { + return timeZone; + } + + EncdChunk(String id, int year, int month, int day, int hour, int minute, int timeZone) { + super(id); + this.year = year; + this.month = month; + this.day = day; + this.hour = hour; + this.minute = minute; + this.timeZone = timeZone; + + putNInt(year, 2); + putNInt(month, 1); + putNInt(day, 1); + putNInt(hour, 1); + putNInt(minute, 1); + putNInt(timeZone, 1); + } + + EncdChunk(Chunk parent) { + super(parent); + rewindChunk(); + year = (int) getNInt(2); + month = (int) getNInt(1); + day = (int) getNInt(1); + hour = (int) getNInt(1); + minute = (int) getNInt(1); + timeZone = (int) getNInt(1); + } + + public String toString() { + return "ENCD"; + } +} + +// /////////////////////////////////////////////////////// +// Declaration of a subchunk type that uses a generic chunk type +// /////////////////////////////////////////////////////// +// TWIN Chunk +// typedef CChunkChunk CTwinChunk; // TWIN +// +// // Normal Chunk +// // COMM is not a normal chunk +// typedef CStringChunk CNameChunk; // NAME +// typedef CStringChunk CComtChunk; // COMT +// typedef CStringChunk CAuthChunk; // AUTH +// typedef CStringChunk CCpyrChunk; // (c) +// typedef CStringChunk CFileChunk; // FILE +// typedef CIntChunk CDsizChunk; // DSIZ +// typedef CChunk CExtrChunk; // EXTR +// +// // Extended Chunk/Normal +// typedef CStringChunk CAlbmChunk; // ALBM +// // YEAR is not a normal chunk +// // ENCD is not a normal chunk +// typedef CIntChunk CTracChunk; // TRAC +// typedef CStringChunk CLyrcChunk; // LYRC +// typedef CChunk CGuidChunk; // GUID +// typedef CStringChunk CIsrcChunk; // ISRC +// typedef CStringChunk CWordChunk; // WORD +// typedef CStringChunk CMuscChunk; // MUSC +// typedef CStringChunk CArngChunk; // ARNG +// typedef CStringChunk CProdChunk; // PROD +// typedef CStringChunk CRemxChunk; // REMX +// typedef CStringChunk CCdctChunk; // CDCT +// typedef CStringChunk CSingChunk; // SING +// typedef CStringChunk CBandChunk; // BAND +// typedef CStringChunk CPrsnChunk; // PRSN +// typedef CStringChunk CLablChunk; // LABL +// typedef CStringChunk CNoteChunk; // NOTE +// +// // Extended Chunk/Auxiliary +// typedef CChunkChunk CScndChunk; // SCND +// +// // Reserved Chunk +// typedef CChunk C_Id3Chunk; // _ID3 +// typedef CChunk C_YmhChunk; // _YMH +// typedef CChunk C_NttChunk; // _NTT diff --git a/src/main/java/vavi/sound/twinvq/HeaderManager.java b/src/main/java/vavi/sound/twinvq/obsolate/HeaderManager.java similarity index 96% rename from src/main/java/vavi/sound/twinvq/HeaderManager.java rename to src/main/java/vavi/sound/twinvq/obsolate/HeaderManager.java index e8cac40..902863b 100644 --- a/src/main/java/vavi/sound/twinvq/HeaderManager.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/HeaderManager.java @@ -1,287 +1,287 @@ -/* - * Copyright 1996-2000 (c) NTT Cyber Space Laboratories - * - * Modified on 2000.09.06 by N. Iwakami - */ - -package vavi.sound.twinvq; - -import java.util.Map; - - -/** - * HeaderManager - */ -class HeaderManager { - /** Chunk bank of normal chunks */ - private Map primaryChunkBank; - - /** Auxiliary chunk chunk bank */ - private Map secondaryChunkBank; - - /** TWIN chunk ID, unlike a normal ID, consists of "TWIN" + "version identifier". */ - private String chunkID; - - /** Extracts chunks from chunk bank by ID. */ - static Chunk getChunk(Map chunkBank, String id) { - - // Query whether chunks are present or not. - if (chunkBank.containsKey(id)) { - // If it exists, return that chunk. - return chunkBank.get(id); - } - - // If there are no chunks, the process is abandoned. - throw new FailGetChunkException(); - } - - /** - * Input a chunk, pick up sub-chunks and deposit them in the chunk bank - * @param chunkBank In/Out chunk bank - * @param inputChunk input chunk - * Extract sub-chunks from Chunk-type chunks and register them in the chunk bank. - */ - private static void PickUpSubChunks(Map chunkBank, ChunkChunk inputChunk) { - // preparation - // chunk ID size (4 characters) - final int idSize = 4; - - // rewinds before parsing chunks - inputChunk.rewind(); - - Chunk subChunk; - try { - // extract subchunk from chunk - while ((subChunk = inputChunk.GetNextChunk(idSize)) != null) { - String id = subChunk.getID(); - // register the retrieved subchunk to the chunk bank - chunkBank.put(id, subChunk); - } - } catch (ChunkChunk.FailGetChunkException e) { - throw new WrongChunkFormatException(); - } - - } - - /** - * Initializes the header manager. Called only from #create(). - * Uses instead of constructor for initializing. - */ - void init(ChunkChunk twinChunk) { - try { - // put the basic chunks into the basic chunk bank. - PickUpSubChunks(primaryChunkBank, twinChunk); - - // if there are auxiliary chunks, put them in the auxiliary chunk bank. - ChunkChunk scndChunk = (ChunkChunk) getPrimaryChunk("SCND"); - PickUpSubChunks(secondaryChunkBank, scndChunk); - } catch (ChunkChunk.FailGetChunkException e) { - // Debug.pprintln("Fail!!"); - } catch (FailGetChunkException e) { - // Debug.pprintln("Fail getting SCND chnunk"); - } - } - - /** - * Constructor. User cannot call. Use Create() instead. - * This specification was made because there is a possibility that an error may occur during initialization. - */ - private HeaderManager() { - } - - /** Chunk format is incorrect */ - static class WrongChunkFormatException extends RuntimeException { - } - - /** Pulls out regular chunks. */ - public Chunk getPrimaryChunk(String id) { - return getChunk(primaryChunkBank, id); - } - - /** Pulls out auxiliary chunks. */ - public Chunk getSecondaryChunk(String id) { - return getChunk(secondaryChunkBank, id); - } - - /** */ - public final String getID() { - return chunkID; - } - - /** - * Generates header manager. - * Create a chunk manager. instead of constructor. - * - * @return pointer to the generated header manager, or null if generation fails - */ - static HeaderManager create(ChunkChunk twinChunk) { - try { - // generate a chunk manager. - HeaderManager theManager = null; - theManager = new HeaderManager(); - theManager.init(twinChunk); - - // get TWIN chunk header - theManager.chunkID = twinChunk.getID(); - if (theManager.chunkID.isEmpty()) { - return null; - } - - return theManager; - } catch (WrongChunkFormatException e) { - return null; - } - } - - /** Failed to get chunk */ - static class FailGetChunkException extends RuntimeException { - } -} - -// support class for reading data from header manager - -/** - * Unified string information, General information about string chunks, - * can be obtained from header manager - */ -class UniStringInfo { - public enum CharCode { - unknown_code(-1), - ISO_8859_1(0), - Unicode(1), - S_JIS(2), - JIS(3), - EUC(4); - final int value; - - CharCode(int value) { - this.value = value; - } - } - - /** chunk ID */ - private String id; - - /** basic string */ - private String primary; - - /** auxiliary string */ - private String secondary; - - /** basic string character code */ - private int primaryCharCode; - - /** character code of auxiliary string */ - private int secondaryCharCode; - - private void putPrimaryInfo(StringChunk theChunk) { - // check ID - if (id.isEmpty()) { - id = theChunk.getID(); - } else if (!id.equals(theChunk.getID())) { - throw new IDException(); - } - - // write data - primary = theChunk.getString(); - } - - private void putSecondaryInfo(StringChunk theChunk) { - // check ID - if (id.isEmpty()) { - id = theChunk.getID(); - } else if (!id.equals(theChunk.getID())) { - throw new IDException(); - } - - // write data - String secondary = theChunk.getString(); - // check if there is character code information - if (secondary.length() < 2) { - throw new NoCharCodeException(); - } - - // character code data - primaryCharCode = secondary.charAt(0) - '0'; - secondaryCharCode = secondary.charAt(1) - '0'; - - secondary = secondary.substring(2); - } - - /** During initialization, the IDs of the basic chunk and auxiliary chunk are different. */ - static class IDException extends RuntimeException { - } - - /** There is no character code information in the auxiliary chunk */ - static class NoCharCodeException extends RuntimeException { - } - - /** Returns basic string. */ - public final String getPrimaryInfo() { - return primary; - } - - /** Returns auxiliary string. */ - public final String getSecondaryInfo() { - return secondary; - } - - /** Returns the character code of the basic string. */ - public final int getPrimaryCharCode() { - return primaryCharCode; - } - - /** Returns the character code of the auxiliary string. */ - public final int getSecondaryCharCode() { - return secondaryCharCode; - } - - /** - * Constructor, give all necessary information. - * - * @param secondary deault = "" - * @param primCode default = unknown_code - * @param scndCode default = unknown_code - */ - UniStringInfo(String id, String primary, String secondary, int primCode, int scndCode) { - this.id = id; - this.primary = primary; - this.secondary = secondary; - this.primaryCharCode = primCode; - this.secondaryCharCode = scndCode; - } - - /** Constructor, read from header manager. */ - UniStringInfo(String id, HeaderManager theManager) { - // set ID - this.id = id; - primaryCharCode = -1; - secondaryCharCode = -1; - - int flag = 0; - // copy basic chunk information - try { - StringChunk primChunk = new StringChunk(theManager.getPrimaryChunk(id)); - putPrimaryInfo(primChunk); - } catch (HeaderManager.FailGetChunkException e1) { - flag = 1; - // throw new err_FailConstruction(); - } - if (flag != 0) { - throw new FailConstructionException(); - } - - // copy auxiliary chunk information - try { - StringChunk scndChunk = new StringChunk(theManager.getSecondaryChunk(id)); - putSecondaryInfo(scndChunk); - } catch (HeaderManager.FailGetChunkException e) { - } catch (NoCharCodeException e) { - throw new FailConstructionException(); - } - } - - /** Construction failure */ - static class FailConstructionException extends RuntimeException { - } -} +/* + * Copyright 1996-2000 (c) NTT Cyber Space Laboratories + * + * Modified on 2000.09.06 by N. Iwakami + */ + +package vavi.sound.twinvq; + +import java.util.Map; + + +/** + * HeaderManager + */ +class HeaderManager { + /** Chunk bank of normal chunks */ + private Map primaryChunkBank; + + /** Auxiliary chunk chunk bank */ + private Map secondaryChunkBank; + + /** TWIN chunk ID, unlike a normal ID, consists of "TWIN" + "version identifier". */ + private String chunkID; + + /** Extracts chunks from chunk bank by ID. */ + static Chunk getChunk(Map chunkBank, String id) { + + // Query whether chunks are present or not. + if (chunkBank.containsKey(id)) { + // If it exists, return that chunk. + return chunkBank.get(id); + } + + // If there are no chunks, the process is abandoned. + throw new FailGetChunkException(); + } + + /** + * Input a chunk, pick up sub-chunks and deposit them in the chunk bank + * @param chunkBank In/Out chunk bank + * @param inputChunk input chunk + * Extract sub-chunks from Chunk-type chunks and register them in the chunk bank. + */ + private static void PickUpSubChunks(Map chunkBank, ChunkChunk inputChunk) { + // preparation + // chunk ID size (4 characters) + final int idSize = 4; + + // rewinds before parsing chunks + inputChunk.rewind(); + + Chunk subChunk; + try { + // extract subchunk from chunk + while ((subChunk = inputChunk.GetNextChunk(idSize)) != null) { + String id = subChunk.getID(); + // register the retrieved subchunk to the chunk bank + chunkBank.put(id, subChunk); + } + } catch (ChunkChunk.FailGetChunkException e) { + throw new WrongChunkFormatException(); + } + + } + + /** + * Initializes the header manager. Called only from #create(). + * Uses instead of constructor for initializing. + */ + void init(ChunkChunk twinChunk) { + try { + // put the basic chunks into the basic chunk bank. + PickUpSubChunks(primaryChunkBank, twinChunk); + + // if there are auxiliary chunks, put them in the auxiliary chunk bank. + ChunkChunk scndChunk = (ChunkChunk) getPrimaryChunk("SCND"); + PickUpSubChunks(secondaryChunkBank, scndChunk); + } catch (ChunkChunk.FailGetChunkException e) { + // Debug.pprintln("Fail!!"); + } catch (FailGetChunkException e) { + // Debug.pprintln("Fail getting SCND chnunk"); + } + } + + /** + * Constructor. User cannot call. Use Create() instead. + * This specification was made because there is a possibility that an error may occur during initialization. + */ + private HeaderManager() { + } + + /** Chunk format is incorrect */ + static class WrongChunkFormatException extends RuntimeException { + } + + /** Pulls out regular chunks. */ + public Chunk getPrimaryChunk(String id) { + return getChunk(primaryChunkBank, id); + } + + /** Pulls out auxiliary chunks. */ + public Chunk getSecondaryChunk(String id) { + return getChunk(secondaryChunkBank, id); + } + + /** */ + public final String getID() { + return chunkID; + } + + /** + * Generates header manager. + * Create a chunk manager. instead of constructor. + * + * @return pointer to the generated header manager, or null if generation fails + */ + static HeaderManager create(ChunkChunk twinChunk) { + try { + // generate a chunk manager. + HeaderManager theManager = null; + theManager = new HeaderManager(); + theManager.init(twinChunk); + + // get TWIN chunk header + theManager.chunkID = twinChunk.getID(); + if (theManager.chunkID.isEmpty()) { + return null; + } + + return theManager; + } catch (WrongChunkFormatException e) { + return null; + } + } + + /** Failed to get chunk */ + static class FailGetChunkException extends RuntimeException { + } +} + +// support class for reading data from header manager + +/** + * Unified string information, General information about string chunks, + * can be obtained from header manager + */ +class UniStringInfo { + public enum CharCode { + unknown_code(-1), + ISO_8859_1(0), + Unicode(1), + S_JIS(2), + JIS(3), + EUC(4); + final int value; + + CharCode(int value) { + this.value = value; + } + } + + /** chunk ID */ + private String id; + + /** basic string */ + private String primary; + + /** auxiliary string */ + private String secondary; + + /** basic string character code */ + private int primaryCharCode; + + /** character code of auxiliary string */ + private int secondaryCharCode; + + private void putPrimaryInfo(StringChunk theChunk) { + // check ID + if (id.isEmpty()) { + id = theChunk.getID(); + } else if (!id.equals(theChunk.getID())) { + throw new IDException(); + } + + // write data + primary = theChunk.getString(); + } + + private void putSecondaryInfo(StringChunk theChunk) { + // check ID + if (id.isEmpty()) { + id = theChunk.getID(); + } else if (!id.equals(theChunk.getID())) { + throw new IDException(); + } + + // write data + String secondary = theChunk.getString(); + // check if there is character code information + if (secondary.length() < 2) { + throw new NoCharCodeException(); + } + + // character code data + primaryCharCode = secondary.charAt(0) - '0'; + secondaryCharCode = secondary.charAt(1) - '0'; + + secondary = secondary.substring(2); + } + + /** During initialization, the IDs of the basic chunk and auxiliary chunk are different. */ + static class IDException extends RuntimeException { + } + + /** There is no character code information in the auxiliary chunk */ + static class NoCharCodeException extends RuntimeException { + } + + /** Returns basic string. */ + public final String getPrimaryInfo() { + return primary; + } + + /** Returns auxiliary string. */ + public final String getSecondaryInfo() { + return secondary; + } + + /** Returns the character code of the basic string. */ + public final int getPrimaryCharCode() { + return primaryCharCode; + } + + /** Returns the character code of the auxiliary string. */ + public final int getSecondaryCharCode() { + return secondaryCharCode; + } + + /** + * Constructor, give all necessary information. + * + * @param secondary deault = "" + * @param primCode default = unknown_code + * @param scndCode default = unknown_code + */ + UniStringInfo(String id, String primary, String secondary, int primCode, int scndCode) { + this.id = id; + this.primary = primary; + this.secondary = secondary; + this.primaryCharCode = primCode; + this.secondaryCharCode = scndCode; + } + + /** Constructor, read from header manager. */ + UniStringInfo(String id, HeaderManager theManager) { + // set ID + this.id = id; + primaryCharCode = -1; + secondaryCharCode = -1; + + int flag = 0; + // copy basic chunk information + try { + StringChunk primChunk = new StringChunk(theManager.getPrimaryChunk(id)); + putPrimaryInfo(primChunk); + } catch (HeaderManager.FailGetChunkException e1) { + flag = 1; + // throw new err_FailConstruction(); + } + if (flag != 0) { + throw new FailConstructionException(); + } + + // copy auxiliary chunk information + try { + StringChunk scndChunk = new StringChunk(theManager.getSecondaryChunk(id)); + putSecondaryInfo(scndChunk); + } catch (HeaderManager.FailGetChunkException e) { + } catch (NoCharCodeException e) { + throw new FailConstructionException(); + } + } + + /** Construction failure */ + static class FailConstructionException extends RuntimeException { + } +} diff --git a/src/main/java/vavi/sound/twinvq/Player.java b/src/main/java/vavi/sound/twinvq/obsolate/Player.java similarity index 100% rename from src/main/java/vavi/sound/twinvq/Player.java rename to src/main/java/vavi/sound/twinvq/obsolate/Player.java diff --git a/src/main/java/vavi/sound/twinvq/TwinVQ.java b/src/main/java/vavi/sound/twinvq/obsolate/TwinVQ.java similarity index 95% rename from src/main/java/vavi/sound/twinvq/TwinVQ.java rename to src/main/java/vavi/sound/twinvq/obsolate/TwinVQ.java index ab6a7a4..a863d01 100644 --- a/src/main/java/vavi/sound/twinvq/TwinVQ.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/TwinVQ.java @@ -1,374 +1,374 @@ -/* - * Copyright (c) 2007 by Naohide Sano, All rights reserved. - * - * Programmed by Naohide Sano - */ - -package vavi.sound.twinvq; - - - -/** - * TwinVQ - * - * @author Naohide Sano (nsano) - * @version 0.00 070202 initial version
- */ -final class TwinVQ { - - /** Initialization error code */ - enum InitErrorCode { - /** no error */ - TVQ_NO_ERROR, - /** general */ - TVQ_ERROR, - /** wrong version */ - TVQ_ERROR_VERSION, - /** channel setting error */ - TVQ_ERROR_CHANNEL, - /** wrong coding mode */ - TVQ_ERROR_MODE, - /** inner parameter setting error */ - TVQ_ERROR_PARAM, - /** wrong number of VQ pre-selection candidates, used only in encoder */ - TVQ_ERROR_N_CAN, - } - - /** version ID */ - static final int TVQ_UNKNOWN_VERSION = -1; - - static final int V2 = 0; - - static final int V2PP = 1; - - static final int N_VERSIONS = 2; - - /** window types */ - enum WindowType { - ONLY_LONG_WINDOW, - LONG_SHORT_WINDOW, - ONLY_SHORT_WINDOW, - SHORT_LONG_WINDOW, - SHORT_MEDIUM_WINDOW, - MEDIUM_LONG_WINDOW, - LONG_MEDIUM_WINDOW, - MEDIUM_SHORT_WINDOW, - ONLY_MEDIUM_WINDOW, - } - - /** block types */ - enum BlockType { - BLK_SHORT, - BLK_MEDIUM, - BLK_LONG, - BLK_PPC, - } - - /** number of block types */ - static final int N_BTYPE = 3; - - /** - * number of interleave types, enum BLOCK_TYPE is commonly used for - * detecting interleave types. - */ - static final int N_INTR_TYPE = 4; - - /** maximum number of channels */ - static final int N_CH_MAX = 2; - - /** type definition of code information interface */ - static class Index { - /** block type */ - int[] w_type = new int[1]; - - int[] btype = new int[1]; - - /** FBC info */ - int[][] segment_sw = new int[N_CH_MAX][]; - - int[][] band_sw = new int[N_CH_MAX][]; - - int[][] fg_intensity = new int[N_CH_MAX][]; - - /** VQ info */ - int[] wvq; - - /** BSE info */ - int[] fw; - - int[] fw_alf; - - /** gain info */ - int[] pow; - - /** LSP info */ - int[][] lsp = new int[N_CH_MAX][]; - - /** PPC info */ - int[] pit = new int[N_CH_MAX]; - - int[] pls; - - int[] pgain = new int[N_CH_MAX]; - - /** EBC info */ - int[][] bc = new int[N_CH_MAX][]; - - Void manager; - } - - /* type definition of tvqConfInfoSubBlock */ - static class ConfInfoSubBlock { - /** subframe size */ - int sf_sz; - - /** number of subframes */ - int nsf; - - /** number of division of weighted interleave vector quantization */ - int[] ndiv = new int[1]; - - /** number of Bark-scale subbands */ - int ncrb; - - /** number of division of BSE VQ */ - int fw_ndiv; - - /** number of bits for BSE VQ */ - int fw_nbit; - - /** number of sub-blocks for gain coding */ - int nsubg; - - /** PPC switch */ - int ppc_enable; - - /** EBC switch */ - int ebc_enable; - - /** EBC base band */ - int ebc_crb_base; - - /** EBC bits */ - int ebc_bits; - - /** FBC switch */ - int fbc_enable; - - /** FBC number of segments */ - int fbc_n_segment; - - /** FBC number of subbands */ - int fbc_nband; - - /** FBC subband table */ - int[] fbc_crb_tbl; - } - - /** type definition of tvqConfInfo */ - static class ConfInfo { - /** frame configuration */ - int N_CH; - - /** window type coding */ - int BITS_WTYPE; - - /** LSP coding */ - int LSP_BIT0; - - int LSP_BIT1; - - int LSP_BIT2; - - int LSP_SPLIT; - - /** Bark-scale envelope coding */ - int FW_ARSW_BITS; - - /** gain coding */ - int GAIN_BITS; - - int SUB_GAIN_BITS; - - /** pitch excitation */ - int N_DIV_P; - - int BASF_BIT; - - int PGAIN_BIT; - - /** block type dependent parameters */ - ConfInfoSubBlock[] cfg = new ConfInfoSubBlock[N_BTYPE]; - } - - /* - * Definitions about TwinVQ bitstream header - */ - static final int BUFSIZ = 1024; - - static final int KEYWORD_BYTES = 4; - - static final int VERSION_BYTES = 8; - - static final int ELEM_BYTES = 8 /* sizeof(unsigned long) */; - - /* - */ - static class HeaderInfo { - byte[] id = new byte[KEYWORD_BYTES + VERSION_BYTES + 1]; - - int size; - - /* Common Chunk */ - /** channel mode (mono:0/stereo:1) */ - int channelMode; - - /** bit rate (kbit/s) */ - int bitRate; - - /** sampling rate (44.1 kHz -> 44) */ - int samplingRate; - - /** security level (always 0) */ - int securityLevel; - - /** Text Chunk */ - byte[] name = new byte[BUFSIZ]; - - byte[] comt = new byte[BUFSIZ]; - - byte[] auth = new byte[BUFSIZ]; - - byte[] cpyr = new byte[BUFSIZ]; - - byte[] file = new byte[BUFSIZ]; - - /** add by OKAMOTO 99.12.21 */ - byte[] extr = new byte[BUFSIZ]; - - /** Data size chunk */ - int dsiz; - - /** extended tags - added by Pawel Garbacz */ - byte[] albm = new byte[BUFSIZ]; - - byte[] year = new byte[BUFSIZ]; - - byte[] trck = new byte[BUFSIZ]; - } - - // encoding - - static class EncSpecificInfo { - int N_CAN_GLOBAL; - } - - native int TvqEncInitialize(HeaderInfo setupInfo, EncSpecificInfo encInfo, Index index, int dispErrorMessageBox); - - native void TvqEncTerminate(Index index); - - native void TvqEncGetVectorInfo(int[][] bits0, int[][] bits1); - - native void TvqEncResetFrameCounter(); - - // TwinVQ encoder function - native void TvqEncodeFrame(float[] sig_in, Index index); - - native void TvqEncUpdateVectorInfo(int varbits, int ndiv, int[] bits0, int[] bits1); - - native void TvqEncSetFrameCounter(int position); - - // TwinVQ query functions - native int TvqEncGetFrameSize(); - - native int TvqEncGetNumChannels(); - - native int TvqEncGetNumFixedBitsPerFrame(); - - native void TvqEncGetSetupInfo(HeaderInfo setupInfo); - - native float TvqEncGetSamplingRate(); - - native int TvqEncGetBitRate(); - - native void TvqEncGetConfInfo(ConfInfo cf); - - native int TvqEncGetNumFrames(); - - native int TvqGetVersionID(int versionNum, String versionString); - - native int TvqEncCheckVersion(String strTvqID); - - native int TvqEncGetModuleVersion(String versionString); - - // decoding - - native int TvqInitialize(HeaderInfo setupInfo, Index index, int dispErrorMessageBox); - - native void TvqTerminate(Index index); - - native void TvqGetVectorInfo(int[][] bits0, int[][] bits1); - - native void TvqResetFrameCounter(); - - // TwinVQ decoder function - native void TvqDecodeFrame(Index indexp, float[] out); - - native int TvqWtypeToBtype(int w_type, int[] btype); - - native void TvqUpdateVectorInfo(int varbits, int[] ndiv, int[] bits0, int[] bits1); - - native void TvqSetFrameCounter(int position); - - /** TwinVQ query functions */ - native int TvqCheckVersion(String versionID); - - /** setup information */ - native void TvqGetSetupInfo(HeaderInfo setupInfo); - - /** configuration information */ - native void TvqGetConfInfo(ConfInfo cf); - - /** frame size */ - native int TvqGetFrameSize(); - - /** number of channels */ - native int TvqGetNumChannels(); - - /** total bitrate */ - native int TvqGetBitRate(); - - /** sampling rate */ - native float TvqGetSamplingRate(); - - /** number of fixed bits per frame */ - native int TvqGetNumFixedBitsPerFrame(); - - /** number of decoded frame */ - native int TvqGetNumFrames(); - - native int TvqGetModuleVersion(String versionString); - - // V2PLUS SUPPORT - /** - * TwinVQ FB coding tool control count number of used bits - */ - native void TvqFbCountUsedBits(int nbit); - - /** query average bitrate for the tool */ - native float TvqGetFbCurrentBitrate(); - - /** query total number of used bits */ - native int TvqGetFbTotalBits(); - - // - - private static final TwinVQ instance = new TwinVQ(); - - private TwinVQ() { - } - - public static TwinVQ getInstance() { - return instance; - } -} +/* + * Copyright (c) 2007 by Naohide Sano, All rights reserved. + * + * Programmed by Naohide Sano + */ + +package vavi.sound.twinvq; + + + +/** + * TwinVQ + * + * @author Naohide Sano (nsano) + * @version 0.00 070202 initial version
+ */ +final class TwinVQ { + + /** Initialization error code */ + enum InitErrorCode { + /** no error */ + TVQ_NO_ERROR, + /** general */ + TVQ_ERROR, + /** wrong version */ + TVQ_ERROR_VERSION, + /** channel setting error */ + TVQ_ERROR_CHANNEL, + /** wrong coding mode */ + TVQ_ERROR_MODE, + /** inner parameter setting error */ + TVQ_ERROR_PARAM, + /** wrong number of VQ pre-selection candidates, used only in encoder */ + TVQ_ERROR_N_CAN, + } + + /** version ID */ + static final int TVQ_UNKNOWN_VERSION = -1; + + static final int V2 = 0; + + static final int V2PP = 1; + + static final int N_VERSIONS = 2; + + /** window types */ + enum WindowType { + ONLY_LONG_WINDOW, + LONG_SHORT_WINDOW, + ONLY_SHORT_WINDOW, + SHORT_LONG_WINDOW, + SHORT_MEDIUM_WINDOW, + MEDIUM_LONG_WINDOW, + LONG_MEDIUM_WINDOW, + MEDIUM_SHORT_WINDOW, + ONLY_MEDIUM_WINDOW, + } + + /** block types */ + enum BlockType { + BLK_SHORT, + BLK_MEDIUM, + BLK_LONG, + BLK_PPC, + } + + /** number of block types */ + static final int N_BTYPE = 3; + + /** + * number of interleave types, enum BLOCK_TYPE is commonly used for + * detecting interleave types. + */ + static final int N_INTR_TYPE = 4; + + /** maximum number of channels */ + static final int N_CH_MAX = 2; + + /** type definition of code information interface */ + static class Index { + /** block type */ + int[] w_type = new int[1]; + + int[] btype = new int[1]; + + /** FBC info */ + int[][] segment_sw = new int[N_CH_MAX][]; + + int[][] band_sw = new int[N_CH_MAX][]; + + int[][] fg_intensity = new int[N_CH_MAX][]; + + /** VQ info */ + int[] wvq; + + /** BSE info */ + int[] fw; + + int[] fw_alf; + + /** gain info */ + int[] pow; + + /** LSP info */ + int[][] lsp = new int[N_CH_MAX][]; + + /** PPC info */ + int[] pit = new int[N_CH_MAX]; + + int[] pls; + + int[] pgain = new int[N_CH_MAX]; + + /** EBC info */ + int[][] bc = new int[N_CH_MAX][]; + + Void manager; + } + + /* type definition of tvqConfInfoSubBlock */ + static class ConfInfoSubBlock { + /** subframe size */ + int sf_sz; + + /** number of subframes */ + int nsf; + + /** number of division of weighted interleave vector quantization */ + int[] ndiv = new int[1]; + + /** number of Bark-scale subbands */ + int ncrb; + + /** number of division of BSE VQ */ + int fw_ndiv; + + /** number of bits for BSE VQ */ + int fw_nbit; + + /** number of sub-blocks for gain coding */ + int nsubg; + + /** PPC switch */ + int ppc_enable; + + /** EBC switch */ + int ebc_enable; + + /** EBC base band */ + int ebc_crb_base; + + /** EBC bits */ + int ebc_bits; + + /** FBC switch */ + int fbc_enable; + + /** FBC number of segments */ + int fbc_n_segment; + + /** FBC number of subbands */ + int fbc_nband; + + /** FBC subband table */ + int[] fbc_crb_tbl; + } + + /** type definition of tvqConfInfo */ + static class ConfInfo { + /** frame configuration */ + int N_CH; + + /** window type coding */ + int BITS_WTYPE; + + /** LSP coding */ + int LSP_BIT0; + + int LSP_BIT1; + + int LSP_BIT2; + + int LSP_SPLIT; + + /** Bark-scale envelope coding */ + int FW_ARSW_BITS; + + /** gain coding */ + int GAIN_BITS; + + int SUB_GAIN_BITS; + + /** pitch excitation */ + int N_DIV_P; + + int BASF_BIT; + + int PGAIN_BIT; + + /** block type dependent parameters */ + ConfInfoSubBlock[] cfg = new ConfInfoSubBlock[N_BTYPE]; + } + + /* + * Definitions about TwinVQ bitstream header + */ + static final int BUFSIZ = 1024; + + static final int KEYWORD_BYTES = 4; + + static final int VERSION_BYTES = 8; + + static final int ELEM_BYTES = 8 /* sizeof(unsigned long) */; + + /* + */ + static class HeaderInfo { + byte[] id = new byte[KEYWORD_BYTES + VERSION_BYTES + 1]; + + int size; + + /* Common Chunk */ + /** channel mode (mono:0/stereo:1) */ + int channelMode; + + /** bit rate (kbit/s) */ + int bitRate; + + /** sampling rate (44.1 kHz -> 44) */ + int samplingRate; + + /** security level (always 0) */ + int securityLevel; + + /** Text Chunk */ + byte[] name = new byte[BUFSIZ]; + + byte[] comt = new byte[BUFSIZ]; + + byte[] auth = new byte[BUFSIZ]; + + byte[] cpyr = new byte[BUFSIZ]; + + byte[] file = new byte[BUFSIZ]; + + /** add by OKAMOTO 99.12.21 */ + byte[] extr = new byte[BUFSIZ]; + + /** Data size chunk */ + int dsiz; + + /** extended tags - added by Pawel Garbacz */ + byte[] albm = new byte[BUFSIZ]; + + byte[] year = new byte[BUFSIZ]; + + byte[] trck = new byte[BUFSIZ]; + } + + // encoding + + static class EncSpecificInfo { + int N_CAN_GLOBAL; + } + + native int TvqEncInitialize(HeaderInfo setupInfo, EncSpecificInfo encInfo, Index index, int dispErrorMessageBox); + + native void TvqEncTerminate(Index index); + + native void TvqEncGetVectorInfo(int[][] bits0, int[][] bits1); + + native void TvqEncResetFrameCounter(); + + // TwinVQ encoder function + native void TvqEncodeFrame(float[] sig_in, Index index); + + native void TvqEncUpdateVectorInfo(int varbits, int ndiv, int[] bits0, int[] bits1); + + native void TvqEncSetFrameCounter(int position); + + // TwinVQ query functions + native int TvqEncGetFrameSize(); + + native int TvqEncGetNumChannels(); + + native int TvqEncGetNumFixedBitsPerFrame(); + + native void TvqEncGetSetupInfo(HeaderInfo setupInfo); + + native float TvqEncGetSamplingRate(); + + native int TvqEncGetBitRate(); + + native void TvqEncGetConfInfo(ConfInfo cf); + + native int TvqEncGetNumFrames(); + + native int TvqGetVersionID(int versionNum, String versionString); + + native int TvqEncCheckVersion(String strTvqID); + + native int TvqEncGetModuleVersion(String versionString); + + // decoding + + native int TvqInitialize(HeaderInfo setupInfo, Index index, int dispErrorMessageBox); + + native void TvqTerminate(Index index); + + native void TvqGetVectorInfo(int[][] bits0, int[][] bits1); + + native void TvqResetFrameCounter(); + + // TwinVQ decoder function + native void TvqDecodeFrame(Index indexp, float[] out); + + native int TvqWtypeToBtype(int w_type, int[] btype); + + native void TvqUpdateVectorInfo(int varbits, int[] ndiv, int[] bits0, int[] bits1); + + native void TvqSetFrameCounter(int position); + + /** TwinVQ query functions */ + native int TvqCheckVersion(String versionID); + + /** setup information */ + native void TvqGetSetupInfo(HeaderInfo setupInfo); + + /** configuration information */ + native void TvqGetConfInfo(ConfInfo cf); + + /** frame size */ + native int TvqGetFrameSize(); + + /** number of channels */ + native int TvqGetNumChannels(); + + /** total bitrate */ + native int TvqGetBitRate(); + + /** sampling rate */ + native float TvqGetSamplingRate(); + + /** number of fixed bits per frame */ + native int TvqGetNumFixedBitsPerFrame(); + + /** number of decoded frame */ + native int TvqGetNumFrames(); + + native int TvqGetModuleVersion(String versionString); + + // V2PLUS SUPPORT + /** + * TwinVQ FB coding tool control count number of used bits + */ + native void TvqFbCountUsedBits(int nbit); + + /** query average bitrate for the tool */ + native float TvqGetFbCurrentBitrate(); + + /** query total number of used bits */ + native int TvqGetFbTotalBits(); + + // + + private static final TwinVQ instance = new TwinVQ(); + + private TwinVQ() { + } + + public static TwinVQ getInstance() { + return instance; + } +} diff --git a/src/main/java/vavi/sound/twinvq/TwinVQInputStream.java b/src/main/java/vavi/sound/twinvq/obsolate/TwinVQInputStream.java similarity index 100% rename from src/main/java/vavi/sound/twinvq/TwinVQInputStream.java rename to src/main/java/vavi/sound/twinvq/obsolate/TwinVQInputStream.java diff --git a/src/main/java/vavi/sound/twinvq/TwinVQOutputStream.java b/src/main/java/vavi/sound/twinvq/obsolate/TwinVQOutputStream.java similarity index 100% rename from src/main/java/vavi/sound/twinvq/TwinVQOutputStream.java rename to src/main/java/vavi/sound/twinvq/obsolate/TwinVQOutputStream.java From c8d81871acb0449f85ef9c6db50366592351cfe8 Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Fri, 26 Apr 2024 17:19:15 +0900 Subject: [PATCH 11/14] anti i18n clean up --- .../vavi/apps/packetcast/StateWaiter.java | 3 +- src/main/java/vavi/sound/ilbc/Ilbc.java | 52 +++++++++---------- src/main/java/vavi/sound/ilbc/readme.md | 13 +++-- src/main/java/vavi/sound/ldcelp/readme.md | 15 +++--- src/main/java/vavi/sound/mfi/ittake/readme.md | 6 +-- src/main/java/vavi/sound/mp3/readme.md | 12 +++-- .../vavi/sound/pcm/resampling/laoe/readme.md | 10 ++-- .../vavi/sound/pcm/resampling/sox/readme.md | 18 ++++--- .../java/vavi/sound/sampled/rococoa/readme.md | 12 ++--- .../vavi/sound/twinvq/obsolate/BFile.java | 6 +-- .../vavi/sound/twinvq/obsolate/BStream.java | 17 +++--- .../vavi/sound/twinvq/obsolate/Chunk.java | 6 +-- .../sound/twinvq/obsolate/HeaderManager.java | 6 +-- .../vavi/sound/twinvq/obsolate/Player.java | 13 +++-- .../vavi/sound/twinvq/obsolate/TwinVQ.java | 4 +- .../twinvq/obsolate/TwinVQInputStream.java | 16 +----- .../twinvq/obsolate/TwinVQOutputStream.java | 4 +- src/main/java/vavi/sound/twinvq/readme.md | 10 ++-- src/test/java/vavi/sound/ilbc/IlbcTest.java | 7 +-- .../vavi/sound/mp3/Mp3InputStreamTest.java | 3 -- .../java/vavi/sound/twinvq/TwinVQTest.java | 1 + 21 files changed, 117 insertions(+), 117 deletions(-) diff --git a/src/main/java/vavi/apps/packetcast/StateWaiter.java b/src/main/java/vavi/apps/packetcast/StateWaiter.java index 331de7d..9cf241e 100644 --- a/src/main/java/vavi/apps/packetcast/StateWaiter.java +++ b/src/main/java/vavi/apps/packetcast/StateWaiter.java @@ -1,10 +1,11 @@ -package vavi.apps.packetcast; /* * Copyright (c) 2006 by Naohide Sano, All rights reserved. * * Programmed by Naohide Sano */ +package vavi.apps.packetcast; + import javax.media.ControllerErrorEvent; import javax.media.ControllerEvent; import javax.media.ControllerListener; diff --git a/src/main/java/vavi/sound/ilbc/Ilbc.java b/src/main/java/vavi/sound/ilbc/Ilbc.java index a054d3a..5981e84 100644 --- a/src/main/java/vavi/sound/ilbc/Ilbc.java +++ b/src/main/java/vavi/sound/ilbc/Ilbc.java @@ -6,12 +6,16 @@ package vavi.sound.ilbc; +import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Arrays; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.UnsupportedAudioFileException; /** @@ -262,7 +266,7 @@ private static class Decoder { /* Start state location, gain and samples */ start_bits = new int[] { 3, 0, 0, 0, 0 }; startfirst_bits = new int[] { 1, 0, 0, 0, 0 }; - startfirst_bits = new int[] { 6, 0, 0, 0, 0 }; + scale_bits = new int[] { 6, 0, 0, 0, 0 }; state_bits = new int[] { 0, 1, 2, 0, 0 }; /* extra CB index and extra CB gain */ extra_cb_index = new int[][] { @@ -844,14 +848,12 @@ int decode(Decoder decoder, byte[] decoded_data, byte[] encoded_data, int mode) /** * Main program to test iLBC encoding and decoding * - *
-     *  Usage: exefile_name.exe <infile> <bytefile> <outfile> <channel>
-     *
-     *  <infile> : Input file, speech for encoder (16-bit pcm file)
-     *  <bytefile> : Bit stream output from the encoder
-     *  <outfile> : Output file, decoded speech (16-bit pcm file)
-     *  <channel> : Bit error file, optional (16-bit) 1 - Packet received correctly 0 - Packet Lost
-     * 
+ * @param argv 0: modem 1: infile, 2: bytefile, 3: outfile, 4: channel + * mode: Frame size for the encoding/decoding, 20 ms or 30 ms + * infile: Input file, speech for encoder (16-bit pcm file) + * bytefile: Bit stream output from the encoder + * outfile: Output file, decoded speech (16-bit pcm file) + * channel: Bit error file, optional (16-bit) 1 - Packet received correctly 0 - Packet Lost */ public static void main(String[] argv) throws Exception { new Ilbc(argv); @@ -902,8 +904,8 @@ public static void main(String[] argv) throws Exception { throw new IllegalArgumentException(String.format("Wrong mode %s, must be 20, or 30", argv[0])); } try { - iFile = Files.newInputStream(Paths.get(argv[1])); - } catch (IOException e) { + iFile = AudioSystem.getAudioInputStream(new BufferedInputStream(Files.newInputStream(Paths.get(argv[1])))); + } catch (IOException | UnsupportedAudioFileException e) { throw new IllegalArgumentException(String.format("Cannot open input file %s", argv[1])); } try { @@ -917,14 +919,12 @@ public static void main(String[] argv) throws Exception { throw new IllegalArgumentException(String.format("Cannot open decoded file %s", argv[3])); } if (argv.length == 5) { - if ((cFile = Files.newInputStream(Paths.get(argv[4]))) == null) { - throw new IllegalArgumentException(String.format("Cannot open channel file %s", argv[4])); - } + cFile = Files.newInputStream(Paths.get(argv[4])); } else { cFile = null; } - /* print info */ + // print info System.err.print("\n"); System.err.print("*---------------------------------------------------*\n"); @@ -1015,7 +1015,7 @@ public static void main(String[] argv) throws Exception { iFile.close(); eFile.close(); oFile.close(); - if (argv.length == 6) { + if (argv.length == 5) { cFile.close(); } } @@ -1086,7 +1086,7 @@ private void iLBC_encode(byte[] bytes, double[] block, Encoder encoder) { int[] gain_index = new int[CB_NSTAGES * NASUB_MAX], extra_gain_index = new int[CB_NSTAGES]; int[] cb_index = new int[CB_NSTAGES * NASUB_MAX], extra_cb_index = new int[CB_NSTAGES]; int[] lsf_i = new int[LSF_NSPLIT * LPC_N_MAX]; - int /* double * */pbytes; + int /* double* */ pbytes; int diff, start_pos; int[] state_first = new int[1]; double en1, en2; @@ -4955,27 +4955,27 @@ private void StateSearchW(Encoder iLBCenc_inst, double[] residual, int residualP /** * LP synthesis filter. * - * @param Out (i/o) Signal to be filtered + * @param out (i/o) Signal to be filtered * @param a LP parameters * @param len Length of signal * @param mem (i/o) Filter state */ - private static void syntFilter(double[] Out, int oP, double[] a, int aP, int len, double[] mem) { + private static void syntFilter(double[] out, int oP, double[] a, int aP, int len, double[] mem) { int /* double * */po, pi, pa, pm; - po = oP; // Out + po = oP; // out // Filter first part using memory from past for (int i = 0; i < LPC_FILTERORDER; i++) { - pi = i - 1; // Out + pi = i - 1; // out pa = 1; // a pm = LPC_FILTERORDER - 1; // mem for (int j = 1; j <= i; j++) { - Out[po] -= (a[aP + pa++]) * (Out[pi--]); + out[po] -= (a[aP + pa++]) * (out[pi--]); } for (int j = i + 1; j < LPC_FILTERORDER + 1; j++) { - Out[po] -= (a[aP + pa++]) * (mem[pm--]); + out[po] -= (a[aP + pa++]) * (mem[pm--]); } po++; } @@ -4983,16 +4983,16 @@ private static void syntFilter(double[] Out, int oP, double[] a, int aP, int len // Filter last part where the state is entirely in the output vector for (int i = LPC_FILTERORDER; i < len; i++) { - pi = i - 1; // Out + pi = i - 1; // out pa = 1; // a for (int j = 1; j < LPC_FILTERORDER + 1; j++) { - Out[po] -= (a[aP + pa++]) * (Out[pi--]); + out[po] -= (a[aP + pa++]) * (out[pi--]); } po++; } // Update state vector - System.arraycopy(Out, po + len - LPC_FILTERORDER, mem, 0, LPC_FILTERORDER); + System.arraycopy(out, po + len - LPC_FILTERORDER, mem, 0, LPC_FILTERORDER); } } diff --git a/src/main/java/vavi/sound/ilbc/readme.md b/src/main/java/vavi/sound/ilbc/readme.md index e8461fd..7638dea 100644 --- a/src/main/java/vavi/sound/ilbc/readme.md +++ b/src/main/java/vavi/sound/ilbc/readme.md @@ -1,17 +1,16 @@ # vavi.sound.sampled.ilbc -iLBC コーデック関連のクラスを提供します. +Provides iLBC codec related classes. + +## References * [iLBCfreeware](http://www.ilbcfreeware.org/) + * http://www.sip-communicator.org/ this is outdone me... orz -先越された... orz +### License - * http://www.sip-communicator.org/ +[License](http://www.ilbcfreeware.org/documentation/gips_iLBClicense.pdf) ## TODO * complete - -## License - - [License](http://www.ilbcfreeware.org/documentation/gips_iLBClicense.pdf) diff --git a/src/main/java/vavi/sound/ldcelp/readme.md b/src/main/java/vavi/sound/ldcelp/readme.md index 4e44eaf..d8bc02d 100644 --- a/src/main/java/vavi/sound/ldcelp/readme.md +++ b/src/main/java/vavi/sound/ldcelp/readme.md @@ -1,12 +1,10 @@ # vavi.sound.ldcelp -G.728 LD-CELP サウンド関連のクラスを提供します. +Provides G.728 LD-CELP sound related classes. -## TODO - - * 完成させる +## References -## License +### License ``` /*************************************************************************/ @@ -19,4 +17,9 @@ G.728 LD-CELP サウンド関連のクラスを提供します. /* Based on code written by Alex Zatsman, Analog Devices 1993 */ /* */ /*************************************************************************/ -``` \ No newline at end of file +``` + +## TODO + +* complete + diff --git a/src/main/java/vavi/sound/mfi/ittake/readme.md b/src/main/java/vavi/sound/mfi/ittake/readme.md index c21a33a..f9d5b47 100644 --- a/src/main/java/vavi/sound/mfi/ittake/readme.md +++ b/src/main/java/vavi/sound/mfi/ittake/readme.md @@ -1,13 +1,13 @@ # vavi.sound.mfi.vavi -MFi のサービスプロバイダ実装例のクラスを提供します. +Provides MFi service provider sample implementation classes. ## TODO - * 人のアルゴリズムはようわからん + * I don't understand other people's algorithms. ## License * [MIDIToMLD](https://web.archive.org/web/20090515001654/http://tokyo.cool.ne.jp/ittake/java/MIDIToMLDv013/MIDIToMLD.html) - 記載なし + not listed diff --git a/src/main/java/vavi/sound/mp3/readme.md b/src/main/java/vavi/sound/mp3/readme.md index 3c2fcd8..7af82a4 100644 --- a/src/main/java/vavi/sound/mp3/readme.md +++ b/src/main/java/vavi/sound/mp3/readme.md @@ -1,6 +1,8 @@ # vavi.sound.mp3 -MP3 サウンド関連のクラスを提供します. +Provides MP3 sound related classes. + +## References ### Header @@ -15,10 +17,10 @@ MP3 サウンド関連のクラスを提供します. +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ ``` -## TODO +### License - * 完成させる + not listed -## License +## TODO - 表記なし +* complete diff --git a/src/main/java/vavi/sound/pcm/resampling/laoe/readme.md b/src/main/java/vavi/sound/pcm/resampling/laoe/readme.md index 68f1a80..0052924 100644 --- a/src/main/java/vavi/sound/pcm/resampling/laoe/readme.md +++ b/src/main/java/vavi/sound/pcm/resampling/laoe/readme.md @@ -1,7 +1,11 @@ -laoe のリサンプリング関連のクラスを提供します. +# vaiv.sound.pcm.resampling.laoe -http://www.oli4.ch/laoe/home.html +Provides laoe's resampling related classes. + +## References + + * [laoe](http://www.oli4.ch/laoe/home.html) ## TODO - * 完成させる + * complete diff --git a/src/main/java/vavi/sound/pcm/resampling/sox/readme.md b/src/main/java/vavi/sound/pcm/resampling/sox/readme.md index e3df1c2..652e07f 100644 --- a/src/main/java/vavi/sound/pcm/resampling/sox/readme.md +++ b/src/main/java/vavi/sound/pcm/resampling/sox/readme.md @@ -1,13 +1,12 @@ -sox のリサンプリング関連のクラスを提供します. +# vavi.sound.pcm.resampling.sox -## TODO +Provides sox's resampling related classes. - * 完成させる - * その他のフィルタ? +## References -## License +### License -### Resampler +#### Resampler ``` /* @@ -17,7 +16,7 @@ sox のリサンプリング関連のクラスを提供します. */ ``` -### Polyphase +#### Polyphase ``` /* @@ -39,3 +38,8 @@ sox のリサンプリング関連のクラスを提供します. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ ``` + +## TODO + +* complete +* other filters? diff --git a/src/main/java/vavi/sound/sampled/rococoa/readme.md b/src/main/java/vavi/sound/sampled/rococoa/readme.md index cc2e627..14c0db5 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/readme.md +++ b/src/main/java/vavi/sound/sampled/rococoa/readme.md @@ -1,11 +1,11 @@ -# vavi.sound.pcm +# vavi.sound.sampled.rococoa -Rococoa の spi 実装のクラスを提供します. - -## TODO - -* ~~完成させる~~ +Provides Rococoa spi implementation classes. ## References [rococoa](https://github.com/iterate-ch/rococoa) + +## TODO + +* ~~complete~~ diff --git a/src/main/java/vavi/sound/twinvq/obsolate/BFile.java b/src/main/java/vavi/sound/twinvq/obsolate/BFile.java index 3077a58..66fe03f 100644 --- a/src/main/java/vavi/sound/twinvq/obsolate/BFile.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/BFile.java @@ -1,10 +1,10 @@ /* - * Copyright 1996-2000 (c) NTT Cyber Space Laboratories + * Copyright (c) 2024 by Naohide Sano, All rights reserved. * - * Released on 2000.05.22 by N. Iwakami + * Programmed by Naohide Sano */ -package vavi.sound.twinvq; +package vavi.sound.twinvq.obsolate; import java.io.IOException; import java.io.RandomAccessFile; diff --git a/src/main/java/vavi/sound/twinvq/obsolate/BStream.java b/src/main/java/vavi/sound/twinvq/obsolate/BStream.java index b16bb59..a9e0289 100644 --- a/src/main/java/vavi/sound/twinvq/obsolate/BStream.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/BStream.java @@ -1,20 +1,19 @@ /* - * Copyright 1996-2000 (c) NTT Cyber Space Laboratories + * Copyright (c) 2024 by Naohide Sano, All rights reserved. * - * Released on 2000.05.22 by N. Iwakami - * Released on 2000.09.06 by N. Iwakami + * Programmed by Naohide Sano */ -package vavi.sound.twinvq; +package vavi.sound.twinvq.obsolate; import java.io.IOException; import java.util.Arrays; -import vavi.sound.twinvq.TwinVQ.BlockType; -import vavi.sound.twinvq.TwinVQ.Index; -import vavi.sound.twinvq.TwinVQ.HeaderInfo; -import vavi.sound.twinvq.TwinVQ.ConfInfo; -import vavi.sound.twinvq.TwinVQ.ConfInfoSubBlock; +import vavi.sound.twinvq.obsolate.TwinVQ.BlockType; +import vavi.sound.twinvq.obsolate.TwinVQ.Index; +import vavi.sound.twinvq.obsolate.TwinVQ.HeaderInfo; +import vavi.sound.twinvq.obsolate.TwinVQ.ConfInfo; +import vavi.sound.twinvq.obsolate.TwinVQ.ConfInfoSubBlock; class BStream { diff --git a/src/main/java/vavi/sound/twinvq/obsolate/Chunk.java b/src/main/java/vavi/sound/twinvq/obsolate/Chunk.java index e209229..f36b6cc 100644 --- a/src/main/java/vavi/sound/twinvq/obsolate/Chunk.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/Chunk.java @@ -1,10 +1,10 @@ /* - * Copyright 1996-2000 (c) NTT Cyber Space Laboratories + * Copyright (c) 2024 by Naohide Sano, All rights reserved. * - * Modified on 2000.09.06 by N. Iwakami + * Programmed by Naohide Sano */ -package vavi.sound.twinvq; +package vavi.sound.twinvq.obsolate; import java.util.List; diff --git a/src/main/java/vavi/sound/twinvq/obsolate/HeaderManager.java b/src/main/java/vavi/sound/twinvq/obsolate/HeaderManager.java index 902863b..9db32b0 100644 --- a/src/main/java/vavi/sound/twinvq/obsolate/HeaderManager.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/HeaderManager.java @@ -1,10 +1,10 @@ /* - * Copyright 1996-2000 (c) NTT Cyber Space Laboratories + * Copyright (c) 2024 by Naohide Sano, All rights reserved. * - * Modified on 2000.09.06 by N. Iwakami + * Programmed by Naohide Sano */ -package vavi.sound.twinvq; +package vavi.sound.twinvq.obsolate; import java.util.Map; diff --git a/src/main/java/vavi/sound/twinvq/obsolate/Player.java b/src/main/java/vavi/sound/twinvq/obsolate/Player.java index d020847..dc9a7e4 100644 --- a/src/main/java/vavi/sound/twinvq/obsolate/Player.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/Player.java @@ -1,11 +1,10 @@ /* - * Copyright (C) 2000 Pawel Garbacz - * TwinVQ Decoding Lib by NTT Labs - * - * www.dreamplayer.prv.pl + * Copyright (c) 2024 by Naohide Sano, All rights reserved. + * + * Programmed by Naohide Sano */ -package vavi.sound.twinvq; +package vavi.sound.twinvq.obsolate; import java.io.IOException; import java.util.Arrays; @@ -15,8 +14,8 @@ import javax.sound.sampled.DataLine; import javax.sound.sampled.SourceDataLine; -import vavi.sound.twinvq.TwinVQ.HeaderInfo; -import vavi.sound.twinvq.TwinVQ.Index; +import vavi.sound.twinvq.obsolate.TwinVQ.HeaderInfo; +import vavi.sound.twinvq.obsolate.TwinVQ.Index; /** diff --git a/src/main/java/vavi/sound/twinvq/obsolate/TwinVQ.java b/src/main/java/vavi/sound/twinvq/obsolate/TwinVQ.java index a863d01..edecaa3 100644 --- a/src/main/java/vavi/sound/twinvq/obsolate/TwinVQ.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/TwinVQ.java @@ -1,10 +1,10 @@ /* - * Copyright (c) 2007 by Naohide Sano, All rights reserved. + * Copyright (c) 2024 by Naohide Sano, All rights reserved. * * Programmed by Naohide Sano */ -package vavi.sound.twinvq; +package vavi.sound.twinvq.obsolate; diff --git a/src/main/java/vavi/sound/twinvq/obsolate/TwinVQInputStream.java b/src/main/java/vavi/sound/twinvq/obsolate/TwinVQInputStream.java index bcbe6ca..f691a45 100644 --- a/src/main/java/vavi/sound/twinvq/obsolate/TwinVQInputStream.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/TwinVQInputStream.java @@ -1,34 +1,22 @@ /* - * Copyright (c) 2007 by Naohide Sano, All rights reserved. + * Copyright (c) 2024 by Naohide Sano, All rights reserved. * * Programmed by Naohide Sano */ -package vavi.sound.twinvq; +package vavi.sound.twinvq.obsolate; import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; import java.io.DataOutputStream; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.nio.ByteOrder; -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.DataLine; -import javax.sound.sampled.LineEvent; -import javax.sound.sampled.SourceDataLine; - import vavi.util.Debug; -import static vavi.sound.SoundUtil.volume; - /** * TwinVQInputStream. diff --git a/src/main/java/vavi/sound/twinvq/obsolate/TwinVQOutputStream.java b/src/main/java/vavi/sound/twinvq/obsolate/TwinVQOutputStream.java index 555ee95..5e0cc44 100644 --- a/src/main/java/vavi/sound/twinvq/obsolate/TwinVQOutputStream.java +++ b/src/main/java/vavi/sound/twinvq/obsolate/TwinVQOutputStream.java @@ -1,10 +1,10 @@ /* - * Copyright (c) 2007 by Naohide Sano, All rights reserved. + * Copyright (c) 2024 by Naohide Sano, All rights reserved. * * Programmed by Naohide Sano */ -package vavi.sound.twinvq; +package vavi.sound.twinvq.obsolate; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/src/main/java/vavi/sound/twinvq/readme.md b/src/main/java/vavi/sound/twinvq/readme.md index 362f551..d2bff9d 100644 --- a/src/main/java/vavi/sound/twinvq/readme.md +++ b/src/main/java/vavi/sound/twinvq/readme.md @@ -1,9 +1,11 @@ # vavi.sound.twinvq -TwinVQ サウンド関連のクラスを提供します. +Provides TwinVQ sound related classes. -## TODO +## References + +### License - * 完成させる +## TODO -## License + * complete diff --git a/src/test/java/vavi/sound/ilbc/IlbcTest.java b/src/test/java/vavi/sound/ilbc/IlbcTest.java index e8d89ee..fcd9920 100644 --- a/src/test/java/vavi/sound/ilbc/IlbcTest.java +++ b/src/test/java/vavi/sound/ilbc/IlbcTest.java @@ -25,13 +25,14 @@ @Disabled("not implemented yet") class IlbcTest { - String inFile = "src/test/resources/vavi/sound/ldcelp/f17.bit"; - String outFile = "tmp/f17.vavi.outnpf"; + String inFile = "src/test/resources/test.wav"; + String bitFile = "tmp/test.bit"; + String outFile = "tmp/test.outnpf"; String correctFile = "src/test/resources/vavi/sound/ldcelp/f17.outnpf"; @Test void test1() throws Exception { - Ilbc.main(new String[] { "-d", inFile, outFile }); + Ilbc.main(new String[] { "30", inFile, bitFile, outFile }); assertEquals(Checksum.getChecksum(new File(correctFile)), Checksum.getChecksum(new File(outFile))); } diff --git a/src/test/java/vavi/sound/mp3/Mp3InputStreamTest.java b/src/test/java/vavi/sound/mp3/Mp3InputStreamTest.java index 19b9068..89dcc05 100644 --- a/src/test/java/vavi/sound/mp3/Mp3InputStreamTest.java +++ b/src/test/java/vavi/sound/mp3/Mp3InputStreamTest.java @@ -41,7 +41,6 @@ class Mp3InputStreamTest { static final String outFile = "tmp/out.vavi.pcm"; static final String correctFile = "tmp/out.pcm"; - /** */ @Test void test1() throws Exception { main(new String[] { inFile, outFile }); @@ -88,7 +87,5 @@ public static void main(String[] args) throws Exception { line.close(); is.close(); - - System.exit(0); } } diff --git a/src/test/java/vavi/sound/twinvq/TwinVQTest.java b/src/test/java/vavi/sound/twinvq/TwinVQTest.java index 153874c..87415d1 100644 --- a/src/test/java/vavi/sound/twinvq/TwinVQTest.java +++ b/src/test/java/vavi/sound/twinvq/TwinVQTest.java @@ -19,6 +19,7 @@ import javax.sound.sampled.LineEvent; import javax.sound.sampled.SourceDataLine; +import vavi.sound.twinvq.obsolate.TwinVQInputStream; import vavi.util.Debug; import static vavi.sound.SoundUtil.volume; From 608a2c975a423d51be7e3c593855b1a3aa7f4fcf Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Fri, 26 Apr 2024 17:25:39 +0900 Subject: [PATCH 12/14] [rococoa] try to enable volume --- pom.xml | 6 +- .../sound/sampled/rococoa/RococoaClip.java | 230 +++++++++++++++--- .../sound/sampled/rococoa/RococoaMixer.java | 24 +- .../sampled/rococoa/RococoaMixerProvider.java | 4 +- .../rococoa/avfoundation/AVAudioPlayer.java | 49 +++- .../sampled/rococoa/RococoaClipTest.java | 4 +- 6 files changed, 267 insertions(+), 50 deletions(-) diff --git a/pom.xml b/pom.xml index dbc9c54..764f479 100644 --- a/pom.xml +++ b/pom.xml @@ -23,8 +23,6 @@ com.github.umjammer.tritonus 0.3.13 - com.github.umjammer.rococoa - 0.8.7 VERBOSE 0.02 0.2 @@ -173,14 +171,14 @@ - ${rococoa.groupId} + com.github.umjammer.rococoa rococoa-cocoa - ${rococoa.version} ${rococoa.groupId} rococoa-core ${rococoa.version} + 0.8.13 ${tritonus.groupId} diff --git a/src/main/java/vavi/sound/sampled/rococoa/RococoaClip.java b/src/main/java/vavi/sound/sampled/rococoa/RococoaClip.java index d808e71..e49a9f0 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RococoaClip.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RococoaClip.java @@ -14,23 +14,21 @@ import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; import java.util.logging.Level; - import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.BooleanControl; import javax.sound.sampled.Clip; import javax.sound.sampled.Control; import javax.sound.sampled.Control.Type; +import javax.sound.sampled.FloatControl; import javax.sound.sampled.LineEvent; import javax.sound.sampled.LineListener; import javax.sound.sampled.LineUnavailableException; +import org.rococoa.ID; import vavi.util.Debug; - import vavix.rococoa.avfoundation.AVAudioFormat; import vavix.rococoa.avfoundation.AVAudioPlayer; @@ -59,13 +57,154 @@ protected void fireUpdate(LineEvent event) { listeners.forEach(l -> l.update(event)); } + private Control[] controls; + private AVAudioPlayer player; private int bufferSize; private AudioInputStream stream; - private final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); + public RococoaClip() { + controls = new Control[] {gainControl, panControl}; + } + +//#region Control + + protected final class Gain extends FloatControl { + + static float linearToDB(float linear) { + + return (float) (Math.log(((linear == 0.0) ? 0.0001 : linear)) / Math.log(10.0) * 20.0); + } + + static float dBToLinear(float dB) { + + return (float) Math.pow(10.0, dB / 20.0); + } + + private float linearGain = 1.0f; + + private Gain() { + + super(FloatControl.Type.MASTER_GAIN, + linearToDB(0.0f), + linearToDB(2.0f), + Math.abs(linearToDB(1.0f) - linearToDB(0.0f)) / 128.0f, + -1, + 0.0f, + "dB", "Minimum", "", "Maximum"); + } + + @Override + public void setValue(float newValue) { + // adjust value within range ?? spec says IllegalArgumentException + //newValue = Math.min(newValue, getMaximum()); + //newValue = Math.max(newValue, getMinimum()); + + float newLinearGain = dBToLinear(newValue); + super.setValue(linearToDB(newLinearGain)); + // if no exception, commit to our new gain + linearGain = newLinearGain; + calcVolume(); +Debug.println("volume: " + leftGain); + player.setVolume(leftGain); + } + + float getLinearGain() { + return linearGain; + } + } + + private final class Mute extends BooleanControl { + + private Mute() { + super(BooleanControl.Type.MUTE, false, "True", "False"); + } + + @Override + public void setValue(boolean newValue) { + super.setValue(newValue); + calcVolume(); + player.setVolume(leftGain); + } + } + + private final class Balance extends FloatControl { + + private Balance() { + super(FloatControl.Type.BALANCE, -1.0f, 1.0f, (1.0f / 128.0f), -1, 0.0f, + "", "Left", "Center", "Right"); + } + + @Override + public void setValue(float newValue) { + setValueImpl(newValue); + panControl.setValueImpl(newValue); + calcVolume(); + player.setVolume(leftGain); + } + + void setValueImpl(float newValue) { + super.setValue(newValue); + } + + } + + private final class Pan extends FloatControl { + + private Pan() { + super(FloatControl.Type.PAN, -1.0f, 1.0f, (1.0f / 128.0f), -1, 0.0f, + "", "Left", "Center", "Right"); + } + + @Override + public void setValue(float newValue) { + setValueImpl(newValue); + balanceControl.setValueImpl(newValue); + calcVolume(); + player.setPan(newValue); + } + void setValueImpl(float newValue) { + super.setValue(newValue); + } + } + + private void calcVolume() { + if (getFormat() == null) { + return; + } + if (muteControl.getValue()) { + leftGain = 0.0f; + rightGain = 0.0f; + return; + } + float gain = gainControl.getLinearGain(); + if (getFormat().getChannels() == 1) { + // trivial case: only use gain + leftGain = gain; + rightGain = gain; + } else { + // need to combine gain and balance + float bal = balanceControl.getValue(); + if (bal < 0.0f) { + // left + leftGain = gain; + rightGain = gain * (bal + 1.0f); + } else { + leftGain = gain * (1.0f - bal); + rightGain = gain; + } + } + } + + private Gain gainControl = new Gain(); + private final Mute muteControl = new Mute(); + private final Balance balanceControl = new Balance(); + private final Pan panControl = new Pan(); + private float leftGain, rightGain; + +//#endregion Control @Override public void drain() { @@ -78,30 +217,13 @@ public void flush() { @Override public void start() { boolean r = player.play(); - if (r) { - service.scheduleAtFixedRate(this::check, 100, 100, TimeUnit.MILLISECONDS); - fireUpdate(new LineEvent(this, LineEvent.Type.START, 0)); - } + fireUpdate(new LineEvent(this, LineEvent.Type.START, 0)); Debug.println("play: " + r); } - // TODO use AVFoudation's delegate - private void check() { - if (!player.isPlaying()) { -Debug.println("stop detected"); - stopInternal(); - } - } - - private void stopInternal() { - fireUpdate(new LineEvent(this, LineEvent.Type.STOP, 0)); - service.shutdown(); - } - @Override public void stop() { player.stop(); - stopInternal(); } @Override @@ -195,15 +317,34 @@ public Control[] getControls() { } @Override - public boolean isControlSupported(Type control) { - // TODO Auto-generated method stub + public boolean isControlSupported(Type controlType) { + // protect against a NullPointerException + if (controlType == null) { + return false; + } + + for (Control control : controls) { + if (controlType == control.getType()) { + return true; + } + } + return false; } @Override - public Control getControl(Type control) { - // TODO Auto-generated method stub - return null; + public Control getControl(Type controlType) { + // protect against a NullPointerException + if (controlType != null) { + + for (Control control : controls) { + if (controlType == control.getType()) { + return control; + } + } + } + + throw new IllegalArgumentException("Unsupported control type: " + controlType); } @Override @@ -236,12 +377,31 @@ public void open(AudioInputStream stream) throws LineUnavailableException, IOExc player = AVAudioPlayer.init(file.toUri()); // TODO doesn't work -// player.setDelegate(new AVAudioPlayer.Delegate() { -// @Override -// public void audioPlayerDidFinishPlaying_successfully(ID player, boolean flag) { -// stop(); -// } -// }); + player.setDelegate(new AVAudioPlayer.AVAudioPlayerDelegate() { + @Override public void audioPlayerDidFinishPlaying_successfully(ID player, boolean flag) { + fireUpdate(new LineEvent(RococoaClip.this, LineEvent.Type.STOP, 0)); + } + + @Override public void audioPlayerDecodeErrorDidOccur_error(ID player, ID error) { + + } + + @Override public void audioPlayerBeginInterruption(ID player) { + + } + + @Override public void audioPlayerEndInterruption(ID player) { + + } + + @Override public void audioPlayerEndInterruption_withOptions(ID player, long flags) { + + } + + @Override public void audioPlayerEndInterruption_withFlags(ID player, long flags) { + + } + }); fireUpdate(new LineEvent(this, LineEvent.Type.OPEN, 0)); Debug.println("player: " + player); } diff --git a/src/main/java/vavi/sound/sampled/rococoa/RococoaMixer.java b/src/main/java/vavi/sound/sampled/rococoa/RococoaMixer.java index 12ba6b1..8686ff7 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RococoaMixer.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RococoaMixer.java @@ -6,6 +6,8 @@ package vavi.sound.sampled.rococoa; +import java.io.InputStream; +import java.util.Properties; import javax.sound.sampled.Control; import javax.sound.sampled.Control.Type; import javax.sound.sampled.Line; @@ -13,6 +15,8 @@ import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.Mixer; +import vavi.sound.midi.rococoa.RococoaSynthesizer; + /** * RococoaMixer. @@ -22,11 +26,29 @@ */ public class RococoaMixer implements Mixer { + static { + try { + try (InputStream is = RococoaSynthesizer.class.getResourceAsStream("/META-INF/maven/vavi/vavi-sound-sandbox/pom.properties")) { + if (is != null) { + Properties props = new Properties(); + props.load(is); + version = props.getProperty("version", "undefined in pom.properties"); + } else { + version = System.getProperty("vavi.test.version", "undefined"); + } + } + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + + private static final String version; + public static Mixer.Info mixerInfo = new Mixer.Info( "Rococoa Mixer", "vavi", "Mixer for Rococoa", - "0.0.1") { + version) { }; /** TODO how about multiple clips */ diff --git a/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerProvider.java b/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerProvider.java index 93e34bf..4ae260a 100644 --- a/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerProvider.java +++ b/src/main/java/vavi/sound/sampled/rococoa/RococoaMixerProvider.java @@ -31,11 +31,11 @@ public Info[] getMixerInfo() { @Override public Mixer getMixer(Info info) { if (info == RococoaMixer.mixerInfo) { - Debug.println(Level.FINE, "★1 info: " + info); +Debug.println(Level.FINE, "★1 info: " + info); RococoaMixer mixer = new RococoaMixer(); return mixer; } else { - Debug.println(Level.FINE, "not suitable for this provider: " + info); +Debug.println(Level.FINE, "not suitable for this provider: " + info); throw new IllegalArgumentException("info is not suitable for this provider"); } } diff --git a/src/main/java/vavix/rococoa/avfoundation/AVAudioPlayer.java b/src/main/java/vavix/rococoa/avfoundation/AVAudioPlayer.java index ad1e46a..02757c3 100644 --- a/src/main/java/vavix/rococoa/avfoundation/AVAudioPlayer.java +++ b/src/main/java/vavix/rococoa/avfoundation/AVAudioPlayer.java @@ -12,6 +12,7 @@ import org.rococoa.ID; import org.rococoa.ObjCClass; import org.rococoa.ObjCObjectByReference; +import org.rococoa.Rococoa; import org.rococoa.cocoa.foundation.NSData; import org.rococoa.cocoa.foundation.NSError; import org.rococoa.cocoa.foundation.NSObject; @@ -21,7 +22,7 @@ /** - * @interface AVAudioPlayer : NSObject + * An object that plays audio data from a file or buffer. * * @author Naohide Sano (umjammer) * @version 0.00 2020/??/?? umjammer initial version
@@ -63,22 +64,38 @@ public static AVAudioPlayer init(URI uri) throws IOException { public abstract boolean isPlaying(); + /** The audio player’s volume relative to other audio output. */ public abstract float volume(); + /** This property supports values ranging from 0.0 for silence to 1.0 for full volume. */ public abstract void setVolume(float volume); + /** Changes the audio player’s volume over a duration of time. */ public abstract void setVolume_fadeDuration(float volume, double duration); + /** The audio player’s stereo pan position. */ public abstract float pan(); + /** + * Set this property value to position the audio in the stereo field. + * Use a value of -1.0 to indicate full left, 1.0 for full right, and 0.0 for center. + */ public abstract void setPan(float pan); public abstract boolean enableRate(); public abstract void setEnableRate(boolean enableRate); + /** The audio player’s playback rate. */ public abstract float rate(); + /** + * To set an audio player’s playback rate, you must first enable the rate adjustment by setting + * its enableRate property to YES. + * + * The default value of this property is 1.0, which indicates that audio playback occurs at standard speed. + * This property supports values in the range of 0.5 for half-speed playback to 2.0 for double-speed playback. + */ public abstract void setRate(float rate); public abstract long numberOfLoops(); @@ -93,11 +110,31 @@ public static AVAudioPlayer init(URI uri) throws IOException { public abstract double duration(); - // TODO doesn't work - public interface Delegate extends Callback { - void audioPlayerDidFinishPlaying_successfully(ID player, boolean flag); + /** A protocol that defines the methods to respond to audio playback events and decoding errors. */ + public interface AVAudioPlayerDelegate extends Callback { + /** Tells the delegate when the audio finishes playing. */ + void audioPlayerDidFinishPlaying_successfully(ID /* AVAudioPlayer */ player, boolean flag); + /** Tells the delegate when an audio player encounters a decoding error during playback. */ + void audioPlayerDecodeErrorDidOccur_error(ID /* AVAudioPlayer */ player, ID /* NSError */ error); + + /** Tells the delegate when the system interrupts the audio player’s playback. */ + @Deprecated + void audioPlayerBeginInterruption(ID /* AVAudioPlayer */ player); + /** Tells the delegate when the audio session interruption ends. */ + @Deprecated + void audioPlayerEndInterruption(ID /* AVAudioPlayer */ player); + /** Tells the delegate when the audio session interruption ends with options. */ + @Deprecated + void audioPlayerEndInterruption_withOptions(ID /* AVAudioPlayer */ player, long flags); + /** Tells the delegate when the audio session interruption ends with flags. */ + @Deprecated + void audioPlayerEndInterruption_withFlags(ID /* AVAudioPlayer */ player, long flags); } - // TODO doesn't work - public abstract void setDelegate(Delegate delegate); + /** The delegate object for the audio player. */ + public abstract void setDelegate(ID /* AVAudioPlayerDelegate */ delegate); + + public void setDelegate(AVAudioPlayerDelegate delegate) { + setDelegate(Rococoa.proxy(delegate).id()); + } } \ No newline at end of file diff --git a/src/test/java/vavi/sound/sampled/rococoa/RococoaClipTest.java b/src/test/java/vavi/sound/sampled/rococoa/RococoaClipTest.java index 3b85564..b139d3d 100644 --- a/src/test/java/vavi/sound/sampled/rococoa/RococoaClipTest.java +++ b/src/test/java/vavi/sound/sampled/rococoa/RococoaClipTest.java @@ -64,7 +64,7 @@ public static void main(String[] args) throws Exception { Debug.println("prepareToPlay: " + r); r = player.play(); Debug.println("play: " + r); -// player.setVolume(.5f); // TODO doesn't work + player.setVolume((float) volume); long duration = (long) Math.ceil((float) player.duration() * 1000); Debug.println("duration: " + duration); try { @@ -126,7 +126,7 @@ void test1() throws Exception { AudioInputStream stream = new AudioInputStream(new BufferedInputStream(Files.newInputStream(path)), RococoaClip.info.getFormats()[0], Files.size(path)); clip.open(stream); try { - volume(clip, volume); // this clip doesn't support volume + volume(clip, volume); } catch (Exception e) { Debug.println("volume: " + e); } From 0b0797620a7969f7120ceef511fea7e4a5f672d8 Mon Sep 17 00:00:00 2001 From: Naohide Sano Date: Fri, 26 Apr 2024 17:26:24 +0900 Subject: [PATCH 13/14] update settings --- .github/workflows/codeql-analysis.yml | 8 ++- README.md | 98 ++++++++++++++++----------- pom.xml | 89 ++++++++++++++++++++---- 3 files changed, 140 insertions(+), 55 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c8063c3..c42152a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -18,6 +18,10 @@ jobs: analyze: name: Analyze runs-on: macos-14 + permissions: + actions: read + contents: read + security-events: write strategy: fail-fast: false @@ -34,7 +38,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -59,4 +63,4 @@ jobs: GITHUB_TOKEN: ${{ github.token }} - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/README.md b/README.md index 8e0e2db..a279431 100644 --- a/README.md +++ b/README.md @@ -7,45 +7,45 @@ 🌏 play the world ♪ -## Status +### Status | **SPI** | **Codec** | **IN Status** | **OUT Status** | **SPI Status** | **project** | **Description** | **Comment** | |:------------|:-------------|:--------------|:---------------|:---------------|:---------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------| -| midi | unknown | 🚫 | 🚫 | - | this | MFi by [unknown]() | | -| midi | ittake | 🚫 | 🚫 | - | this | MFi by [ittake](https://web.archive.org/web/20090515001654/http://tokyo.cool.ne.jp/ittake/java/MIDIToMLDv013/MIDIToMLD.html) | | -| sampled | ilbc | 🚫 | 🚫 | - | this | [c](http://www.ilbcfreeware.org/) | | -| sampled | ldcelp | 🚫 | 🚫 | - | this | [c](ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/coding/ldcelp-2.0.tar.gz) | | -| sampled | mp3 | 🚫 | - | - | this | [mp3](https://github.com/umjammer/vavi-sound-sandbox/tree/master/src/main/java/vavi/sound/mp3) | need to deal tags | -| sampled | mp3 | ✅ | - | ✅ | [mp3spi](https://github.com/umjammer/mp3spi) | [jlayer](https://github.com/umjammer/jlayer) | | -| sampled | sse | 🚫 | - | 🚫 | this | [sse](http://shibatch.sourceforge.net/download/) | | -| sampled | resampling | ✅ | - | - | this | [laoe](http://www.oli4.ch/laoe/home.html) | | -| sampled | resampling | ✅ | - | - | this | [rohm](https://en.wikipedia.org/wiki/Rohm) | | -| sampled | polyphase | ✅ | - | 🚧 | this | [sox](http://sox.sourceforge.net/) resampling | | -| sampled | resampler | ✅ | - | - | this | [sox](http://sox.sourceforge.net/) resampling | | -| sampled | perfect | 🚧 | - | - | this | [sox](http://sox.sourceforge.net/) resampling | | -| sampled | monauralize | ✅ | - | ✅ | [tritonus-remaining](https://github.com/umjammer/tritonus-remaining) | `PCM2PCMConversionProvider` | works but not suitable for resampling | -| sampled | ~~alac~~ | ✅ | - | ✅ | [vavi-sound-alac](https://github.com/umjammer/vavi-sound-alac) | | graduated to vavi-sound-alac | -| ~~sampled~~ | ~~QTKit~~ | ~~✅~~ | - | ? | ~~this~~ | ~~[rococoa](https://github.com/umjammer/rococoa)~~ | deprecated | -| sampled | AVFoundation | 🚧 | - | 🚧 | this | [rococoa](https://github.com/umjammer/rococoa) | use `AVAudioConverter` how to return objc value in callback? | -| sampled | twinvq | 🚫 | 🚫 | - | this | | TODO use ffmpeg | -| midi | vsq | 🚧 | - | 🚧 | this | | YAMAHA Vocaloid | -| sampled | opus | ✅ | 🚫 | ✅ | this | [concentus](https://github.com/lostromb/concentus) | | -| midi | AudioUnit | ✅ | - | ✅ | this | [rococoa](https://github.com/umjammer/rococoa) | use `AVAudioUnitMIDIInstrument/kAudioUnitSubType_DLSSynth` | -| midi | AudioUnit | ✅ | - | 🚫 | this | [rococoa](https://github.com/umjammer/rococoa) | use `AVAudioUnitSampler`, how to adjust sf2 patch? | -| midi | JSyn | ✅ | - | ✅ | this | [JSyn](https://github.com/philburk/jsyn) | looking for good drums | -| midi | OPL3 | ✅ | - | ✅ | this | [adplug](https://github.com/adplug/adplug) | [opl3-player](http://opl3.cozendey.com/) | -| midi | ? | - | - | - | this | | opl, ma | -| midi | CoreMIDI | ✅ | ? | ✅ | [osxmidi4j](https://github.com/umjammer/osxmidi4j) | rococoa | iac ✓, network ✓, bluetooth ? | -| midi | CoreMIDI | ✅ | ? | ✅ | [CoreMidi4J](https://github.com/DerekCook/CoreMidi4J) | jni | iac ✓, network ✓, bluetooth ? | -| sampled | speex | ✅ | - | ✅ | [jspeex](http://jspeex.sourceforge.net/) | | sample rate is limited to convert | -| sampled | flac | ✅ | - | ✅ | [JustFLAC](https://github.com/umjammer/vavi-sound-flac) | | | -| sampled | flac | ✅ | - | ✅ | [jFLAC](http://jflac.sourceforge.net/) | | | -| sampled | aac | - | - | ✅ | [JAADec](https://github.com/umjammer/vavi-sound-aac) | | | -| sampled | vorbis | - | - | ✅ | [tritonus-jorbis](https://github.com/umjammer/tritonus-jorbis) | | | -| sampled | atrac3 | 🚧 | - | 🚧 | this | jpcsp | Sony MD | -| sampled | atrac3+ | 🚧 | - | 🚧 | this | jpcsp | Sony MD | - -## Features +| midi | unknown | 🚫 | 🚫 | - | this | MFi by [unknown]() | | +| midi | ittake | 🚫 | 🚫 | - | this | MFi by [ittake](https://web.archive.org/web/20090515001654/http://tokyo.cool.ne.jp/ittake/java/MIDIToMLDv013/MIDIToMLD.html) | | +| sampled | ilbc | 🚫 | 🚫 | - | this | [c](http://www.ilbcfreeware.org/) | | +| sampled | ldcelp | 🚫 | 🚫 | - | this | [c](ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/coding/ldcelp-2.0.tar.gz) | | +| sampled | mp3 | 🚫 | - | - | this | [mp3](https://github.com/umjammer/vavi-sound-sandbox/tree/master/src/main/java/vavi/sound/mp3) | need to deal tags | +| sampled | mp3 | ✅ | - | ✅ | [mp3spi](https://github.com/umjammer/mp3spi) | [jlayer](https://github.com/umjammer/jlayer) | | +| sampled | sse | 🚫 | - | 🚫 | this | [sse](http://shibatch.sourceforge.net/download/) | | +| sampled | resampling | ✅ | - | - | this | [laoe](http://www.oli4.ch/laoe/home.html) | | +| sampled | resampling | ✅ | - | - | this | [rohm](https://en.wikipedia.org/wiki/Rohm) | | +| sampled | polyphase | ✅ | - | 🚧 | this | [sox](http://sox.sourceforge.net/) resampling | | +| sampled | resampler | ✅ | - | - | this | [sox](http://sox.sourceforge.net/) resampling | | +| sampled | perfect | 🚧 | - | - | this | [sox](http://sox.sourceforge.net/) resampling | | +| sampled | monauralize | ✅ | - | ✅ | [tritonus-remaining](https://github.com/umjammer/tritonus-remaining) | `PCM2PCMConversionProvider` | works but not suitable for resampling | +| sampled | ~~alac~~ | ✅ | - | ✅ | [vavi-sound-alac](https://github.com/umjammer/vavi-sound-alac) | | graduated to vavi-sound-alac | +| ~~sampled~~ | ~~QTKit~~ | ~~✅~~ | - | ? | ~~this~~ | ~~[rococoa](https://github.com/umjammer/rococoa)~~ | deprecated | +| sampled | AVFoundation | 🚧 | - | 🚧 | this | [rococoa](https://github.com/umjammer/rococoa) | use `AVAudioConverter` how to return objc value in callback? | +| sampled | twinvq | 🚫 | 🚫 | - | this | | TODO use ffmpeg | +| midi | vsq | 🚧 | - | 🚧 | this | | YAMAHA Vocaloid | +| sampled | opus | ✅ | 🚫 | ✅ | this | [concentus](https://github.com/lostromb/concentus) | | +| midi | AudioUnit | ✅ | - | ✅ | this | [rococoa](https://github.com/umjammer/rococoa) | use `AVAudioUnitMIDIInstrument/kAudioUnitSubType_DLSSynth` | +| midi | AudioUnit | ✅ | - | 🚫 | this | [rococoa](https://github.com/umjammer/rococoa) | use `AVAudioUnitSampler`, how to adjust sf2 patch? | +| midi | JSyn | ✅ | - | ✅ | this | [JSyn](https://github.com/philburk/jsyn) | looking for good drums | +| midi | OPL3 | ✅ | - | ✅ | this | [adplug](https://github.com/adplug/adplug) | [opl3-player](http://opl3.cozendey.com/) | +| midi | ? | - | - | - | this | | opl, ma | +| midi | CoreMIDI | ✅ | ? | ✅ | [osxmidi4j](https://github.com/umjammer/osxmidi4j) | rococoa | iac ✓, network ✓, bluetooth ? | +| midi | CoreMIDI | ✅ | ? | ✅ | [CoreMidi4J](https://github.com/DerekCook/CoreMidi4J) | jni | iac ✓, network ✓, bluetooth ? | +| sampled | speex | ✅ | - | ✅ | [jspeex](http://jspeex.sourceforge.net/) | | sample rate is limited to convert | +| sampled | flac | ✅ | - | ✅ | [JustFLAC](https://github.com/umjammer/vavi-sound-flac) | | | +| sampled | flac | ✅ | - | ✅ | [jFLAC](http://jflac.sourceforge.net/) | | | +| sampled | aac | - | - | ✅ | [JAADec](https://github.com/umjammer/vavi-sound-aac) | | | +| sampled | vorbis | - | - | ✅ | [tritonus-jorbis](https://github.com/umjammer/tritonus-jorbis) | | | +| sampled | atrac3 | 🚧 | - | 🚧 | this | jpcsp | Sony MD | +| sampled | atrac3+ | 🚧 | - | 🚧 | this | jpcsp | Sony MD | + +### Features * ~~ALAC Java sound SPI~~ ... ([graduated incubation](https://github.com/umjammer/vavi-sound-alac)) * OPAS Java sound SPI ... (candidate to graduate) @@ -56,26 +56,46 @@ * OPL3 synthesizer Java MIDI SPI ... (wip) * [iTunes Library (rococoa) ... Music.app Music Database](https://github.com/umjammer/vavi-sound-sandbox/tree/master/src/main/java/vavix/rococoa/ituneslibrary) +### Tech Know + +* `tritonus-mp3` only supports mp3 w/o tags +* the reason we got "`javax.sound.midi.MidiUnavailableException: MIDI OUT transmitter not available`" is that `sound.jar` of `JMF` is in the class path. + ## Install * [maven](https://jitpack.io/#umjammer/vavi-sound-sandbox) -## Tech Know +## Usage - * `tritonus-mp3` only supports mp3 w/o tags - * the reason we got "`javax.sound.midi.MidiUnavailableException: MIDI OUT transmitter not available`" is that `sound.jar` of `JMF` is in the class path. +```java +AudioInputStream ais = AudioSystem.getAudioInputStream(Paths.get(opus).toFile()); +Clip clip = AudioSystem.getClip(); +clip.open(AudioSystem.getAudioInputStream(new AudioFormat(44100, 16, 2, true, false), ais)); +clip.loop(Clip.LOOP_CONTINUOUSLY); +``` ## References * [Gervill](https://github.com/bluenote10/gervill) * https://github.com/HectorRicardo/final-gervill * https://github.com/philfrei/AudioCue-maven + * https://github.com/jitsi/libjitsi + +### Lesson + + * [javaassist doesn't support *enhanced for*](https://github.com/jboss-javassist/javassist/issues/403#issuecomment-989827788) + * `com.sun.media.sound.SoftMidiAudioFileReader` has a bug that consumes 4 bytes and not releases (resets) those after examination ## TODO * ~~jni in maven~~ * ~~resampling spi~~ * ~~qt has been deprecated~~ + * volume enabled clip + * [mmscomputing](https://github.com/alex73/mmscomputing/blob/c666f63ec0b7f678aa3d05c1b2f63d748b743257/src/uk/co/mmscomputing/sound/provider/Clip.java#L12) + * 🎯 [playn](https://github.com/playn/playn/blob/3ad0d6bf22c3f7c0eb6d3497523d197f4c50a46b/java-base/src/playn/java/BigClip.java#L46) + * caf + * https://github.com/ruda/caf ### Library diff --git a/pom.xml b/pom.xml index 764f479..add0dd6 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,37 @@ + + + uml + + + + plantuml-generator-maven-plugin + de.elnarion.maven + 1.1.2 + + + generate-simple-diagram + + generate + + + + javax-sound-diagram.txt + + + + + + + + + + + @@ -79,6 +110,9 @@ true true + + vavi/sound/twinvq/*.java + @@ -130,6 +164,33 @@ + + + org.apache.maven.plugins + maven-dependency-plugin + 3.6.1 + + + copy + generate-test-resources + + copy + + + + + com.github.umjammer.vavi-commons + vavi-instrumentation + jar + false + ${project.build.directory} + vavi-instrumentation.jar + + + + + + @@ -138,6 +199,11 @@ jitpack.io https://jitpack.io + + maven_central + Maven Central + https://repo.maven.apache.org/maven2/ + @@ -145,7 +211,7 @@ org.junit junit-bom - 5.10.1 + 5.10.2 pom import @@ -156,12 +222,12 @@ com.github.umjammer vavi-commons - 1.1.10 + 1.1.12 com.github.umjammer vavi-sound - 1.0.16 + 1.0.18 com.github.umjammer @@ -173,11 +239,6 @@ com.github.umjammer.rococoa rococoa-cocoa - - - ${rococoa.groupId} - rococoa-core - ${rococoa.version} 0.8.13 @@ -188,7 +249,7 @@ com.github.lostromb concentus - fdf276e + acaadf2075 pom @@ -283,13 +344,13 @@ com.github.umjammer vavi-sound-flac - 0.0.5 + 0.0.6 test com.github.umjammer vavi-sound-aac - 0.8.10 + 0.8.12 test mp3spi - 1.9.15 + 1.9.16 test @@ -311,7 +372,7 @@ org.slf4j slf4j-jdk14 - 2.0.5 + 2.0.13 test