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();" 这点作者没有说明。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java Sound API 学习笔记

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

Android API文档_AudioFormat

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

Java播放声音的几种方式

课程设计用的方法 import java.applet.AudioClip; import java.io.*; import java.applet.Applet; import...
  • kalision
  • kalision
  • 2012年08月23日 10:37
  • 23571

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
  • 3390

开发中需要的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
  • 2031

使用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
  • 2031

(十五)用JAVA编写MP3解码器——音频输出

解码一帧Layer3第10步:音频输出  -- class Audio         这里给出音频输出的示例代码,后文给出的播放器是基于命令行,所以音频输出模块就写得很简单,如果你想了解音频输出...
  • ycb1689
  • ycb1689
  • 2013年12月18日 12:22
  • 1622

javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)

实现录制本机麦克风音频到本地文件或者流媒体服务器, 对于录制音视频混合的同学可以很方便的将本章代码移植到到录制视频的代码里 注意:由于音频、视频时两个不同线程同时进行,所以在进行混合录制的时候需要注意...
  • eguid_1
  • eguid_1
  • 2016年09月29日 15:52
  • 3403

javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)

转自:http://blog.csdn.net/eguid_1/article/details/52875793 1、依赖的包 对于依赖的包,本章用到的ja...
  • qq_37788558
  • qq_37788558
  • 2017年04月22日 18:57
  • 146
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javax.sound的简单使用。
举报原因:
原因补充:

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