парсинг — сохранение данных MIDI в буфер с помощью переполнения стека

Я хочу, чтобы микроконтроллер 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);
}

0

Решение

Первый байт после MTHD равен 0, поэтому printf будет печатать только MTHD поскольку строка C заканчивается нулевым байтом. Если вы хотите распечатать содержимое MIDI-файла, вам нужно преобразовать байты файла в шестнадцатеричный формат.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]