音频播放的三种方式:

第一种方式:不带面板:

/**
 *
 */
package com.niit.hitmouse;

import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.UnsupportedAudioFileException;

/**
 * @author: Annie
 * @date:2016年6月3日
 * @description:
 */
public class PlayMusic {

    public PlayMusic(String url) throws Exception{
        //给界面添加音乐
        File file = new File(url);//url为你音乐的路径
        AudioInputStream auIn = AudioSystem.getAudioInputStream(file);
        Clip clip = (Clip)AudioSystem.getClip();
        clip.open(auIn);
        clip.start();
        while(clip.available() > 0)
        {
            Thread.sleep(1000);
        }
        clip.close();
    }

}

第二种方式:带面板,可控制的

package com.niit.innerclass;

import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenuItem;

/**
 * @author: Annie
 * @date:2016年6月3日
 * @description:音乐播放器
 */
public class MusicDemo extends JDialog implements ActionListener,ItemListener,Runnable{

    JButton btn_play,btn_stop,btn_loop;
    JComboBox musicCombox;
    AudioClip clip;
    Thread thead;
    String str;

    public MusicDemo() {
        setSize(350, 200);
        setLayout(new FlowLayout());
        musicCombox = new JComboBox();
        musicCombox.addItem("选择音频文件");
        musicCombox.addItem("./src/梦中的婚礼.wav");
        musicCombox.addItem("./src/打击地鼠.wav");
        btn_play = new JButton("播放");
        btn_stop = new JButton("停止");
        btn_loop = new JButton("循环");
        thead  = new Thread(this);

        add(musicCombox);
        add(btn_play);
        add(btn_stop);
        add(btn_loop);

        musicCombox.addItemListener(this);
        btn_play.addActionListener(this);
        btn_stop.addActionListener(this);
        btn_loop.addActionListener(this);

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);

    }

    public static void main(String[] args) {
        new MusicDemo();

    }

    public void run() {
        System.out.println("run方法进来了");
        try {
            File file = new File(str);//创建一个file对象
            URI uri = file.toURI();//创建一个URI对象
            URL url = uri.toURL();//创建一个URL对象
            clip = Applet.newAudioClip(url);//创建一个音频对象
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void itemStateChanged(ItemEvent e) {
        System.out.println("itemStateChanged方法进来了");
        str = musicCombox.getSelectedItem().toString();
        System.out.println("----------str:"+str);
        if(!(thead.isAlive())){
            thead = new Thread(this);
        }
        try{
            thead.start();
        }catch(Exception ee){

        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("actionPerformed方法进来了");
        if(e.getSource() == btn_play){
            clip.play();
        }else if(e.getSource() == btn_stop){
            clip.stop();
        }else if(e.getSource() == btn_loop){
            clip.loop();
        }
    }

}

效果图:

第三种方式:

package com.niit.innerclass;

/**
 * @author: Annie
 * @date:2016年6月3日
 * @description:
 */

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;

public class Play{
    private String file_path="./src/梦中婚礼.wav";
    private AudioInputStream    ais;
    private SourceDataLine      line;
    private AudioFormat         baseFormat;
    private static final int    BUFFER_SIZE=4000*4;

    private SourceDataLine getLine(AudioFormat audioFormat) {
        SourceDataLine res = null;
        DataLine.Info info = new DataLine.Info(SourceDataLine.class,audioFormat);
        try {
            res = (SourceDataLine) AudioSystem.getLine(info);
            res.open(audioFormat);
        }catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    private void play()throws UnsupportedAudioFileException, LineUnavailableException, IOException{
        ais= AudioSystem.getAudioInputStream(new File(file_path));
        baseFormat = ais.getFormat();

        line = getLine(baseFormat);
        line.start();
        int inBytes = 0;
        byte[] audioData=new byte[BUFFER_SIZE];
        while (inBytes != -1){
            inBytes = ais.read(audioData, 0, BUFFER_SIZE);
            if (inBytes >= 0) {
                int outBytes = line.write(audioData, 0, inBytes);
            }
        }
    }
    public static void main(String args[])throws UnsupportedAudioFileException, LineUnavailableException, IOException
    {
        Play p1=new Play();
        p1.play();
    }
}
时间: 2024-07-31 02:43:01

音频播放的三种方式:的相关文章

iPhone 横竖屏切换,全屏播放的三种方式

1. 调用系统自带的强制屏幕旋转不过还得在AppDelegate中重写下面方法 - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { // 0:竖屏,1:单向横屏,2:双向横屏 if (self.httpConnect.SupportedOrientation==0) { return U

加载gif动态图的三种方式

准备:本地图片资源,GifView GifView代码: /** * 调用结束就开始播放动画,如果需要用户指定何时播放的话,只需要把timer的开始放到合适的位置.通过对CFDictonaryRaf 也就是gifProperties的改变,我们还可以控制动画是否循环播放以及循环多少次停止. 通过对index的改变也可以控制动画从某帧开始播放.同理,同时改变index和count的话,也可以控制从某帧到某帧的播放. 注意:- (void)stopGif;之后才可以退出这个类.否则timer不会关闭

iOS开发 跳转场景的三种方式

假设A跳转到B,三种方法: 1.按住ctrl键,拖动A上的控件(比如说UIButton)到B上,弹出菜单,选择Modal.不需要写任何代码,在A上点击Button就会跳转到B 2. 按住ctrl键,拖动A上的View Controller到B上,弹出菜单,选择Modal,两个场景间自动添加连接线和图标,选中该图标,打开Storyboard Segue,identifier输入一个标识符,这里以”aaaa”为例.A里需要跳转时,执行下面的代码: 1 [self performSegueWithId

HTML5实现动画三种方式

编者注:作者以一个运动的小车为例子,讲述了三种实现HTML5动画的方式,思路清晰,动画不仅仅是canvas,还有css3和javascript.通过合理的选择,来实现最优的实现. PS:由于显卡.录制的帧间隔,以及可能你电脑处理器的原因,播放过程可能有些不太流畅或者失真! 分三种方式实现: (1)   canvas元素结合JS (2)   纯粹的CSS3动画(暂不被所有主流浏览器支持,比如IE) (3)   CSS3结合Jquery实现 知道如何使用CSS3动画比知道如何使用<canvas>元

三种方式实现观察者模式 及 Spring中的事件编程模型

观察者模式可以说是众多设计模式中,最容易理解的设计模式之一了,观察者模式在Spring中也随处可见,面试的时候,面试官可能会问,嘿,你既然读过Spring源码,那你说说Spring中运用的设计模式吧,你可以自信的告诉他,Spring中的ApplicationListener就运用了观察者模式. 让我们一步一步来,首先我们要知道到底什么是观察者模式,用Java是如何实现的,在这里,我将会用三种方式来实现观察者模式. 什么是观察者模式 在现实生活中,观察者模式处处可见,比如 看新闻,只要新闻开始播放

AngularJs学习——实现数据绑定的三种方式

三种方式: 方式一:<h5>{{msg}}</h5>  此方式在页面刷新的时候会闪现{{}} 方式二:<h5 ng-bind="msg"></h5> 方式三:<h5 ng-clock class="ng-clock">{{msg}}</h5> 示例代码: <!DOCTYPE html> <html lang="en" ng-app="myapp&q

小蚂蚁学习页面静态化(2)——更新生成纯静态化页面的三种方式

更新生成纯静态化页面的三种方式:1.按照时间间隔更新.2.手动更新.3.定时更新(需要系统配合). 1. 按照时间间隔更新. 当用户第一次访问这个页面的时候,程序自动判断,该静态文件是否存在,并且该文件是否还在有效时间内,如果该文件未超出了有效时间,用户访问的是已经生成的静态文件.如果超出了有效时间,用户得到的是动态输出的内容,同时重新生成静态文件.稍微修改一下昨天的代码为例: <?php //首先判断是否有静态文件,并且文件的最新修改时间到现在是否大于20秒 if(is_file('./tex

Linux中设置服务自启动的三种方式

有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s                       在/etc/rc.d/rc*.d目录中建立/etc/init.d/服务的软链接(*代表0-6七个运行级别之一) chkonfig                命令行运行级别设置 ntsysv                   伪图形运行级别设置 注意:1.这三种方式主要用于以redhat为基础的发行版 2.如果还不知道运行级别是什么,那么最

Linux识别ntfs及挂载的三种方式

NTFS-3G是一个开源软件,支持在Linux操作系统下读写NTFS格式的分区.它能快速且安全的操作Windows XP,Windows Server 2003, Windows 2000 以及WindowsVista文件系统. 1 .环境准备 安装该软件需要依赖于fuse, Centos6.*中应该默认安装过fuse: [[email protected] yum.repos.d]# rpm -q fuse fuse-2.8.3-4.el6.i686 已经安装 如果没有安装可以yum安装或者编