<led>::="ledoff" | "ledon"
<vibe>::="vibeon" | "vibeoff"
<backlight>::=”backon” | “backoff”
<note>::=[<octave-prefix>]<basic-ess- iss-note><duration>[<duration-specifier ]
<silence>::=<rest ><duration>[<duration-specifier]
<repeat>::= “(“{<silence>|<note>|<led>|<vib>|volume>|<backlight>}+ “@”<repeat - count>[<volume- modifier>]”)”
<repeat -count>::="0" | "1" | "2" | … (0 is repeat forever)
<melody>::={<silence>|<note>|<led>|<vib>|<repeat>|<volume>|<backlight>}+
<characters- not -lf >::= 'Any character in the ASCII character-set except <line-feed>.'
Note : no <repeat> block within <repeat> block!(The repeat blocks cannot be nested in this simple CLASS1.0 definition)
Default octave-prefix is *4. I,e, A=880Hz
The volume can optionally be adjusted up, or down, within a repeat block, by including a V+/V- character anywhere
within the repeat block. i.e (#d1r3d2e2@3V+).
The volume changes within a repeat loop continue after the loop is exited.
The default character set is UTF-8.
The file extension is imy. For example “ringring.imy”
The field name (text before the colon) is not case sensitive.
The field value (text after the colon) is case sensitive.
iMelody V1.2 Approved
A maximum length for the melody has not been defined. For interOperability, the length should be kept as short as
possible. Receiving devices must be able to truncate iMelody messages longer than the device's allocated receiving
buffer.
The beat is a decimal representation of the tempo in beats per minute. i.e. a bpm of 63 gives a length of a ¼ note as 0.95
sec. The beat rate has been restricted to values between 25bpm and 900bpm, to place realistic requirements on the
receiving device. A default value of 120 bpm should be used if a beat is not specified.
Lines of text in the iMelody, SHOULD NOT be longer than 75 octets, excluding the line break. Long content lines
SHOULD be split into a multiple line representations, using a line folding technique. That is, a long line can be split
between any two characters, by inserting a CRLF immediately followed by a single linear white space character (i.e.,
SPACE, US-ASCII decimal 32 or HTAB, US-ASCII decimal 9).
Duration
Value Duration
0 Full-note
1 1/2-note
2 1/4-note
3 1/8-note
4 1/16- note
5 1/32- note
Duration Specifier
Symbol Duration
No special duration
. Dotted note
: Double dotted note
; 2/3 length
Style
Value Style Ratio of note to rest period
S0 Natural Style (rest between notes), default 20:1
S1 Continuous Style (no rest between notes) No rest
S2 Staccato Style (shorter notes and longer rest period) 1:1
Volume
iMelody V1.2 Approved
Value Volume
V0 tone- off
V1 level-1
V2 level-2
V3 level-3
V4 level-4
V5 level-5
V6 level-6
V7 level-7, default
V8 level-8
V9 level-9
V10 level-10
V11 level-11
V12 level-12
V13 level-13
V14 level-14
V15 level-15
3. Example of a “CLASS1.0” iMelody object
BEGIN:IMELODY
VERSION:1.2
FORMAT:CLASS1.0
Required Header Info
NAME:Melody1
COMPOSER:Moz art
Optional Header info
BEAT:120
STYLE:S1
VOLUME:V7
Optional iMelody modifiers
MELODY:V7&b2#c3V- c2*4g3d3V+#d1r3d2e2:d1V+f2f3. Required iMelody
END:IMELODY Required footer info
Note that in the V1.0 of the iMelody specification, the example omitted the letter V in the VOLUME modifier and S in
the STYLE. Implementations should be capable of receiving the volume with, and without the letter V.
Implementations should transmit with the letter V. Similarly implementations should be capable of receiving the style
with, and without the letter S, but always send with an S.
nokia用的是rttttl格式
Spezifikation des RTTTL-Formats
An RTX file is a text file, containing the ringtone name, a control section and a section containing a comma
separated sequence of ring tone commands. The RTX ringtone description format is designed to be
backward compatible with RTTTL, but offers extensions in line with the Nokia Smart Messaging standard.
White space must be ignored by any reader application.
Example:
Alert:B715:32C,32P,32D,32P,32E,32P,32F,32P,32G,32P
This file describes a ringtone whose name is 'Alert'. The control section sets the beats per second at 715,
and the note definitions describe a series of 5 notes and 5 pauses of length 1/32 of a full note.
<RTX file> := <name> ":" [<control section>] ":" <tone-commands>
<name> := <char>+ ; maximum name length 10 characters
<control-section> := <control-pair> ["," <control-section>]
<control-pair> := <control-name> ["="] <control-value>
<control-name> := "o" | "d" | "b" | "s"
; Valid in control section: o=default scale, d=default duration, b=default beats per minute, s=style
; Valid in tone section: o, b, s
<control-value> := <char>+ ; dependent on control-name
; if not specified, defaults are 4=duration, 6=scale, 63=beats-per-minute
; styles are S=Staccato, N=Natural, C=Continuous
; any unknown control-names must be ignored
<tone-commands> := <tone-command> ["," <tone-commands>]
<tone-command> :=<note> | <control-pair>
<note> := [<duration>] <note> [<scale>] [<special-duration>] <delimiter>
<duration> := "1" | "2" | "4" | "8" | "16" | "32" ; duration is divider of full note duration,
eg. 4 represents a quarter note
<note> := "P" | "C" | "C#" | "D" | "D#" | "E" | "F" | "F#" | "G" | "G#" | "A" | "A#" | "H"
<scale> :="4" | "5" | "6" | "7"
; Note that octave 4: A=440Hz, 5: A=880Hz, 6: A=1.76 kHz, 7: A=3.52 kHz
; The lowest note on the Nokia 61xx is A4, the highest is B7
<special-duration> := "." ; Dotted note
; End of specification
midi format:
標準MIDI文件格式
標準的MIDI文件格式就像奇異的獸??傮w看來,它是那樣的讓你無法抗拒。當然,你怎樣看它無關緊要,可是用足夠多的描述符描述一段音樂并使它能夠重現,可不是很少的工作就可以完成的。然而,它雖然復雜,但是真正理解之后,MIDI文件格式的結構還是很直觀明了的。
在這里我必須放棄一些東西,因為畢竟我不是MIDI也不是MIDI文件專家!最近我為我的PC準備了一塊Gravis 超音頻音效卡,利用它聽完幾段MIDI文件(.mid)之后,想:“呵,我要是能夠制作自己的MIDI(.mid)文件該多好??!”嗯,經過煩人的幾個小時之后,我發現,那些并不是沒有價值的工作。但是,我是不會讓一個冗長的文件格式就能夠阻止的(此外,我告訴過我的妻子,計算機不是很難用的,而且我十分憎恨當一個偽君子)。那么,在這篇文章中如果發現什么錯誤,請讓我知道,我會修改它的。同時,這份文檔的范圍并沒有提供所有類型的MIDI命令和任何可能的文件配置!這篇基本指南將使讀者能夠(以中等的時間投資)制作出MIDI類型的文件。
1.概述:
一個MIDI文件基本上由兩個部分組成,頭塊和軌道塊。第二節講述頭塊,第三節講述軌道塊。一個MIDI文件有一個頭塊用來描述文件的格式、許多的軌道塊等內容。一個軌道可以想象為像一個大型多音軌錄音機那樣,你可以為某種聲音、某種樂譜、某種樂器或者你需要的任何東西分配一個軌道。
2.頭塊:
頭塊出現在文件的開頭,有三種方式來描述文件。頭塊看起來一直是這樣的:
4D 54 68 64 00 00 00 06 ff ff nn nn dd dd
前4個字節等同于ASCII碼MThd,接著MThd之后的4個字節是頭的大小。它將一直是00 00 00 00 06,因為現行的頭信息將一直是6字節。
ff ff是文件的格式,有3種格式:
0-單軌
1-多規,同步
2-多規,異步
單軌,很顯然就只有一個軌道。同步多軌意味著所有軌道都是垂直同步的,或者其他的措辭為他們都在同一時間開始,并且可以表現一首歌的不同部分。異步多軌沒有必要同時開始,而且可以完全的不同步。
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與參數組成而轉換的。
4.綜述:
如果這份說明僅僅是使問題更加混亂,那么以下提供的例子可能有助于澄清問題!同時,兩個公用程序和一個圖解文件包含在這個文檔里面:
DEC.EXE——這個公共程序是將二進制文件(比如.MID)轉換成以十進制表示的對應每個字節的有標記界限的文本文件。
REC.EXE——這個公共程序是將有標記界限的十進制數文本文件對應的每一字節轉換成二進制文件。
MIDINOTE.PS——這是一個對應鍵盤和五線譜的音符數字附錄頁。
附錄A
1.MIDI事件命令
每個命令字節有兩部分,左nybble(4位)包含現行的命令,右nybble包含將被執行的命令的通道號,這里有16各MIDI通道8個MIDI命令(命令nybble必須最高有效位是1的)。在下表中,X表示MIDI通道號。所有的音符即數據字節都<128(最高有效位是0)。
十六進制 二進制 數據 描述
8x 1000xxxx nn vv 音符關閉 (釋放鍵盤)
nn=音符號
vv=速度
9x 1001xxxx nn vv 音符打開 (按下鍵盤)
nn=音符號
vv=速度
Ax 1010xxxx nn vv 觸摸鍵盤以后
nn=音符號
vv=速度
Bx 1011xxxx cc vv 調換控制
cc=控制號
vv=新值
Cx 1100xxxx pp 改變程序(片斷)
pp=新的程序號
Dx 1101xxxx cc 在通道后接觸
cc=管道號
Ex 1110xxxx bb tt 改變互相咬和的齒輪 (2000H 表明缺省或沒有改變)(什么意思搞不懂:)
bb=值的低7位(least sig)
tt=值的高7位 (most sig)
下表是沒有通道的 meta-events列表 ,他們的格式是:
FF xx nn dd
所有的 meta-events 是以 FF 開頭的命令 (xx),長度,或者含在數據的字節數(nn),現行的數據(dd)
十六進制 二進制 數據 描述
00 00000000 nn ssss 設定軌道的序號
nn=02 (兩字節長度的序號)
ssss=序號
01 00000001 nn tt .. 你需要的所有文本事件
nn=以字節為單位的文本長度
tt=文本字符
02 00000010 nn tt .. 同文本的事件, 但是用于版權信息
nn tt=同文本事件
03 00000011 nn tt .. 序列或者軌道名
nn tt=同文本事件
04 00000100 nn tt .. 軌道樂器名
nn tt=同文本事件
05 00000101 nn tt .. 歌詞
nn tt=同文本事件
06 00000110 nn tt .. 標簽
nn tt=同文本事件
07 00000111 nn tt .. 浮點音符
nn tt=同文本事件
2F 00101111 00 這個事件一定在每個軌道的結尾出現
51 01010001 03 tttttt 設定拍子
tttttt=微秒/四分音符
58 01011000 04 nn dd cc bb 拍子記號
nn=拍子記號分子
dd=拍子記號分母2=四分之一
3=8分拍, 等等.
cc=節拍器的節奏
bb=對四分之一音符標注的第32號數字
59 01011001 02 sf mi 音調符號
sf=升調/降調(-7=7 降調, 0=基準C調,7=7 升調)
mi=大調/小調(0=大調, 1=小調)
7F 01111111 xx dd .. 音序器的詳細信息
xx=被發送的字節數
dd=數據
下表列出了控制整個系統的系統消息。這里沒有MIDI通道數 (這些一般僅應用于MIDI鍵盤等.)
十六進制 二進制 數據 描述
F8 11111000 同步所必須的計時器
FA 11111010 開始當前的隊列
FB 11111011 從停止的地方繼續一個隊列
FC 11111100 停止一個隊列
下表列出的是與音符相對應的命令標記。
八度音階¦¦ 音符號
# ¦¦
¦¦ C ¦ C# ¦ D ¦ D# ¦ E ¦ F ¦ F# ¦ G ¦ G# ¦ A ¦ A# ¦ B
-----------------------------------------------------------------------------
0 ¦¦ 0 ¦ 1 ¦ 2 ¦ 3 ¦ 4 ¦ 5 ¦ 6 ¦ 7 ¦ 8 ¦ 9 ¦ 10 ¦ 11
1 ¦¦ 12 ¦ 13 ¦ 14 ¦ 15 ¦ 16 ¦ 17 ¦ 18 ¦ 19 ¦ 20 ¦ 21 ¦ 22 ¦ 23
2 ¦¦ 24 ¦ 25 ¦ 26 ¦ 27 ¦ 28 ¦ 29 ¦ 30 ¦ 31 ¦ 32 ¦ 33 ¦ 34 ¦ 35
3 ¦¦ 36 ¦ 37 ¦ 38 ¦ 39 ¦ 40 ¦ 41 ¦ 42 ¦ 43 ¦ 44 ¦ 45 ¦ 46 ¦ 47
4 ¦¦ 48 ¦ 49 ¦ 50 ¦ 51 ¦ 52 ¦ 53 ¦ 54 ¦ 55 ¦ 56 ¦ 57 ¦ 58 ¦ 59
5 ¦¦ 60 ¦ 61 ¦ 62 ¦ 63 ¦ 64 ¦ 65 ¦ 66 ¦ 67 ¦ 68 ¦ 69 ¦ 70 ¦ 71
6 ¦¦ 72 ¦ 73 ¦ 74 ¦ 75 ¦ 76 ¦ 77 ¦ 78 ¦ 79 ¦ 80 ¦ 81 ¦ 82 ¦ 83
7 ¦¦ 84 ¦ 85 ¦ 86 ¦ 87 ¦ 88 ¦ 89 ¦ 90 ¦ 91 ¦ 92 ¦ 93 ¦ 94 ¦ 95
8 ¦¦ 96 ¦ 97 ¦ 98 ¦ 99 ¦ 100 ¦ 101 ¦ 102 ¦ 103 ¦ 104 ¦ 105 ¦ 106 ¦ 107
9 ¦¦ 108 ¦ 109 ¦ 110 ¦ 111 ¦ 112 ¦ 113 ¦ 114 ¦ 115 ¦ 116 ¦ 117 ¦ 118 ¦ 119
10 ¦¦ 120 ¦ 121 ¦ 122 ¦ 123 ¦ 124 ¦ 125 ¦ 126 ¦ 127 ¦
參考資料:
"MIDI Systems and Control" Francis Rumsey 1990 Focal Press
"MIDI and Sound Book for the Atari ST" Bernd Enders and Wolfgang Klem 1989 M&T Publishing, Inc.
MIDI file specs and general MIDI specs were a"o obtained by sending e-mail to LISTSERV@AUVM.AMERICAN.EDU with the phrase GET MIDISPEC PACKAGE in the message.
**** table 1 - general midi instrument patch map ****
(groups sounds into sixteen families, w/8 instruments in each family)
prog# instrument prog# instrument
(1-8 piano) (9-16 chrom percussion)
1 acoustic grand 9 celesta
2 bright acoustic 10 glockenspiel
3 electric grand 11 music box
4 honky-tonk 12 vibraphone
5 electric piano 1 13 marimba
6 electric piano 2 14 xylophone
7 harpsichord 15 tubular bel"
8 clav 16 dulcimer
(17-24 organ) (25-32 guitar)
17 drawbar organ 25 acoustic guitar(nylon)
18 percussive organ 26 acoustic guitar(steel)
19 rock organ 27 electric guitar(jazz)
20 church organ 28 electric guitar(clean)
21 reed organ 29 electric guitar(muted)
22 accoridan 30 overdriven guitar
23 harmonica 31 distortion guitar
24 tango accordian 32 guitar harmonics
(33-40 bass) (41-48 strings)
33 acoustic bass 41 violin
34 electric bass(finger) 42 viola
35 electric bass(pick) 43 cello
36 fretless bass 44 contrabass
37 slap bass 1 45 tremolo strings
38 slap bass 2 46 pizzicato strings
39 synth bass 1 47 orchestral strings
40 synth bass 2 48 timpani
(49-56 ensemble) (57-64 brass)
49 string ensemble 1 57 trumpet
50 string ensemble 2 58 trombone
51 synthstrings 1 59 tuba
52 synthstrings 2 60 muted trumpet
53 choir aahs 61 french horn
54 voice oohs 62 brass section
55 synth voice 63 synthbrass 1
56 orchestra hit 64 synthbrass 2
(65-72 reed) (73-80 pipe)
65 soprano sax 73 piccolo
66 alto sax 74 flute
67 tenor sax 75 recorder
68 baritone sax 76 pan flute
69 oboe 77 blown bottle
70 english horn 78 skakuhachi
71 bassoon 79 whistle
72 clarinet 80 ocarina
(81-88 synth lead) (89-96 synth pad)
81 lead 1 (square) 89 pad 1 (new age)
82 lead 2 (sawtooth) 90 pad 2 (warm)
83 lead 3 (calliope) 91 pad 3 (polysynth)
84 lead 4 (chiff) 92 pad 4 (choir)
85 lead 5 (charang) 93 pad 5 (bowed)
86 lead 6 (voice) 94 pad 6 (metallic)
87 lead 7 (fifths) 95 pad 7 (halo)
88 lead 8 (bass+lead) 96 pad 8 (sweep)
(97-104 synth effects) (105-112 ethnic)
97 fx 1 (rain) 105 sitar
98 fx 2 (soundtrack) 106 banjo
99 fx 3 (crystal) 107 shamisen
100 fx 4 (atmosphere) 108 koto
101 fx 5 (brightness) 109 kalimba
102 fx 6 (goblins) 110 bagpipe
103 fx 7 (echoes) 111 fiddle
104 fx 8 (sci-fi) 112 shanai
(113-120 percussive) (121-128 sound effects)
113 tinkle bell 121 guitar fret noise
114 agogo 122 breath noise
115 steel drums 123 seashore
116 woodblock 124 bird tweet
117 taiko drum 125 telephone ring
118 melodic tom 126 helicopter
119 synth drum 127 applause
120 reverse cymbal 128 gunshot
**** table 2 - general midi percussion key map ****
(assigns drum sounds to note numbers. midi channel 10 is for percussion)
midi drum sound midi drum sound
key key
35 acoustic bass drum 59 ride cymbal 2
36 bass drum 1 60 hi bongo
37 side stick 61 low bongo
38 acoustic snare 62 mute hi conga
39 hand clap 63 open hi conga
40 electric snare 64 low conga
41 low floor tom 65 high timbale
42 closed hi-hat 66 low timbale
43 high floor tom 67 high agogo
44 pedal hi-hat 68 low agogo
45 low tom 69 cabasa
46 open hi-hat 70 maracas
47 low-mid tom 71 short whistle
48 hi-mid tom 72 long whistle
49 crash cymbal 1 73 short guiro
50 high tom 74 long guiro
51 ride cymbal 1 75 claves
52 chinese cymbal 76 hi wood block
53 ride bell 77 low wood block
54 tambourine 78 mute cuica
55 splash cymbal 79 open cuica
56 cowbell 80 mute triangle
57 crash cymbal 2 81 open triangle
58 vibraslap
**** table 3 - general midi minimum sound module specs ****
voices:
a minimum of either 24 fully dynamically allocated voices
available simultaneously for both melodic and percussive sounds or 16
dynamically allocated voices for melody plus eight for percussion.
channe":
general midi mode supports all sixteen midi channe". each channel can
play a variable number of voices (polyphony). each channel can play a
different instrument (timbre). keybased percussion is always on
channel 10.
instruments:
a minimum of sixteen different timbres playing various instrument
sounds. a minimum of 128 preset for intruments (midi program numbers).
note on/note off:
octabe registration: middle c(c3) = midi key 60. all voices including
percussion respond to velocity.
controllers:
controller # description
1 modulation
7 main volume
10 pan
11 expression
64 sustain
121 reset all controllers
123 all notes off
registered description
parameter #
0 pitch bend sensitivity
1 fine tuning
2 coarse tuning
additional channel messages:
channel pressure (aftertouch)
pitch bend
power-up defaults:
pitch bend amount = 0
pitch bend sensitivity = +-2 semitones
volume = 90
all other controllers = reset
(after electronic musician, 8/91 issue)
------------------------------ DEC.CPP ------------------------------------
/* file dec.cpp
by Dustin Caldwell (dustin@gse.utah.edu)
*/
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
void helpdoc();
main()
{
FILE *fp;
unsigned char ch, c;
if((fp=fopen(_argv[1], "rb"))==NULL) /* open file to read */
{
printf("cannot open file %s/n",_argv[1]);
helpdoc();
exit(-1);
}
c=0;
ch=fgetc(fp);
while(!feof(fp)) /* loop for whole file */
{
printf("%u/t", ch); /* print every byte's decimal equiv. */
c++;
if(c>8) /* print 8 numbers to a line */
{
c=0;
printf("/n");
}
ch=fgetc(fp);
}
fclose(fp); /* close up */
}
void helpdoc() /* print help message */
{
printf("/n Binary File Decoder/n/n");
printf("/n Syntax: dec binary_file_name/n/n");
printf("by Dustin Caldwell (dustin@gse.utah.edu)/n/n");
printf("This is a filter program that reads a binary file/n");
printf("and prints the decimal equivalent of each byte/n");
printf("tab-separated. This is mostly useful when piped /n");
printf("into another file to be edited manually. eg:/n/n");
printf("c:/>dec sonata3.mid > son3.txt/n/n");
printf("This will create a file called son3.txt which can/n");
printf("be edited with any ascii editor. /n/n");
printf("(rec.exe may a"o be useful, as it reencodes the /n");
printf("ascii text file)./n/n");
printf("Have Fun!!/n");
}
---------------------------- REC.CPP ----------------------------------
/* File rec.cpp
by Dustin Caldwell (dustin@gse.utah.edu)
*/
#include <dos.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
void helpdoc();
main()
{
FILE *rfp, *wfp;
unsigned char ch, c;
char s[20];
if((rfp=fopen(_argv[1], "r"))==NULL) /* open the read file */
{
printf("cannot open file %s /n",_argv[1]);
helpdoc();
exit(-1);
}
if((wfp=fopen(_argv[2], "wb"))==NULL) /* open the write file */
{
printf("cannot open file %s /n",_argv[1]);
helpdoc();
exit(-1);
}
c=0;
ch=fgetc(rfp);
while(!feof(rfp)) /* loop for whole file */
{
if(isalnum(ch)) /* only 'see' valid ascii chars */
{
c=0;
while(isdigit(ch)) /* only use decimal digits (0-9) */
{
s[c]=ch; /* build a string containing the number */
c++;
ch=fgetc(rfp);
}
s[c]=NULL; /* must have NULL terminator */
fputc(atoi(s), wfp);/* write the binary equivalent to file */
}
ch=fgetc(rfp); /* loop until next number starts */
}
fclose(rfp); /* close up */
fclose(wfp);
}
void helpdoc() /* print help message */
{
printf("/n Text File Encoder/n/n");
printf("/n Syntax: rec text_file_name binary_file_name/n/n");
printf("by Dustin Caldwell (dustin@gse.utah.edu)/n/n");
printf("This is a program that reads an ascii tab-/n");
printf("delimited file and builds a binary file where/n");
printf("each byte of the binary file is one of the decimal/n");
printf("digits in the text file./n");
printf(" eg:/n/n");
printf("c:/>rec son3.txt son3.mid/n/n");
printf("(This will create a file called son3.mid which is/n");
printf("a valid binary file)/n/n");
printf("(dec.exe may a"o be useful, as it decodes binary files)/n/n");
printf("Have Fun!!/n");
}
新聞熱點
疑難解答