Я хочу, чтобы микроконтроллер Atmel 1284P анализировал MIDI-файл, сохраненный на SD-карте, и активировал соленоиды для воспроизведения музыки. Я экспериментирую, пытаясь сохранить весь файл MIDI в буфер. Насколько я понимаю, весь MIDI-файл в конечном итоге представляет собой последовательность команд / данных и других байтов. Таким образом, я подумал, что смогу прочитать файл, используя метод «fopen» c ++ с параметром «read byte». Однако он возвращает только первые четыре байта файла (часть MTHD заголовка). Я мог бы использовать C ++ MIDI-библиотеку, но мне, честно говоря, интересно об этом. Это вывод:
воспр
#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);
}
Первый байт после MTHD равен 0, поэтому printf будет печатать только MTHD
поскольку строка C заканчивается нулевым байтом. Если вы хотите распечатать содержимое MIDI-файла, вам нужно преобразовать байты файла в шестнадцатеричный формат.
Других решений пока нет …