gpt4 book ai didi

c - 以二进制形式读取 mid 文件以进行进一步分析

转载 作者:行者123 更新时间:2023-11-30 18:51:54 29 4
gpt4 key购买 nike

所以我正在尝试编写一个程序来读取中间文件并将节点以及节点之间的延迟输出到txt文件中以供进一步使用。但是,我遇到了一些问题。每当我尝试读取中间文件时,它只会给我随机字符。但是我找不到任何解决该问题的方法。即使读取带有二进制标记的文件也不起作用。

#include <stdio.h>
#include <windows.h>

int main (){
FILE *midi = fopen("myfile.mid","rb");
FILE *txt = fopen("myfile.txt", "w");
char line[40];

if (midi==NULL)
{
printf("Error");
fclose(midi);
fclose(txt);
return 1;
}

while(!feof(midi))
{
fgets(line, 40, midi);
printf("%s\n",line);
fputs(line, txt);
Sleep(300);
}

fclose(midi);
fclose(txt);
return 0;
}

编辑:所以我尝试使用 fread 和 fwrite 代替,但它仍然给出 med“随机”符号。我刚刚用以下代码替换了 while 循环:

fread(line, 1, 40, midi); 
fwrite(line, 1, 40, txt);

最佳答案

这不是因为“Windows 如何读取文件”,而是因为 MIDI 文件不是人类可读的。它不是文本文件,而是二进制格式,可以让机器高效读取。将其视为字符串并将其打印到屏幕上不会输出任何有意义的内容。

如果您想在程序中处理 MIDI 数据,最简单的方法是在线查找 MIDI 解析库。不过,文件格式并不复杂,所以如果您愿意,也可以手动解析它(这是二进制解析的一个很好的学习练习)。您需要的唯一 C 函数是 fread 将其读入 char 缓冲区 - 其余的只是循环和数学。

关于c - 以二进制形式读取 mid 文件以进行进一步分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35675075/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com