I am creating java audio player. My target files are flac files which are converted into wav files by JFlac library. The problem i am getting is that program through me an exception when i try to play this song. The exception is specifically:
java.lang.IllegalArgumentException: No line matching interface SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 24 bit, stereo, 6 bytes/frame, little-endian is supported.
But when i lower the quality of a song using vlc player like lowering its bitrate value i am able to play the song without any issue. But i cannot play the original wav file. Is there any way to lower the quality of wav file in java or anything else i can do to play the song.
This is where wav song is played:
public void playSound(String filename){
String strFilename = filename;
try {
soundFile = new File(strFilename);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
try {
audioStream = AudioSystem.getAudioInputStream(soundFile);
} catch (Exception e){
e.printStackTrace();
System.exit(1);
}
audioFormat = audioStream.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
try {
//line where i am getting exception
**sourceLine = (SourceDataLine) AudioSystem.getLine(info);**
sourceLine.open(audioFormat);
} catch (LineUnavailableException e) {
e.printStackTrace();
System.exit(1);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
sourceLine.start();
int nBytesRead = 0;
byte[] abData = new byte[BUFFER_SIZE];
while (nBytesRead != -1) {
try {
nBytesRead = audioStream.read(abData, 0, abData.length);
} catch (IOException e) {
e.printStackTrace();
}
if (nBytesRead >= 0) {
@SuppressWarnings("unused")
int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);
}
}
sourceLine.drain();
sourceLine.close();
}
Decoder function:
public void decode(String inFileName, String outFileName) throws IOException {
System.out.println("Decode [" + inFileName + "][" + outFileName + "]");
FileInputStream is = null;
FileOutputStream os = null;
try {
is = new FileInputStream(inFileName);
os = new FileOutputStream(outFileName);
wav = new WavWriter(os);
FLACDecoder decoder = new FLACDecoder(is);
decoder.addPCMProcessor(this);
decoder.decode();
} finally {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
}
}
Any help plz.