手机铃声格式规范,midi格式规范 |
| 作者:佚名 来源:天堂鸟 发布时间:2005-7-8 15:18:00 |
|
前一段時間在csdn上问了许多问题,无人解答,高手都不愿意教我,真是郁闷。现在终于有所收获,现将我个人收藏发布如下,希望各位高手能象我一样 :) 最近在做一个erricsson,nokia铃声的编辑程序,程序中主要麻烦的是发送和试听,试听我是先把文本格式转化成midi,再实现播放。现将其中我收集的铃声格式和midi格式发布如下: ericsson: 有2种,早期的都是emelody,据我所知,现在只有i68i支持imelody,不过我不知道其余型号 的手机可不可以通过升级软件来支持imelody. ------------------------------------------------------------------------------------------- eMelody Object . eMelody Format Description: This is a definition of the eMelody object. This object is used when a user-defined melody is exchanged Syntax: <emelody-object> ieBEGIN:EMELODYle<CR><LF> ieNAME:lE<name><CR><LF> ilCOMPOSER:l> <composer><CR><LF> ieVERSION:l> <version><CR><LF> ivMELODY:lC<melody><CR><LF> ivEND:EMELODYll File extension: emy Example filename mymelody.emy Parameters: <version>: "1.0" <name>: Alphanumeric string <composer>: Alphanumeric string <melody>: {<pause>|<tone>} <pause>: "p" <tone>: {[<octave_prefix>]<basic_tone>} <basic_short_tone>: "c"|"d"|"e"|"f"|"g"|"a"|"b" <ess_short_tone>: "(b)d"|"(b)e"|"(b)g"|"(b)a"|"(b)b" <iss_short_tone>: "#d"|"#e"|'"#g"|"#a"|"#b" <basic_long_tone>: "C"|"D"|"E"|"F"|"G"|"A"|"B" <ess_long_tone>: "(b)D"|"(b)E"|"(b)G"|"(b)A"|"(b)B" <iss_long_tone>: "#D"|"#E"|"#G"|"#A"|"#B" <basic_tone>: <basic_short_tone>|<ess_short_tone>|<iss_short_tone>|<basic_long_tone> |<ess_long_tone>|<iss_long_tone> <octave_high_prefix>: "+" Maximum number of tones: 40 Maximum numbers of characters in melody: 120 Example: BEGIN:EMELODY VERSION:1.0 NAME:Test melody 1 COMPOSER:John Smith MELODY: +f+a+fa(b)bdcC+GA+d+#c+dfg+daea+d+#c+e+f+e+fa(b)bdC+EA+ d+#c+dfgba+d+#C END:EMELODY ------------------------------------------------------------------------------------------- iMelody V1.2 Approved 1. Overview The iMelody format is a minimal set of tones that can be used to transfer melodies between devices. The definition can be extended by defining new formats for MIDI/WAV, DTMF, polyphonic etc. The FORMAT field is mandatory, as it is used to specify the format of the following data. In all cases, a letter designating a note, style, volume, etc will precede a number. Example applications include ring tones, alarm tones and power-on melodies. 2. BNF Definition <imelody -object>::= "BEGIN:IMELODY"<cr><line- feed> "VERSION:"<version><cr><line- feed> "FORMAT:"<format><cr><line- feed> ["NAME:"<characters-not - lf><cr><line- feed>] ["COMPOSER:"<characters-not - lf><cr><line-feed>] ["BEAT:"<beat><cr><line-feed>] ["STYLE:"<style><cr><line- feed>] ["VOLUME:"<volume><cr><line-feed>] "MELODY:"<melody><cr><line- feed> "END:IMELODY"<cr><line-feed> <version>::="1.2" <format>::"CLASS1.0" | “ CLASS2.0” <beat>::="25" | "26" | "27" | ... | "899" | "900" <style>::= "S0" | "S1" | "S2" <volume- modifier>::=”V+”|”V-“ (changes volume + or – from current volume) <volume>::="V0" | "V1" | ... | "V15" |<volume- modifier> <basic- note>::="c" | "d" | "e" | "f" | "g" | "a" | "b" <ess-note >::="&d" | "&e" | "&g" | "&a" | "&b" (flat notes) <iss-note >::="#c" | "#d" | "#f" | "#g" | "#a" (sharp notes) <basic- ess-iss- note >::=<basic-note> | <ess- note> | <iss- note> <octave-prefix>::=”*0” | "*1" | … | "*8" (A=55Hz) | (A=110Hz) | … | (A=14080 Hz) <duration>::="0" | "1" | "2" | "3" | "4" | "5" <duration- specifier>::="." | ":" | “;” <rest>::="r" 单轨,很显然就只有一个轨道。同步多轨意味着所有轨道都是垂直同步的,或者其他的措辞为他们都在同一时间开始,并且可以表现一首歌的不同部分。异步多轨没有必要同时开始,而且可以完全的不同步。 nn nn 是MIDI文件中的轨道数。 dd dd 是每个4分音符delta-time节奏数(这之后将做详细介绍)。 3.轨道块: 头块之后剩下的文件部分是轨道块。每一个轨道包含一个头,并且可以包含你所希望的许多MIDI命令。轨道头与文件头及其相似: 4D 54 72 6B xx xx xx xx 与头一致,前4个字节是ASCII吗,这个是MTrk,紧跟MTrk的4个字节给出了以字节为单位的轨道的长度(不包括轨道头)。 在头之下是MIDI事件,这些事件同现行的可以被带有累加的MIDI合成器端口接受和发送的数据是相同的。一个MIDI 事件先于一个delta-time。一个delta-time是一个MIDI事件被执行后的节奏数,每个四分之一音符的节奏数先前已经定义在了文件的头块中。这个delta-time是一个可变长度的编码值。这种格式虽然混乱,可是允许根据需要利用多位表示较大的数值,这不会因为需求小的数值情况下以添零的方式浪费掉一些字节!数值被转换为7位的字节,并且除了最后一个字节以最高有效位是0外,各个字节最有意义的一位是1,。这就允许一个数值被一次一个字节地读取,你如果发现最高有效位是0,则这就是这个数值的最后一位(意义比较小)。依照MIDI说明,全部delta-time的长度最多超过4字节。 delta-time 之后就是MIDI事件,每个MIDI事件(除了正在运行的事件外)带有一个最高有效位总是1的命令字节(值将>128)。大部分命令的列表在附录A中。每个命令都有不同的参数和长度,但是接下来的数据将是最高有效位为零(值将<128)。这里有个例外就是meta-event,最高有效位可以是1。然而,meta-events需要一个长的参数以区分。 微小失误就可以导致混乱的是运行模式,这是现行MIDI命令所忽略的地方,并且最终发行的MIDI命令是假定的。这就意味这如果包含了命令,那么MIDI事件就是由delta-time与参数组成而转换的。 <led>::="ledoff" | "ledon" <vibe>::="vibeon" | "vibeoff" <backlight>::=”backon” | “backoff” <note>::=[<octave-prefix>]<basic-ess- iss-note><duration>[<duration-specifier ] <silence>::= |
| [] [返回上一页] [打 印] |
|
文章评论 |
