java播放声音 AudioStream.getData()异常

  最近在写个小应用,用到了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

sun audio和media-player的jar包 java最快最省代码的播放音频的jar包 立即下载

相关推荐

AudioPlayer.java

AudioPlayer.java

视频音频学习参考

视频音频编程学习参考

lxg8825的博客 228

AudioPlayer(安卓音频播放demo)

这个demo使用来播放安卓音乐,我写的,是可以使用的,希望对您有用。可以快进快退,用一个按钮来实现播放和暂停的功能。使用的时候注意把音乐放到/sdccard/mnt/目录下面,并且注意音乐名字和源代码中的名字要一致。

java 实现播放声音

package com.zhuhe.util; import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import sun.audio.AudioData; import sun.a

jianqiang789的专栏 1098

华硕笔记本键盘失灵恢复方法全解析

华硕笔记本键盘失灵问题可能由多种原因导致,但大多数问题都可以通过上述方法得到解决。在尝试恢复键盘功能时,请务必按照步骤操作,并注意备份重要数据。如果问题依然存在,请寻求专业维修人员的帮助。希望本文能够帮助大家快速解决华硕笔记本键盘失灵的问题!

mmoo_python的博客 4227

单相全桥逆变三种SPWM调制方式(单极/双极/倍频)到底怎么选?一篇讲透优缺点与选型

本文深入解析单相全桥逆变器中单极性、双极性和单极性倍频三种SPWM调制方式的原理与工程选型策略。通过对比开关损耗、谐波特性和驱动复杂度等关键指标,提供基于STM32的实战方案和选型框架,帮助工程师在新能源发电、电机驱动等应用中做出最优决策。

weixin_34046298的博客 803

小程序进行语音识别(JAVA MP3 转 PCM)

公司最近有一个小程序项目需要使用语音识别功能,初步技术方案是:小程序录音-上传录音文件到后端服务器,后端服务器调用百度AI语音接口获取识别结果并返回给小程序。 中间遇到一个小问题:小程序的录音文件格式只能是MP3或者AAC,而百度语音接口所能接受的音频文件格式为PCM,WAV,AMR 这样就十分尴尬了,最后确定方案,在后端将接收的MP3文件转换成PCM文件。 在网上看了不少...

qq_15801963的博客 2188

【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析

Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中,支持普通的XDMA模式,但是这种模式只允许主机端发起PCIe 读写请求,FPGA内部无法主动发起读写请求,也即FPGA无法主动读写HOST的内存。而该IP核的另一种模式,AXI Bridge模式则支持HOST主动读写,以及FPGA主动读写。该模式下有个参数需要配置,分别是PCIe:BARs以及AXI:BARs。而上述的普通模式只有PCIe:BARs需要配置。下面详细说说这两个参数的含义。

weixin_45888152的博客 3730

could not create audio stream from input stream JAVA添加背景音乐

