2013-06-13 25 views
0

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

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); 
} 
+0

你检查过'buffer'的实际长度了吗?也许有更多的数据读取'printf'不打印。这是'C',而不是'C++'。 – PureW

回答

0

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