java 手机音频播放,用Java实现音频播放

桌面PC的性能日益提高,Java虚拟机的优化技术也不断获得突破,这一切使得用Java处理实时信号成为可能。本文将通过设计和构造一个支持实时mp3、WAV和Ogg音频格式解码/回放的Java音乐播放器,阐述用JavaSound API编写音频处理程序的思路和一般过程。 JavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。在JDK 1.3.0之前,JavaSound是一个标准的Java扩展API,但从Java 2的1.3.0版开始,JavaSound就被包含到JDK之中。由于Java有着跨平台(操作系统、硬件平台)的特点,基于JavaSound的音频处理程序(包括本文的程序)能够在任何实现了Java 1.3+的系统上运行,无需加装任何支持软件。

一、JavaSound的体系结构

当前JDK的JavaSound API随同Java媒体框架(JMF,Java Media Framework)一起发布,主页在java.sun.com/prodUCts/java-media/jmf/,适合JDK 1.1以及更高的版本。除了JDK实现的JavaSound API之外,还有一个源代码开放的JavaSound实现是Tritonus,主页在http://www.tritonus.org/。

图一描述了JavaSound API的体系结构,虚线表示Sun的JavaSound标准定义的API调用。上面一根虚线表示我们编写音频处理程序要调用的API,JavaSound API包含在javax.sound.sampled和javax.sound.midi包中。两根虚线之间的部分就是JavaSound API的具体实现。

8b7465043a9c933661eb00364686323b.gif

图一:JavaSound体系结构

就象上面一根虚线表示的API具有统一标准一样,在所有的JavaSound实现中,图一下面一根虚线表示的SPI(服务提供者接口, Service Provider Interface)也是统一的。SPI的作用是以插件(Plug-In)的形式提供自定义的扩展模块,我们只要提供与SPI兼容的插件扩展模块,就可以在不改变API的情况下扩展音频处理程序的能力。SPI包含在java.sound.sampled.spi和javax.sound.midi.spi包中。

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

图二阐述了JavaSound的混频器原理。在处理输入音频的应用中,对于来自各种音频输入端口的信号,例如麦克风、CD播放器、磁带播放器,等等,我们可以在它们到达TargetDataLine之前,利用混频器控制输入混频,最后在程序中通过TargetDataLine获得数字化的音频输入流。

058bf8d01fbce38f264856fd8a665d68.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现同时播放多个音频可以使用Java Sound API,具体实现如下: 1. 导入Java Sound API库 ```java import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; import javax.sound.sampled.DataLine; import javax.sound.sampled.LineUnavailableException; import java.io.File; import java.io.IOException; ``` 2. 加载音频文件并播放 ```java public class AudioPlayer { private Clip clip; public void play(File soundFile) throws IOException, LineUnavailableException { // 创建音频输入流 AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile); // 获取音频格式 DataLine.Info info = new DataLine.Info(Clip.class, audioInputStream.getFormat()); // 创建音频输出流 clip = (Clip) AudioSystem.getLine(info); // 打开音频输出流 clip.open(audioInputStream); // 播放音频 clip.start(); } public void stop() { if (clip != null && clip.isRunning()) { clip.stop(); clip.close(); } } } ``` 在主程序中,可以创建多个 `AudioPlayer` 实例,并调用其 `play()` 方法播放音频文件。注意,在播放下一个音频之前,需要先停止上一个音频播放,可以调用 `stop()` 方法来停止正在播放音频。 ```java public class Main { public static void main(String[] args) throws IOException, LineUnavailableException { AudioPlayer player1 = new AudioPlayer(); AudioPlayer player2 = new AudioPlayer(); // 播放第一个音频 player1.play(new File("sound1.wav")); // 播放第二个音频 player1.stop(); player2.play(new File("sound2.wav")); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值