javalinux播放声音

合集下载

Java应用开发中的音频与视频处理技巧

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播放声音文件的方法大家知道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版本

海康摄像头⾳频⽅案(播放⾳频⽂件+语⾳对讲+语⾳转发)-⽀持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系统时可能会遇到无声音的问题,这给我们的使用体验带来了困扰。

本文将为大家介绍几种常见的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的声音处理介绍

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音乐播放器课程设计

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音频设置

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开发领域中,有很多技术可以用于音频和视频的处理和应用,本文将探讨其中的一些重要技术和应用场景。

一、音频处理技术在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)可以实现视频的录制和播放操作。

Java与音频处理利用Java实现音频处理技术

Java与音频处理利用Java实现音频处理技术

Java与音频处理利用Java实现音频处理技术Java与音频处理音频处理在现代多媒体技术中扮演着重要角色。

从音频编辑软件到语音识别系统,音频处理技术有着广泛的应用。

而Java作为一种强大的编程语言,也提供了丰富的库和工具,方便开发人员实现音频处理。

本文将介绍利用Java实现音频处理技术的方法和应用。

一、Java中的音频处理库Java提供了许多音频处理库,让开发者能够方便地对音频进行处理。

其中最常用的是Java Sound API和Java Media Framework(JMF)。

1. Java Sound APIJava Sound API是Java官方提供的标准API,用于实现音频处理功能。

它支持录制、播放、剪切、拼接等基本的音频处理操作。

开发者可以使用Java Sound API读取音频文件,提取音频数据,并对其进行各种处理。

通过该API,开发者可以实现音频格式转换、音频增益控制、音频特效等功能。

2. Java Media Framework(JMF)JMF是一个开放的多媒体框架,提供了处理音频、视频和其他媒体数据的功能。

它建立在Java Sound API的基础上,拓展了更多的媒体处理功能。

JMF支持各种音频格式的解码和编码,还提供了音频合成、混音、降噪等高级音频处理功能。

二、音频处理应用示例利用Java的音频处理库,我们可以实现多种有趣和实用的音频处理应用。

以下是几个示例:1. 音频剪切和拼接通过使用Java Sound API,我们可以将多个音频文件剪切成小片段,并将它们拼接成一个完整的音频文件。

这个功能在音频编辑软件中非常常见,例如将多个音频片段合并为一首歌曲。

2. 音频特效处理利用Java Sound API或JMF的特效处理功能,我们可以实现多种音频特效,如混响、回声、均衡器等。

这些音频特效可以应用于音乐制作、影视后期制作等领域。

3. 语音识别结合Java与其他语音识别库,如CMUSphinx或Google Cloud Speech API,我们可以实现自动语音识别(ASR)系统。

Java应用中的音频与视频处理

Java应用中的音频与视频处理

Java应用中的音频与视频处理在当今数字化时代,音频与视频处理已成为Java应用中的重要组成部分。

无论是在媒体播放器、语音识别、视频编辑还是在线教育等领域,Java都扮演着关键角色。

本文将探讨Java应用中的音频与视频处理的相关技术和实践。

一、音频处理1.1 音频格式音频文件通常以不同的格式存储,如MP3、WAV、FLAC等。

Java提供了丰富的库和工具,使开发者能够读取、写入和处理各种音频格式。

通过使用Java音频库(javax.sound),我们可以轻松地处理音频文件。

1.2 音频录制与播放Java可以利用javax.sound.sampled包中的类来实现音频的录制与播放功能。

通过使用TargetDataLine类,我们可以从音频设备中读取音频数据,而SourceDataLine类则用于将音频数据输出到设备。

这些类提供了一种简单而有效的方式来处理音频输入和输出。

1.3 音频处理效果音频处理效果是提升音频质量的重要手段之一。

Java中提供了一些开源的库和工具,如javazoom.jl.converter和TarsosDSP等,可以用于添加均衡器、混响、降噪等效果,以改善音频的声音质量和清晰度。

