KDocs 研发资料库
  • IOT(BLE-AD-MCU)资料链接入口汇总
  • BLE硬件设计指南
  • BLE 认证汇总
  • AD系列入门到进阶开发指导文档
  • AC75开发指导文档
  • AW31开发指导文档
  • AW33开发指导文档
  • AC63NN开发指导文档
  • HID相关资料入口
  • HID问题汇总

杰理AD1x-45678_MIDI应用说明文档

📎 原始文档:https://www.kdocs.cn/l/cixNxvDTDiYJ 杰理AD1xN-45678 MIDI

应用说明文档

珠海市杰理科技股份有限公司

Zhuhai Jieli Technologyco.,LTD

版权所有,未经许可,禁止外传

2023年8月16 日

修改日志

image

1.03 2023 / 8 / 16 添加midi解码音符结束回调所有音符说明
.
...
:eno e o
c r a
e;
us c
ao;
e *
, uvo
c n
;
.一
:

目录
第一章 MIDI应用.................................................................................................................................. 6

  1. 1 MIDI功能介绍...............................................................................................................................6
    .................................................................................................................................. 6
    .................................................................................................. 6
    ................................................................................................................................7
    ............................................................................... 7
    .....................................................................................................................7
    ......................................................................................................................................8
    ............................................................................................................. 9
    ...................................................................................................10
    ............................................................................ 11
    .................................................................................................... 12
    .............................................................................................................................. 12
    ...
    .................................................................. 12
    ........................................................................................................................................ 14
    .................................................................................................................................... 14
    ...................................................................................................................... 14
    ..................................................... 15
    ............................................................................................... 16
    ................................................................................................................................ 16
    .............................................................................................................. 16
    .........................................................................................................................17
    .................................................................................................................... 17
    ............................................................................................................ 17
    ...........................................................................................................................18
    ........................................................................................................................................ 18
    ........................................................................................................................................ 18
    ..
    .................................................................. 18
    ................................................................... 19
    ..
    ............................................................ 19
    ...............................................................20
    ..............................................................................................................21
    ... v。 _ ec。 e
    n v。 ................................................................................................21
    1.2.11.2 函数int music_midi
    ctrl
    c。nfig(music_play
    。bj *hdl, u32 cmd, v。id *parm) ......................... 21
    1.2.11.3 函数v。id midi_。k。n_m。de_ set(music_play_。bj *music_。bj, u8 m。de) ................................... 22
    1.2.11.4 函数v。id midi_。k。n_ g。。n(music_play_。bj *music_。bj) .......................................................... 22
    1.2.11.5 函数v。id midi_ init_ inf。(MIDI_ INIT_ STRUCT *init_ inf。) .......................................................22
    1.3 MIDI琴.........................................................................................................................................23
    1.3.1 MIDI琴初始化......................................................................................................................23
    1.3.1. 1 初始化过程.....................................................................................................................................23
    1.3.1.2 注意要点.........................................................................................................................................23
    1.3.2 MIDI琴音符回调功能..........................................................................................................24
    1.3.3 MIDI琴函数接口..................................................................................................................24
    1.3.3. 1 函数v。id midi_ ctrl_ dec。de_ init(v。id) .......................................................................................... 24
    1.3.3.2 函数int music_midi_ ctrl_ set_pr。g(music_play_。bj *hdl, u8 pr。g, u8 chn) ................................. 24
    1.3.3.3 函数int music_midi_ ctrl_pitch_bend(music_play_。bj *hdl, u16 pitch_val, u8 chn) ................... 24
    ... 函数 n us c__ c r _ c。n ( us c_ a 。 * , u c , v。 * ar ........................... 25
    ... n us c
    _ c r n。e。n us c_ a 。 * , u n e , u nve , u c n ....................25
    . . . n us c
    _ c r n。e。 us c_ a 。 * , u n e , u c n, u eca _ e ..... 26
    ... n us c
    _ c r _ve v ra e us c a _。 * , u n e , u ve _ s e , u ve ra e, u8
    c n ...............................................................................................................................................................26
    ... n _ c r _ a _ en _ ea us c
    a 。 * .............................................................. 26
    ... v。 _ c r _ ca ac _ n us c
    a _。 * , u * e。 _ ca ac (v。 *, u , u ),
    u * e。 _s。 ca ac v。 *, u ................................................................................................... 27
    ... v。 e __ c r _ a _ e us c
    a _。 * , u c n .............................................. 27
    ....................................................................................................................................28
    ..............................................................................................................................28
    ..............................................................................................................................28
    ................................................................................................................................ 30
    ........................................................................................................................30
    .....................................................................................................................30
    .....................................................................................................................30
    .. - ............................................................................................................... 31
    .. - ............................................................................................................... 31
    ....................................................................................................................................32
    ................................................................................................32
    ...............................................................................................................................33
    .......................................................................................................................................33
    ...................................................................................................................................34
    ........................................................................................................................35
    ...............................................................................................................................35
    .......................................................................................................................38
    ...............................................................................................................40
    ............................................................................................................... 40
    .......................................................................................................... 40
    ........................................................................................................... 41
    2.4.3 还原SF2 音色库内容........................................................................................................ 42
    2.5 MIDI WAV编辑........................................................................................................................ 43
    2.5. 1 WAV编辑界面简介............................................................................................................43
    2.5.2 波形编辑.............................................................................................................................44
    2.5.3 参数配置.............................................................................................................................45
    2.5.4 包络编辑.............................................................................................................................47
    2.5.5 波形保存.............................................................................................................................47
    2.5.6 WAV编辑信息查询............................................................................................................48
    2.5.7 还原WAV编辑内容...........................................................................................................48
    2.6 按键与乐器表.............................................................................................................................49
    2.6. 1 按键表.................................................................................................................................49
    2.6.2 乐器表.................................................................................................................................49
    image MIDI应用
    http://www.zh-jieli.com/

第一章 MIDI应用

1. 1 MIDI功能介绍

1. 1. 1 MIDI简介

MIDI全称是乐器数字接口(Musical Instrument Digital Interface),是20 世纪80 年代初为解决电声乐器之间的通信问题而提出的,编曲界最广泛的音乐标准格式。
MIDI用音符的数字控制信号来记录音乐。 一首完整的MIDI音乐只有几十KB大,而能包含数十条音乐轨道。其传输的不是声音信号,而是音符、控制参数等指令,它指示MIDI 设备要做什么,怎么做,如演奏哪个音符、 多大音量等。
SH54 / 55支持MIDI乐谱解码以及MIDI琴两种应用。其中:
MIDI乐谱解码有4种方式:

1 正常解码模式
2 OKON(ONE KEY ONE NOTE)模式
3 只推消息不出声模式
4 外部音源模式

MIDI琴有 1种方式:

1 琴键解码模式

1. 1.2 SDK 中midi模式的文件依赖

SDK 中midi乐谱解码模式需要midi乐谱, 以及midi音色库,其中midi乐谱通过打包工具制作成dir_midi文件,midi音色库通过打包工具制作成midi_cfg文件。
SDK 中midi琴模式需要midi音色库,midi音色库通过打包工具制作成midi_ctrl_prog 文件。
以上打包文件名可以自定义,在SDK中midi初始化代码中修改相应名称至可识别即可。 midi音色库文件可共用,详情想看第二章midi工具使用介绍。
imageimageimageimageimage

1.2 MIDI乐谱解码

MIDI乐谱解码的过程为,初始化后,打开MIDI乐谱文件获取到音符,再访问音色库找到对应的乐器音色进行解码,不断获取音符并重复该过程直到乐谱结束。本节讲介绍MIDI 解码的初始化、MIDI解码的功能配置以及注意点。

1.2. 1 MIDI乐谱解码初始化与CMD配置介绍

1.2.1.1 MIDI乐谱解码运行步骤
  1. 在系统初始化时会调用midi_decode_init(void)函数记录MIDI音色库文件的信息; midi乐谱解码MAX_DEC_PLAYER_CNT 同时发声的key数默认为8。
  2. 调用decoder_init(void)初始化解码器;
  3. 打开midi乐谱文件并调用函数decoder_io(void *pfile, u32 dec_ctl, dp_buff *dbuff, u8 loop)进行解码,该函数dec_ctl参数传入BIT_MIDI;
  4. midi解码初始化中会调用函数void midi_decode_api(void *p_file, void **ppdec, void *p_dp_buf),初始化MIDI解码信息, 比其他解码格式多了配置参数这一步!
  5. 配置参数会调用函数midi_init_info(MIDI_INIT_STRUCT *init_info),进行MIDI功能的初始化,包括主旋律选择、外部音量设置、所有回调函数的注册等,最后使能对应的控制使能位。
  6. 通过CMD_INIT_CONFIG命令将midi初始化的信息传入解码器中,到此midi功能初始化完成。
  7. 解码器启动,dac开始发声;
    image
1.2.1.2 初始化的配置

MIDI解码功能的初始化在函数void midi_init_info(MIDI_INIT_STRUCT *init_info)中进行。该函数中会配置MIDI_INIT_STRUCT结构体内包含的成员。配置功能结构体后,还需要配置功能对应的控制使能参数,sdk 中默认的MIDI功能配置如图所示:
image , _ _ _ _ 构
, :
image

1.2.1.3 MIDI乐谱解码的CMD配置
CMD命令配置说明

MIDI乐谱解码可以通过CMD实时配置功能。 首先配置CMD对应的功能结构体,再调用函数int music_midi_ctrl_config(music_play_obj *hdl, u32 cmd, void *parm),函数参数分别传入midi解码句柄、 CMD命令以及配置好的功能结构体指针即可实现,MIDI 的CMD
。


, 位
。 一 u , 一 一 , 会
。
image MIDI功能使能的方式有两种,一种是在MIDI初始化中配置MIDI_INIT_STRUCT结构体的switch_info成员,并调用CMD_INIT_CONFIG命令配置初始化后生效。
另一种时通过调用上一节函数music_midi_ctrl_config(),分别传入MIDI解码句柄、 CMD_MIDI_SET_SWITCH命令以及配置好的使能参数。注意,该命令传入的使能参数是所
有功能的使能位,单独操作某一使能位时不能影响到其他bit,否则会影响到其他功能。可以沿用MIDI初始化的全局变量init_info->switch_info来管理使能位。
image . . .

, ;
    ,  
  ,  
。  

, us c ec con
;
, 。
n n o- s c n o , ,
, 。
image

1.2.2 解码方式(CMD_MIDI_CTRL_MODE)

MIDI解码方式共有4种,分别是:

1 正常解码模式

该模式即正常解码MIDI乐谱文件。

2 OKON(ONE KEY ONE NOTE)模式

, 一 一 。
。
, 。
:
n n o- o e n o , ,s
。
imageimageimage 初始化配置之后调用midi_okon_mode_set(music_play_obj *music_obj, u8 mode)函数,可以修改MIDI 的解码方式;详情请看《3 .3.3.函数void midi_okon_mode_set(music_play_obj *music_obj, u8 mode)》说明。
image

. .

. . .

o on o e se , 。
。

. . .
, :
;
一 ;
;
:
image 其中,只有主旋律OKON副旋律不发声的工作模式,在解码过程中有可能长时间占用 CPU,所以需要在wdt_clear_trigger()函数中调用清狗函数,否则有可能会导致系统复位!
image OKON按键按下后可以回调的音符,该功能需要置上MELODY_ENABLE使能位。 回调的方式共有两种,分别是:
一
:
n n o- o on n o , ,
s 。

1.2.3.3 设置主旋律

OKON 模式需要确定主旋律来播放音符。 初始化时, 系统会判断 const 变量 MAINTRACK_USE_CHN 的值,值为0通过轨道(track)号选择主旋律,值为 1通过通道(channal)号选择主旋律。修改init_info->mainTrack_info.chn的值可以在初始化中确定主旋律,
有效范围是0~ 15。若让系统自动选择第一个音符所在轨道或通道为主旋律,则选择 17。Sdk:
, rac , a n rac _ n o.c n 道
一 ;
,
c anna
a n rac n o.c n
,一
, a n rac n o.c n
,
一 , 一
件;;例
、 , , rac ,
a n rac _ n o.c n , ; c anna ,

a n rac n o.c n , 一 。

. . .
, _ _ E
。 一 一 , , 个
一 一 ; , 一 , 其
。

1.2.3.5 中途切换OKON模式

中途切换MIDI模式可以调用函数midi_okon_mode_set(),并将mode设置为OKON模式(CMD_MIDI_CTRL_MODE_ 1)。 OKON模式下需要调用midi_okon_goon()函数启动下一个音符。sdk 中应用示如图所示:
image

. .

,
_ _
。

ro

,
re ace o e
,
;
ex vo
,
:
,
:
;
,
ex vo
;
image ,
。
;
该功能可以在 MIDI 运行中动态设置,调用函数 music_midi_ctrl_config(),并将 CMD_MIDI_SET_CHN_PROG命令和配置好的结构体参数传入;置上SET_PROG_ENABLE 使能位即可。详情请看《2 . 1.3MIDI乐谱解码的CMD配置》说明。

1.2.5 乐谱中添加标记(MARK)功能

MIDI解码能够识别到MIDI乐谱文件上标准的MARK标记。遇到MARK标记时支持回调函数,而且支持两个MARK之间进行循环播放。

1.2.5.1 MARK 回调函数

, ,
。 u _ ar _ r er vo * r v, u *va , u en
va , en 。 :

. . .

,

_ _ , , :

2)在循环播放中取消MARK_LOOP_ENABLE使能会跳出循环,同时丢失两个MARK 信息,如下图:
image 3)MARK_A和MARK_B 中间循环时取消使能后,在解码到MARK_B之前再次置上
,
image ,
run:
,
,
一
,
s

