javalinux播放声音
Java应用开发中的音频与视频处理技巧

Java应用开发中的音频与视频处理技巧在当今数字化时代,音频与视频处理已经成为了应用开发中的重要技术与需求。
无论是娱乐应用、教育应用还是企业应用,都需要使用到音频与视频技术,以提供更丰富的交互与用户体验。
本文将介绍一些在Java应用开发中常用的音频与视频处理技巧,供读者参考与学习。
一、音频处理技巧1. 音频格式转换在Java应用开发中,常常需要对不同格式的音频文件进行转换。
这时可以使用开源库Apache Commons IO提供的FileUtils类来进行文件操作,再结合开源库Tritonus的代码csutil,使用Java Sound API对音频文件进行读取与转换。
2. 音频剪辑与拼接在一些应用场景中,需要对音频文件进行剪辑与拼接,以满足特定需求。
通过Java Sound API提供的AudioFileFormat与AudioSystem类,可以实现对音频文件的读取、导出和处理。
通过控制音频文件的截取和合并,可以实现剪辑与拼接的效果。
3. 音频数据分析在音频处理中,经常需要对音频数据进行分析,如获取音频的频谱、声波图等信息。
可以使用Java Sound API提供的LineListener接口监听音频数据的采集过程,然后使用开源库JFreeChart生成频谱图、声波图等。
二、视频处理技巧1. 视频格式转换与音频类似,视频文件也有不同的格式。
在Java应用开发中,可以使用开源库Xuggler进行视频格式的转换。
通过使用Xuggler提供的工具类,可以将视频文件转换为不同的格式,以满足特定需求。
2. 视频剪辑与拼接在一些应用场景中,需要对视频文件进行剪辑与拼接,以提供更好的用户体验。
可以使用开源库FFmpeg进行视频的剪辑与拼接。
通过使用FFmpeg提供的命令行工具,可以实现对视频的截取和合并。
3. 视频数据处理与分析在视频处理中,经常需要对视频数据进行处理与分析,以实现特定的功能。
可以使用开源库JavaCV结合FFmpeg进行视频数据的处理与分析。
java播放声音文件的方法

