2013-06-13 1 views
0

Atmel 1284P 마이크로 컨트롤러를 사용하여 SD 카드에 저장된 MIDI 파일을 구문 분석하고 솔레노이드를 활성화하여 음악을 재생하고자합니다. 전체 MIDI 파일을 버퍼에 저장하려고 시도하고 있습니다. 내가 이해하는 바와 같이, 전체 MIDI 파일은 궁극적으로 일련의 명령/데이터 및 기타 바이트입니다. 따라서, 나는 'read byte'파라미터로 C++ "fopen"메소드를 사용하여 파일을 읽을 수있을 것이라고 생각했다. 그러나 파일의 처음 4 바이트 (헤더의 MTHD 부분) 만 반환합니다. C++ MIDI 라이브러리를 활용할 수는 있지만 솔직히 궁금합니다. 이것은 출력 :버퍼에 MIDI 데이터 저장하기 C++을 사용하여

MThd MTHD 후 첫 번째 바이트가 0

#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

하므로 C 문자열이 0 바이트로 종료 이후의 printf 만 MTHD를 출력한다. MIDI 파일의 내용을 인쇄하려면 파일의 바이트를 16 진수로 변환해야합니다.

관련 문제