【问题标题】:Got an exception while working with javax.sound.samples library....!使用 javax.sound.samples 库时出现异常......!
【发布时间】:2020-09-22 20:50:03
【问题描述】:

谁能告诉我我在这个java程序中哪里出错了。 运行此程序时,我总是遇到异常。

import java.io.*;
import javax.sound.sampled.*;
public class x 
{
 public static void main(String args[])
 {
  try
  {
  File f=new File("mm.wav");
  AudioInputStream a=AudioSystem.getAudioInputStream(new FileInputStream(f));
  AudioFormat audioFormat = a
                   .getFormat();
             DataLine.Info dataLineInfo = new DataLine.Info(
                   Clip.class, audioFormat);
             Clip clip = (Clip) AudioSystem
                   .getLine(dataLineInfo);
             clip.open(a);
             clip.start();
 }
 catch(Exception e)
 {
  e.printStackTrace();
  System.out.println("exception caught ");
 }
 }
}

它会抛出这个异常

java.io.IOException: mark/reset not supported
    at java.io.InputStream.reset(InputStream.java:351)
    at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(SoftMidiAudioFileReader.java:135)
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1111)
    at x.main(x.java:10)

【问题讨论】:

  • 请发布异常堆栈跟踪,或者您希望我们运行此代码:) ??
  • 您至少需要发布 what 引发的异常,以及堆栈跟踪中的前十几行。否则,你不会得到太多帮助。
  • java.io.IOException:com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(SoftMidiAudioFileReader.java) 的 java.io.InputStream.reset(InputStream.java:351) 不支持标记/重置:135) 在 javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1111) 在 x.main(x.java:10)
  • 我确实采用了这段代码,在 Mac OS X 10.6 上编译它,同时使用 Java 1.5 和 Java 1.6,然后运行它。它两次都有效。我还尝试了一个空的 WAV 文件,只是想看看这是否导致了异常。没运气;我得到了一个 EOFException,这是有道理的。你用的是什么JDK和操作系统?

标签: java audio


【解决方案1】:

偶然发现了同样的问题,并深入研究 javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1113) 那里的代码询问提供者是否可以处理声音格式,并捕获 UnsupportedAudioFileException 以继续下一个提供者。代码 cmets 状态“抛出 IOException”,并且在 AudioSystem 尝试提供程序时发生 IOException com.sun.media.sound.SoftMidiAudioFileReader 是的,提供者会抛出 UnsupportedAudioFileException,但在这样做之前,它会在输入流上调用“reset()”。我通过标准 URL.openStream() 使用包资源,URL 流不支持 reset(),并在 之前 抛出 IOException SoftMidiAudioFileReader throws UnsupportedAudioFileException。

AudioSystem 类中的错误:UnsupportedAudioFileException 被捕获,并继续下一个提供程序,而不必要的 IOException 中止所有其他提供程序。

您的堆栈跟踪显示您遇到了相同的错误。 还没有解决办法。

【讨论】:

    【解决方案2】:

    已编辑:

    测试您的代码后,每次我尝试为您的代码提供无效的声音文件时都会遇到相同的错误(我给了它文本文件和二进制 java 类文件 :))。我每次都遇到同样的例外。这不是一个非常用户友好的例外,但请检查您的 wav 文件的有效性。

    编辑#2:

    如果我将代码更改为:

      AudioInputStream a=AudioSystem.getAudioInputStream(
          new BufferedInputStream(new FileInputStream(f)));
    

    那么无效的声音文件会给出更令人愉悦的异常:UnsupportedAudioFileException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 2015-02-05
      • 2014-08-06
      • 1970-01-01
      • 2011-09-15
      • 2016-11-08
      • 2011-08-11
      相关资源
      最近更新 更多