最近在写个小应用,用到了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现主要支持以au为名的声音。在Applet中专门提供了类AudioClip来对声音的支持。sun公司为应用程序中的声音支持另提供了一个java新包 -- sun.audio,在这个包下面提供...
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 ...
实现AudioStream的获取/解析/播放
Java包sun.audio下载,处理声音文件; http://download.csdn.net/detail/giliwala/475924 第五章包含了一些应用示例
信息 包裹 麦克风 描述 ...mic.audioStream.on('data', function(data) { process.stdout.write(data); }); 原料药 startCapture(选项) 启动此过程并将ALSA arecord工具的标准输出通过管道传输到au
该项目界面用Java Swing 图形界面开发,开发面板,菜单,按钮等,使用了定时器Timer 设置开局时长,同时实现了背景音乐播放(sun.audio.AudioStream)增加了玩的舒适性。棋盘背景用四张不同的背景图来由用户选择...
java最快最省代码的播放音频的jar包
音频流 ================ 流式传输和转码您的音乐库。 目标是制作您想要使用的软件,例如在浏览器中...$ git clone git://github.com/nickdesaulniers/audiostream.git && cd audiostream && npm install 配置 修改c
sun.audio在这个包下面提供了大部分所需要的声音处 理类。注:sun包下面还有很多很有意思的技术支持,如java2D,Tools 等,大家可自己尝试去使用。
<param name="AudioStream" value="-1"> <!--是否自动调整播放大小--> <!--是否自动播放--> <!--左右声道平衡,最左-9640,最右9640--> <!--缓冲时间--> <param name="CaptioningID" value>
简单的UI播放器组件(如果需要,提供了用于控制声音的api) 如果您只想在前景中播放带有应用程序的本地音频文件,请。 第一步安装(适用于iOS和Android) $ npm install react-native-audio-stream
AudioStreamExample 一个symbian下 播放音频流功能和录制功能的例子,很实用也很简单明了
//set uri of your favourite audiostream Uri uri = Uri.parse("http://..."); //implement callbacks OnNewMetadataListener listener = new OnNewMetadataListener() { @Override public void onNewHeaders...
Unity3D Windows平台基于NSpeex、NAudio的speex音频解码播放
用js下载文件,使用标签,添加download属性即可。 var a = document....因此考虑后台实现,用java代理请求,获取文件设置文件名,返回到前端。 public void downFiles(HttpServletResponse response,String
Audiostream,一个可直接访问麦克风和扬声器的库,也是一个 Python 扩展,用于将原始数据流式传输到扬声器。该项目旨在在音频流中尽可能处于底层服务:将字节推送到扬声器从麦克风中获取字节 标签:...
Mute 返回或设置控件是否播放声音(逻辑型) OpenState 返回控件的内容源状态(长整型) PlayCount 返回或设置一个剪辑播放的次数(长整型) PlayState 返回控件的当前操作状态(长整型) PreviewMode 返回或设置控件是否...
使用Recorder.js的Google Speech to text REST API实现: Google语音转文本API与Recorder.js库一起使用。它将从麦克风获取音频,并将音频数据传递到Google API Explorer API(REST API)。我们已经使用Recorder js库...
灰烬视听器用ember install ember-audio-visualizer 然后在模板中: {{audio-visualizer audioStream=audioStream}} ,其中audioStream是MediaStream
此存储库中的代码演示了如何使用WebAudio和WebRTC API在Web浏览器之间流mp3。 演示 有现场演示。 要求 要运行该演示,您需要安装 运行演示 通过以下方式安装和运行此演示: ... 安装依赖项: npm install ...