. .

. . .
u

, e

image e o r er vo
*
,

, :

r v, u e , u ve , r v , e
ve 。
. . .
置上MELODY_STOP_ENABLE使能位,音符解码结束后会回调:
初始化配置MIDI_INIT_STRUCT结构体中moledy_stop_info 回调时,需要配置回调模式main_chn_enable,该配置仅在midi解码模式下生效,midi琴模式无效,其中:
● main_chn_enable = 1, midi解码音符结束仅回调主旋律的音符;
● main_chn_enable = 0, midi解码音符结束会回调所有音符;
u32 midi_melody_stop_trigger(void *priv, u8 key, u8 chn)函数,其参数priv是私有参数, key是音符,chn是音符通道。

1.2.6.3 节拍(BEAT)的回调

置上BEAT_TRIG_ENABLE使能位,节拍来时会回调:
u32 midi_beat_trigger(void *priv, u8 val1, u8 val2)函数,其中参数priv是私有参数,val1

一 ,ve 。
. . .

_ _

u e v r

er vo
*
, :
r v , r v
。
. . .
,
, . . 。

. .

_ _
。
cc vo
,
,
:
,
量,1<<12得到4096,cc_vol值为4096则不修改音量;如增到到音源音量的2倍,则2<<12得到8192, 以此类推。外部音量不建议放大,会有破音的可能;
ex_vol_use_chn参数决定修改的是通道,或者轨道音量;