二、视频处理2.1 视频格式与音频类似,视频文件也以不同的格式存储,如MP4、AVI、MKV等。

Java通过使用开源框架FFmpeg,可以对不同的视频格式进行处理。

FFmpeg是一个跨平台的多媒体处理工具,支持压缩、转码、剪辑等功能。

2.2 视频播放与捕捉JavaFX是Java平台下用于构建富应用程序的工具包,它包含了用于视频播放的媒体类。

通过使用JavaFX提供的MediaPlayer类,我们可以加载和播放各种视频格式。

此外,Java还提供了类似于音频处理中的TargetDataLine和SourceDataLine类似的类,如VideoCapture用于捕捉实时视频流。

2.3 视频编辑与特效音频和视频处理往往需要对媒体进行编辑和添加特效。

java sound

java sound

JavaSound体系结构17.3 音频录制与播放--JavaSoundJavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。

在JDK 1.3.0之前,JavaSound是一个标准的Java扩展API,但从Java 2的1.3.0版开始,JavaSound就被包含到JDK之中。

由于Java有着跨平台(操作系统、硬件平台)的特点,基于JavaSound 的音频处理程序(包括本文的程序)能够在任何实现了Java 1.3或更高版本的系统上运行,无须加装任何支持软件。

接下来我们将首先讲解JavaSound的体系结构、音频输入/输出原理,然后讲解音频各种处理的方法。

音频的数据格式。

音频的录制。

音频的播放。

音频的保存。

最后通过两个实例程序演练JavaSound。

录音机程序。

MP3音乐播放器。

17.3.1 JavaSound体系结构使用JavaSound API,可以实现各种基于声音的应用,例如声音录制、音乐播放、网络电话、音乐编辑等。

JavaSound API又以各种解码和合成器SPI(Service Provider Interface,服务提供者接口)为基础,实现各种音乐格式的解码与转码。

它们之间的关系如图17-5所示。

图17-5 JavaSound体系结构SPI的作用是以插件(Plug-In)的形式提供自定义的扩展模块,我们只要提供与SPI兼容的插件扩展模块,就可以在不改变API的情况下扩展音频处理程序的能力。

例如,假设有一个只能播放WA V文件的程序,我们只要增加一个支持MP3文件解码的插件模块,就可以在不改动播放程序的任何一行代码的前提下,为这个播放程序添加播放MP3的能力。

在后文的MP3音乐播放器程序中我们将演示该模块的安装与使用。

JavaSound API包含在javax.sound.sampled和javax.sound.midi包中,分别用以处理数字音频simpled-audio和MIDI。

linux下网络MP3播放器程序

linux下网络MP3播放器程序
cp -r /mnt/hgfs/共享目录名/文件名 虚拟机路径
共享目录只做文件中转,不能在共享目录编译程序
vi /home/tarena/.bashrc
在最后一行添加
export LD_LIBRARY_PATH=/usr/local/lib/
bash //更新shell
----------------------------
MP3应用程序
服务器
1)创建歌曲列表(双向循环链表)
2)创建socket(UDP)服务器
3)接收客户端的命令
4)解析命令执行对应音乐播放动作
cmd = 11 音乐播放
12 暂停
13 停止
15 下一首
2)安装libmad音频解码库
tar xvf libmad-0.15...
cd libmad...
./configure
make
sudo make install
3)安装tags信息库
需要依赖zlib算法
tar xvf zlib-1.2
cd zlib...
./configure
cd madplay
./configure --with-alsa
make
suMP3文件
export LD_LIBRARY_PATH=/usr/local/lib/
madplay xxx.mp3
从共享目录拷贝文件到虚拟机
cp -r /mnt/hgfs/share/madplay ./
make
sudo make install
tar xvf libid3tag-0.15.1b.tar.gz

Java中的音频和视频处理构建多媒体应用程序

Java中的音频和视频处理构建多媒体应用程序

