javax.sound的简单使用。

原创 2007年10月12日 22:18:00

写在前边

考研的日子还是比较无聊的,天天做着同样的事情。现在的日子爱情也比较挫败,一句话,失落期。

所以,这个日志的内容也是相当无聊的情况下写的,如果你发现什么纰漏,请无私指正,谢谢。

昨天在QQ群上有人问题使用APPLET播放WAV的事情,自己还真没有使用java 写过多媒体处理,在网上找了一下相关的文章,有提到JMF框架的,于是找来安装一下,没有深入的研究JMF,初步觉得,使用方便,但是同时也给运行环境增加额外的负担。

 然后看到《用Java实现音频播放》这篇文章,文章没有作者信息,但是可以在天极找到原文。如有需要可以根据下边的链接找到文章。

用Java实现音频播放

文章对javax.sound包的结构作了深入的讲解,而且为MP3解码提供的解决方案。最后介绍了一个简单播放器的开发,因为篇幅,作者没有把完整的代码送上,我仿照作者的思路,写了个简单的播放WAV文件的代码,撇开复杂的线程,目的在展示播放WAV文件的实现代码上。绵薄的功夫而已。

源代码

 

package test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileFilter;


/** *//**
 * 
@author Administrator
 *
 
*/

public class WavPlayer extends JFrame ...{
    
/** *//**
     * 
     
*/

    
private AudioInputStream ais;
    
private String fileUrl="WindowsDing.wav";
    
//文件过滤器
    private class MyFilter  extends FileFilter...{

        @Override
        
public boolean accept(File arg0) ...{
            
// TODO Auto-generated method stub
            if(arg0.getName().endsWith(".wav" )|| arg0.isDirectory())
                
return true;
            
return false;
        }


        @Override
        
public String getDescription() ...{
            
// TODO Auto-generated method stub
            return "波形文件(.wav)";
        }

        
    }

    
    
    WavPlayer()
...{
        
super();
        setSize(
150,150);
        JButton startBut
=new JButton("播放");
        startBut.addActionListener(
new ActionListener()...{

            
public void actionPerformed(ActionEvent arg0) ...{
                
// TODO Auto-generated method stub
                JFileChooser jfc= new JFileChooser();
                jfc.setFileFilter(
new MyFilter());
                
if(jfc.showOpenDialog(null)==JFileChooser.APPROVE_OPTION)
                    fileUrl
=jfc.getSelectedFile().getAbsolutePath();
                
else
                    
return;
                
                
try ...{
                    ais
=AudioSystem.getAudioInputStream(new File(fileUrl));
                    AudioFormat af
=ais.getFormat();
                    SourceDataLine sdl
=null;
                    DataLine.Info info
=new DataLine.Info(SourceDataLine.class,af);
                    sdl
=(SourceDataLine) AudioSystem.getLine(info);
                    sdl.open(af);
                    sdl.start();
                    
                    
//play
                    
                    
int nByte=0;
                    
byte[] buffer=new byte[128];
                    
while(nByte!=-1)...{
                        nByte
=ais.read(buffer,0,128);
                        
if(nByte>=0)...{
                            
int oByte=sdl.write(buffer, 0, nByte);
                            System.out.println(oByte);
                        }

                    }

                    sdl.stop();
                    
                }
 catch (UnsupportedAudioFileException e) ...{
                    
// TODO Auto-generated catch block
                    e.printStackTrace();
                }
 catch (IOException e) ...{
                    
// TODO Auto-generated catch block
                    e.printStackTrace();
                }
 catch (LineUnavailableException e) ...{
                    
// TODO Auto-generated catch block
                    e.printStackTrace();
                }

                
            }

            
        }
);
        
this.getContentPane().add(startBut);
        setVisible(
true);
    }

    
    
public static void main(String[] args)...{
        
new WavPlayer();
    }

}

 

需要指出的

需要指出的一点是,

                    DataLine.Info info=new DataLine.Info(SourceDataLine.class,af);
                    sdl
=(SourceDataLine) AudioSystem.getLine(info);
                    sdl.open(af);
                    sdl.start();

sourceDataLine在被写入前需要被打开" sdl.start();" 这点作者没有说明。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daniel_zwn/article/details/1822482

Java Sound API 学习笔记

 Java Sound API是javaSE平台提供底层的(low-level)处理声音接口。 例外,java也提供了简单的实用的高层媒体接口(higher-level) - JMF(Java Med...
  • NetMicrobe
  • NetMicrobe
  • 2006-09-23 19:50:00
  • 9206

开发中需要的javax.sound jar包

  • 2017年11月23日 13:55
  • 261KB
  • 下载

使用javax.sound实现简单的音频播放

/** * @see * @author Al_assad yulinying_1994@outlook.com * @date 2016年11月17日 下午6:27:59 * @version V1...
  • Al_assad
  • Al_assad
  • 2016-11-18 00:37:43
  • 2517

Javax sound

JavaSE, via Java Sound API (in packages javax.sound), supports two types of audio:Sampled Audio: Sam...
  • kangojian
  • kangojian
  • 2009-08-15 17:23:00
  • 3499

java软件托盘MenuItem 显示中文出现框框乱码、读取ini配置文件乱码

java 托盘MenuItem 中文乱码 系统编码格式 读写ini配置
  • lishaman
  • lishaman
  • 2014-01-02 10:24:50
  • 6079

Android API文档_AudioFormat

概述  软件包   类  使用  树  已过时  索引  帮助  JavaTM 2 Platform Standard Ed. 6  上一个类   下一个类 框架    无框架   ...
  • nanaqx
  • nanaqx
  • 2015-06-10 09:25:45
  • 2188

Java播放声音的几种方式

课程设计用的方法 import java.applet.AudioClip; import java.io.*; import java.applet.Applet; import...
  • kalision
  • kalision
  • 2012-08-23 10:37:29
  • 25056

使用Java实现MP3音乐播放器

[+] JavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。在JDK 1.3.0之前,JavaSound是一个标准的Java扩展API,但从Java 2的1.3...
  • bingheliushui520
  • bingheliushui520
  • 2014-05-20 17:42:00
  • 6411

sound.jar java包下载 免积分

  • 2014年05月18日 21:02
  • 287KB
  • 下载

Java API文档中文版

Java API文档中文版 ...
  • zdsdiablo
  • zdsdiablo
  • 2006-06-09 14:35:00
  • 9055
收藏助手
不良信息举报
您举报文章:javax.sound的简单使用。
举报原因:
原因补充:

(最多只允许输入30个字)