2 ex_vol_use_chn

音量通道选择,0表示cc_vol修改的是轨道音量, 1表示cc_vol修改的是通道音量;
image Sdk默认配置如下:
image 一
, ,
。 us c c r con ,_ _ _ _ ; _ _ _
。 . . 。

. .

。
_ _
n ,
_ _ _ :
e
;
, 。
。 us c c r con ,
_ ; _
。 . . 。

1.2.9 更改节奏和衰减(CMD_MIDI_CTRL_TEMPO)

MIDI解码能够强制改变节奏、每个通道的衰减程度以及mute 阈值水平,其结构体参数 MIDI_PROG_CTRL_STRUCT如下:

1 tempo_val

节奏速度,默认值为 1042;数值越大,节奏越慢;
image

2 decay_val [CTRL_CHANNEL_NUM]

衰减参数,低 11bit有效,每个通道单独配置;数值越小,余音衰减越快;

3 mute_threshold

mute 阈值,数值越高,主旋的静音音符回调会越多,需要置上MELODY_ENABLE使能位。
Sdk 中的默认配置如下:
imageimageimage 。 us c c r con ,
。 . .
。

. .

,
。 , ,
一 , 。 :
see ac n
回退的小节数,范围为 ~,即最大可回退 个小节;值为 时回退到当前小节起始位置;
该功能只能在MIDI运行时才能实现。初始化中置上SAVE_DIV_ENBALE使能位,调用函数music_midi_ctrl_config(),并将CMD_MIDI_SEEK_BACK_N命令和配置好的结构体参数传入即可。详情请看《2 . 1.3MIDI乐谱解码的CMD配置》说明。