java.io.IOException: could not create audio stream from input stream at sun.audio.AudioStream.(AudioStream.java:65) at test11111.MyMusic.music(MyMusic.java:15) at test11111.MyMusic.main(MyMusic.jav

cjx798280904的专栏 7739

o型圈沟槽设计_O型密封圈——详细选型过程及步骤

一、密封圈常用材料二、密封圈常用密封形式密封圈分为活塞密封,活塞杆密封,端面密封,旋转密封。三、O型密封圈的选型规则O型密封圈的尺寸图径向安装O型圈选型(静态和动态运动)活塞杆密封选择适当规格的O形圈时,应该保证其外径(d1+2*d2)至少等于或者大于沟槽外径d6;当选择的O形圈直径d1大于250 mm时, O形圈外径将不能超过沟槽外径的3%;当选择的O形圈直径d1小于250mm时, O形圈外径将...

weixin_39856630的博客 2万+

Windows环境下如何通过MCP Server实现MySQL安全连接与AI集成?

本文详细介绍了在Windows环境下如何通过MCP Server实现MySQL安全连接与AI集成。MCP Server作为大模型与MySQL之间的安全通道,提供权限控制、SSL加密和协议转换功能,显著提升查询性能。文章包含环境配置、安装指南、安全策略及实战案例,帮助开发者高效实现AI与数据库的安全交互。

hill8的博客 720

使用matlab进行回声处理(三重回声)-数字信号处理课设

采用基础指令对相关音频文件进行操作,添加两重回声,回声叠加后消除回声,绘制相应音频文件的时域频域波形图

weixin_52701018的博客 9991

vue3 - 详细实现视频/图片/图文“响应式瀑布流“列表布局示例代码,手机移动端H5或PC端电脑网页根据屏幕宽度自适应响应式瀑布流效果,支持数据列表动态懒加载,仿小红书图文视频div容器的瀑布流方案

vue3,nuxt3,瀑布流,响应式,图片瀑布流,视频瀑布流,图文瀑布流,手机移动端,H5瀑布流,电脑PC网站,手机电脑都能用的瀑布流布局,屏幕自适应,最好用的瀑布流组件插件,滚动分页加载瀑布流列表,瀑布流效果,自适应瀑布流布局详细教程,动态加载数据,懒加载,小红书,图文列表,视频列表,列表容器高度不一致怎么排列,整个屏幕全是宽高不固定的div容器列表怎么办,移动端和pc端双端实现瀑布流,vue3实现图片瀑布流布局以及响应式,滚动条触底懒加载,组件插件,vue3瀑布流 电脑手机都能用,解决卡顿不流畅,对不齐

✅ 精选推荐文章 4340

java写的音乐播放器_【Java实战】Java实现简易音乐播放器

//此程序实现mid.wav格式音频文件的播放//暂时只实现了单曲播放功能//选项>其它功能会后继添加//Version 1.0// @author Zha_yongchun// Email:1729465178@qq.compackage com.music;import java.awt.event.*;import java.io.File;import java.io.IOExcep...

weixin_32238157的博客 1017

基于Simulink的轨道交通信号控制系统仿真详细介绍

轨道交通信号控制系统是确保列车安全、高效运行的核心技术。通过Simulink进行信号控制系统的仿真,可以验证系统的设计、优化调度策略并提高安全性。以下是如何在MATLAB和Simulink中设计并仿真一个轨道交通信号控制系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的轨道交通信号控制系统仿真。该系统能够根据列车位置、速度和轨道状态生成控制指令,确保列车的安全、高效运行。通过虚拟场景仿真、硬件在环测试和实机测试,验证了系统的性能,并通过参数优化进一步提升了系统的可靠性。引入智能调度。

xiaoheshang_123的博客 462

OsgEarth —— 笔记6 - 开发阶段加入漫游飞行(附源码)

效果      视频地址   源码 源码下载请私信   代码      代码相关内容:           OSG —— 笔记1 - 指令调用模型           OsgEarth —— 笔记1 - 创建地球的earth文件           OsgEarth —— 笔记2 - Qt窗口加载earth地球(附源码)           OsgEarth —— 笔记3 - 为地

1896

java播放mp3格式音频文件

下载第三方jar包,网址:http://www.javazoom.net/javalayer/javalayer.html 下载完成之后解压提取jl1.0.0.1.jar 将jl1.0.0.1.jar拷贝到项目中,并添加到Library 4.源代码 //Tip: 由于工程名和包名不一样,最好手打不要盲目复制package com.lt.music; import java.io.Buffere

Liao Tuo 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

audioplayer java_J2se中的声音---AudioPlayer

1 packagecn.gp.tools;23 importjava.io.FileInputStream;4 importjava.io.FileNotFoundException;5 importjava.io.IOException;6 importjava.io.InputStream;78 importsun.audio.AudioPlayer;9 importsun.audio.Aud...

weixin_39656513的博客 278

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Audio Player

Audio Player 通过 Qt 制作的 Windows 端多媒体播放器,主要具备以下功能: 添加多媒体文件,音视频播放分离。 多媒体列表的基本播放功能及播放模式选择功能。 通过 QSql 存储分别存储音频及视频列表。 整体设计 音乐界面实现方式 视频界面实现方式 ...

moyuchaosheng的博客 2143

使用AudioPlayer播放音乐

我们知道,AudioClip这个类可以用于播放音乐,但是它是用于applet的,不能再java应用程序中播放音乐。后来,sun公司提供了一个帮助jar文件,这个jar就是AudioPlayer。可以自行下载,在csdn上面就有免c币下载的。用这个就可以在java应用程序中播放音乐了。我自己写了一个测试程序,下面拿出来和大家分享: package test; import java.aw

Mr_Pang的专栏 4345

java播放mp3没有声音文件_java播放mp3格式音频文件

下载完成之后解压提取jl1.0.0.1.jar 将jl1.0.0.1.jar拷贝到项目中,并添加到Library4.源代码//Tip: 由于工程名和包名不一样,最好手打不要盲目复制package com.lt.music;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;imp...

weixin_33429631的博客 601

无法从输入文件获取音频输入流

无法从输入文件获取音频输入流

qq_63083501的博客 2473

java 利用AudioPlayer循环播放音乐

AudioStream as = null; AudioData ad=null; try { as = new AudioStream(类名.class.getClassLoader().getResourceAsStream("resource/***.wav")); ad = as.getData(); } catch (IOExcept

B_H_L的专栏 1万+

有关import sun.audio.AudioPlayer(或者其它文件)的问题

  今天白天在工作中使用Eclipse编译代码的时候,在播放声音的代码中报了这么一个错误   import sun.audio.AudioPlayer;   import sun.audio.AudioStream;   上面这两句都报“Access restriction: The type AudioPlayer is not accessible due to restrictio...

810

微软技术日报 11-09:.NET 8 与 9 明日同时停止支持,注册表编辑器出了 WinUI 3 版

今天这四条消息的共同点是收口。.NET 8 和 9 的支持期到点,注册表编辑器的新界面只放在仓库里给人看,GitHub 把一类危险触发器按住默认,微软在安全报告里把防线从地址黑名单挪到行为。收口并不等于关门。.NET 10 还在支持期里,被按住的触发器可以用策略按文件放回来,实验室里的样例随时可能变成产品。区别在于这些动作要有人签字,不再是默认开着。如果今天只做一件事,去看一眼构建机上的 .NET 版本。明天之后,8 和 9 的漏洞补丁不会再来了。

海盗Sharp的博客 304
下一篇: test
爱上一条鱼
博客等级 码龄19年 2粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值