前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java写一个音乐播放程序,同时显示歌词

java写一个音乐播放程序,同时显示歌词

作者头像
发布2020-10-23 10:27:51
1.9K0
发布2020-10-23 10:27:51
举报
文章被收录于专栏:后端JavaEE

java写一个音乐播放程序,同时显示歌词

总的来说分为两部分:1.音乐播放 2.显示歌词(这里介绍一个好理解的算法,就不进行优化了)

一、音乐播放(这里我们在网上先下载一个wav文件来播放)

这里我们使用eclipse软件进行编程。

  1. 首先,我们需要知道JDK原生只支持音频格式为*.wav *.au *.aiff 的音乐
  2. 如果我们不希望使用JDK原生支持,就需要自己使用jar包(下面代码我是使用JDK原生支持的播放器来写的)
  3. 注意一下我的两个资源,一个是邓紫棋泡沫的歌曲.wav,一个是邓紫棋画的歌.lrc(因为实在没找到邓紫棋画的wav文件就先对付上了…)
代码语言:javascript
复制
// JDK自带音乐播放无需导包
	public static void MusicPlayer() {
		try {
			AudioPlayer.player.start(new FileInputStream(new File("./music/邓紫棋 - Paomo.wav")));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

二、显示歌词(这里我们先解析已有的lrc歌词文件,存放到data里面再进行操作)

代码语言:javascript
复制
public class Demo1 {
	// 定义两个存放分钟和秒的数组
	private static double[] d1 = new double[55];
	private static double[] d2 = new double[55];
	
	public static void main(String[] args) throws IOException {
		// 读取lrc文件并转编码到 data4中
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new InputStreamReader(new FileInputStream("./data/画-邓紫棋.lrc"), "GBK"));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		BufferedWriter writer = null;
		try {
			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("./data/data4.txt"), "UTF-8"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		for (String i = reader.readLine(); i != null; i = reader.readLine()) {

			writer.write(i);
			writer.newLine();
		}
		reader.close();
		writer.close();
		
		
		// 获取秒数组 d1[]
		BufferedReader reader2 = new BufferedReader(new InputStreamReader(new FileInputStream("./data/data4.txt")));
		int countLine = 0;
		while ((reader2.readLine()) != null) {
			countLine++;

			if (countLine <= 4)
				continue;
			for (int i = 0; i < d1.length; i++) {
				d1[i] = Double.parseDouble(reader2.readLine().substring(4, 9));
//            	System.out.println(d1[i]);
			}

		}
		reader2.close();

		// 获取分数组d2[]
		BufferedReader reader3 = new BufferedReader(new InputStreamReader(new FileInputStream("./data/data4.txt")));
		int countLine2 = 0;
		while ((reader3.readLine()) != null) {
			countLine2++;

			if (countLine2 <= 4)
				continue;

			for (int i = 0; i < d2.length; i++) {
				d2[i] = Double.parseDouble(reader3.readLine().substring(2, 3));
//            	System.out.println(d2[i]);
			}
		}
		reader3.close();

		// 歌词根据时间差输出到控制面板
		BufferedReader reader4 = new BufferedReader(new InputStreamReader(new FileInputStream("./data/data4.txt")));
		int countLine3 = 0;
		while ((reader4.readLine()) != null) {
			countLine3++;

			if (countLine3 <= 4)
				continue;

			// 延迟判断
			for (int i = 0; i < 55; i++) {
				// 歌词
				System.out.println(reader4.readLine().substring(10));
				
				//时间差
				double num1 = d1[i] * 1000 + d2[i] * 60 * 1000;
				double num2 = d1[i + 1] * 1000 + d2[i + 1] * 60 * 1000;
				long num3 = Math.round(num2 - num1);
				try {
					Thread.sleep(num3);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}

		}
		reader4.close();

	}
}

三、完整代码

代码语言:javascript
复制
package com.qfedu.work;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


import sun.audio.*;

public class Demo1 {
	// 定义两个存放分钟和秒的数组
	private static double[] d1 = new double[55];
	private static double[] d2 = new double[55];

	// JDK自带音乐播放无需导包
	public static void MusicPlayer() {
		try {
			AudioPlayer.player.start(new FileInputStream(new File("./music/邓紫棋 - Paomo.wav")));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws IOException {
		// 歌曲播放
		MusicPlayer();

		// 读取lrc文件并转编码到 data4中
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new InputStreamReader(new FileInputStream("./data/画-邓紫棋.lrc"), "GBK"));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		BufferedWriter writer = null;
		try {
			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("./data/data4.txt"), "UTF-8"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		for (String i = reader.readLine(); i != null; i = reader.readLine()) {

			writer.write(i);
			writer.newLine();
		}
		reader.close();
		writer.close();
		
		
		// 获取秒数组 d1[]
		BufferedReader reader2 = new BufferedReader(new InputStreamReader(new FileInputStream("./data/data4.txt")));
		int countLine = 0;
		while ((reader2.readLine()) != null) {
			countLine++;

			if (countLine <= 4)
				continue;
			for (int i = 0; i < d1.length; i++) {
				d1[i] = Double.parseDouble(reader2.readLine().substring(4, 9));
//            	System.out.println(d1[i]);
			}

		}
		reader2.close();

		// 获取分数组d2[]
		BufferedReader reader3 = new BufferedReader(new InputStreamReader(new FileInputStream("./data/data4.txt")));
		int countLine2 = 0;
		while ((reader3.readLine()) != null) {
			countLine2++;

			if (countLine2 <= 4)
				continue;

			for (int i = 0; i < d2.length; i++) {
				d2[i] = Double.parseDouble(reader3.readLine().substring(2, 3));
//            	System.out.println(d2[i]);
			}
		}
		reader3.close();

		// 歌词根据时间差输出到控制面板
		BufferedReader reader4 = new BufferedReader(new InputStreamReader(new FileInputStream("./data/data4.txt")));
		int countLine3 = 0;
		while ((reader4.readLine()) != null) {
			countLine3++;

			if (countLine3 <= 4)
				continue;

			// 延迟判断
			for (int i = 0; i < 55; i++) {
				// 歌词
				System.out.println(reader4.readLine().substring(10));
				
				//时间差
				double num1 = d1[i] * 1000 + d2[i] * 60 * 1000;
				double num2 = d1[i + 1] * 1000 + d2[i + 1] * 60 * 1000;
				long num3 = Math.round(num2 - num1);
				try {
					Thread.sleep(num3);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}

		}
		reader4.close();

	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • java写一个音乐播放程序,同时显示歌词
    • 一、音乐播放(这里我们在网上先下载一个wav文件来播放)
      • 二、显示歌词(这里我们先解析已有的lrc歌词文件,存放到data里面再进行操作)
        • 三、完整代码
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档