最近在写个小应用,用到了java用来播放声音的类库,网上有许多例子,于是就去找了一个。
code from http://dracularking.iteye.com/blog/738917
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import sun.audio.AudioData;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;
public class MusicPlay {
private AudioStream as; // 单次播放声音用
ContinuousAudioDataStream cas;// 循环播放声音
// 构造函数
public MusicPlay(URL url) {
try {
// 打开一个声音文件流作为输入
as = new AudioStream(url.openStream());
} catch(FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 一次播放 开始
public void start() {
if(as == null) {
System.out.println("AudioStream object is not created!");
return;
} else {
AudioPlayer.player.start(as);
}
}
// 一次播放 停止
public void stop() {
if(as == null) {
System.out.println("AudioStream object is not created!");
return;
} else {
AudioPlayer.player.stop(as);
}
}
// 循环播放 开始
public void continuousStart() {
// Create AudioData source.
AudioData data = null;
try {
data = as.getData();
} catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Create ContinuousAudioDataStream.
cas = new ContinuousAudioDataStream(data);
// Play audio.
AudioPlayer.player.start(cas);
}
// 循环播放 停止
public void continuousStop() {
if(cas != null) {
AudioPlayer.player.stop(cas);
}
}
}
不幸的是,在使用过程中,在使用循环播放时创建ContinuousAudioDataStream类时, data = as.getData() 这一句出现了异常java.io.IOException: could not create AudioData object。
上网搜了好多资料都没有解决,有说音频文件格式不对,有说类库有问题,但是都没有解决,后来查看了AudioStream类源文件里的getData函数后发现,getData()对音频文件的长度是有限制的,不能超过1M, 终于找到原因了, nnd这种原因导致的异常真是悲剧,网上完全找不到这种情况,javaDoc里也没有说明。。。
http://www.docjar.com/html/api/sun/audio/AudioStream.java.html
102 public AudioData getData() throws IOException {
103 int length = getLength();
104
105 //limit the memory to 1M, so too large au file won't load
106 if (length < 1024*1024) {
107 byte [] buffer = new byte[length];
108 try {
109 ais.read(buffer, 0, length);
110 } catch (IOException ex) {
111 throw new IOException("Could not create AudioData Object");
112 }
113 return new AudioData(format, buffer);
114 }
115
116 /* acis.setData();
117
118 if (acis.stream instanceof ByteArrayInputStream) {
119 Format[] format = acis.getFormat();
120 byte[] bytes = acis.getBytes();
121 if (bytes == null)
122 throw new IOException("could not create AudioData object: no data received");
123 return new AudioData((AudioFormat)format[0], bytes);
124 }
125 */
126
127 throw new IOException("could not create AudioData object");
128 }
另外,播放声音的代码上面还是有问题的,应当参考一下的链接 http://www.java2s.com/Code/JavaAPI/sun.audio/newAudioStreamInputStreamarg0.htm
分享到:
相关推荐
在Java编程语言中,播放声音是一项常见的需求,尤其在开发游戏、媒体应用或者教育软件时。Java提供了多种方式来处理音频播放,其中一种是通过Applet的`AudioClip`类,另一种则是使用`sun.audio`包。以下是这两种方法...
在Java编程语言中,播放声音是一项常见的需求,特别是在开发游戏、音乐播放器或者教育软件时。本实例将深入探讨如何在Java中实现音频播放功能。Java提供了多种方式来处理音频,包括使用Java Sound API(AudioSystem...
Java的sun.audio.jar是Java平台早期提供的一种音频处理支持的库文件,主要用于处理音频播放和音频数据的操作。这个jar文件包含在Java的标准类库中,主要用于兼容早期的Java应用程序,尤其是那些需要简单音频功能的...
AudioStream provides proper audio streaming support for Unity - mainly for mobile platforms and the Editor, where there is official support lacking a bit currently. It uses the low level API of FMOD ...
在Java编程语言中,播放声音是一项常见的需求,特别是在开发多媒体应用程序或者游戏时。这个实例将指导我们如何在Java环境中利用内置的Java Sound API来播放音频文件。以下是对这个实例的详细解析: 首先,我们需要...
在Java编程语言中,播放声音是一项常见的需求,尤其是在开发多媒体应用程序或者游戏时。Java提供了多种方式来处理音频,包括使用Java Media Framework (JMF) 和内置的类库。本篇文章将详细探讨两种在Java中播放声音...
在Java编程语言中,播放声音是一项常见的需求,特别是在开发游戏、音乐播放器或者任何需要音频反馈的应用中。本文将深入探讨如何使用Java来播放声音,特别是针对标题中提到的"dog.wav"文件。 首先,Java提供了`...
Java的sun.audio包是Java标准库的一个组成部分,主要用于处理音频数据和播放音频文件。这个包在Java早期版本中被广泛使用,尽管在后续版本中,Java Sound API成为了更推荐的音频处理工具,但sun.audio包仍然保留,为...
AudioFormat format = audioStream.getFormat(); ``` 4. **打开音频剪辑**:创建一个`Clip`对象,它是可以重复播放的音频片段。`AudioSystem.getLine`方法用于打开剪辑,并将其与音频流关联。 ```java Clip clip =...
在Java编程语言中,开发声音播放程序涉及到许多关键知识点,这些知识对于理解Java多媒体处理以及如何与操作系统交互至关重要。在"基于java的声音播放程序源代码.zip"这个压缩包中,我们可以预见到一些核心的Java音频...
在Java编程环境中,开发一个能够播放音乐的应用程序是一项常见的任务,尤其对于那些希望构建多媒体应用的开发者来说。本文将深入探讨如何使用Java实现音乐播放功能,以及与之相关的技术细节。 首先,我们要明白Java...
Java声音技术浅析 在Java世界里,多媒体技术的集成一直是开发者关注的焦点,其中声音技术尤为关键。本文将深入探讨Java对声音处理的支持,包括Applet中的声音播放、Java应用程序中的声音处理以及JavaX中Sound包的...
AudioStream 1.5.unitypackage
在Java编程环境中,实现音频播放是一项常见的任务,尤其在开发多媒体应用或游戏时。Java提供了丰富的API来处理音频,使得开发者能够轻松地集成音频播放功能。本篇文章将深入探讨如何用Java实现音频播放,主要涉及...
在Java应用程序中播放声音文件是一项常见的需求,尤其是在开发游戏、教育软件或任何需要音频反馈的系统时。Java提供了多种方式来处理音频,使得在应用程序中集成声音变得相对简单。以下是一些关键知识点: 1. **...
首先,你需要加载音频资源,然后用` Clip.open(AudioInputStream audioStream)`方法打开音频流,最后调用`start()`方法来播放声音。为了实现闹钟功能,可能还需要设置一个循环播放机制,或者在特定时间点停止播放。 ...
在Java编程环境中,播放MP3音频文件是一项常见的需求。标题"Java播放Mp3"提示我们,我们将探讨如何在Java中实现这一功能。这篇博客(博文链接:https://mypyg.iteye.com/blog/1060752,遗憾的是,由于这是一个假定的...
AudioFormat format = audioStream.getFormat(); ``` 4. **创建并加载音频片段** `Clip`接口代表一段可重复播放的音频。我们使用`AudioSystem`的`getClip`方法获取一个`Clip`实例,然后调用其`open`方法加载音频流。...
AudioFormat format = audioStream.getFormat(); DataLine.Info info = new DataLine.Info(Clip.class, format); clip = (Clip) AudioSystem.getLine(info); clip.open(audioStream); clip.start(); } catch ...
1. Java Sound API(Java声音API) Java Sound API是Java提供的一套全面的声音处理框架,它包括了音频输入/输出、混音、处理等功能。要使用Java Sound API播放音频,首先需要创建一个AudioInputStream对象,然后用...