1.2. 11 MIDI解码函数接口

1.2.11.1 函数void midi_decode_init(void)

该函数实现查找midi解码的音色库并记录音色库信息,在系统初始化中调用;

. . . s c_ _c r co s c a _o * , c , vo * ar

,
,c:
. : ;
. c : ,
,
,
,
, ,
,
,
,
,
_ _
,
,
,
. ar : , c
4. 返回值:成功 0;
失败 其他值;
;
_ _
_ _
_ _
;
_ _
;
;
_ _
_ _
;
_ _
_ _
;
_ ;
_ ;
_ ;
;
image ;
;
image

1.2.11.3 函数void midi_okon_mode_set(music_play_obj *music_obj, u8 mode)

该函数实现配置midi解码的模式,其中参数:

  1. music_obj:midi解码句柄;
  2. mode:midi解码模式,可用mode如下:
    1 CMD_MIDI_CTRL_MODE_0,正常解码模式;_ _ _ , one e one no e ; _ _ , ; _ _ _ , ;
    image
. . . vo

.
us c_o :

. . . vo

. n _ n o:
o o oo s c a o
o on 一;
o
,
,
*
,
s c o
:

  • _ o
    , :
    ;

1.3 MIDI琴

MIDI琴功能支持通过函数驱动midi解码。该应用依赖我司自定义的mid音色库,用户可通过我司mid工具进行转换,详情请看《JLmidi工具使用说明》。 本节将介绍midi琴初

