midifile: getDurationInSeconds 对于所有事件均为 0
midifile: getDurationInSeconds is 0 for all events
我今天从 sapp.org 下载了midifile库。我在 guitar pro 5 中创建了一个测试文件,将其导出为 midi 并用 c++ 打开它。目前为止,一切都好。我可以阅读所有曲目,BPM 是正确的。
我现在想从一个事件转到另一个事件并读取密钥和事件持续时间。当我得到相应的关键信息时,持续时间返回零。
我的代码如下:
#include <iostream>
#include <string>
#include "../midi/include/Options.h"
#include "../midi/include/MidiFile.h"
int main(int argc, char** argv){
if( argc != 4 ){
std::cout << "Error: Invalid argument count. Use: ./drumgen srcmid outwav map" << std::endl;
exit(1);
}
MidiFile drumInput;
bool readFile = drumInput.read(argv[1]);
if( !readFile ){
std::cout << "Error: File " << argv[1] << " not found." << std::endl;
exit(1);
}
int tracks = drumInput.getTrackCount();
std::cout << "Tracks: " << tracks << std::endl;
for( int i = 0; i < tracks; i++ ){
int eventCount = drumInput.getEventCount(i);
for( int j = 0; j < eventCount; j++ ){
MidiEvent ev = drumInput.getEvent(i, j);
int key = ev.getKeyNumber();
int dur = ev.getDurationInSeconds();
std::cout << key << " " << dur << ";";
}
std::cout << std::endl;
std::cout << "Eventcount: " << eventCount << std::endl;
}
return 0;
}
我的示例 MIDI 文件在这里:
http://wikisend.com/download/186754/drumtest.mid该库可在此处找到:http://midifile.sapp.org/
在 MIDI 文件中,事件没有持续时间;音符由两个事件组成,音符开启和音符关闭。
要找出音符的长度,您必须搜索相应的事件对。
显然,由于某种原因,Midifile 不会自动执行此操作,而是要求您调用 MidiFile::linkNotePairs()
。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 如何从C++中的依赖类型中获得它所依赖的类型
- cmake在我的项目中所需的所有静态库都不成功
- Android NDK传感器向事件队列报告奇怪的间隔
- c++r值引用应用于函数指针
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件
- 对C++所做的更改使复制初始化适用于具有显式构造函数的类
- 将C 对象暴露于QML并收听更改事件
- 独立于平台的方式捕获控制台/终端关闭事件
- C++标准库容器相对于所包含对象的线程安全性
- 跨平台库,一个文件适用于所有人
- 嵌套用于未产生所需结果的循环
- 尝试使用重载运算符创建新的事件处理程序>>迷失了自己试图找出所需的语法
- 事件系统类似于c# (. net ?)
- 指定当一个静态库依赖于另一个静态库时所需的链接依赖关系
- 变量是否可以仅在 if 语句的作用域中定义,类似于通常为 for 循环所做的那样?
- Microsoft Visual Studio 2008正在并行地构建依赖于它们所依赖的项目