java播放声音文件的方法java播放声音文件的方法大家知道java播放声音文件吗?很多人讲要使用JFM,但是也有人懒得去安装,所以另寻他法。
下面是店铺为大家搜索整理的java播放声音文件的方法,希望能给大家带来帮助!如下:public void play(String Filename)//Filename是乐曲名称或说路径{try {URL url = new URL("file:" + Filename);AudioClip ac = Applet.newAudioClip(url);ac.play();//ac.stop();//用此函数可以停止乐曲播放} catch (Exception e) {System.out.println(e);}}当然,前提是导入3个包:import java.applet.Applet;import java.applet.AudioClip;import .URL;然而实践证明这个方法并不好用,播放的声音断断续续,听起来简直是一种折磨~(不晓得这是类库本身的原因还是我电脑的故障~)后来发现了一个好方法,是由/wenda/thread?tid=7f56d51cd8e46a29& clk=wttpcts中的”神之泪花“提供的。
public void play(String Filename){try{// 用输入流打开一音频文件InputStream in = new FileInputStream(Filename);//FIlename 是你加载的声音文件如(“game.wav”)// 从输入流中创建一个AudioStream对象AudioStream as = new AudioStream(in);AudioPlayer.player.start(as);//用静态成员player.start播放音乐//AudioPlayer.player.stop(as);//关闭音乐播放//如果要实现循环播放,则用下面的三句取代上面的“AudioPlayer.player.start(as);”这句/*AudioData data = as.getData();ContinuousAudioDataStream gg= new ContinuousAudioDataStream (data);AudioPlayer.player.start(gg);// Play audio.*///如果要用一个URL 做为声音流的'源(source),则用下面的代码所示替换输入流来创建声音流:/*AudioStream as = new AudioStream (url.openStream());*/} catch(FileNotFoundException e){System.out.print("FileNotFoundException ");} catch(IOException e){System.out.print("有错误!");}}而要使用这个方法,导入的包与上一方法不同:import sun.audio.*; //java提供的,经常被忽略吧~import java.io.*;使用这个方法在我电脑上播放,很流畅。
海康摄像头音频方案(播放音频文件+语音对讲+语音转发)-支持windowLinux-java版本

海康摄像头⾳频⽅案(播放⾳频⽂件+语⾳对讲+语⾳转发)-⽀持windowLinux-java版本应⽤场景:1. 有告警出现时,海康摄像头能⾃动播报(如:禁⽌游泳,请快速⾥离开);2. 在web页⾯点击“开始对讲”,能讲PC上的麦克风声⾳传输到海康摄像头进⾏对讲;点击“停⽌对讲”,海康摄像头停⽌对讲;技术实现:使⽤海康的SDK实现,nettyserver框架,提供webapi接⼝及websocket接⼝,兼容window、linux软件功能:1. 集成海康SDK2. WebAPI接⼝(PlayMedia,StartTalk,StopTalk),采集的是本地⾳频数据3. WebSocket接⼝,讲web⽤户的⾳频数据转发到Server程序,通过SDK发送⾄海康摄像机对讲初始化H5->Server 发送指令 StartTalk::{ "ip": "192.168.3.2", "port": 8000, "name": "admin", "password": "yswy123456" }Server->H5 返回指令 StartTalk::ACK_OKServer->H5 返回指令 StartTalk::ACK_ERROE开始对讲H5->Server 发送指令 Base64⾳频字符串结束对讲H5->Server 发送指令 StopTalk::Server->H5 返回指令 StopTalk::ACK_OKServer->H5 返回指令 StartTalk::ACK_ERROR4. 链路检查超时退出SDK 测试报告⾳频播放开始对讲结束对讲⽅案内容1. 海康相机⾳频配置2. 将dll/so⽂件拷贝⾄系统⽬录下window:C:/Windows/System32linux: /usr/lib3. pcm制作1. 安装ekho-5.8.exe2. 安装girl_xiaokun.exe3. 运⾏ttsapp.exe4.使⽤UltraEdit编辑,然后选中⽂件头的44个字节并剪切(因为退格键不管⽤),将这44个字节删掉,另存为pcm⽂件核⼼代码// 开始⾳频⽂件static void StartMedia(Camera entity, String sfilePath){lockAudio.lock();_DVR_COMPRESSION_AUDIO lpCompressAudio = new _DVR_COMPRESSION_AUDIO();boolean net_DVR_GetCurrentAudioCompress = _DVR_GetCurrentAudioCompress(erID, lpCompressAudio); if (!net_DVR_GetCurrentAudioCompress) return;byte byAudioEncType = lpCompressAudio.byAudioEncType;byte byAudioSamplingRate = lpCompressAudio.byAudioSamplingRate;byte byAudioBitRate = lpCompressAudio.byAudioBitRate;byte bySupport = lpCompressAudio.bySupport;System.out.println("⾳频编码类型=" + byAudioEncType + " ⾳频采样率=" + byAudioSamplingRate + " ⾳频码率=" + byAudioBitRate + " bySupport=" + bySupport);NativeLong mr = _DVR_StartVoiceCom_MR_V30(erID, 1, null, null);File file = new File(sfilePath);FileInputStream inputStream = null;try{inputStream = new FileInputStream(file);Memory pInBuff = new Memory(file.length());pInBuff.clear();if (pInBuff != Memory.NULL){int buffLen = 320; long currFileLen = 0; int readLen;byte[] buffer = new byte[buffLen];Memory pIB = new Memory(buffLen);while (currFileLen < file.length()){stTime = System.currentTimeMillis();readLen = inputStream.read(buffer);pIB.write(0, buffer, 0, readLen);currFileLen += readLen;Memory pOutBuffer = new Memory(buffLen);_DVR_AUDIOENC_INFO enc_info = new _DVR_AUDIOENC_INFO();enc_info.in_frame_size = buffLen;Pointer encoder = _DVR_InitG711Encoder(enc_info);//_DVR_AUDIOENC_PROCESS_PARAM param = new _DVR_AUDIOENC_PROCESS_PARAM();param.in_buf = pIB;param.out_buf = pOutBuffer;param.out_frame_size = 160;param.g711_type = 0;boolean frame = _DVR_EncodeG711Frame(encoder, param);if (!frame){int iErr = _DVR_GetLastError();System.out.println("G711⾳频编码失败!iErr = " + iErr);break;}frame = _DVR_ReleaseG711Encoder(encoder);if (!frame){int iErr = _DVR_GetLastError();System.out.println("G711⾳频编码失败!iErr = " + iErr);break;}boolean sendData = _DVR_VoiceComSendData(mr, pOutBuffer, 160);if (!sendData){int iErr = _DVR_GetLastError();System.out.println("转发语⾳数据!iErr = " + iErr);break;}Thread.sleep(20);}}}catch (Exception ex){DataHelper.AddExceptionStackTrace("[Error] StartMedia", ex);}finally{if (null != inputStream) { try { inputStream.close(); } catch(Exception e) {} }lockAudio.unlock();}_DVR_StopVoiceCom(mr);System.out.println("读取完成");}。
Linux系统无声音解决方案

Linux系统无声音解决方案Linux操作系统具有稳定、安全、高效等优势,因此被广泛应用于各个领域。
然而,有时候我们在使用Linux系统时可能会遇到无声音的问题,这给我们的使用体验带来了困扰。
本文将为大家介绍几种常见的Linux系统无声音问题的解决方案,帮助大家解决这一问题。
解决方案一:检查声音设备是否正常无声音问题的一个常见原因是声音设备没有正常工作。
为了解决这个问题,我们可以执行以下步骤:1. 首先,打开终端窗口,输入以下命令检查声卡是否被正确识别:```lspci | grep -i audio```如果命令输出符合预期,说明声卡已被正确识别。
反之,则可能需要安装或更新声卡驱动程序来解决问题。
2. 其次,检查声卡是否被正确配置。
我们可以通过在终端输入以下命令来打开声音设置:```alsamixer```确保声卡的音量设置合理,没有被静音或调至最低音量。
使用键盘上的方向键来调整音量。
3. 最后,我们还可以检查音频设备是否被正确选择。
在声音设置界面上,选择正确的音频设备,比如内建音频设备或外部音频设备。
解决方案二:更新驱动程序如果上述方法无效,我们可以尝试更新相关的驱动程序来解决无声音问题。
以下是一些常用的更新驱动程序的方法:1. 使用包管理器更新驱动程序。
在终端中,使用适合你的Linux发行版的包管理器命令来更新驱动程序。
比如,对于Debian、Ubuntu等系统,可以使用以下命令:```sudo apt-get updatesudo apt-get upgrade```2. 手动下载和安装最新的声卡驱动程序。
首先,我们需要找到正确的驱动程序版本,并在官方网站进行下载。
然后,在终端中使用以下命令进行安装:```tar -xvf driver.tar.gzcd driver_folder./configuremakesudo make install```请注意,这个过程可能因驱动程序而异,具体步骤请参考相应的驱动程序安装文档。
Java的声音处理介绍

Java的声音处理介绍声音可以创造意境,触发遐想,当与虚拟图像相结合时,更加可以让整个世界布满幻觉。
声音是多媒体技术的基础。
这就是Sun公司的java媒体技术开发小组忙于预备Java Sound 1.0 API并将其包含于下一版本的JAVA开发工具库中的原因。
在JAVA2平台出现之前,JAVA语言只能处理电话音质的声音,以单声道8KHZ的采样频率存储为μ-law AU文件。
JAVA2平台增加了对AIFF,WAV以及三种MIDI文件类型的支持。
所支持的三种MIDI文件格式为MIDI文件类型0、MIDI文件类型1、以及RMF。
应用程序接口API1.0版提供了一个易于使用的工具集,使程序员可以访问底层的合成与演奏引擎,从而扩展了 JAVA声音的应用。
其中两个重要的领域是创建数字化音频以及乐器指令数字化接口MIDI。
由于提供了大量的底层支持功能,所以程序员能输入输出声音,控制MIDI设备,并能查询系统运作情况。
声音文件类型简介主要的声音文件类型如下:AU - (扩展名为AU或SND)适用于短的声音文件,为Solaris和下一代机器的通用文件格式,也是JAVA平台的标准的音频格式。
AU类型文件使用的三种典型音频格式为: 8位μ-law类型(通常采样频率为8kHz), 8位线性类型,以及16位线性类型。
WAV - (扩展名为WAV)由 Microsoft和 IBM共同开发,对WAV的支持已经被加进Windows 95并且被延伸到Windows 98. WAV文件能存储各种格式包括μ-law,a-law 和 PCM (线性)数据。
他们几乎能被所有支持声音的Windows应用程序播放。
AIFF - (扩展名为AIF或IEF)音频互换文件格式是为Macintosh计算机和Silicon Graphics (SGI)计算机所共用的标准音频文件格式。
AIFF和 AIFF-C几乎是相同的,除了后者支持例如μ-law和 IMA ADPCM类型的压缩。
linux音乐播放器课程设计

linux音乐播放器课程设计一、课程目标知识目标:1. 学生理解Linux操作系统的基本原理和操作方法;2. 学生掌握音乐播放器软件在Linux系统中的安装与配置;3. 学生了解音乐播放器软件的常见功能及其使用方法;4. 学生掌握如何通过命令行操作音乐播放器,实现播放、暂停、停止等基本控制。
技能目标:1. 学生能够独立在Linux系统中安装和配置音乐播放器;2. 学生能够运用命令行对音乐播放器进行基本操作,如打开、关闭、播放音乐等;3. 学生能够解决在音乐播放过程中遇到的基本问题,如音乐格式不兼容、播放器故障等。
情感态度价值观目标:1. 培养学生对Linux操作系统的兴趣,激发他们探索和学习开源软件的热情;2. 培养学生合作学习、分享经验的良好习惯,提高他们团队协作能力;3. 培养学生尊重知识产权,合法使用音乐资源的意识。
本课程针对高年级学生,结合Linux操作系统的教学要求,以提高学生的实际操作能力和兴趣为目的。
课程目标具体、可衡量,旨在使学生能够掌握Linux 音乐播放器的使用,并培养他们良好的情感态度价值观。
为实现课程目标,后续教学设计将注重实践操作和团队合作,确保学生能够达到预期学习成果。
二、教学内容1. Linux操作系统简介:使学生了解Linux系统的基本原理、特点和用途,为后续学习打下基础。
- 系统组成与架构- 常见Linux发行版介绍2. 音乐播放器软件介绍:介绍Linux系统中常见的音乐播放器,如VLC、Audacious等。
- 音乐播放器功能特点- 不同播放器的优缺点对比3. 音乐播放器安装与配置:指导学生如何在Linux系统中安装和配置音乐播放器。
- 安装方法(如使用包管理器)- 常用配置选项介绍4. 命令行操作音乐播放器:教授学生如何使用命令行对音乐播放器进行基本操作。
- 常用命令及其参数- 实例演示与练习5. 音乐播放器高级应用:介绍音乐播放器的进阶使用方法,满足学生个性化需求。
Linux音频设置

Linux音频设置By Shadow(山斗) 2020年3月15日linux声音系统是比较复杂的,最近在做一个基于linux的音乐程序,碰到了好多问题,网上关于linux音频设置的资料比较少,所幸的是折腾了好几天后基本上解决了所有问题,现将自己的理解写下来。
设置音频输入输出先要明白见个概念:1.声音是哪里来?即音频从哪里采集的,声音可以来源于麦克风、音乐播放器、程序生成等。
2.声音到哪里去?即音频要被输出到哪里去,可以是诸如音箱、耳机的物理设备,也可能其它音频处理程序(比如变声器等声音特效程序)。
3.在pulseaudio架构中,音频来源与sink-input、source有关,音频输出与sink有关。
PulseAudio是当前linux发行版主流的音频架构,它是一个声音服务器,一个后台进程从一个或多个音源(进程或输入设备)接受声音输入然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。
pactl是pulseaudio的命令行接口,详细的用法请参照man pactl输出的说明。
设置音频输出设备pactl info # 查看PulseAudio的配置信息.Server String: /run/user/0/pulse/nativeLibrary Protocol Version: 33Server Protocol Version: 33Is Local: yesClient Index: 199Tile Size: 65472User Name: rootHost Name: kaliServer Name: pulseaudioServer Version: 13.0Default Sample Specification: s16le 2ch 44100HzDefault Channel Map: front-left,front-rightDefault Sink: bluez_sink.41_42_9E_70_BF_A7.a2dp_sink #当前默认的音频输出设备Default Source: alsa_b-C-Media_Electronics_B_PnP_Sound_Device-00.mono-fallback #当前默认的音频输入设备Cookie: 04e1:8cccpactl list short sinks #查看当前可用的音频输出设备,请记住每个列表项第一个数字设备ID,后面要用到5 alsa_b-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-stereo module-alsa-card.c s16le 2ch 44100Hz RUNNING7 bluez_sink.41_42_9E_70_BF_A7.a2dp_sink module-bluez5-device.c s16le 2ch 44100Hz SUSPENDEDpactl list short sink-inputs $查看当前音源从哪里来的,以下为ID为77的程序产生ID为75的音频流并输入到ID为5的音频设备75 5 77 protocol-native.c s16le 2ch 22050Hzpactl move-sink-input 75 7 #将ID为75的音源的输出导向到ID为7的音频输出设备的输入中(改变当前音频输出设备,假如你同时连接了蓝牙耳机、有线音箱,那么可用此命令切换)pactl set-sink-volume 7 0.5 #设置音频输出设备的音量pactl set-default-sink 7 #设置默认音频输出设备pactl suspend-sink 7 true|false #暂停或激活播放pactl set-sink-mute 0 0|1|toggle #设置静音。
Java应用开发中的音频和视频处理技术

Java应用开发中的音频和视频处理技术随着互联网和移动设备的快速发展,音频和视频的传输和处理逐渐成为应用开发的重要方向。
在Java开发领域中,有很多技术可以用于音频和视频的处理和应用,本文将探讨其中的一些重要技术和应用场景。
一、音频处理技术在Java应用开发中,音频处理技术主要包括音频文件的解码与编码、音频录制与播放、音频特效处理等方面。
1. 音频文件的解码与编码Java提供了丰富的库和API,使得开发者可以方便地解码和编码音频文件。
常用的音频格式如MP3、WAV等,可以通过Java音频解码器(Java Sound API)进行解码,便于进一步处理和应用。
同样,通过音频编码器,可以将音频数据编码成特定的格式进行存储和传输。
2. 音频录制与播放音频的录制和播放是音频应用中常见的功能,Java中提供了相应的类和接口,比如AudioRecord和AudioTrack,使得开发者可以方便地进行音频的录制和播放操作。
通过音频录制技术,可以实现语音识别、语音合成等应用;而通过音频播放技术,可以实现音乐播放、语音导航等功能。
3. 音频特效处理音频特效处理是提升音频质量和增加音频趣味性的一种方式。
Java 中提供了一些音频特效处理的API,比如混响效果、均衡器效果等。
通过这些技术,可以对音频进行混音、降噪、变声等操作,满足用户对音频效果的个性化需求。
二、视频处理技术在Java应用开发中,视频处理技术主要包括视频编解码、视频录制与播放、视频流处理等方面。
1. 视频编解码视频编解码是视频应用中的核心技术之一。
在Java开发领域中,可以使用FFmpeg等开源库进行视频编解码,这些库支持多种常用的视频格式,比如MP4、AVI等。
通过视频编解码技术,可以将视频数据转化为可供应用使用的格式,实现视频的播放和编辑等功能。
2. 视频录制与播放Java提供了丰富的类和接口,使得开发者可以方便地进行视频的录制和播放。
其中,JFrame类可以用于视频显示窗口的创建和管理,通过Java Media Framework(JMF)可以实现视频的录制和播放操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计用的方法import java.applet.AudioClip;import java.io.*;import java.applet.Applet;import java.awt.Frame;import .MalformedURLException;import .URL;public class Music extends Frame{public static StringimagePath=System.getProperty("user.dir")+"/Music/";public Music(){t ry {URL cb;//File f = new File(imagePath+"mario.midi");//File f = new File(imagePath+"1000.ogg");File f = new File(imagePath+"失败音效.wav");//File f = new File("d:\\铃声.mp3");cb = f.toURL();AudioClip aau;aau = Applet.newAudioClip(cb);aau.play();//循环播放 aau.play() 单曲 aau.stop()停止播放//aau.loop();} catch (MalformedURLException e) {e.printStackTrace();}}public static void main(String args[]) {n ew Music();}}因为最近在研究java的语音聊天问题,所以刚刚好写了几个,给你三个播放的方法,分为三个类,建议采用第二或第三个:package org.bling.music;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import sun.audio.AudioPlayer;public class MusicTest2 {private InputStream inputStream = null;private String file = "./intel.wav";public MusicTest2(){}public void play() throws IOException{inputStream = new FileInputStream(new File(file)); AudioPlayer.player.start(inputStream);}public static void main(String[] args) {try {new MusicTest2().play();} catch (IOException e) {e.printStackTrace();}}}---------------------------------------------------------------- package org.bling.music;import java.io.File;import java.io.IOException;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.DataLine;import javax.sound.sampled.LineUnavailableException;import javax.sound.sampled.SourceDataLine;import javax.sound.sampled.UnsupportedAudioFileException;public class MusicTest {private AudioFormat audioFormat = null;private SourceDataLine sourceDataLine = null;private dataLine_info = null;private String file = "./intel.wav";private AudioInputStream audioInputStream = null;public MusicTest() throws LineUnavailableException, UnsupportedAudioFileException, IOException{audioInputStream = AudioSystem.getAudioInputStream(new File(file)); audioFormat = audioInputStream.getFormat();dataLine_info = new (SourceDataLine.class,audioFormat); sourceDataLine = (SourceDataLine)AudioSystem.getLine(dataLine_info); }public void play() throws IOException, LineUnavailableException{byte[] b = new byte[1024];int len = 0;sourceDataLine.open(audioFormat, 1024);sourceDataLine.start();while ((len = audioInputStream.read(b)) > 0){sourceDataLine.write(b, 0, len);}audioInputStream.close();sourceDataLine.drain();sourceDataLine.close();}public static void main(String[] args) {try {new MusicTest().play();} catch (IOException e) {e.printStackTrace();} catch (LineUnavailableException e) {e.printStackTrace();} catch (UnsupportedAudioFileException e) {e.printStackTrace();}}}-----------------------------------------------------------------Java读取声音文件信息代码package org.bling.music;import java.io.File;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.DataLine;import javax.sound.sampled.SourceDataLine;public class PlayTest {/*** @param args*/public static void main(String[] args) {try {AudioInputStream ais = AudioSystem.getAudioInputStream(newFile("intel.wav"));// 获得音频输入流AudioFormat baseFormat = ais.getFormat();// 指定声音流中特定数据安排System.out.println("baseFormat="+baseFormat); info = new (SourceDataLine.class,baseFormat); System.out.println("info="+info);SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);// 从混频器获得源数据行System.out.println("line="+line);line.open(baseFormat);// 打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
line.start();// 允许数据行执行数据I/Oint BUFFER_SIZE = 4000 * 4;int intBytes = 0;byte[] audioData = new byte[BUFFER_SIZE];while (intBytes != -1) {intBytes = ais.read(audioData, 0, BUFFER_SIZE);// 从音频流读取指定的最大数量的数据字节,并将其放入给定的字节数组中。
if (intBytes >= 0) {int outBytes = line.write(audioData, 0, intBytes);// 通过此源数据行将音频数据写入混频器。
}}} catch (Exception e) {}}}java播放wav的基础代码2007-02-09 15:09import javax.sound.sampled.*;import java.io.*;public class TestMusic{private AudioFormat format;private byte[] samples;public static void main(String args[])throws Exception{TestMusic sound =new TestMusic("1.wav");InputStream stream =new ByteArrayInputStream(sound.getSamples());// play the soundsound.play(stream);// exitSystem.exit(0);}public TestMusic(String filename) {try {// open the audio input streamAudioInputStream stream =AudioSystem.getAudioInputStream(new File(filenam format = stream.getFormat();// get the audio samplessamples = getSamples(stream);}catch (UnsupportedAudioFileException ex) {ex.printStackTrace();}catch (IOException ex) {ex.printStackTrace();}}public byte[] getSamples() {return samples;}private byte[] getSamples(AudioInputStream audioStream) {// get the number of bytes to readint length = (int)(audioStream.getFrameLength() * format.getFrameSize());// read the entire streambyte[] samples = new byte[length];DataInputStream is = new DataInputStream(audioStream);try {is.readFully(samples);}catch (IOException ex) {ex.printStackTrace();}// return the samplesreturn samples;}public void play(InputStream source) {// use a short, 100ms (1/10th sec) buffer for real-time// change to the sound streamint bufferSize = format.getFrameSize() *Math.round(format.getSampleRate() / 10);byte[] buffer = new byte[bufferSize];// create a line to play toSourceDataLine line;try { info =new (SourceDataLine.class, format); line = (SourceDataLine)AudioSystem.getLine(info);line.open(format, bufferSize);}catch (LineUnavailableException ex) {ex.printStackTrace();return;}// start the lineline.start();// copy data to the linetry {int numBytesRead = 0;while (numBytesRead != -1) {numBytesRead =source.read(buffer, 0, buffer.length);if (numBytesRead != -1) {line.write(buffer, 0, numBytesRead);}}}catch (IOException ex) {ex.printStackTrace();}// wait until all data is played, then close the lineline.drain();line.close();}}java 播放midi,wav,mp3import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.Clip;import javax.sound.sampled.DataLine;import javax.sound.sampled.UnsupportedAudioFileException;import javax.sound.sampled.LineUnavailableException;import javax.sound.sampled.SourceDataLine;import java.io.IOException;import java.io.File;public class BasicPlayer {private AudioInputStream stream = null;private AudioFormat format = null;private Clip clip = null;private SourceDataLine m_line;public void play(File fileName,int itemStatus){try {// From filestream = AudioSystem.getAudioInputStream(fileName);// At present, ALAW and ULAW encodings must be converted// to PCM_SIGNED before it can be playedformat = stream.getFormat();if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,format.getSampleRate(),16,format.getChannels(),format.getChannels() * 2,format.getSampleRate(),false); // big endianstream = AudioSystem.getAudioInputStream(format, stream);}// Create the clip info = new (SourceDataLine.class, stream.getFormat(), AudioSystem.NOT_SPECIFIED);m_line = (SourceDataLine) AudioSystem.getLine(info);m_line.open(stream.getFormat(),m_line.getBufferSize());m_line.start();int numRead = 0;byte[] buf = new byte[m_line.getBufferSize()];while ((numRead = stream.read(buf, 0, buf.length)) >= 0) {int offset = 0;while (offset < numRead) {offset += m_line.write(buf, offset, numRead-offset);}}m_line.drain();m_line.stop();m_line.close();stream.close();} catch (IOException e) {e.printStackTrace();} catch (LineUnavailableException e) {e.printStackTrace();} catch (UnsupportedAudioFileException e) {e.printStackTrace();}}public double getDuration(){return m_line.getBufferSize() /(m_line.getFormat().getFrameSize() * m_line.getFormat().getFrameRate());}public double getDecision(){return m_line.getMicrosecondPosition()/1000.0;}}java 视频与音频播放器支持wav mp3 视频支持mpg package book.mutimedia.vedio.jmf;import java.awt.BorderLayout;import ponent;import java.awt.FileDialog;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.media.ControllerClosedEvent;import javax.media.ControllerEvent;import javax.media.ControllerListener;import javax.media.EndOfMediaEvent;import javax.media.Manager;import javax.media.MediaLocator;import javax.media.NoPlayerException;import javax.media.Player;import javax.media.PrefetchCompleteEvent;import javax.media.RealizeCompleteEvent;import javax.media.Time;import javax.swing.JCheckBoxMenuItem;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.SwingUtilities;import javax.swing.UIManager;/*** 用Java的JMF实现一个媒体播放器,可以播放音频和视频*/public class JMFMediaPlayer extends JFrame implements ActionListener, ControllerListener, ItemListener {// JMF的播放器Player player;// 播放器的视频组件和控制组件Component vedioComponent;Component controlComponent;// 标示是否是第一次打开播放器boolean first = true;// 标示是否需要循环boolean loop = false;// 文件当前目录String currentDirectory;// 构造方法public JMFMediaPlayer(String title) {super(title);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e){// 用户点击窗口系统菜单的关闭按钮// 调用dispose以执行windowCloseddispose();}public void windowClosed(WindowEvent e){if (player != null){// 关闭JMF播放器对象player.close();}System.exit(0);}});// 创建播放器的菜单JMenu fileMenu = new JMenu("文件");JMenuItem openMemuItem = new JMenuItem("打开");openMemuItem.addActionListener(this);fileMenu.add(openMemuItem);// 添加一个分割条fileMenu.addSeparator();// 创建一个复选框菜单项JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循环", false);loopMenuItem.addItemListener(this);fileMenu.add(loopMenuItem);fileMenu.addSeparator();JMenuItem exitMemuItem = new JMenuItem("退出");exitMemuItem.addActionListener(this);fileMenu.add(exitMemuItem);JMenuBar menuBar = new JMenuBar();menuBar.add(fileMenu);this.setJMenuBar(menuBar);this.setSize(200, 200);try {// 设置界面的外观,为系统外观UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName( ));SwingUtilities.updateComponentTreeUI(this);} catch (Exception e) {e.printStackTrace();}this.setVisible(true);}/*** 实现了ActionListener接口,处理组件的活动事件*/public void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("退出")) {// 调用dispose以便执行windowCloseddispose();return;}FileDialog fileDialog = new FileDialog(this, "打开媒体文件", FileDialog.LOAD);fileDialog.setDirectory(currentDirectory);fileDialog.setVisible(true);// 如果用户放弃选择文件,则返回if (fileDialog.getFile() == null){return;}currentDirectory = fileDialog.getDirectory();if (player != null){// 关闭已经存在JMF播放器对象player.close();}try {// 创建一个打开选择文件的播放器player = Manager.createPlayer(new MediaLocator("file:" + fileDialog.getDirectory() + fileDialog.getFile())); } catch (java.io.IOException e2) {System.out.println(e2);return;} catch (NoPlayerException e2) {System.out.println("不能找到播放器.");return;}if (player == null) {System.out.println("无法创建播放器.");return;}first = false;this.setTitle(fileDialog.getFile());// 播放器的控制事件处理player.addControllerListener(this);// 预读文件内容player.prefetch();}/*** 实现ControllerListener接口的方法,处理播放器的控制事件*/public void controllerUpdate(ControllerEvent e) {// 调用player.close()时ControllerClosedEvent事件出现。