始化过程和相关的接口函数。

. .
. . .
vo c r _ eco e n vo 件
; _ _ _ e 。
eco er_ n vo ;
eco er_ o vo * e, u ec_c , _ u * u , u oo , 数

ec_c _ _ ;

, 。
. . .
_ _ _c r _a .c 进
, , u ,s 下:

2) SDK 中MIDI琴中的通道号chn符合mid标准,一共有 16个通道(0~ 15)。

其中0~ 8、10~ 15号通道可以使用0~ 127号乐器,9号通道用于 128号以上的打击乐器。如选择00-01高亮大钢琴,那么通道号可以选择0~ 8或10~ 15,乐器号写0 8+1 = 1;
如选择 16-00standard,乐器号为 16
8+0= 128,大于 127,所以通道号只能选9,乐器号写: 16*8+0-128 = 0;

1.3.2 MIDI琴音符回调功能

midi琴运行时,弹奏音符后可回调响应函数;该功能与midi解码的主旋律音符回调一致; 区别在于midi 琴中的回调配置只能在运行中通过动态配置的方式使能,可参考《l.2. l.4MIDI在运行中动态配置功能示例》 以及SDK 中的说明,配置顺序如下:
l)CMD_MIDI_MELODY_TRIGGER配置音符开始的回调;
imageimageimageimage _ _ ;
, s c ena e
_ _ _ ;
. .

. . . vo c r eco e vo

, ;
*

. . . s c_ _c r se _ ro s c a _o , ro , c

, :
. : ;
. ro: , 一 。
;
. c n: , ;
. : ;
失败 其他值;

1.3.3.3 函数int music_midi_ctrl_pitch_bend(music_play_obj *hdl, u16 pitch_val, u8 chn)

该函数实现配置midi琴弯音轮参数,其中参数:
l. hdl:midi琴解码句柄;
2. pitch_val:弯音值,默认值是256,可根据该值调整;
3. chn:发声通道,该值范围在0~ l5;
4. 返回值:成功 0;
失败 其他值;

