10. MIDI
MIDI全称是乐器数字接口(Musical Instrument Digital Interface),是20 世纪80 年代初为解决电声乐器之间的通信问题而提出的,编曲界最广泛的音乐标准格式。
默认SDK提供的midi功能分为 midi解码 和 midi琴。
midi解码 用户可参考midi_decode_app模式。
midi琴 用户可参考midi_keyboard_app模式。
详细midi功能及说明请看SDK包里的《杰理AD1x-45678_MIDI应用说明文档.pdf》文档。
(注:该文档实际函数以AD16N_flash_v1.4.0工程为准,其余芯片SDK实际函数名会有出入,但实现原理不变)
AD16N从V1.4.0版本开始开源2byte和4byte地址版本的midi中间层代码。
10.1. midi驱动版本选择说明
AD16N从V1.4.0版本开始开源2byte和4byte地址版本的midi中间层代码。
用户可运行位于SDK根目录的批处理来选择编译链接2byte或4byte版本的中间层代码、头文件以及算法库。批处理会更改:
1、文件AD16N_mbox_flash.cbp的配置 2、appsappsrcmbox_flashuc03app_modules.h的MIDI_VER_SELECT宏定义
注:该工具是通过修改cbp文件信息来选择编译对应的驱动的版本,不会对makefile做出任何改动,因此只能用于codeblocks等依赖cbp文件信息来编译的开发平台.
![]()
midi批处理
midi 2byte和4byte版本的基本差异如下表:
midi版本
乐谱后缀名
音色库后缀名
算法库名(已开源的库名)
音色库支持的PCM样点数
音色库支持的声道数
算法输出支持的声道数
2byte
.mfa
.mda
lib_midi_synth.a
<=65535个点
单声道
单声道
4byte
.mfa
.mdb
lib_midi_synth_pro.a
<=1900000
单声道、双声道
单声道、双声道
10.1.1. midi驱动版本选择步骤
公版SDK默认使用2byte版本的midi驱动,执行midi_4byte.bat会替换成4byte版本,下面详细介绍:
10.1.1.1. step1:选择编译midi版本驱动
![]()
midi驱动版本选择工具
在上述工具中,双击midi_4byte.bat就是选择编译4byte版本的midi驱动,双击midi_2byte.bat则选择编译2byte版本的midi驱动.
双击后4byte的工具成功后会有以下打印,然后用文本编辑器点开AD16N_mbox_flash.cbp检查2byte的目录是否被替换成4byte,2byte算法库是否有被替换成4byte的算法库
![]()
midi驱动版本选择4byte版本
10.1.1.2. step2:检查cbp文件
在成功运行批处理后,cbp文件的配置会有下面的这些修改,客户也可以如下图手动修改:
![]()
midi编译4byte版本驱动
![]()
midi头文件依赖选择4byte版本
![]()
链接4byte版本的midi算法库
10.1.1.3. step3:检查app_modules.h文件的宏定义
在成功运行批处理后,app_modules.h的宏定义“#define MIDI_VER_SELECT”会被修改,客户也可以如下图手动修改: (该处修改会影响midi的初始化流程、运算buf大小、音频数据流对midi算法适配的声道数)
![]()
SDK配置midi使用4byte版本驱动
10.1.1.4. step4:检查SDK音色库是否应用成功
在v1.4.0的SDK中,4字节midi和2字节,midi音色库是不一样的,音色库位于目录apps/app/post_build/uc03中,下表为音色库文件名信息:
type
name
2byte
midi_cfg
4byte
midi_cfg_ster1
在编译成功后,目录apps/app/post_build/uc03中会生成download.bat文件,此文件会下载如下如所示不同的midi音色库:
![]()
2字节与4字节midi音色库文件下载区别
注1:download.bat是由apps/app/post_build/uc03/mbox_flash/download_bat.c在工程编译时自动生成
注2:download_bat.c中的宏定义HAS_midi_4byte_USED控制最终生成download_bat.c下载何种音色库
编译下载并启动SDK之后,midi初始化会打开此文件。
![]()
midi解码初始化打开音色库文件
10.1.1.5. step5:按照自己的需求,选择输出的声道数
声道配置注意:midi算法输出数据的声道数需要和音频数据流的配置适配,否则会出现播放声音异常的问题
![]()
midi声道数配置
10.2. MIDI基本功能配置
- MIDI解码基本功能以及对应的命令如下:
配置midi使用模式(CMD_MIDI_CTRL_MODE)
配置OKON模式发声(CMD_MIDI_GOON / CMD_MIDI_OKON_MODE)
切换主旋律乐器(CMD_MIDI_SET_PROG)
配置主通道乐器或者所以通道的乐器(CMD_MIDI_SET_CHN_PROG)
mark回调播放功能(CMD_MIDI_SET_MARK)
小节回调(CMD_MIDI_SEEK_BACK_N)
调节midi外部音量功能(CMD_MIDI_SET_EX_VOL)
移半音功能(CMD_MIDI_SET_SEMITONE)
更改节奏和衰减功能(CMD_MIDI_CTRL_TEMPO)
配置限幅器(CMD_MIDI_LIMITER_TRIGGER)
- MIDI琴基本功能与对应的命令如下:
动态修改音色相关参数
更改节奏和衰减功能(CMD_MIDI_CTRL_TEMPO)
调节midi外部音量功能(CMD_MIDI_SET_EX_VOL)
移半音功能(CMD_MIDI_SET_SEMITONE)
配置限幅器(CMD_MIDI_LIMITER_TRIGGER)
琴键颤音功能
弯音轮功能
动态修改当前播放的乐器通道
详细更多说明,请看 SDK包里 doc文件夹里的 《 杰理AD1x-45678_MIDI应用说明文档.pdf 》
![]()
midi文档位置