[kaffe] CVS kaffe (dalibor): Resynced with Tritonus
Kaffe CVS
Kaffe Mailing List <kaffe@kaffe.org>
Sun Sep 21 10:29:02 2003
PatchSet 4050
Date: 2003/09/21 17:26:32
Author: dalibor
Branch: HEAD
Tag: (none)
Log:
Resynced with Tritonus
Updated out of date files with those from Tritonus.org CVS archive
Members:
ChangeLog:1.1646->1.1647
libraries/javalib/javax/sound/midi/MetaMessage.java:1.1->1.2
libraries/javalib/org/tritonus/lowlevel/alsa/AlsaPcm.java:1.1->1.2
libraries/javalib/org/tritonus/sampled/file/AiffAudioFileReader.java:1.1->1.2
libraries/javalib/org/tritonus/sampled/file/AiffAudioFileWriter.java:1.1->1.2
libraries/javalib/org/tritonus/sampled/file/AiffTool.java:1.1->1.2
libraries/javalib/org/tritonus/sampled/file/WaveAudioFileReader.java:1.1->1.2
libraries/javalib/org/tritonus/sampled/file/WaveTool.java:1.1->1.2
libraries/javalib/org/tritonus/share/TCircularBuffer.java:1.1->1.2
libraries/javalib/org/tritonus/share/TDebug.java:1.1->1.2
libraries/javalib/org/tritonus/share/sampled/FloatSampleBuffer.java:1.1->1.2
libraries/javalib/org/tritonus/share/sampled/TVolumeUtils.java:1.1->1.2
libraries/javalib/org/tritonus/share/sampled/convert/TAsynchronousFilteredAudioInputStream.java:1.2->1.3
libraries/javalib/org/tritonus/share/sampled/file/TAudioFileWriter.java:1.1->1.2
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1646 kaffe/ChangeLog:1.1647
--- kaffe/ChangeLog:1.1646 Fri Sep 19 13:15:14 2003
+++ kaffe/ChangeLog Sun Sep 21 17:26:32 2003
@@ -1,5 +1,22 @@
2003-09-19 Dalibor Topic <robilad@kaffe.org>
+ * libraries/javalib/javax/sound/midi/MetaMessage.java,
+ libraries/javalib/org/tritonus/lowlevel/alsa/AlsaPcm.java,
+ libraries/javalib/org/tritonus/sampled/file/AiffAudioFileReader.java,
+ libraries/javalib/org/tritonus/sampled/file/AiffAudioFileWriter.java,
+ libraries/javalib/org/tritonus/sampled/file/AiffTool.java,
+ libraries/javalib/org/tritonus/sampled/file/WaveAudioFileReader.java,
+ libraries/javalib/org/tritonus/sampled/file/WaveTool.java,
+ libraries/javalib/org/tritonus/share/TCircularBuffer.java,
+ libraries/javalib/org/tritonus/share/TDebug.java,
+ libraries/javalib/org/tritonus/share/sampled/FloatSampleBuffer.java,
+ libraries/javalib/org/tritonus/share/sampled/TVolumeUtils.java,
+ libraries/javalib/org/tritonus/share/sampled/convert/TAsynchronousFilteredAudioInputStream.java,
+ libraries/javalib/org/tritonus/share/sampled/file/TAudioFileWriter.java:
+ Resynced with tritonus.
+
+2003-09-19 Dalibor Topic <robilad@kaffe.org>
+
* kaffe/kaffevm/jit/machine.c,
kaffe/kaffevm/jit/machine.h:
Always declare and define globalMethod, which is used
Index: kaffe/libraries/javalib/javax/sound/midi/MetaMessage.java
diff -u kaffe/libraries/javalib/javax/sound/midi/MetaMessage.java:1.1 kaffe/libraries/javalib/javax/sound/midi/MetaMessage.java:1.2
--- kaffe/libraries/javalib/javax/sound/midi/MetaMessage.java:1.1 Mon Jan 6 17:14:33 2003
+++ kaffe/libraries/javalib/javax/sound/midi/MetaMessage.java Sun Sep 21 17:26:33 2003
@@ -55,8 +55,6 @@
- /** TODO:
- */
/** Create a container for a MIDI meta message.
This constructor does not create an object containing a legal
MIDI message. You have to use one of the setMessage() methods.
@@ -65,9 +63,7 @@
getData()) may have
undesired results.
- @see #setMessage(int)
- @see #setMessage(int, int, int)
- @see #setMessage(int, int, int, int)
+ @see #setMessage(int, byte[], int)
*/
public MetaMessage()
{
Index: kaffe/libraries/javalib/org/tritonus/lowlevel/alsa/AlsaPcm.java
diff -u kaffe/libraries/javalib/org/tritonus/lowlevel/alsa/AlsaPcm.java:1.1 kaffe/libraries/javalib/org/tritonus/lowlevel/alsa/AlsaPcm.java:1.2
--- kaffe/libraries/javalib/org/tritonus/lowlevel/alsa/AlsaPcm.java:1.1 Mon Jan 6 17:14:34 2003
+++ kaffe/libraries/javalib/org/tritonus/lowlevel/alsa/AlsaPcm.java Sun Sep 21 17:26:34 2003
@@ -294,7 +294,7 @@
@param lOffset Offset where the data should be read from
the buffer, in bytes.
- @lFrameCount Length of the data to write, in number of PCM
+ @param lFrameCount Length of the data to write, in number of PCM
frames.
*/
Index: kaffe/libraries/javalib/org/tritonus/sampled/file/AiffAudioFileReader.java
diff -u kaffe/libraries/javalib/org/tritonus/sampled/file/AiffAudioFileReader.java:1.1 kaffe/libraries/javalib/org/tritonus/sampled/file/AiffAudioFileReader.java:1.2
--- kaffe/libraries/javalib/org/tritonus/sampled/file/AiffAudioFileReader.java:1.1 Mon Jan 6 17:14:36 2003
+++ kaffe/libraries/javalib/org/tritonus/sampled/file/AiffAudioFileReader.java Sun Sep 21 17:26:35 2003
@@ -35,8 +35,8 @@
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException;
-import javax.sound.sampled.spi.AudioFileReader;
import org.tritonus.share.sampled.file.TAudioFileFormat;
import org.tritonus.share.sampled.file.TAudioFileReader;
@@ -100,23 +100,35 @@
if (nEncoding==AiffTool.AIFF_COMM_PCM) {
// PCM - nothing to do
}
- else
- if (nEncoding==AiffTool.AIFF_COMM_ULAW) {
- // ULAW
- encoding=AudioFormat.Encoding.ULAW;
- nSampleSize=8;
- } else {
- throw new UnsupportedAudioFileException(
- "Encoding 0x"+Integer.toHexString(nEncoding)
- +" of AIFF file not supported");
- }
+ else if (nEncoding==AiffTool.AIFF_COMM_ULAW) {
+ // ULAW
+ encoding=AudioFormat.Encoding.ULAW;
+ nSampleSize=8;
+ }
+ else if (nEncoding==AiffTool.AIFF_COMM_IMA_ADPCM) {
+ encoding = Encodings.getEncoding("IMA_ADPCM");
+ nSampleSize=4;
+ }
+ else {
+ throw new UnsupportedAudioFileException(
+ "Encoding 0x"+Integer.toHexString(nEncoding)
+ +" of AIFF file not supported");
+ }
}
+ /* In case of IMA ADPCM, frame size is 0.5 bytes (since it is
+ always mono). A value of 1 as frame size would be wrong.
+ Handling of frame size 0 in defined nowhere. So the best
+ solution is to set the frame size to unspecified (-1).
+ */
+ int nFrameSize = (nSampleSize == 4) ?
+ AudioSystem.NOT_SPECIFIED :
+ (nSampleSize * nNumChannels) / 8;
skipChunk(dataInputStream, chunkLength, nRead);
AudioFormat format = new AudioFormat(encoding,
fSampleRate,
nSampleSize,
nNumChannels,
- (nSampleSize * nNumChannels) / 8,
+ nFrameSize,
fSampleRate,
true);
return format;
@@ -139,9 +151,10 @@
protected AudioFileFormat getAudioFileFormat(InputStream inputStream, long lFileSizeInBytes)
- throws UnsupportedAudioFileException, IOException {
- DataInputStream dataInputStream = new DataInputStream(inputStream);
+ throws UnsupportedAudioFileException, IOException
+ {
if (TDebug.TraceAudioFileReader) {TDebug.out("AiffAudioFileReader.getAudioFileFormat(InputStream, long): begin"); }
+ DataInputStream dataInputStream = new DataInputStream(inputStream);
int nMagic = dataInputStream.readInt();
if (nMagic != AiffTool.AIFF_FORM_MAGIC) {
throw new UnsupportedAudioFileException(
Index: kaffe/libraries/javalib/org/tritonus/sampled/file/AiffAudioFileWriter.java
diff -u kaffe/libraries/javalib/org/tritonus/sampled/file/AiffAudioFileWriter.java:1.1 kaffe/libraries/javalib/org/tritonus/sampled/file/AiffAudioFileWriter.java:1.2
--- kaffe/libraries/javalib/org/tritonus/sampled/file/AiffAudioFileWriter.java:1.1 Mon Jan 6 17:14:36 2003
+++ kaffe/libraries/javalib/org/tritonus/sampled/file/AiffAudioFileWriter.java Sun Sep 21 17:26:35 2003
@@ -35,6 +35,7 @@
import javax.sound.sampled.AudioSystem;
import org.tritonus.share.TDebug;
+import org.tritonus.share.sampled.Encodings;
import org.tritonus.share.sampled.file.AudioOutputStream;
import org.tritonus.share.sampled.file.TAudioFileWriter;
import org.tritonus.share.sampled.file.TDataOutputStream;
@@ -55,18 +56,23 @@
};
private static final int ALL=AudioSystem.NOT_SPECIFIED;
+ private static final AudioFormat.Encoding PCM_SIGNED = AudioFormat.Encoding.PCM_SIGNED;
+ private static final AudioFormat.Encoding ULAW = AudioFormat.Encoding.ULAW;
+ private static final AudioFormat.Encoding IMA_ADPCM = Encodings.getEncoding("IMA_ADPCM");
// IMPORTANT: this array depends on the AudioFormat.match() algorithm which takes
// AudioSystem.NOT_SPECIFIED into account !
private static final AudioFormat[] AUDIO_FORMATS =
{
- new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, ALL, 8, ALL, ALL, ALL, true),
- new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, ALL, 8, ALL, ALL, ALL, false),
- new AudioFormat(AudioFormat.Encoding.ULAW, ALL, 8, ALL, ALL, ALL, false),
- new AudioFormat(AudioFormat.Encoding.ULAW, ALL, 8, ALL, ALL, ALL, true),
- new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, ALL, 16, ALL, ALL, ALL, true),
- new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, ALL, 24, ALL, ALL, ALL, true),
- new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, ALL, 32, ALL, ALL, ALL, true),
+ new AudioFormat(PCM_SIGNED, ALL, 8, ALL, ALL, ALL, true),
+ new AudioFormat(PCM_SIGNED, ALL, 8, ALL, ALL, ALL, false),
+ new AudioFormat(ULAW, ALL, 8, ALL, ALL, ALL, false),
+ new AudioFormat(ULAW, ALL, 8, ALL, ALL, ALL, true),
+ new AudioFormat(PCM_SIGNED, ALL, 16, ALL, ALL, ALL, true),
+ new AudioFormat(PCM_SIGNED, ALL, 24, ALL, ALL, ALL, true),
+ new AudioFormat(PCM_SIGNED, ALL, 32, ALL, ALL, ALL, true),
+ new AudioFormat(IMA_ADPCM, ALL, 4, ALL, ALL, ALL, true),
+ new AudioFormat(IMA_ADPCM, ALL, 4, ALL, ALL, ALL, false),
};
public AiffAudioFileWriter() {
Index: kaffe/libraries/javalib/org/tritonus/sampled/file/AiffTool.java
diff -u kaffe/libraries/javalib/org/tritonus/sampled/file/AiffTool.java:1.1 kaffe/libraries/javalib/org/tritonus/sampled/file/AiffTool.java:1.2
--- kaffe/libraries/javalib/org/tritonus/sampled/file/AiffTool.java:1.1 Mon Jan 6 17:14:36 2003
+++ kaffe/libraries/javalib/org/tritonus/sampled/file/AiffTool.java Sun Sep 21 17:26:35 2003
@@ -29,6 +29,8 @@
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioSystem;
+import org.tritonus.share.sampled.Encodings;
+
/**
* Common constants and methods for handling aiff and aiff-c files.
*
@@ -64,6 +66,8 @@
return AIFF_COMM_PCM;
} else if (encoding.equals(AudioFormat.Encoding.ULAW) && nSampleSize == 8 && frameSizeOK) {
return AIFF_COMM_ULAW;
+ } else if (encoding.equals(Encodings.getEncoding("IMA_ADPCM")) && nSampleSize == 4) {
+ return AIFF_COMM_IMA_ADPCM;
} else {
return AIFF_COMM_UNSPECIFIED;
}
Index: kaffe/libraries/javalib/org/tritonus/sampled/file/WaveAudioFileReader.java
diff -u kaffe/libraries/javalib/org/tritonus/sampled/file/WaveAudioFileReader.java:1.1 kaffe/libraries/javalib/org/tritonus/sampled/file/WaveAudioFileReader.java:1.2
--- kaffe/libraries/javalib/org/tritonus/sampled/file/WaveAudioFileReader.java:1.1 Mon Jan 6 17:14:36 2003
+++ kaffe/libraries/javalib/org/tritonus/sampled/file/WaveAudioFileReader.java Sun Sep 21 17:26:35 2003
@@ -136,6 +136,7 @@
int frameSize=0;
float frameRate=(float) sampleRate;
+ int cbSize = 0;
switch (formatCode) {
case WaveTool.WAVE_FORMAT_PCM:
if (chunkLength<WaveTool.MIN_FMT_CHUNK_LENGTH+2) {
@@ -168,7 +169,7 @@
"corrupt WAVE file: extra GSM bytes are missing");
}
sampleSizeInBits = readLittleEndianShort(dis); // sample Size (is 0 for GSM)
- int cbSize=readLittleEndianShort(dis);
+ cbSize=readLittleEndianShort(dis);
if (cbSize < 2) {
throw new UnsupportedAudioFileException(
"corrupt WAVE file: extra GSM bytes are corrupt");
@@ -185,6 +186,33 @@
frameRate=((float) sampleRate)/((float) decodedSamplesPerBlock);
read+=6;
break;
+
+ case WaveTool.WAVE_FORMAT_IMA_ADPCM:
+ if (chunkLength < WaveTool.MIN_FMT_CHUNK_LENGTH + 2)
+ {
+ throw new UnsupportedAudioFileException(
+ "corrupt WAVE file: extra GSM bytes are missing");
+ }
+ sampleSizeInBits = readLittleEndianShort(dis);
+ cbSize = readLittleEndianShort(dis);
+ if (cbSize < 2)
+ {
+ throw new UnsupportedAudioFileException(
+ "corrupt WAVE file: extra IMA ADPCM bytes are corrupt");
+ }
+ int samplesPerBlock = readLittleEndianShort(dis) & 0xFFFF; // unsigned
+ if (TDebug.TraceAudioFileReader) {
+ debugAdd+=", wBitsPerSample="+sampleSizeInBits
+ +", cbSize="+cbSize
+ +", wSamplesPerBlock=" + samplesPerBlock;
+ }
+ sampleSizeInBits = AudioSystem.NOT_SPECIFIED;
+ encoding = WaveTool.GSM0610;
+ frameSize = blockAlign;
+ frameRate = ((float) sampleRate)/((float) samplesPerBlock);
+ read += 6;
+ break;
+
default:
throw new UnsupportedAudioFileException(
"unsupported WAVE file: unknown format code "+formatCode);
@@ -222,6 +250,8 @@
frameRate,
false);
}
+
+
protected AudioFileFormat getAudioFileFormat(InputStream inputStream, long lFileLengthInBytes)
throws UnsupportedAudioFileException, IOException {
Index: kaffe/libraries/javalib/org/tritonus/sampled/file/WaveTool.java
diff -u kaffe/libraries/javalib/org/tritonus/sampled/file/WaveTool.java:1.1 kaffe/libraries/javalib/org/tritonus/sampled/file/WaveTool.java:1.2
--- kaffe/libraries/javalib/org/tritonus/sampled/file/WaveTool.java:1.1 Mon Jan 6 17:14:36 2003
+++ kaffe/libraries/javalib/org/tritonus/sampled/file/WaveTool.java Sun Sep 21 17:26:35 2003
@@ -50,11 +50,10 @@
public static final short WAVE_FORMAT_MS_ADPCM = 2;
public static final short WAVE_FORMAT_ALAW = 6;
public static final short WAVE_FORMAT_ULAW = 7;
- public static final short WAVE_FORMAT_IMA_ADPCM = 17;
+ public static final short WAVE_FORMAT_IMA_ADPCM = 17; // same as DVI_ADPCM
public static final short WAVE_FORMAT_G723_ADPCM = 20;
- public static final short WAVE_FORMAT_GSM_610 = 49;
+ public static final short WAVE_FORMAT_GSM610 = 49;
public static final short WAVE_FORMAT_G721_ADPCM = 64;
- public static final short WAVE_FORMAT_GSM610 = 0x0031;
public static final short WAVE_FORMAT_MPEG = 80;
public static final int MIN_FMT_CHUNK_LENGTH=14;
@@ -92,7 +91,12 @@
&& (nSampleSize==AudioSystem.NOT_SPECIFIED || nSampleSize == 8)
&& frameSizeOK) {
return WAVE_FORMAT_ALAW;
- } else if (encoding.equals(GSM0610)) {
+ } else if (encoding.equals(Encodings.getEncoding("IMA_ADPCM"))
+ && nSampleSize == 4)
+ {
+ return WAVE_FORMAT_IMA_ADPCM;
+ }
+ else if (encoding.equals(GSM0610)) {
return WAVE_FORMAT_GSM610;
} else {
return WAVE_FORMAT_UNSPECIFIED;
Index: kaffe/libraries/javalib/org/tritonus/share/TCircularBuffer.java
diff -u kaffe/libraries/javalib/org/tritonus/share/TCircularBuffer.java:1.1 kaffe/libraries/javalib/org/tritonus/share/TCircularBuffer.java:1.2
--- kaffe/libraries/javalib/org/tritonus/share/TCircularBuffer.java:1.1 Mon Jan 6 17:14:37 2003
+++ kaffe/libraries/javalib/org/tritonus/share/TCircularBuffer.java Sun Sep 21 17:26:35 2003
@@ -60,13 +60,13 @@
public void close()
{
m_bOpen = false;
+ // TODO: call notify() ?
}
public int availableRead()
{
- // return (m_nWritePos - m_nReadPos) % m_nSize;
return m_nWritePos - m_nReadPos;
}
@@ -102,35 +102,35 @@
public int read(byte[] abData, int nOffset, int nLength)
{
- if (TDebug.TraceCircularBuffer)
- {
- TDebug.out(">TCircularBuffer.read(): called.");
- TDebug.out("m_nReadPos = "+m_nReadPos+" ^= "+getReadPos());
- TDebug.out("m_nWritePos = "+m_nWritePos+" ^= "+getWritePos());
- TDebug.out("availableRead() = "+availableRead());
- TDebug.out("availableWrite() = "+availableWrite());
- }
- // TODO: shoudl be inside synchronized block?
if (!m_bOpen)
{
- if (TDebug.TraceCircularBuffer)
+ if (availableRead() > 0)
+ {
+ nLength = Math.min(nLength, availableRead());
+ }
+ else
{
- TDebug.out("< not open. returning -1.");
+ if (TDebug.TraceCircularBuffer) { TDebug.out("< not open. returning -1."); }
+ return -1;
}
- return -1;
+ }
+ if (TDebug.TraceCircularBuffer)
+ {
+ TDebug.out(">TCircularBuffer.read(): called.");
+ TDebug.out("m_nReadPos = " + m_nReadPos + " ^= "+getReadPos());
+ TDebug.out("m_nWritePos = " + m_nWritePos + " ^= "+getWritePos());
+ TDebug.out("availableRead() = " + availableRead());
+ TDebug.out("availableWrite() = " + availableWrite());
}
synchronized (this)
{
+ if (m_trigger != null && availableRead() < nLength)
+ {
+ if (TDebug.TraceCircularBuffer) { TDebug.out("executing trigger."); }
+ m_trigger.execute();
+ }
if (!m_bBlockingRead)
{
- if (m_trigger != null && availableRead() < nLength)
- {
- if (TDebug.TraceCircularBuffer)
- {
- TDebug.out("executing trigger.");
- }
- m_trigger.execute();
- }
nLength = Math.min(availableRead(), nLength);
}
int nRemainingBytes = nLength;
@@ -165,11 +165,8 @@
if (TDebug.TraceCircularBuffer)
{
TDebug.out("After read:");
- TDebug.out("m_nReadPos = "+m_nReadPos+" ^= "+getReadPos());
- TDebug.out("m_nWritePos = "+m_nWritePos+" ^= "+getWritePos());
- TDebug.out("availableRead() = "+availableRead());
- TDebug.out("availableWrite() = "+availableWrite());
- TDebug.out("< completed. Read "+nLength+" bytes");
+ dumpInternalState();
+ TDebug.out("< completed. Read " + nLength + " bytes");
}
return nLength;
}
@@ -188,17 +185,11 @@
if (TDebug.TraceCircularBuffer)
{
TDebug.out(">TCircularBuffer.write(): called; nLength: " + nLength);
- TDebug.out("m_nReadPos = "+m_nReadPos+" ^= "+getReadPos());
- TDebug.out("m_nWritePos = "+m_nWritePos+" ^= "+getWritePos());
- TDebug.out("availableRead() = "+availableRead());
- TDebug.out("availableWrite() = "+availableWrite());
+ dumpInternalState();
}
synchronized (this)
{
- if (TDebug.TraceCircularBuffer)
- {
- TDebug.out("entered synchronized block.");
- }
+ if (TDebug.TraceCircularBuffer) { TDebug.out("entered synchronized block."); }
if (!m_bBlockingWrite)
{
nLength = Math.min(availableWrite(), nLength);
@@ -236,16 +227,22 @@
if (TDebug.TraceCircularBuffer)
{
TDebug.out("After write:");
- TDebug.out("m_nReadPos = "+m_nReadPos+" ^= "+getReadPos());
- TDebug.out("m_nWritePos = "+m_nWritePos+" ^= "+getWritePos());
- TDebug.out("availableRead() = "+availableRead());
- TDebug.out("availableWrite() = "+availableWrite());
+ dumpInternalState();
TDebug.out("< completed. Wrote "+nLength+" bytes");
}
return nLength;
}
}
+
+
+ private void dumpInternalState()
+ {
+ TDebug.out("m_nReadPos = " + m_nReadPos + " ^= "+getReadPos());
+ TDebug.out("m_nWritePos = " + m_nWritePos + " ^= "+getWritePos());
+ TDebug.out("availableRead() = " + availableRead());
+ TDebug.out("availableWrite() = " + availableWrite());
+ }
public static interface Trigger
Index: kaffe/libraries/javalib/org/tritonus/share/TDebug.java
diff -u kaffe/libraries/javalib/org/tritonus/share/TDebug.java:1.1 kaffe/libraries/javalib/org/tritonus/share/TDebug.java:1.2
--- kaffe/libraries/javalib/org/tritonus/share/TDebug.java:1.1 Mon Jan 6 17:14:37 2003
+++ kaffe/libraries/javalib/org/tritonus/share/TDebug.java Sun Sep 21 17:26:35 2003
@@ -70,6 +70,9 @@
public static boolean TraceAlsaNative = getBooleanProperty("TraceAlsaNative");
public static boolean TraceAlsaMixerNative = getBooleanProperty("TraceAlsaMixerNative");
public static boolean TraceAlsaPcmNative = getBooleanProperty("TraceAlsaPcmNative");
+ public static boolean TraceMixingAudioInputStream = getBooleanProperty("TraceMixingAudioInputStream");
+ public static boolean TraceOggNative = getBooleanProperty("TraceOggNative");
+ public static boolean TraceVorbisNative = getBooleanProperty("TraceVorbisNative");
// midi common implementation
public static boolean TraceMidiSystem = getBooleanProperty("TraceMidiSystem");
Index: kaffe/libraries/javalib/org/tritonus/share/sampled/FloatSampleBuffer.java
diff -u kaffe/libraries/javalib/org/tritonus/share/sampled/FloatSampleBuffer.java:1.1 kaffe/libraries/javalib/org/tritonus/share/sampled/FloatSampleBuffer.java:1.2
--- kaffe/libraries/javalib/org/tritonus/share/sampled/FloatSampleBuffer.java:1.1 Mon Jan 6 17:14:37 2003
+++ kaffe/libraries/javalib/org/tritonus/share/sampled/FloatSampleBuffer.java Sun Sep 21 17:26:35 2003
@@ -299,8 +299,8 @@
// save format for automatic dithering mode
originalFormatType=formatType;
for (int ch=0; ch<format.getChannels(); ch++) {
- convertByteToFloat(buffer, offset, sampleCount, getChannel(ch),
- bytesPerFrame, formatType);
+ convertByteToFloat(buffer, offset, bytesPerFrame, formatType,
+ getChannel(ch), 0, sampleCount);
offset+=bytesPerSample; // next channel
}
}
@@ -598,6 +598,35 @@
removeChannel(ch);
}
}
+
+ public void setSamplesFromBytes(byte[] srcBuffer, int srcOffset, AudioFormat format,
+ int destOffset, int lengthInSamples) {
+ int bytesPerSample = (format.getSampleSizeInBits() + 7)/8;
+ int bytesPerFrame = bytesPerSample * format.getChannels();
+
+ if (srcOffset + (lengthInSamples * bytesPerFrame) > srcBuffer.length) {
+ throw new IllegalArgumentException
+ ("FloatSampleBuffer.setSamplesFromBytes: srcBuffer too small.");
+ }
+ if (destOffset + lengthInSamples > getSampleCount()) {
+ throw new IllegalArgumentException
+ ("FloatSampleBuffer.setSamplesFromBytes: destBuffer too small.");
+ }
+ boolean signed = format.getEncoding().equals(AudioFormat.Encoding.PCM_SIGNED);
+ boolean unsigned = format.getEncoding().equals(AudioFormat.Encoding.PCM_UNSIGNED);
+ if (!signed && !unsigned) {
+ throw new IllegalArgumentException
+ ("FloatSampleBuffer: only PCM samples are possible.");
+ }
+ int formatType = getFormatType(format.getSampleSizeInBits(),
+ signed, format.isBigEndian());
+
+ for (int ch = 0; ch < format.getChannels(); ch++) {
+ convertByteToFloat(srcBuffer, srcOffset, bytesPerFrame, formatType,
+ getChannel(ch), destOffset, lengthInSamples);
+ srcOffset += bytesPerSample; // next channel
+ }
+ }
//////////////////////////////// properties /////////////////////////////////
@@ -730,66 +759,66 @@
private static final float invTwoPower31=1/twoPower31;
/*public*/
- private static void convertByteToFloat(byte[] input, int offset, int sampleCount,
- float[] output, int bytesPerFrame,
- int formatType) {
+ private static void convertByteToFloat(byte[] input, int inputOffset, int bytesPerFrame, int formatType,
+ float[] output, int outputOffset, int sampleCount) {
//if (TDebug.TraceAudioConverter) {
// TDebug.out("FloatSampleBuffer.convertByteToFloat, formatType="
// +formatType2Str(formatType));
//}
int sample;
- for (sample=0; sample<sampleCount; sample++) {
+ int endCount = outputOffset + sampleCount;
+ for (sample = outputOffset; sample < endCount; sample++) {
// do conversion
switch (formatType) {
case CT_8S:
output[sample]=
- ((float) input[offset])*invTwoPower7;
+ ((float) input[inputOffset])*invTwoPower7;
break;
case CT_8U:
output[sample]=
- ((float) ((input[offset] & 0xFF)-128))*invTwoPower7;
+ ((float) ((input[inputOffset] & 0xFF)-128))*invTwoPower7;
break;
case CT_16SB:
output[sample]=
- ((float) ((input[offset]<<8)
- | (input[offset+1] & 0xFF)))*invTwoPower15;
+ ((float) ((input[inputOffset]<<8)
+ | (input[inputOffset+1] & 0xFF)))*invTwoPower15;
break;
case CT_16SL:
output[sample]=
- ((float) ((input[offset+1]<<8)
- | (input[offset] & 0xFF)))*invTwoPower15;
+ ((float) ((input[inputOffset+1]<<8)
+ | (input[inputOffset] & 0xFF)))*invTwoPower15;
break;
case CT_24SB:
output[sample]=
- ((float) ((input[offset]<<16)
- | ((input[offset+1] & 0xFF)<<8)
- | (input[offset+2] & 0xFF)))*invTwoPower23;
+ ((float) ((input[inputOffset]<<16)
+ | ((input[inputOffset+1] & 0xFF)<<8)
+ | (input[inputOffset+2] & 0xFF)))*invTwoPower23;
break;
case CT_24SL:
output[sample]=
- ((float) ((input[offset+2]<<16)
- | ((input[offset+1] & 0xFF)<<8)
- | (input[offset] & 0xFF)))*invTwoPower23;
+ ((float) ((input[inputOffset+2]<<16)
+ | ((input[inputOffset+1] & 0xFF)<<8)
+ | (input[inputOffset] & 0xFF)))*invTwoPower23;
break;
case CT_32SB:
output[sample]=
- ((float) ((input[offset]<<24)
- | ((input[offset+1] & 0xFF)<<16)
- | ((input[offset+2] & 0xFF)<<8)
- | (input[offset+3] & 0xFF)))*invTwoPower31;
+ ((float) ((input[inputOffset]<<24)
+ | ((input[inputOffset+1] & 0xFF)<<16)
+ | ((input[inputOffset+2] & 0xFF)<<8)
+ | (input[inputOffset+3] & 0xFF)))*invTwoPower31;
break;
case CT_32SL:
output[sample]=
- ((float) ((input[offset+3]<<24)
- | ((input[offset+2] & 0xFF)<<16)
- | ((input[offset+1] & 0xFF)<<8)
- | (input[offset] & 0xFF)))*invTwoPower31;
+ ((float) ((input[inputOffset+3]<<24)
+ | ((input[inputOffset+2] & 0xFF)<<16)
+ | ((input[inputOffset+1] & 0xFF)<<8)
+ | (input[inputOffset] & 0xFF)))*invTwoPower31;
break;
default:
throw new IllegalArgumentException
("Unsupported formatType="+formatType);
}
- offset+=bytesPerFrame;
+ inputOffset += bytesPerFrame;
}
}
Index: kaffe/libraries/javalib/org/tritonus/share/sampled/TVolumeUtils.java
diff -u kaffe/libraries/javalib/org/tritonus/share/sampled/TVolumeUtils.java:1.1 kaffe/libraries/javalib/org/tritonus/share/sampled/TVolumeUtils.java:1.2
--- kaffe/libraries/javalib/org/tritonus/share/sampled/TVolumeUtils.java:1.1 Mon Jan 6 17:14:37 2003
+++ kaffe/libraries/javalib/org/tritonus/share/sampled/TVolumeUtils.java Sun Sep 21 17:26:35 2003
@@ -3,8 +3,7 @@
*/
/*
- * Copyright (c) 1999 by Matthias Pfisterer <Matthias.Pfisterer@gmx.de>
- *
+ * Copyright (c) 1999 by Matthias Pfisterer <Matthias.Pfisterer@web.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as published
@@ -19,9 +18,7 @@
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
*/
-
package org.tritonus.share.sampled;
Index: kaffe/libraries/javalib/org/tritonus/share/sampled/convert/TAsynchronousFilteredAudioInputStream.java
diff -u kaffe/libraries/javalib/org/tritonus/share/sampled/convert/TAsynchronousFilteredAudioInputStream.java:1.2 kaffe/libraries/javalib/org/tritonus/share/sampled/convert/TAsynchronousFilteredAudioInputStream.java:1.3
--- kaffe/libraries/javalib/org/tritonus/share/sampled/convert/TAsynchronousFilteredAudioInputStream.java:1.2 Thu Feb 6 21:35:10 2003
+++ kaffe/libraries/javalib/org/tritonus/share/sampled/convert/TAsynchronousFilteredAudioInputStream.java Sun Sep 21 17:26:36 2003
@@ -36,39 +36,61 @@
import org.tritonus.share.TCircularBuffer;
-/**
- * Base class for asynchronus converters.
- *
- * @author Matthias Pfisterer
- */
+/** Base class for asynchronus converters.
+ This class serves as base class for
+ converters that do not have a fixed
+ ratio between the size of a block of input
+ data and the size of a block of output data.
+ These types of converters therefore need an
+ internal buffer, which is realized in this
+ class.
+ @author Matthias Pfisterer
+*/
public abstract class TAsynchronousFilteredAudioInputStream
- extends AudioInputStream
- implements TCircularBuffer.Trigger
+ extends AudioInputStream
+ implements TCircularBuffer.Trigger
{
- private static int DEFAULT_BUFFER_SIZE = 327670;
+ private static final int DEFAULT_BUFFER_SIZE = 327670;
+ private static final int DEFAULT_MIN_AVAILABLE = 4096;
private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
- // ausnahmsweise ;-)
- protected TCircularBuffer m_circularBuffer;
+
+ private TCircularBuffer m_circularBuffer;
+ private int m_nMinAvailable;
private byte[] m_abSingleByte;
- /**
- * @param lLength length of this stream in frames
- */
+
+ /** Constructor.
+ This constructor uses the default buffer size and the default
+ min available amount.
+
+ @param lLength length of this stream in frames. May be
+ AudioSystem.NOT_SPECIFIED.
+ */
public TAsynchronousFilteredAudioInputStream(AudioFormat outputFormat, long lLength)
{
- this(outputFormat, lLength, DEFAULT_BUFFER_SIZE);
+ this(outputFormat, lLength,
+ DEFAULT_BUFFER_SIZE,
+ DEFAULT_MIN_AVAILABLE);
}
- /**
- * @param lLength length of this stream in frames
- * @param nBufferSize size of the circular buffer in bytes
+ /** Constructor.
+ With this constructor, the buffer size and the minimum
+ available amount can be specified as parameters.
+
+ @param lLength length of this stream in frames. May be
+ AudioSystem.NOT_SPECIFIED.
+
+ @param nBufferSize size of the circular buffer in bytes.
*/
- public TAsynchronousFilteredAudioInputStream(AudioFormat outputFormat, long lLength, int nBufferSize)
+ public TAsynchronousFilteredAudioInputStream(
+ AudioFormat outputFormat, long lLength,
+ int nBufferSize,
+ int nMinAvailable)
{
/* The usage of a ByteArrayInputStream is a hack.
* (the infamous "JavaOne hack", because I did it on June
@@ -89,10 +111,37 @@
false, // blocking read
true, // blocking write
this); // trigger
+ m_nMinAvailable = nMinAvailable;
if (TDebug.TraceAudioConverter) { TDebug.out("TAsynchronousFilteredAudioInputStream.<init>(): end"); }
}
+ /** Returns the circular buffer.
+ */
+ protected TCircularBuffer getCircularBuffer()
+ {
+ return m_circularBuffer;
+ }
+
+
+
+ /** Check if writing more data to the circular buffer is recommanded.
+ This checks the available write space in the circular buffer
+ against the minimum available property. If the available write
+ space is greater than th minimum available property, more
+ writing is encouraged, so this method returns true.
+ Note that this is only a hint to subclasses. However,
+ it is an important hint.
+
+ @return true if more writing to the circular buffer is
+ recommanden. Otherwise, false is returned.
+ */
+ protected boolean writeMore()
+ {
+ return getCircularBuffer().availableWrite() > m_nMinAvailable;
+ }
+
+
public int read()
throws IOException
@@ -122,9 +171,9 @@
public int read(byte[] abData)
throws IOException
{
- // if (TDebug.TraceAudioConverter) { TDebug.out("TAsynchronousFilteredAudioInputStream.read(byte[]): begin"); }
+ if (TDebug.TraceAudioConverter) { TDebug.out("TAsynchronousFilteredAudioInputStream.read(byte[]): begin"); }
int nRead = read(abData, 0, abData.length);
- // if (TDebug.TraceAudioConverter) { TDebug.out("TAsynchronousFilteredAudioInputStream.read(byte[]): end"); }
+ if (TDebug.TraceAudioConverter) { TDebug.out("TAsynchronousFilteredAudioInputStream.read(byte[]): end"); }
return nRead;
}
@@ -133,12 +182,12 @@
public int read(byte[] abData, int nOffset, int nLength)
throws IOException
{
- // if (TDebug.TraceAudioConverter) { TDebug.out("TAsynchronousFilteredAudioInputStream.read(byte[], int, int): begin"); }
+ if (TDebug.TraceAudioConverter) { TDebug.out("TAsynchronousFilteredAudioInputStream.read(byte[], int, int): begin"); }
//$$fb 2001-04-22: this returns at maximum circular buffer
// length. This is not very efficient...
//$$fb 2001-04-25: we should check that we do not exceed getFrameLength() !
int nRead = m_circularBuffer.read(abData, nOffset, nLength);
- // if (TDebug.TraceAudioConverter) { TDebug.out("TAsynchronousFilteredAudioInputStream.read(byte[], int, int): end"); }
+ if (TDebug.TraceAudioConverter) { TDebug.out("TAsynchronousFilteredAudioInputStream.read(byte[], int, int): end"); }
return nRead;
}
Index: kaffe/libraries/javalib/org/tritonus/share/sampled/file/TAudioFileWriter.java
diff -u kaffe/libraries/javalib/org/tritonus/share/sampled/file/TAudioFileWriter.java:1.1 kaffe/libraries/javalib/org/tritonus/share/sampled/file/TAudioFileWriter.java:1.2
--- kaffe/libraries/javalib/org/tritonus/share/sampled/file/TAudioFileWriter.java:1.1 Mon Jan 6 17:14:38 2003
+++ kaffe/libraries/javalib/org/tritonus/share/sampled/file/TAudioFileWriter.java Sun Sep 21 17:26:36 2003
@@ -98,8 +98,10 @@
protected TAudioFileWriter(Collection fileTypes,
Collection audioFormats)
{
+ if (TDebug.TraceAudioFileWriter) { TDebug.out("TAudioFileWriter.<init>(): begin"); }
m_audioFileTypes = fileTypes;
m_audioFormats = audioFormats;
+ if (TDebug.TraceAudioFileWriter) { TDebug.out("TAudioFileWriter.<init>(): end"); }
}
// implementing the interface