1.3.3.4 函数int music_midi_ctrl_config(music_play_obj *hdl, u32 cmd, void *parm)

, 一 , :
. : ;
. c : , ;_ _ _ ;_ _ _ _ ;_ _ ;_ _ _ ;_ _ _ ;
. ar : , ;. : ;
;
*

. . . s c_ c r _ o e_o s c a _o , e , ve , c

, :
. : ;
. n e: , 一 , ;
3. nvel:琴键按下力度,范围在0~ l27;部分乐器(如钢琴)有效,不同力度会使按下后的余音长短不同;
4. chn:发声通道,该值范围在0~ l5;
5. 返回值:成功 0;
失败 其他值;

1.3.3.6 函 数 int music_midi_ctrl_note_off(music_play_obj *hdl, u8 nkey, u8 chn, u16

decay_time)
该函数实现查找设置midi琴的乐器。对于声音不会衰弱的乐器(如笛子),调用Note_on 函数后需要调用该函数以结束音符,对于声音会衰弱的乐器(如钢琴)可不用。其中参数:

  1. hdl:midi琴解码句柄;
    . n e: , 一 ,
. c n: , ;

. eca _ e: , s, ;
. : ;
;
*

. . . s c_ _c r _ve v ra e s c a _o , e ,

ve _ra e, c
, :
. : ;
. n e: , 一 ,
. ve _s e: , ;
. ve _ra e: , ;. : ;
;
*

. . . c r a e ea s c a o

该函数实现停止midi琴解码,在所有音符停止后会被调用,其中参数:

  1. hdl:midi琴解码句柄;
  2. 返回值:无;
    ;
    ve _s e , u8
    ;
1.3.3.9 函数void midi_ctrl_callback_init(music_play_obj *hdl, u32(*melody_callback)(void

*, u8, u8), u32(*melody_stop_callback)(void *, u8))
该函数实现配置音符开始与结束的回调函数,其中参数:

  1. hdl:midi琴解码句柄;
  2. melody_callback:音符开始回调函数,回调函数的原型参照《1.2.6.1主旋律的音符;
    .
    e o s o ca
    ac: ,
    . . .
    的
    ;
    . : ;
*
. . . vo e _ c r _ a _ e s c a _o , c

e , :
. : ;
. c n: ;
. : ;

1.4 midi 限幅器

midi声音削顶采用限幅器的方法进行处理,在midi库中需要回调限幅器的运行函数。

1.4.1.使用说明

、 ,
、 , 。 意
c er n o. er u u u 一 。
image

1.4.2.参数说明

int bufsize = Limiter_QueryBufSize(); //获取限幅器运行buf大小
int attacktime; //限幅器启动时间,输入信号超过阈值启动限幅器所需要的时间
int releasetime; //限幅器释放时间,输入信号低于阈值恢复到原始信号所需要的时间 int threshold; //限幅器阈值,单位mdb,范围(-90000,0),超过阈值启动限幅器 int samplerate; //采样率,midi琴或者midi解码的采样率
int channel; //通道数,midi琴或者midi解码的通道
image MIDI工具
http://www.zh-jieli.com/

第二章 MIDI工具

2. 1 MIDI工具主界面

2.1.1 MIDI版本说明

带有“压缩编辑”选项和“导入SF2音色库”选项的为新版工具(JLmidi_new_ 0706),只支持AD14和AD15在SDK版本大于等于V1 .3.0 的SDK上运行;
旧版本工具(JLmidi_ 60)支持所有版本SDK。
新版和旧版工具均可在gitee上下载。

2.1.2 MIDI工具简介

