package com.buaa.read;
import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
public class ReadMidi {
/**
* 获取midi信息
*
* @param midiFile
* @throws Exception
*/
public void readDateFIle(File midiFile) throws Exception {
FileInputStream stream = new FileInputStream(midiFile);
byte[] data = new byte[stream.available()];
stream.read(data);
ByteBuffer byteBuffer = ByteBuffer.wrap(data);
// 调用获取MTHD信息方法得到头部信息
HeaderChunks headerChunks = this.readHeaderChunks(byteBuffer);
List<TrackChunk> trackChunklist = this.readTreackChunks(byteBuffer,
headerChunks);
this.outInforMidi(headerChunks, trackChunklist);
}
public void outInforMidi(HeaderChunks headerChunks,
List<TrackChunk> trackChunklist) {
System.out.println("-------------MThd-----------------");
System.out.println("头块类型:" + new String(headerChunks.getMidiId()));
System.out.println("头块长度:" + headerChunks.getLength());
System.out.println("格式:" + headerChunks.getFormat());
System.out.println("音轨数:" + headerChunks.getTrackNumber());
System.out.println("分区:" + headerChunks.getMidiTimeSet());
for (int i = 0; i < trackChunklist.size(); i++) {
System.out.println("-------------MTrk-----------------");
System.out.println("音轨块" + i + ":"
+ new String(trackChunklist.get(i).getMidiId()));
System.out.println("音轨数据长度:" + trackChunklist.get(i).getLength());
System.out.println("音轨数据:" + trackChunklist.get(i).getData());
}
}
/**
* 获取头部信息MThd
*
* @param buffer
* @return
*/
public HeaderChunks readHeaderChunks(ByteBuffer buffer) {
HeaderChunks headerChunks = new HeaderChunks();
for (int i = 0; i < headerChunks.getMidiId().length; i++) {
headerChunks.getMidiId()[i] = (byte) (buffer.get());
}
headerChunks.setLength(buffer.getInt());
headerChunks.setFormat(buffer.getShort());
headerChunks.setTrackNumber(buffer.getShort());
headerChunks.setMidiTimeSet(buffer.getShort());
return headerChunks;
}
/**
* 获取MTrk信息块
*
* @param buffer
* @param headerChunks
* @return
*/
public List<TrackChunk> readTreackChunks(ByteBuffer buffer,
HeaderChunks headerChunks) {
ArrayList<TrackChunk> trackChunklist = new ArrayList<TrackChunk>();
TrackChunk trackChunk;
for (int i = 0; i < headerChunks.getTrackNumber(); i++) {
trackChunk = new TrackChunk();
for (int j = 0; j < trackChunk.getMidiId().length; j++) {
trackChunk.getMidiId()[j] = (byte) (buffer.get());
}
trackChunk.setLength(buffer.getInt());
byte[] data = new byte[trackChunk.getLength()];
buffer.get(data);
System.out.println(data[0]);
trackChunk.setData(data);
trackChunklist.add(trackChunk);
}
return trackChunklist;
}
}
Android解析midi文件
3星 · 超过75%的资源 需积分: 48 114 浏览量
2013-07-02
19:40:18
上传
评论 4
收藏 11KB RAR 举报
kinsoncai138
- 粉丝: 0
- 资源: 4
最新资源
- BLOCK_TYPE_HEARTBEAT_D70A3465D4EE4E9_046141_dump_1st.dmp
- 项目方法测试调用接口工具
- studyupdate
- 基于西瓜数据集的决策树实现.zip
- 60套HTML网站源码-响应式-涵盖(简历&作品展示&商业&科技&培训&商城&课设等)-适配移动设备-解压即用.zip
- 贪心算法要点和难点实例代码解析
- 65套HTML网站源码-响应式-涵盖(简历&作品展示&商业&科技&培训&商城&课设等)-适配移动设备-解压即用.zip
- 多因素决策树的Python实现.zip
- 使用Python在莺尾花数据集上实现了决策树算法,文件里有数据集.zip
- python实现决策树.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页