File file=new File("C:\Users\me\Desktop\a.flac");
audioInputStream = AudioSystem.getAudioInputStream(file);
audioFormat = audioInputStream.getFormat();
然后运行就显示
javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
我添加了jflac-1.3.jar包还有jfac-1.3-jdk1.4.jar包,还是显示文件格式不支持,郁闷。其他格式的都能够播放。
如果你的项目运行时有报错的话,可能是你的jar包出现冲突了,如果没有报错,有可能是jar包版本问题,比如说支持该格式的功能需要使用到另外的jar包
你添加包了,你编译了没有
因为网上的教程都是默认的wav格式的。你导入jar包了还是使用原来的那套代码当然不行,你得用里面的功能啊。只需要一行代码即可播放flac文件。先import org.kc7bfi.jflac.apps.Player。然后new Player().decode(String file)即可播放
我也遇到了这个我问题
经过我的仔细分析
应该是AudioSystem.getAudioInputStream->AudioSystem.getAudioFileReaders->AudioSystem.getProviders->JDK13Services.getProviders方法(可能java版本不一样具体方法名和位置不太一样)获取不到jflac框架中的FlacAudioFileReader类导致的
(然后FlacFormatConversionProvider类看起来也获取不到)
这时候可以简单的分析一下文件后缀名,手动引用这些类就行了
以下代码仅供参考:
if( musicType == Main.MUSIC_TYPE_FLAC )
{
input = new FlacAudioFileReader().getAudioInputStream( musicFile );
inputFormat = input.getFormat();
int channels = inputFormat.getChannels();
float rate = inputFormat.getSampleRate();
inputFormat = new AudioFormat( AudioFormat.Encoding.PCM_SIGNED , rate , 16 , channels , channels*2 , rate , false );
inputStream = new FlacFormatConversionProvider().getAudioInputStream( inputFormat , input );
}
下面是通用的代码(可以用来比较一下区别):
input = AudioSystem.getAudioInputStream( musicFile );
inputFormat = input.getFormat();
int channels = inputFormat.getChannels();
float rate = inputFormat.getSampleRate();
inputFormat = new AudioFormat( AudioFormat.Encoding.PCM_SIGNED , rate , 16 , channels , channels*2 , rate , false );
inputStream = AudioSystem.getAudioInputStream( inputFormat , input );