MIDI文件是一种事件文件,不含音源,它记录的是一系列的事件。
MIDI文件解码,是从MIDI音源库中查找(或者根据一定的算法计算)得到事件对应的音频,因此对于不同的音源库而言,相同的MIDI文件解码出来的声音不同。
我司MIDI音源文件不会记录每个按键的声音,解码时再依次查找叠加,这种做法会导致音源库很大。我司的做法是:假设0号乐器的第n 到m号按键是可以通过N号按键计算的(m<=(N+12)),那么库中只需要记录N号按键。 比方说,0-20号key都用 10号key 的声音根据频率关系去计算,21-47号key都用48号key去计算…那么只需记下0号乐器的第 10、 48…号按键。
本工具的作用:可以查看,某个乐器某个按键的音源及其信息。也可以进行编辑修改成自己想要的声音。
点击 “pWM.exe”,打开midi工具。
image

2.1.3 主界面-乐器种类

图中的红色框为乐器大类,共32项;蓝色框为乐器细分种类,共8项。对应的乐器号计算方法:假设乐器种类为0-31,乐器细分为0-7。 乐器号为(乐器种类*8+乐器细分)。
在“打击乐器”中,有很多的乐器是没有的,用户可以自主添加乐器声。
鼠标点击 “乐器细分种类”后,可点击按键试听音色。

2.1.4 主界面-选中乐器

在midi文件转换的时候,工具会自动把文件中所使用的乐器加载到库中。 同时,用户也可以手动添加一些乐器(用于midi琴等),在midi转换的时候把这些库也加载到库中。选择乐器时会提示选择乐器的哪些key,未选择的key在SDK弹奏的结果不可预测。
SDK程序中midi琴有 16个通道,其中0~ 8和9~ 15号通道可以使用0-127号乐器, 9 号通道只能使用 128-255号乐器。
如选择00-01高亮大钢琴,那么通道号可以选择0~ 8或10~ 15,乐器号写0 8+1 = 1;
如选择 16-00 standard,乐器号为 16
8+0= 128,大于 127,所以通道号只能选9,乐器号写:16*8+0-128 = 0;

2.2 MIDI转换

midi转换过程包括选择输出目录、转换和导出库三个步骤。
原始的midi文件需要通过我司的MIDI转换工具“转换”后才能正常使用; “导出库”会将midi文件中用到的乐器制作成音色库。
若是只用到midi琴的应用,在主界面选择自己所需要的乐器后,直接点击 “导出库”选项即可生成相应的音色库。

2.2.1 选择需要转换的MIDI文件

在MIDI工具主界面中点击 “MID转换”弹出MIDI文件转换工具,点击 “添加文件”按钮,在弹出的文件选择框中选中要转换的一个或多个midi文件。
image

2.2.2 输出目录

点击 “输出目录”,选择转换后midi文件存放的文件夹。 默认路径为 “工具根目录\OutMID”文件夹中。
image ,
,
显
。
,
。

2.2.4 导出库

转换完成后,点击“导出库”,工具根据“输出目录”中的文件生成一个我司自定义的 mid音色库文件,保存在 “输出目录”的 “MID_RES”文件夹中,默认为路径为 “工具根目录\OutMID\MID_RES”文件夹中。
如果在主界面中有选中乐器, “导出库”会将midi文件需要的乐器和主界面选中的乐
一 。 ,
, 。
: . a , . ”

; . 。

。
image

2.3 MIDI音色库压缩

MIDI一个乐器的相邻的一连串音符(key),并非都是单独的音频文件,可能是由同一个音源文件经过音频算法偏移得到的。
MIDI音色库压缩就是压缩这类音源文件,因此压缩一个音源文件会影响到一连串音符 e , 一 一 。
, ,
。
2) 选中相应的乐器,勾选并点击“编辑压缩”选项,会打开如下编辑界面,选择需要的压缩方式并保存;如果全部音源都是不压缩的,建议不要勾选该选项,因为压缩会带来额外开销。
3) 编辑界面会显示所选乐器的key 的音源文件号,以及该音源文件会影响到的所有乐器及该乐器的key范围。改了压缩选项后,返回主界面弹奏对应的琴键,即可试听压缩后的效果。
image , ,
, 。
image

5) 将该乐器压缩后的音色库导出,导出后可以查看更多乐器的压缩信息。

image

2.3.2 压缩信息查询

导出库后,midi工具根目录下会更新midiinfo.html、progaudio.html、progaudio_all.html、 proginfo.html 四个文件,这些文件能显示更加详细的音色和压缩信息。

