yrf1209501374 2017-09-28 02:15 采纳率: 50%
浏览 1237

用java来播放音乐老是出错,求大牛解答下

public void play(String fileName) {
// 定义一个文本对象引用,指向名为fileName那个文件
File sourceFile = new File(fileName);
if (!sourceFile.exists()) {
System.out.println("音频文件不存在!");
return;
}
// 定义一个AudioInputStream用于接收输入的音频数据
AudioInputStream ais = null;
try {
System.out.println(sourceFile.getName());
System.out.println(sourceFile.getPath());
System.out.println(sourceFile);
// 用AudioSystem的getAudioInputStream方法获取指定File的音频输入流
ais = AudioSystem.getAudioInputStream(sourceFile);

    } catch (UnsupportedAudioFileException e) {
        System.out.println("File不指向系统识别的有效音频文件数据!");
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // 用AudioFormat来获取AudioInputStream的格式
    AudioFormat format = ais.getFormat();
    // 创建源数据行SourceDataLine,可以写入数据
    SourceDataLine auline = null;
    // 获取源数据行支持的音频格式DataLine.Info
    DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

    try {
        // 获取与指定info类型相匹配的行
        auline = (SourceDataLine) AudioSystem.getLine(info);
        // 打开具有指定格式的行,使它变得可操作
        auline.open();
    } catch (LineUnavailableException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    auline.start();

    // 写出数据

    int nByteRead = 0;
    byte[] abData = new byte[2];
    while (nByteRead != -1) {
        try {
            // 从音频流读取指定的最大数量的数据字节
            nByteRead = ais.read(abData, 0, abData.length);
            if (nByteRead >= 0) {
                // 用此源数据行写入数据到abData
                auline.write(abData, 0, nByteRead);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            auline.drain();
            auline.close();
        }
    }

}

错误来源:SourceDataLine auline = (SourceDataLine) AudioSystem.getLine(info)

错误原由:Exception in thread "main" java.lang.IllegalArgumentException: No line matching interface SourceDataLine supporting format MPEG1L3 44100.0 Hz, unknown bits per sample, stereo, unknown frame size, 38.28125 frames/second, is supported.
at javax.sound.sampled.AudioSystem.getLine(Unknown Source)

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 乘性高斯噪声在深度学习网络中的应用
    • ¥15 运筹学排序问题中的在线排序
    • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
    • ¥30 求一段fortran代码用IVF编译运行的结果
    • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
    • ¥15 C++ 头文件/宏冲突问题解决
    • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
    • ¥50 安卓adb backup备份子用户应用数据失败
    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
    • ¥30 python代码,帮调试,帮帮忙吧