任务是使用NAudio库从MIDI文件中获取所有音符和时间.到目前为止,我从文件中获取所有笔记,但我无法得到他们的时间.

Note noteOn = new Note(); //custom class Note

MidiFile midi = new MidiFile(open.FileName);

List tempo = new List();

for (int i = 0; i < midi.Events.Count(); i++)

{

foreach (MidiEvent note in midi.Events[i])

{

TempoEvent tempoE;

try { tempoE = (TempoEvent)note; tempo.Add(tempoE); }

catch { }

if (note.CommandCode == MidiCommandCode.NoteOn)

{

var t_note = ( NoteOnEvent)note;

var noteOffEvent = t_note.OffEvent;

noteOn.NoteName.Add(t_note.NoteName);

noteOn.NoteNumber.Add(t_note.NoteNumber);

noteOn.NoteVelocity.Add(t_note.Velocity);

noteOn.NoteLenght.Add(t_note.NoteLength);

double d = (t_note.AbsoluteTime / midi.DeltaTicksPerQuarterNote) * tempo[tempo.Count() - 1].Tempo;

noteOn.StartTime.Add(TimeSpan.FromSeconds(d));

}

}

}

问题:

1)只获取NoteOnEvents中的注释列表?如果我理解正确,每个音符都有’start’和’end’,start由NoteOnEvent定义,’end’由NoteOffEvent定义.如果我查看两个事件(NoteOn和NoteOff),我会得到重复的注释.我对吗?

2)如何记录笔记的时间?根据this post,我得到一些值,但似乎第一个音符的时间是正确的,但其他人没有.同样在这篇文章中,有一条评论说计算时间的公式必须是:

((note.AbsTime - lastTempoEvent.AbsTime) / midi.ticksPerQuarterNote) * tempo + lastTempoEvent.RealTime.

我不知道参数lastTempoEvent.RealTime和tempo.这是最后一次节奏活动的节奏还是?

3)读取MIDI文件非常慢,对于较小的文件,它可以,但对于大文件则没有.这个小文件有~150 NoteOnEvents,这个更大的文件有~1250 NoteOnEvents,这不是那么“重”.为什么这么慢?

c语言读取midi文件举例子,c# – 使用NAudio从MIDI文件中读取音符相关推荐

  1. c语言读取midi文件举例子,使用AudioKit从MIDI文件中读取音符

    Tony Fung Choi Fung 8 ios swift audiokit 我正在尝试构建一个从midi文件中呈现音符的音序器. 目前我正在使用AudioKit进行音乐数据处理.想知道如何使用A ...

  2. java jar包资源文件_深入jar包:从jar包中读取资源文件

    我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看 ...

  3. java stream 多次读取_多次从具有大量数据的Java InputStream中读取

    我想知道什么是从Java InputStream多次读取字节并在流很大时仍然有效的最佳方法. 假设我有以下代码: public void handleBytes(InputStream in) { d ...

  4. c语言读取midi文件举例子,从MIDI文件获取音符数据

    Nik Reisman - 对不起,但我不同意你......在C#中解析midi,C++是大约400行代码的东西......它没有什么困难,也没有困难. 在简短的描述解析器将如何工作: 1)打开mid ...

  5. 用python的pandas打开csv文件_使用CSV模块和Pandas在Python中读取和写入CSV文件

    什么是CSV文件? CSV文件是一种纯文本文件,其使用特定的结构来排列表格数据.CSV是一种紧凑,简单且通用的数据交换通用格式.许多在线服务允许其用户将网站中的表格数据导出到CSV文件中.CSV文件将 ...

  6. java 读取webapp文件_在Java Webapp和Java Normal应用中读取公共外部属性文件

    但是,我们有以下一些特殊要求, Webapp将部署到tomcat. 格式为.jar的普通Java应用程序将放在/ myapp文件夹下 myappConfig.property文件将放置在/ myapp ...

  7. python打开文件报错无效序列_如何在python中读取fasta文件?

    我正在尝试读取FASTA文件,然后查找特定的 motif(string)并打印出序列和次数. A FASTA file只是一系列序列(字符串),以标题行开头,标题或新序列的开头是">& ...

  8. python读取文件夹下所有图像 预处理_在python中读取预处理的cr2原始图像数据

    您可以使用rawkit来获取这些数据,但是,您将无法使用实际的rawkit模块(它为处理原始图像提供了更高级别的api).相反,您将希望主要使用libraw模块,该模块允许您访问底层LibRaw ap ...

  9. 博图如何读取mysql数据_博途使用小结:从SQL中读取数据并给变量赋值

    1.建立内部变量TON_Report,VF01_Runtime,JC01_Runtime,VF05_Runtime,数据类型为Real,长度为2 2.建立查询按钮,点击查询按钮时读取SQL中的数据并赋 ...

最新文章

  1. java加载图片到缓存_Android实现图片异步加载并缓存到本地
  2. nginx总结二(nginx的启动停止以及版本平滑升级)
  3. 【机器学习】朴素贝叶斯代码练习
  4. 使用 python 操作 redis
  5. Apache Camel 2.11发布
  6. springboot-RequestMappingHandlerMapping
  7. hibernate实现多变联合查询
  8. Java中的位运算符、移位运算
  9. P1941 飞扬的小鸟
  10. Python之数据分析(Numpy数据可视化:等高线图、热力图、饼图)
  11. 计算机网络 校园网规划与设计方案,校园网网络规划与设计的方案.pdf
  12. 极限编程和极限编程方法采用的有效的开发实践
  13. 【转】常用0x000000类型颜色代码表
  14. 如何利用python中的pandas模块计算环比和同比
  15. 关于Oblog 2.52 help.asp漏洞的修补问题
  16. 忘记windows密码解决办法(用户密码或SYSKEY)
  17. kubeadm,kubevip,containerd部署高可用的kubernetes集群
  18. 计算机设备管理器里面没有图像,设备管理器里没有图像设备怎么办?
  19. python基础专栏⑤-手机编写python篇-qpython开发python
  20. 【干货分享】使用Inno Setup设计扁平化风格的安装包

热门文章

  1. 带中文字库的12864驱动笔记
  2. 论语之宪问第十四、卫灵公第十五、季氏第十六
  3. 全球与中国太阳能测试仪市场现状及未来发展趋势
  4. STUN和TURN技术浅析
  5. 电子类通信类和计算机类ei期刊,电子类通信类和计算机类EI期刊(大部分免费)
  6. 像素生存显示服务器不可用,生存游戏3无法连接服务器是什么原因
  7. 慧居科技在港交所上市状态“失效”,双良科技为控股股东
  8. Excel2013表格使用厘米为单位设置行高和列宽
  9. RNA 10. SCI 文章中基因表达富集之 KEGG 注释
  10. 在php中.=什么意思,在算法中mod是什么意思?