1) midiinfo.html

e, 息
。
ro a o.
, , 的
e 。 :
● 用户自行导入的SF2音色库从32768开始编号
● 用户使用”WAV编辑”生成的音色从65536开始编号
image ro a o a .
ro au o. , ,
e 。
ro o.
, e 。
image

2.3.3 还原压缩配置内容

配置完压缩后,若需要重置压缩选项,可以删除工具根目录下的“config.txt”文件,再

重启软件;

, 。

, ;

, ;
。 n ,
n ; , ,
。 。
, 。
image

, ro a o.

;
。
image

, ,
s _con . n , ;

2.5 MIDI WAV编辑

2.5.1 WAV编辑界面简介

在主界面中点击 “WAV编辑”进入MIDI音源编辑界面,编辑音源时记得要把乐器跟
e 。
: ,
: av
:
: , av

2.5.2 波形编辑

在波形图界面中点击右键弹出波形编辑框,点击“选择->边界标记”,再点击“选择->区间选择”选中一段区域,那么就可以对这一段音频进行复制\剪切之类的编辑了。
选择右击菜单的最后一项“当前WAV文件另存为…”,可以将编辑结果另存为自己的 wav文件。 否则编辑无效,就算是打开的默认音色的wav文件,也是生成的一个临时文件
。 , 一 。
, . av, 。 e,
。 , . . av av ,
, 。

2.5.3 参数配置

在“WAV编辑”界面中点击“参数”进入参数编辑界面。如下图,图中是一个音色文件的单元信息,也就是该乐器的key码对应wav波形。音量、 上升速度、 正常衰减、 松手衰减、衰减限制都是0-1,但是工具中, 以65535量化。所以,65535对应 1,其中参数:
● Key码:
:

  • , ,
    ,
    :
    。 ,
    :
    一
    ,
    :
    。一 , 。
    s
    :
    , o 一 。 ,
    :
    , 。 ,
    , , 一 , 。一
    声音发完了就是发完了。但是,如果一个循环的音源文件,就是一个无穷长的文件,从循环位置开始一直到波形文件最后的这段波形视为一个周期,这个周期一直在现有的波形文件后面做周期性扩展。所以编辑的时候请注意,波形前后扩展时的过度,例如波形为[ 1,2,3,4,5,6,7], 3为循环起始,那波形实则为[1,2,3,4,5,6,7,3,4,5,6,7,3,4...]。这时候,请保证,周期扩展连接处,即7,3之间。 [1,2,3,4,5,6,7,3,4,5,6,7,3,4...]这个才是最后的波形,如果,这个声音在连接处不平滑,有啪一声,那就会一直啪啪响的了。例如波形是
    [ 1,2,3,4,5,6,5,4,3,2],则为[1,2,3,4,5,6,5,4,3,2, 3,4,5,6,5,4,3,2, 3,4,…],要保证这个声音听起来好听。
    ● 包络曲线:
    选择是否需要编辑包络效果,与主界面“包络”勾选项一致。
    另外需要确认的是,该窗口最上面的wav文件路径。请选择自己之前保存的wav文件, 。 av。 av ,
    。 。 。 av
    , 。 av 。

2.5.4 包络编辑

勾选主界面左侧的“包络”选项,或者在参数配置中勾选“包络曲线”,即可在主界面编辑wav音频的包络效果。
:
, ;
, s; s , av
, 一 ;
:
;
;
, ;
: , !
image

2.5.5 波形保存

修改完之后,点击确定。回到上级窗口,这时候保存按键亮起。如果点击保存,所做的修改就会被写入一个.bin文件。否则无效。在退出的时候,会调用一个批处理去扫描.bin文
件,生成最后需要的库。
image , ro a o. 件;
。

2.5.7 还原WAV编辑内容

WAV编辑完成后,若需要重置WAV编辑内容,可以删除工具根目录GP文件夹下的“config_out.bin”文件,再重启软件。

2.6 按键与乐器表

2.6.1 按键表

。
||

7
9

a src a
_
ro ._
。
image