K
Killi138
Gast
Hi Leute,
ich hab mir eine Klasse geschrieben, die mir MP3-Dateien abspielen kann (mit Hilfe von MP3 SPI).
MP3 SPI unterstützt scheinbar auch einen Live Equalizer, siehe in der Doku: http://www.javazoom.net/mp3spi/documents.html
Allerdings zeigt mir mein Code immer nur 0.0 an - für jeden Wert des Equalizers...wieso? Ich lese ihn doch jedesmal neu ein...oder ist gerade das der Fehler?
Ich weiß nicht wo ich weiter suchen soll..
ich hab mir eine Klasse geschrieben, die mir MP3-Dateien abspielen kann (mit Hilfe von MP3 SPI).
MP3 SPI unterstützt scheinbar auch einen Live Equalizer, siehe in der Doku: http://www.javazoom.net/mp3spi/documents.html
Allerdings zeigt mir mein Code immer nur 0.0 an - für jeden Wert des Equalizers...wieso? Ich lese ihn doch jedesmal neu ein...oder ist gerade das der Fehler?
Ich weiß nicht wo ich weiter suchen soll..
Code:
import java.io.*;
import javax.sound.sampled.*;
import java.util.Map;
public class JLayerPlayer {
public static void main(String[] args) {
testPlay("C:/Overhaulin-Gasoline.mp3");
}
public static void testPlay(String filename)
{
try {
File file = new File(filename);
AudioInputStream in= AudioSystem.getAudioInputStream(file);
AudioInputStream din = null;
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(),
16,
baseFormat.getChannels(),
baseFormat.getChannels() * 2,
baseFormat.getSampleRate(),
false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
// Play now.
rawplay(decodedFormat, din);
in.close();
} catch (Exception e)
{
//Handle exception.
}
}
private static void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException, LineUnavailableException
{
byte[] data = new byte[4096];
SourceDataLine line = getLine(targetFormat);
if (line != null)
{
// Start
line.start();
int nBytesRead = 0, nBytesWritten = 0;
while (nBytesRead != -1)
{
nBytesRead = din.read(data, 0, data.length);
// DecodedMpegAudioInputStream properties
if (din instanceof javazoom.spi.PropertiesContainer)
{
Map properties = ((javazoom.spi.PropertiesContainer) din).properties();
float[] equalizer = (float[]) properties.get("mp3.equalizer");
equalizer[0] = (float)0.5;
equalizer[31] = (float)0.25;
String eq = "";
for(int i=0;i<equalizer.length;i++) {
eq = eq + equalizer[i] + " ";
}
System.out.println("Equal: " + eq);
}
if (nBytesRead != -1) nBytesWritten = line.write(data, 0, nBytesRead);
}
// Stop
line.drain();
line.stop();
line.close();
din.close();
}
}
private static SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException
{
SourceDataLine res = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
res = (SourceDataLine) AudioSystem.getLine(info);
res.open(audioFormat);
return res;
}
}