首页 > 编程语言 >JAVA的声音处理方法

JAVA的声音处理方法

时间:2023-01-29 11:34:51浏览次数:44  
标签:sound 声音 JAVA java 处理 void new 播放


JAVA的声音处理方法




作者:蝙蝠vs堕落   编辑:violet

   
JAVA的声音处理
   
  数字音频格式有很多种,其质量与采样频率和采样精度两个参数有关。频率的表示单位为赫兹〔Hz〕,它表示每秒采样次数。采样频率越高,音质就越好。采样精度为每次采样所存储的数据数量,它决定每个数字信号所能够表示的离散振幅的数量。存储每个样本的数据越多,音质就越好。但是高品质的声音需要占用大量的内存和磁盘空间。考虑到网络带宽,在Internet连接上传输就需要花费很长的时间。对于Applet来说,保证声音文件的最小化是极为重要的。

   
Java能够支持以下四种声音格式:
   
◆AU
◆AIFF
◆WAVE
◆MIDI

  第一种声音格式AU为以前的Java 1.1版本支持的唯一的声音格式。采样频率为8000赫兹,采样精度为8位。AIFF和WAVE与AU格式一样,都用来表示数字化的声音。其中,WAVE格式提供了更宽范围的音质。MIDI格式专用于音乐,并且以音符与乐器而不是数字化的声音来描述声音的。

  关于声音的创建:声音关键工具为Windows9X中的标准应用程序—录音机。录制的格式为WAVE。另外还有很多专业水准的应用程序,采样和编辑数字化的声音,及格式的转换。

   
资源需求:
   
■ 硬件资源需求:
⑴声卡
⑵音箱
#如需要录制声音,这还需麦克风。

■ 软件资源需求:
⑴windows9X操作系统
⑵网络浏览器
⑶Java插件/运行时间环境

   
处理方案一
   
  JAVA2开始,爪哇语言能够支持上述四种声音格式。简单的方法为在java中通过Applet类的AudioClip()接口来装载声音。该接口风钻了有关声音片断的常用方法,具有对播放声音片断的最小支持。

该接口定义了如下方法:
■ play()
语法:void play()
功能:开始播放声音片断。
不论声音片断是否已经在播放,都从头播放。播放一遍但不重复。

■ loop()
语法:void loop()
功能:循环播放声音片断。
调用该方法是不论声音片断是否已在播放,都从头开始播放。

■ stop()
语法:void stop()
功能:停止播放声音片断。
AudioClip接口可以通过getAudioClip()及getCodeBase()方法来获取声音片断及
URL地址。可以利用此方法在WEB页中播放指定的声音片断。
#需求:基于JDK1.2以上版本的开发环境。如果只播放AU格式的声音文件,JDK1
.1就可。

附:soundtest.html源代码
《HTML》
《HEAD》
《TITLE》
HTML Test Page
《/TITLE》
《/HEAD》
《BODY》
《APPLET
CODEBASE = "" CODE = "test.class" NAME = "TestApplet" WID
TH = 400 HEIGHT = 200 HSPACE = 0 VSPACE = 0 ALIGN = mi
ddle》
《PARAM NAME = "clip" VALUE = "sound.AU"》
《/APPLET》
《/BODY》
《/HTML》
附:test,java源代码

package SoundTest; 

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

import javax.swing.*;

import java.net.*;

public class test extends JApplet {

boolean isStandalone = false;

String sound;

JButton jButtonPlay = new JButton();

JButton jButtonLoop = new JButton();

JButton jButtonStop = new JButton();

JLabel jLabel1 = new JLabel();

AudioClip clip;

//Get a parameter value

public String getParameter(String key, String def) {

return isStandalone ? System.getProperty(key, def) :

(getParameter(key) != null ? getParameter(key) : def);

}

//Construct the applet

public test() {

}

//Initialize the applet

public void init() {

try {

jbInit();

}

catch(Exception e) {

e.printStackTrace();

}

}

//Component initialization

private void jbInit() throws Exception {

jButtonPlay.setText("Play");

jButtonPlay.setBounds(new Rectangle(50, 85, 80, 40));

jButtonPlay.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(MouseEvent e) {

jButtonPlay_mouseClicked(e);

}

});

this.setSize(new Dimension(400,200));

this.getContentPane().setLayout(null);

jButtonLoop.setText("Loop");

jButtonLoop.setBounds(new Rectangle(150, 85, 80, 40));

jButtonLoop.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(MouseEvent e) {

jButtonLoop_mouseClicked(e);

}

});

jButtonStop.setText("Stop");

jButtonStop.setBounds(new Rectangle(250, 85, 80, 40));

jButtonStop.addMouseListener(new java.awt.event.MouseAdapter() {


public void mouseClicked(MouseEvent e) {

jButtonStop_mouseClicked(e);

}

});

jLabel1.setText("Sound Test Demo");

jLabel1.setBounds(new Rectangle(109, 28, 186, 28));

this.getContentPane().add(jButtonPlay, null);

this.getContentPane().add(jButtonStop, null);

this.getContentPane().add(jButtonLoop, null);

this.getContentPane().add(jLabel1, null);

try { sound = this.getParameter("clip", "sound.AU"); } catch (Exce

ption e) { e.printStackTrace(); }