Java中的音频和视频处理构建多媒体应用程序在Java中,音频和视频处理是构建多媒体应用程序不可或缺的一部分。

Java提供了一系列的库和API,使得开发者能够轻松地处理音频和视频文件,实现丰富多样的功能和效果。

一、音频处理1. 音频文件的读取与写入Java提供了javax.sound.sampled包,其中的AudioSystem类和AudioInputStream类可以用来读取和写入音频文件。

开发者可以使用AudioSystem.getAudioInputStream()方法获取一个音频输入流,然后使用AudioSystem.write()方法将音频数据写入指定的文件。

2. 音频格式转换在处理音频时,有时候需要将音频文件转换成其他的格式以便于播放或其他用途。

Java提供了javax.sound.sampled包中的AudioFormat类,通过设置不同的音频格式参数(如采样率、位深度、声道数等),可以实现音频文件的格式转换。

3. 音频播放与录制在Java中,我们可以借助javax.sound.sampled包的SourceDataLine类和TargetDataLine类来实现音频的实时播放和录制。

使用SourceDataLine类可以将音频数据发送到音频输出设备(如扬声器)进行播放,而使用TargetDataLine类则可以从音频输入设备(如麦克风)获取音频数据进行录制。

二、视频处理1. 视频文件的读取与写入Java提供了不少用于读取和写入视频文件的库,比较常用的是JavaCV和FFmpeg。

通过导入相关的库和API,我们可以使用Java代码来读取视频文件的帧数据,并将处理后的视频帧写入到新的文件中。

2. 视频格式转换与编解码在处理视频时,有时我们也需要对视频进行格式转换或者编解码操作,以适配不同的播放器或者设备。

JavaCV和FFmpeg提供了一系列的接口和方法,让开发者可以轻松地完成视频格式转换和编解码的操作。

Linuxmintroot登录无声音的问题怎么解决

Linuxmintroot登录无声音的问题怎么解决

Linux mint root登录无声音的问题怎么解决我们在使用电脑或者手机时候,尤其是看电影听歌时,电脑突然没声音就很烦恼了,近日小编在Linux mint系统操作时,登录root用户声卡突然没有了声音,相比大家也遇到相同的情况,下面小编就给大家介绍下Linux mint登录root用户时声卡无声音的处理方法,一起来学习下吧。

原因分析原因是linux mint基于ubuntu定制的,下面我们看一下解决方法代码如下:sudo gedit /etc/default/speech-dispatcher将RUN=yes改为RUN=no保存,这时不用重启。

打开Sound Settings,会看到然后输入代码如下:sudo alsa force-reload如果这个还不行,重装Alsa and Pulse audio代码如下:sudo apt-get remove --purge alsa-base pulseaudiosudo apt-get install alsa-base pulseaudio然后代码如下:sudo alsa force-reload上面就是Linux mint系统登录root用户出现声卡无声音的解决方法的介绍了,如果你也出现了同样的情况,不妨试试本文的方法解决吧。

补充:电脑没声音原因检测方法检查声音控制图标。

显示正常代表声卡安装正常,并左键点击,确定没有勾选静音。

如果桌面上没有声音控制图标,检查声卡设置问题。

“开始”-“设置”-“控制面板”-“声音和音频设备”,打开声音和音频设备属性的对话框。

并再次进行步骤1的操作。

排查硬件接口问题。

拔下音响和耳机,重新插,检查接口是否插对了。

如果电脑前后都可以插耳机线的,从前面更换到后面试试看,因为有些装机时没有插前面跳线,也会没有声音。

更换硬件,看是否是耳机和音响坏了。

检查声卡驱动。

“我的电脑”-“右键”-“选择”-“属性”-“ 硬件”-“设备管理器”,如果声卡位置有黄色的感叹号,证明声卡驱动有问题,重装声卡驱动解决问题即可。

Linux终端命令的音频和视频处理技巧玩转多媒体

