当前位置: 首页 > news >正文

西乡做网站价格网站建设与应用 教案

西乡做网站价格,网站建设与应用 教案,个人网站模板下载,网络广告营销的特点在C语言中直接读取MIDI文件并不简单#xff0c;因为MIDI文件是一种包含音乐事件#xff08;如音符的开始和结束、控制信号等#xff09;的二进制格式#xff0c;而不是像文本文件那样容易解析。不过#xff0c;你可以通过以下步骤来实现#xff1a; 了解MIDI文件格式因为MIDI文件是一种包含音乐事件如音符的开始和结束、控制信号等的二进制格式而不是像文本文件那样容易解析。不过你可以通过以下步骤来实现 了解MIDI文件格式 MIDI文件有多种格式最常见的是SMF (Standard MIDI File) 格式也被称为Type 0、Type 1或Type 2。你需要了解MIDI文件的各个部分包括文件头、轨道头和轨道事件等。编写解析器 编写一个C程序来读取MIDI文件的二进制内容。首先你需要读取文件头以获取文件的整体信息如文件类型、轨道数等。然后逐个读取轨道头了解每个轨道的详细信息。接下来解析轨道中的MIDI事件这通常涉及解析时间戳和事件数据。处理MIDI事件 对于每个MIDI事件你需要解析事件数据以了解它是什么类型的事件如音符开始、音符结束、控制更改等。根据事件类型你可以执行相应的操作如播放音符、更改音量或发送其他MIDI消息。使用库 考虑到MIDI文件的复杂性你可能希望使用现有的库来帮助解析和处理MIDI文件。例如你可以查找支持C语言的MIDI库如libsmf或libmidi请注意这些库可能不存在或已过时因为MIDI文件处理在C语言中并不常见。集成到项目中 一旦你能够解析和处理MIDI文件你可以将其集成到你的C项目中。这可能涉及将MIDI事件转换为音频输出如使用MIDI输出设备或软件合成器或将MIDI数据转换为其他格式如MIDI转乐谱。测试和调试 编写测试用例来验证你的MIDI解析器是否能够正确处理各种MIDI文件。使用调试工具来查找和修复任何错误或问题。 请注意直接处理MIDI文件需要深入了解MIDI规范和相关文件格式。如果你不熟悉这些概念可能需要花费一些时间来学习它们。此外由于MIDI文件的复杂性编写一个健壮且可靠的MIDI解析器可能是一个相当复杂的任务。 如果你只是想在C语言项目中播放MIDI文件而不是解析和处理MIDI文件的内部细节那么一个更简单的方法是使用外部MIDI播放器或库来播放MIDI文件并通过命令行或API接口与你的C程序进行交互。 请先看百度百科MIDI文件格式 编写 mid_head.c 读取 midi 文件头部 #include stdio.h #include stdint.htypedef struct {char ctag[4]; // chunk_tag: MThdint32_t chunk_size;// 指定Midi的格式: 00 00单音轨; 00 01多音轨,且同步; 00 02多音轨但不同步uint16_t geshi; uint16_t tracks; // 轨道数:实际音轨数字 1个全局音轨// 指定基本时间格式类型: 类型1定义一个四分音符的tick数; // 类型2定义每秒中SMTPE帧的数量及每个SMTPE帧的ticksuint16_t ticks; char ttag[4]; // track_tag: MTrkuint8_t t_id;uint16_t track_size; } MidiHeader;uint16_t swapUint16(uint16_t shortValue){return ((shortValue 0x00FF ) 8) | ((shortValue 0xFF00)8); }int32_t swapInt32(int32_t intValue){int32_t temp 0;temp ((intValue 0x000000FF) 24) ((intValue 0x0000FF00) 8) ((intValue 0x00FF0000) 8) ((intValue 0xFF000000) 24);return temp; }int main(int argc, char *argv[]) {if (argc 2) {printf(Usage: %s filename\n, argv[0]);return 1;}const char *f1 argv[1]; // filenameFILE *file fopen(f1, rb);if (!file) {perror(Error opening file);return -1;}MidiHeader hd;if (fread(hd, sizeof(MidiHeader), 1, file) ! 1) {fclose(file);perror(Error reading file head);return -1;}// 打印读取到的数据验证读取成功printf(Chunk tag: %s\n, hd.ctag);printf(Chunk Size: %04d\n, swapInt32(hd.chunk_size));printf(geshi:%d, tracks:%d, ticks:%d\n,swapUint16(hd.geshi),swapUint16(hd.tracks),swapUint16(hd.ticks));printf(Track tag: %s\n, hd.ttag);printf(track id: %x, track Size: %d\n, hd.t_id, swapUint16(hd.track_size));if (fseek(file, swapUint16(hd.track_size)-2, 1) !0) {fclose(file);perror(Error fseek file );return -1;}char t1tag[5];if (fread(t1tag, sizeof(char), 4, file) ! 4) {fclose(file);perror(Error reading file head);return -1;}printf(track1 tag: %s\n, t1tag);uint32_t track1_size;if (fread(track1_size, sizeof(uint32_t), 1, file) ! 1) {fclose(file);perror(Error reading file head);return -1;}printf(track1 size: %d\n, swapInt32(track1_size)); fclose(file);return 0; } where gcc D:\Strawberry\c\bin\gcc.exe 编译 gcc mid_head.c -o mid_head.exe 运行 mid_head  happy_birthday.mid mid_head happy_birthday.mid Chunk tag: MThd Chunk Size: 0006 geshi:1, tracks:2, ticks:1024 Track tag: MTrk Track id: 0, Track Size: 20 Track1 tag: MTrk track1 size: 247 为了对单个几十MB的.mid 文件采样数据读取.mid 文件头部 4080 bytes  Unix 命令 head -c 4080 sample1.mid temp1.mid 运行 strings temp1.mid
http://www.hkea.cn/news/14479240/

相关文章:

  • 郑州知名做网站公司有哪些网站建设如何添加歌曲
  • 网站建议怎么写效果图制作收费标准
  • 滨州做网站建设济南建设网官网招聘信息
  • 美食网站建设书类似淘宝网 的淘宝客网站模板
  • 洛阳做网站找哪家好接广告推广
  • 学科网站建设标准云龙微网站开发
  • 泉州网站建设案例好的深圳网站页面设计
  • 做网站交钱后以后还要教吗网站推广设计
  • 自己的服务器做网站电商平台网站大全
  • 网站建设特效素材网站免费进入窗口软件2023
  • 网站集约化建设方案风景旅游网站建设的设计思路
  • 杭州富阳网站建设公司科技小手工
  • 做网站站长累吗网页设计模板加代码
  • 那个网站可以找人做设计师in word in the wordpress
  • 网站备案表格样本网站建设专业知识应用
  • 百度网站搜索关键字装修网站建设优缺点
  • 无锡网络推广哪家好seo优
  • 莱州网站建设包年网页设计实训总结3000字大学篇
  • 网站怎么做模板切换出站链接对网站有什么影响
  • 网站建设 php jsp .networdpress下载单页
  • 沈阳网站建设21anshan招标网站建设招标方案
  • 小猫mip网站建设wordpress兼容手机端
  • 深圳营销型网站制作公司开发者工具使用教程
  • 网站建设维护培训班手机app制作海报
  • 网站开发的英文参考文献wordpress留言时间不正确
  • 网站迁移教材怎样在阿里云做网站
  • 西安网站建设托管动漫网站开发 sh框架
  • 怎么建设一个营销型网站引流渠道推广
  • 自学做网站平台运营的主要工作内容
  • 网站搭建是什么专业学的网站视觉规范怎么做