将MIDI数据保存到缓冲区使用C ++

时间:2013-06-13 04:22:43

标签: c++ parsing buffer midi stdio

我希望通过存储在SD卡上的MIDI文件解析Atmel 1284P微控制器并激活电磁阀来播放音乐。我正在尝试将整个MIDI文件保存到缓冲区。据我了解,整个MIDI文件最终是一系列命令/数据和其他字节。因此,我认为我可以使用带有'read byte'参数的c ++“fopen”方法读取文件。但是,它只返回文件的前四个字节(标题的MTHD部分)。我可以使用C ++ MIDI库,但老实说我很好奇。这是输出:

MTHD

#include <stdio.h>
#include <stdlib.h>

int main() {

FILE* midiFile;
midiFile = fopen("C:/Users/Preston/Desktop/cantina.mid","rb");
char* buffer;
long lsize;
size_t result;
fseek(midiFile,0,SEEK_END );
lsize=ftell(midiFile);
rewind(midiFile);

buffer = (char*) malloc(sizeof(char)*lsize);
result = fread(buffer, 1, lsize, midiFile);
printf(buffer);

fclose(midiFile);
}

1 个答案:

答案 0 :(得分:0)

MTHD之后的第一个字节是0,因此printf只会打印MTHD,因为C字符串以零字节结束。如果要打印MIDI文件的内容,则需要将文件的字节转换为十六进制。