JAVA 播放音乐的简单程序 含注释
发布日期:2022-03-09 00:49:17 浏览次数:126 分类:技术文章

本文共 2734 字,大约阅读时间需要 9 分钟。

public interface Clip extends

The Clip interface represents a special kind of data line whose audio data can be loaded prior to playback, instead of being streamed in real time.

Because the data is pre-loaded and has a known length, you can set a clip to start playing at any position in its audio data. You can also create a loop, so that when the clip is played it will cycle repeatedly. Loops are specified with a starting and ending sample frame, along with the number of times that the loop should be played.

Clips may be obtained from a  that supports lines of this type. Data is loaded into a clip when it is opened.——摘自  jdk_api_1.8文档 的Clip部分

这个音乐播放程序,主要用到clip和AudioSystem来控制文件的输入、文件格式转化和音乐的播放

第一部分:文件的导入与播放

  • Clip接口表示一种特殊类型的数据流,其音频数据可以在播放之前加载,而不是实时流式传输。(翻自jdk_api_1.8)

我们可以设置数据流clip,实现在音频数据中的任何位置开始播放。

  • AudioSystem.getAudioInputStream(File file)方法:从提供的file中获取音频输入流

  • 对于java播放的音乐文件格式,据百度,目前jdk自带类库只能实现AU,AIFF,WAV,MIDI,RFM等格式的音频,mp3等格式则需要额外插件。 
  • 需要补充的是,有些音乐文件格式如MP3需要通过某些方法转换音乐格式,若单纯的改文件后缀,程序可能还是会报错,显示文件格式不符。
import javax.sound.sampled.*;import java.io.File;import java.io.IOException;import java.util.Scanner;public class MusicPlayer  {        public static final String BGM = "文件路径";//bgm文件路径    static Clip music = null; //声明Clip接口    static File sourceFile = null; //声明文件变量    /**     * 音乐播放方法     */    public static void playMusic(String path){        try {            music = AudioSystem.getClip(); // 获取可用于播放音频文件或音频流的数据流            sourceFile = new File(path);//获取文件            AudioInputStream ais = AudioSystem.getAudioInputStream(sourceFile);//获得指示格式的音频输入流            music.open(ais); //打开数据流            music.start();    //开始播放音乐        } catch (LineUnavailableException e) {            e.printStackTrace();        } catch (UnsupportedAudioFileException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    }

 第二部分:音乐的关闭

音乐关闭的方式有两种:

第一种

        播放可以由clip对象调用startstop方法启动和停止。这两个方法不会重置媒体位置;也就是不会将播放进度归零。start()方法从最后停止播放的位置继续播放。

        若需要重新开始播放时,可在播放前由clip对象调用setFramePosition(0)方法 。即设置媒体位置为0。

第二种

        可以由clip对象调用close()方法,通过关闭数据流的方式停止播放。这个方法会重置播放进度,再次调用start时,从头开始播放。

/**     * 关闭音乐     */    public static void closeMusic(){        if (music!=null)    //需要判断music是否为null,避免出现空指针异常            music.stop();//暂停音乐    }

 第三部分:播放测试

        需要说明的是,若该测试程序只调用了playMusic()方法,音乐不会播放。

原因是:该程序执行完了playMusic()方法中的程序后,测试程序就运行完成而终止了,音乐不会继续播放。

public static void main(String[] args) {        MusicPlayer.playMusic(MusicPlayer.BGM); //调用自定义函数播放音乐        Scanner scan = new Scanner(System.in);        while (true){            System.out.println("输入0停止音乐");            if (scan.nextInt() == 0) {                closeMusic();    //调用自定义方法关闭音乐                break;                }        }}

新手练习,有误请指正。

转载地址:https://blog.csdn.net/m0_57771816/article/details/120633359 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Openstack的安装及配置-----02基础环境配置
下一篇:Spring Cloud - 1- 微服务架构及解决方案

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月05日 12时23分14秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章