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 matlab有关常微分方程的问题求解决
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算
    • ¥15 java如何提取出pdf里的文字?
    • ¥100 求三轴之间相互配合画圆以及直线的算法
    • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
    • ¥15 名为“Product”的列已属于此 DataTable