Linux终端命令的音频和视频处理技巧玩转多媒体

Linux终端命令的音频和视频处理技巧玩转多媒体在现代数字化生活中,多媒体已经成为人们日常生活和工作的重要组成部分。

而对于Linux操作系统的用户来说,掌握终端命令行的音频和视频处理技巧无疑可以极大地丰富其使用体验。

本文将介绍一些常用的Linux终端命令,帮助您玩转多媒体。

一、音频处理技巧1. 播放音频文件在Linux终端中,可以使用`aplay`命令来播放音频文件。

例如,要播放名为"music.wav"的音频文件,只需在终端中输入以下命令:```aplay music.wav```这将直接在终端中播放音频文件,让您在无需打开其他媒体播放器的情况下即可收听音频。

2. 转换音频格式如果您需要将音频文件从一种格式转换为另一种格式,可以使用`ffmpeg`命令。

例如,要将名为"audio.mp3"的MP3文件转换为"WAV"文件,可以运行以下命令:```ffmpeg -i audio.mp3 output.wav```此命令将通过转换使音频文件的格式得到改变,方便您在不同场景下使用。

3. 录制音频Linux终端中的`arecord`命令可用于录制声音。

例如,要录制10秒钟的音频并将其保存为"recording.wav"文件,可以输入以下命令:```arecord -d 10 -f cd -t wav recording.wav```此命令将启动音频录制,并在录制10秒钟后将音频保存为指定的文件。

二、视频处理技巧1. 播放视频文件与音频播放类似,Linux终端中也可以使用`mplayer`命令来播放视频文件。

例如,要播放名为"video.mp4"的视频文件,只需在终端中输入以下命令:```mplayer video.mp4```这将会在终端界面中播放视频。

2. 截取视频帧使用`ffmpeg`命令,您可以在Linux终端中轻松截取视频的帧。

linux aplay命令 参数

linux aplay命令 参数

linux aplay命令参数Linux aplay命令详解aplay是Linux系统中自带的音频播放命令,它可以播放多种音频文件格式。

该命令可以通过命令行终端直接使用,非常方便。

本文将详细介绍aplay命令的使用方法及相关参数。

一、基本使用方法aplay命令的基本使用方法非常简单,只需要在终端中输入aplay 命令,后面跟上要播放的音频文件即可。

例如,要播放一个名为music.wav的wav格式音频文件,只需要在终端中输入以下命令:aplay music.wav二、参数说明1. -D参数-D参数用于指定音频设备,可以通过该参数将音频输出到指定的设备上。

使用方法如下:aplay -D device music.wav其中,device是要指定的音频设备,music.wav是要播放的音频文件。

2. -f参数-f参数用于指定音频文件的采样率、位深和声道数,它可以根据需要指定不同的格式。

使用方法如下:aplay -f format music.wav其中,format是要指定的音频格式,music.wav是要播放的音频文件。

3. -r参数-r参数用于指定音频文件的采样率。

使用方法如下:aplay -r rate music.wav其中,rate是要指定的采样率,music.wav是要播放的音频文件。

4. -c参数-c参数用于指定音频文件的声道数。

使用方法如下:aplay -c channels music.wav其中,channels是要指定的声道数,music.wav是要播放的音频文件。

5. -t参数-t参数用于指定音频文件的格式,可以指定多种格式。

使用方法如下:aplay -t type music.wav其中,type是要指定的音频格式,music.wav是要播放的音频文件。

6. -q参数-q参数用于关闭aplay命令的输出信息,只播放音频文件而不输出其他信息。

使用方法如下:aplay -q music.wav其中,music.wav是要播放的音频文件。

java音频播放示例分享(java如何播放音频)

java音频播放示例分享(java如何播放音频)

java⾳频播放⽰例分享(java如何播放⾳频)这是⼀份精简后的代码,能够⽀持的格式⼗分有限。

