MP3播放器项目---编写代码---4
1.代码结构图
2.HttpDownload
package hui.download;
import hui.utils.FileUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpDownloader {
private URL url = null;
/**
* 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
* 1.创建一个URL对象
* 2.通过URL对象,创建一个HttpURLConnection对象
* 3.得到InputStram
* 4.从InputStream当中读取数据
* @param urlStr
* @return
*/
public String download(String urlStr) {
StringBuffer sb = new StringBuffer();
String line = null;
BufferedReader buffer = null;
try {
// 创建一个URL对象
url = new URL(urlStr);
// 创建一个Http连接
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection();
// 使用IO流读取数据
buffer = new BufferedReader(new InputStreamReader(urlConn
.getInputStream()));
while ((line = buffer.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
buffer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
/**
* 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在
*/
public int downFile(String urlStr, String path, String fileName) {
InputStream inputStream = null;
try {
FileUtils fileUtils = new FileUtils();
if (fileUtils.isFileExist(fileName,path)) {
return 1;
} else {
inputStream = getInputStreamFromUrl(urlStr);
File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream);
if (resultFile == null) {
return -1;
}
}
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return 0;
}
/**
* 根据URL得到输入流
*
* @param urlStr
* @return
* @throws MalformedURLException
* @throws IOException
*/
public InputStream getInputStreamFromUrl(String urlStr)
throws MalformedURLException, IOException {
url = new URL(urlStr);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
InputStream inputStream = urlConn.getInputStream();
return inputStream;
}
}
3.LrcProcessor
package hui.lrc;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class LrcProcessor {
public ArrayList<Queue> process(InputStream inputStream) {
//存放时间点数据
Queue<Long> timeMills = new LinkedList<Long>();
//存放时间点所对应的歌词
Queue<String> messages = new LinkedList<String>();
ArrayList<Queue> queues = new ArrayList<Queue>();
try {
//创建BufferedReader对象
InputStreamReader inputReader = new InputStreamReader(inputStream,"UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputReader);
String temp = null;
int i = 0;
//创建一个正则表达式对象
Pattern p = Pattern.compile("\\[([^\\]]+)\\]");
String result = null;
boolean b = true;
while ((temp = bufferedReader.readLine()) != null) {
i++;
Matcher m = p.matcher(temp);
if (m.find()) {
if (result != null) {
messages.add(result);
}
String timeStr = m.group();
Long timeMill = time2Long(timeStr.substring(1, timeStr
.length() - 1));
if (b) {
timeMills.offer(timeMill);
}
String msg = temp.substring(10);
result = "" + msg + "\n";
} else {
result = result + temp + "\n";
}
}
messages.add(result);
queues.add(timeMills);
queues.add(messages);
} catch (Exception e) {
e.printStackTrace();
}
return queues;
}
/**
* 将分钟,秒全部转换成毫秒
* @param timeStr
* @return
*/
public Long time2Long(String timeStr) {
String s[] = timeStr.split(":");
int min = Integer.parseInt(s[0]);
String ss[] = s[1].split("\\.");
int sec = Integer.parseInt(ss[0]);
int mill = Integer.parseInt(ss[1]);
return min * 60 * 1000 + sec * 1000 + mill * 10L;
}
}
4. Mp3Info
package hui.model;
import java.io.Serializable;
public class Mp3Info implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String id;
private String mp3Name;
private String mp3Size;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Mp3Info() {
super();
}
@Override
public String toString() {
return "Mp3Info [id=" + id + ", lrcName=" + lrcName + ", lrcSize="
+ lrcSize + ", mp3Name=" + mp3Name + ", mp3Size=" + mp3Size
+ "]";
}
public String getMp3Name() {
return mp3Name;
}
public Mp3Info(String id, String mp3Name, String mp3Size, String lrcName,
String lrcSize) {
super();
this.id = id;
this.mp3Name = mp3Name;
this.mp3Size = mp3Size;
this.lrcName = lrcName;
this.lrcSize = lrcSize;
}
public void setMp3Name(String mp3Name) {
this.mp3Name = mp3Name;
}
public String getMp3Size() {
return mp3Size;
}
public void setMp3Size(String mp3Size) {
this.mp3Size = mp3Size;
}
public String getLrcName() {
return lrcName;
}
public void setLrcName(String lrcName) {
this.lrcName = lrcName;
}
public String getLrcSize() {
return lrcSize;
}
public void setLrcSize(String lrcSize) {
this.lrcSize = lrcSize;
}
private String lrcName;
private String lrcSize;
}
5.FileUtils
package hui.utils;
import hui.model.Mp3Info;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import android.os.Environment;
public class FileUtils {
private String SDCardRoot;
public FileUtils() {
// 得到当前外部存储设备的目录
SDCardRoot = Environment.getExternalStorageDirectory()
.getAbsolutePath()
+ File.separator;
}
/**
* 在SD卡上创建文件
*
* @throws IOException
*/
public File createFileInSDCard(String fileName, String dir)
throws IOException {
File file = new File(SDCardRoot + dir + File.separator + fileName);
System.out.println("file---->" + file);
file.createNewFile();
return file;
}
/**
* 在SD卡上创建目录
*
* @param dirName
*/
public File creatSDDir(String dir) {
File dirFile = new File(SDCardRoot + dir + File.separator);
System.out.println(dirFile.mkdirs());
return dirFile;
}
/**
* 判断SD卡上的文件夹是否存在
*/
public boolean isFileExist(String fileName, String path) {
File file = new File(SDCardRoot + path + File.separator + fileName);
return file.exists();
}
/**
* 将一个InputStream里面的数据写入到SD卡中
*/
public File write2SDFromInput(String path, String fileName,
InputStream input) {
File file = null;
OutputStream output = null;
try {
creatSDDir(path);
file = createFileInSDCard(fileName, path);
output = new FileOutputStream(file);
byte buffer[] = new byte[4 * 1024];
int temp;
while ((temp = input.read(buffer)) != -1) {
output.write(buffer, 0, temp);
}
output.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return file;
}
/**
* 读取目录中的Mp3文件的名字和大小
*/
public List<Mp3Info> getMp3Files(String path) {
List<Mp3Info> mp3Infos = new ArrayList<Mp3Info>();
File file = new File(SDCardRoot + File.separator + path);
File[] files = file.listFiles();
FileUtils fileUtils = new FileUtils();
for (int i = 0; i < files.length; i++) {
if (files[i].getName().endsWith("mp3")) {
Mp3Info mp3Info = new Mp3Info();
mp3Info.setMp3Name(files[i].getName());
mp3Info.setMp3Size(files[i].length() + "");
String temp [] = mp3Info.getMp3Name().split("\\.");
String eLrcName = temp[0] + ".lrc";
if(fileUtils.isFileExist(eLrcName, "/mp3")){
mp3Info.setLrcName(eLrcName);
}
mp3Infos.add(mp3Info);
}
}
return mp3Infos;
}
}
- 大小: 23 KB
分享到:
相关推荐
QT编写的mp3播放器源码——mp3player是一个基于QT5框架的音频播放软件项目。QT是一个跨平台的应用程序开发框架,广泛用于创建桌面、移动和嵌入式平台的图形用户界面。在这个项目中,开发者利用QT5的库和API来设计并...
在这个MP3播放器项目中,它可能包括音量设置、播放模式(单曲循环、列表循环等)以及其他个性化选项。开发者可以通过解析XML来获取和保存这些设置,以实现用户友好的体验。 `com`目录则包含了项目的源代码包,这些...
在这个播放器项目中,开发者可能使用了`QMediaPlayer`类来管理媒体播放,`QMediaPlaylist`来处理媒体播放列表,以及`QVideoWidget`或`QGraphicsVideoItem`来显示视频。 2. **QT Widgets模块**:用于创建和管理GUI...
在本项目中,"C#Mp3播放器源码"是一个使用C#编程语言开发的MP3播放器的完整源代码。C#是一种面向对象的、类型安全的、现代的编程语言,常用于构建Windows桌面应用程序,Web应用程序以及游戏等。这个源码库将为学习C#...
【标题】"mp3播放器源代码"是一个与多媒体技术和软件开发相关的项目,它涉及到音频文件的处理,尤其是MP3格式的音频。MP3是一种广泛使用的数字音频编码格式,通过有损压缩技术减小文件大小,同时保持相对高质量的...
在本项目中,它被用于构建一个SD卡MP3播放器,具备所有必要的控制功能。 MP3播放器的设计通常涉及以下几个关键部分: 1. **STM32F130ZET6微控制器**:作为核心处理器,STM32F130ZET6负责处理所有的输入输出控制,...
在本项目中,C#被用来编写播放器的后端逻辑和用户界面。 2. **用户界面设计**:仿KUGO的设计意味着该播放器界面美观,操作直观,旨在为用户提供与KUGO类似的用户体验。这包括但不限于播放/暂停、上一曲/下一曲、...
【描述】提到的“自己制作的c语言版mp3播放器”表明该程序是由个人开发者用C语言编写的,它可能包含了读取、解码MP3文件以及播放音频的核心功能。开发者希望得到社区的反馈和建议,以进一步完善播放器的功能和用户...
**Arduino复古风格MP3播放器项目开发** 这个项目的核心是使用Arduino微控制器构建一个具有复古外观的MP3播放器。Arduino是一种开源电子平台,适用于初学者和专业人士进行电子原型设计。通过结合硬件和软件,我们...
Java编写的简单MP3播放器代码是一个典型的Java应用程序,它实现了音频播放功能,特别是针对MP3格式的音乐文件。在本文中,我们将深入探讨这个项目的各个方面,包括Java编程语言的基础,MP3音频处理,以及XML数据处理...
这个基于Java的MP3播放器项目对于初学者来说是一个很好的学习实践,它涵盖了文件I/O、音频处理、GUI设计等多个方面,有助于提升编程技能和理解Java的核心概念。通过实际编写代码,你可以更深入地了解Java编程,并...
4. 编程调试技巧,编写清晰的代码注释和调试信息。 5. 可能涉及的传感器数据处理和网络通信技术,以实现脉动监测功能。 这个项目不仅是一个编程练习,也是一次深入学习多媒体处理和用户交互设计的好机会。通过实践...
【标题】基于Java的mp3播放器源...总的来说,这个基于Java的MP3播放器项目涵盖了多媒体编程、事件驱动编程、软件设计原则等多个IT知识点,对于学习Java编程和多媒体应用开发的初学者来说,是一个非常有价值的实践案例。
在本项目中,我们将探讨如何利用SDK来构建一个基础的MP3播放器,实现如调整音量、播放和暂停等基本功能。 首先,SDK(Software Development Kit)是一组工具、库、文档和示例代码,用于帮助开发者创建特定平台或...
在本项目中,“MP3播放器代码”是一个使用QT语言编写的软件,专用于播放MP3音频格式的文件。这通常涉及到多媒体处理、音频解码和用户界面设计等多个方面的知识。 首先,我们需要了解QT中的Q Multimedia模块,它是...
在本项目中,我们将探讨如何使用VB来编写一个基本的MP3播放器,具备播放MP3文件和调节音量的功能。 一、环境搭建与基础概念 首先,你需要安装Visual Studio IDE,它包含了VB的开发环境。打开IDE,创建一个新的...
【国嵌项目 MP3播放器 SDK】是一款专为嵌入式系统设计的软件开发工具包,主要用于在嵌入式设备上实现MP3音频文件的播放功能。这一SDK提供了必要的库函数、驱动程序以及示例代码,帮助开发者快速构建具备MP3播放能力...
【jQuery仿qq音乐mp3播放器代码】是一个利用jQuery库创建的音乐播放器,它具有类似于QQ音乐的界面和功能,旨在提供一个个性化的音乐体验。这个项目的主要目标是实现用户可以通过点击人物头像来切换不同的歌曲,并且...
**Arduino MP3播放器Catalex项目开发** Arduino MP3播放器Catalex是一款基于Arduino平台的简单且直观的串行MP3播放器。这款设备以其低廉的价格和易于使用的特点,为Arduino爱好者提供了在自制项目中集成音乐播放...
【标题】"Mp3播放器的代码下载"所涉及的知识点主要集中在开发一个能够播放MP3音频文件的应用程序上。这通常需要理解音频编码、解码原理,以及使用编程语言来实现这一功能。 首先,MP3是一种有损音频压缩格式,它...