if(sound!=null){

try{

clip=JApplet.newAudioClip (new URL(getCodeBase(),sound));


}

catch(MalformedURLException e){

System.out.println ("Bad URL");

}

}

}

//Get Applet information

public String getAppletInfo() {

return "Applet Information";

}

//Get parameter info

public String[][] getParameterInfo() {

String[][] pinfo =

{

{"clip", "String", "sound.AU"},

};

return pinfo;

}

void jButtonPlay_mouseClicked(MouseEvent e) {

clip.play();

}

void jButtonLoop_mouseClicked(MouseEvent e) {

clip.loop();

}

void jButtonStop_mouseClicked(MouseEvent e) {

clip.stop();

}

}



   
处理方案二
   
  利用JAVA媒体框架中的Sound API来处理声音片断。Sound API 被包含在SUN公司的JAVA媒体框架中,也包含在JDK1.3版本中。编译源代码需要支持JDK1.3的开发环境和运行时间环境。

  可以利用Sound API在网页中加入Applet的方式达到要求。但浏览器需要通过Java插件或运行时间环境的支持。

Sound API主要包括以下四部分:

Packages
javax.sound.midi 提供MIDI (Musical Instrument Digital Interface)的I/O、
序列、合成的接口和类。
javax.sound.midi.spi Supplies interfaces for service providers to impl
ement when offering new MIDI devices, MIDI file readers and writers, o
r sound bank readers.
javax.sound.sampled 为采样数字音频的捕获、处理、重放提供接口和类。
javax.sound.sampled.spi Supplies abstract classes for service provider
s to subclass when offering new audio devices, sound file readers and
writers, or audio format converters.


   
处理方案三
   
  利用JAVA 3D中的sound类。该类似声音资源的抽象定义。每一个具体的声音对象都可以应用sound的方法。

Sound类的类关系如下:
java.lang.Object
+-javax.media.j3d.SceneGraphObject
+-javax.media.j3d.Node
+-javax.media.j3d.Leaf
+-javax.media.j3d.Sound

sound类的子类有:
⒈BackgroundSound
⒉PointSound
⒊ConeSound

使用上述三种声音的步骤如下:

⒈定义并生成一个MediaContainer对象,同时提供对象所需要的声音文件,通常
要单独设置一个存放AU/WAV声音文件的目录。

⒉定义一个BackgroundSound/ PointSound/ ConeSound对象,根据需要,设置声
音的是否循环、强度大小等参数,设置它的作用范围并setEnable用使其开始作用。

⒊根据具体的对象设置坐标系。
#JAVA 3D应用程序只能播放au/wav格式的声音文件。不能播放midi文件。

标签:sound,声音,JAVA,java,处理,void,new,播放
From: https://blog.51cto.com/u_14365218/6025604

相关文章

  • java map重写 转大写、转驼峰
    /***@authoradmin*@Description*转大写*/publicclassHashMapUpper<V>extendsHashMap<String,V>{/***复写put方法,因为Mybatis底层给Map赋......
  • 七夕_Java表白书
    浪漫美好的七夕佳节就要到来,愿你在七夕的月光里,邂逅爱情,抓住属于自己的幸福;牵手真情,珍惜已经拥有的缘分;再遇痴情,在爱的甜蜜里享受人生;深陷浓情,在浓浓家庭的温馨里感受快......
  • Jmeter报java.lang.NoClassDefFoundError: com/sun/jna/platform/win32/Kernel32错误
    1.报错如下:​​2020-03-0616:36:07,959ERRORo.a.j.JMeter:Uncaughtexception:java.lang.NoClassDefFoundError:com/sun/jna/platform/win32/Kernel32atjava.lang.C......
  • JavaScript 赋值
    JavaScript中有多种赋值方式。1、基本赋值:使用等号"="进行赋值,例如leta=1。2、多变量赋值:使用逗号","将多个变量赋值成同一个值,例如leta=1,b=2。3、增......
  • Java与opc通信之三 - s7协议(s7connector)
    1、引入依赖<dependency><groupId>com.github.s7connector</groupId><artifactId>s7connector</artifactId><version>2.1</vers......
  • Java与opc通信之二 - s7协议(HslCommunication)
    1、引入依赖<dependency><groupId>com.github.dathlin</groupId><artifactId>HslCommunication</artifactId>......
  • Java类加载器与双亲委派机制
    类加载器顶级类加载器:BootStrapClassLoader负责加载%JAVA_HOME%路径下lib文件夹中的jar包和class文件扩展类加载器:ExtClassLoader负责加载%JAVA_HOME%路径下lib文件夹......
  • JavaScript学习笔记—DOM之初识
    document浏览器为我们提供了一个document对象,是一个全局变量代表整个网页...<body><buttonid="btn">点我一下</button><script>//获取btn对象cons......
  • 读Java8函数式编程笔记04_类库
    1. 默认方法1.1. 接口中定义的包含方法体的方法,方法名有default关键字做前缀1.1.1. 在任何接口中,无论函数接口还是非函数接口,都可以使用该方法1.2. Collection接口......
  • Java8学习笔记
    OracleJDK是基于OpenJDK源代码的商业版本,要学习Java新技术可以去OpenJDK官网学习。Lambda表达式介绍匿名内部类存在的问题newThread(newRunnable(){@Ove......