复制代码代码如下:package com.hongyuan.test;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 {public static final String MUSIC_FILE = "相逢⼀笑.wav";public static void main(String[] args) throws LineUnavailableException,UnsupportedAudioFileException, IOException {// 获取⾳频输⼊流AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(MUSIC_FILE));// 获取⾳频编码对象AudioFormat audioFormat = audioInputStream.getFormat();// 设置数据输⼊ dataLineInfo = new (SourceDataLine.class,audioFormat, AudioSystem.NOT_SPECIFIED);SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);sourceDataLine.open(audioFormat);sourceDataLine.start();/** 从输⼊流中读取数据发送到混⾳器*/int count;byte tempBuffer[] = new byte[1024];while ((count = audioInputStream.read(tempBuffer, 0, tempBuffer.length)) != -1) {if (count > 0) {sourceDataLine.write(tempBuffer, 0, count);}}// 清空数据缓冲,并关闭输⼊sourceDataLine.drain();sourceDataLine.close();}}。

【转】Linux环境下用c语言写的播放wav文件的小程序

【转】Linux环境下用c语言写的播放wav文件的小程序

【转】Linux环境下用c语言写的播放wav文件的小程序本程序可以读取.wav文件,然后进行播放。

使用前,请确认您是否安装音频驱动。

确认方法:cat /etc/sndstat,如果显示无此设备,则没有安装驱动。

安装驱动很简单,到上下载音频驱动,然后按照网上的教程进行就可以了。

源代码如下:1.#include <unistd.h>2.#include <fcntl.h>3.#include <sys/types.h>4.#include <sys/ioctl.h>5.#include <stdlib.h>6.#include <stdio.h>7.#include <linux/soundcard.h>8./* 下面的三个参数是跟具体文件相关的,文件什么样,就要设置成什么样 */9.10.#define RATE 1102511.#define SIZE 1612.#define CHANNELS 1 // 1表示单声道,2为立体声13./* ................ */14.unsigned char buf[RATE*SIZE/8]; //buf里面正好放一秒钟的音频,下面的计时还要用15.16.int main()17.{18.int fd;19.int wavfd; //wav文件的描述符20.21.int arg; /* ..ioctl..... */22.int status; /* ........ */23./* ...... */24.fd = open("/dev/dsp", O_RDWR);25.26.if (fd < 0) {27.printf("open of /dev/dsp failed");28.exit(1);29.}30.wavfd = open("12193767609.wav",O_RDONLY);31.if (wavfd < 0) {32.printf("open of wav failed");33.exit(1);34.}35.36.37./* .......... */38.arg = SIZE;39.status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);40.if (status == -1)41.perror("SOUND_PCM_WRITE_BITS ioctl failed");42.if (arg != SIZE)43.perror("unable to set sample size");44.45.46./* .......... */47.arg = CHANNELS;48.status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);49.if (status == -1)50.perror("SOUND_PCM_WRITE_CHANNELS ioctl failed");51.if (arg != CHANNELS)52.perror("unable to set number of channels");53.54.55./* .......... */56.arg = RATE;57.status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);58.if (status == -1)59.perror("SOUND_PCM_WRITE_WRITE ioctl failed");60.61.62./* 从wav文件中读buf大小的内容,然后写入/etc/dsp中,直到文件结束 */63.64.int time = 0; //动态显示播放时间用65.66.67.68.while (status = read(wavfd, buf, sizeof(buf)) > 0) {69.write(fd, buf, sizeof(buf));70.printf("%ds, enjoy .../n",time++);71.72.73.74./* 以下三句,用于在更改播放文件的参数时,播放掉缓冲区内的内容,可以用,更保险*/75.76./*status = ioctl(fd, SOUND_PCM_SYNC, 0);77.78.if (status == -1)79.perror("SOUND_PCM_SYNC ioctl failed");80.*/81.82.}83.}本程序中需要一个.wav文件才能播放,你可以到百度mp3上去搜索一个.wav文件,放到程序目录下。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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事件出现。

相关文档
最新文档