Java 音频处理技术简介

Java Sound包介绍

Java sound API 比较简单陈旧,受操做系统影响较大,没法知足一些专业场景。好比在 windows 下8路输入的声卡会被识别为4个2路输入的设备,没法协同工做。可是它提供了不少基础 API,仍是颇有必要了解一下的。html

包:java

  • sampled包 声音采样处理
  • midi 包 midi 音乐处理

类:git

  • AudioSystem 用来操做各类系统资源,如外接的话筒,输入等;能够从这些设备直接获得io 流;还能够在各类音频格式之间转换。——要注意数据格式和文件格式的区别!github

  • AudioFormat 用来表示数据格式,包括编码技术(一般是脉码调制即 PCM),通道数,采样率,每一个样(敏感词)本位数,帧速率,帧大小,字节顺序编程

  • AudioFileFormat 用来表示文件格式,包括文件类型,文件长度(字节),文件中的音频数据长度(帧),windows

  • Mixer 用来表示各类设备,做用是接收 n 录输入,处理后送到 n 录输出。oracle

  • Line 是 Port, Mixer, DataLine 的公共父接口,他们能够对流经的信号进行控制,如gain(以分贝影响信号的体积),pan(影响声音的左右定位,混响(这会增长声音的混响)模拟不一样类型的房间声学)和采样率(影响播放速率以及声音间距)编码

  • Port 简单表示来自或到声音设备的线spa

  • DataLine 提供与媒体相关的功能,如音频格式,媒体位置,缓冲区大小,电平,启停,暂停和回复,刷新,drain,活动状态操作系统

  • SourceDataLine 用来把数据写入 Mixer,write()的参数表示写入缓冲区的数据,建议每次写入的数据大小比缓冲区大。期间若是调用 stop()会马上中止播放,剩余数据残留在缓冲区,下次再调用 start()会继续播放。

  • TargetDataLine 用来从Mixer 接收音频数据,open()表示准备好,start()开始捕获数据到缓冲区,read()读取缓冲区的数据,每次读取的数据应该比缓冲区小,好比例子中是缓冲区大小的1/5。
    综上,两种 line 都同样,open/close 是控制线的程序资源;start/stop 是控制设备;write/read/flush/drain 是控制缓冲区。其中前四个方法会产生事件。

ASIO介绍

ASIO(Audio stream input output)是一种音频流输入输出API,由 Steinberg 公司开发,可实现低延迟、高同步、高吞吐率。当今主流声卡都会支持,在 windows 和 mac os 下都有驱动。参考资料中有Steinberg 公司的 ASIO SDK 下载连接,是 C++语音实现的。然而要在 Java 中调用 ASIO并不须要下载此 SDK,而是可使用开源的 JAsioHost 库。见下一节

另外,ASIO 限制每次只能选定一个设备输入输出音频,没法支持须要多个设备同时工做的场景。这时可使用一款通用 ASIO 封装库 Asio4all。它底层使用 WDM API(Windows Driver Module,一种和 ASIO 相似的音频输入输出 API,但只有 windows 系统支持)访问音频设备,对外暴露 ASIO接口。用户能够经过它同时访问多台音频设备。

JAsioHost 库

JAsioHost 使用 JNI 技术封装 asio API,暴露出一套 Java API。开发者能够直接针对此 API 编程实现音频输入输出。详细可参考项目介绍。
我在使用JAsioHost时发现给AsioDriver设置采样率并不生效,不肯定是否bug。

综上,若是须要用 java 同时操做多台音频设备,须要在本机安装asio4all 驱动,而后基于 JAsioHost 库编码操做音频设备。

顺带一提, JAsioHost API 和 Java Sound API 风格不一样,前者主动推送数据到调用者,后者被动接受调用者调用拉取数据。所以并不能很简单地在两种实现方案之间切换,须要开发者作一些兼容处理。

参考资料

Java Sound官方文档: http://docs.oracle.com/javase/tutorial/sound/TOC.html
Steinberg ASIO 驱动 官方下载: https://www.steinberg.net/en/company/developers.html
asio4all官网: http://www.asio4all.com/
JasioHost 项目主页: https://github.com/mhroth/jasiohost

做者:搞技术的薛彬 连接:https://www.jianshu.com/p/3d27058dc377 來源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。

相关文章
相关标签/搜索