=============================================================================== –‚orofessinal ‚lusic ‚criver [‚o.‚l.‚c.] version4.8 ‚l‚l‚k ‚bommand ‚lanual– Apr.4th 1997 by M.Kajihara (KAJA) English Translation by Blaze =============================================================================== ******************************************************************************* ˜1 [[[[ Basic Matter ]]]] ******************************************************************************* =============================================================================== Explains the underlying matters of MML notation. =============================================================================== ˜1-1 Part Notation ------------------------------------------------------------------------------- ˜1-1-1 Part Notation Method ------------------------------------------------------------------------------- At the head of the line, specifying an attached alphabet letter for each channel will cause that channel to be played by MML. MML will compile each in order from the beginning, and produce a composition. It is necessary to separate the MML code from the channel notation with SPACE or TAB. [Example] A @1v13cdefg [Result] This MML will cause channel A to produce sound. [Wrong Example] A @1v13cdefg [Cause] The channel notation is not at the beginning of the line. [Result] Because MML does not recognize this, it will not treat it as a command. [Wrong Example 2] A@1v13cdefg [Cause] There is no SPACE or TAB between the channel notation and the MML. [Result]This is recognized as multiple-channel notation.(->˜1-1-2) ------------------------------------------------------------------------------- ˜1-1-2 Multiple-channel Notation ------------------------------------------------------------------------------- It is possible to conjugate several channels in one part. If you do this, please do not leave space in between each channel notation. If you specify a non-existent channel, it will skip it without an error. Using the contrary, inputting the numerical value immediately after the channel notation will make the MML easier to read. This is especially useful in the rhythm channels.(->˜1-2) [Example] AC @1v13cdefg [Result] This MML will produce sound from both channel A and C. [Example 2] AC1 @1v13cdefg [Result] This MML will produce sound from both channel A and C. "1" is ignored. [Wrong Example] A C @1v13cdefg [Cause] The channel notation is separated. [Result]"C" is recognized as an MML command. [See also] | Commands (->˜16-3) ------------------------------------------------------------------------------- ˜1-1-3 Correspondence Between Channel Notation and Sound Sources ------------------------------------------------------------------------------- Depending on the driver(Sound Source), the assignment of channel notation to the sound source will differ. According to the list below, any part may be specified by the user. (->˜2-18,˜2-25) 1. PMD.COM / PMDVA1.COM (98,88VA1 normal driver) A FM Channel 1 B FM Channel 2 C FM Channel 3 D/other FM Channel 3 E/other FM Channel 3 F/other FM Channel 3 G SSG Channel 1 H SSG Channel 2 I SSG Channel 3 K Rhythm pattern specification R Rhythm pattern definition [see also] #FM3Extend command (->˜2-18) 2. PMDB2.COM / PMD86.COM / PMDVA.COM (SpeakBoard,‰Ή”ό,86,VA2 driver) A FM Channel 1 B FM Channel 2 C FM Channel 3 D FM Channel 4 E FM Channel 5 F FM Channel 6 G SSG Channel 1 H SSG Channel 2 I SSG Channel 3 J PCM Channel K Rhythm pattern specification R Rhythm pattern definition other1 FM Channel 3 other2 FM Channel 3 other3 FM Channel 3 [see also] #FM3Extend command (->˜2-18) 3. PMD.X (X68000) A FM Channel 1 B FM Channel 2 C FM Channel 3 D FM Channel 4 E FM Channel 5 F FM Channel 6 G FM Channel 7 H FM Channel 8 J PCM Channel [see also] MC.EXE /m option (-> MC.DOC) 4. PMD.EXP (FM-TOWNS) A FM Channel 1 B FM Channel 2 C FM Channel 3 D FM Channel 4 E FM Channel 5 F FM Channel 6 J PCM Channel 1 K PCM Channel 2 [see also] MC.EXE /t option (-> MC.DOC) 5. PMDIBM.COM (IBMPC) A FM Channel 1 B FM Channel 2 C FM Channel 3 D FM Channel 4 E FM Channel 5 F FM Channel 6 G FM Channel 7 H FM Channel 8 I FM Channel 9 [see also] MC.EXE /l option (-> MC.DOC) 6. PMDPPZ.COM (86) A FM Channel 1 B FM Channel 2 C FM Channel 3 D FM Channel 4 E FM Channel 5 F FM Channel 6 G SSG Channel 1 H SSG Channel 2 I SSG Channel3 J PCM Channel (playback only for if Chibioto is attached) K Rhythm pattern specification R Rhythm pattern definition other1 FM Channel 3 other2 FM Channel 3 other3 FM Channel 3 other4 PPZ8-use PCM Channel 1 other5 PPZ8-use PCM Channel 2 other6 PPZ8-use PCM Channel 3 other7 PPZ8-use PCM Channel 4 other8 PPZ8-use PCM Channel 5 other9 PPZ8-use PCM Channel 6 other10 PPZ8-use PCM Channel 7 other11 PPZ8-use PCM Channel 8 [see also] #FM3Extend command (->˜2-18) #PPZExtend command (->˜2-25) =============================================================================== ˜1-2 Using the Rhythm Channel(K/R) ------------------------------------------------------------------------------- ˜1-2-1 Using the internal SSG drums ------------------------------------------------------------------------------- The K/R Channels are fundamentally set in PMD for the use of the internal SSG drums. However, PPSDRV(->PPSDRV.DOC) being permanent, if PMD interacts with it, (->PMD.DOC /P option) The channels will use the SSGPCM sounds. Be careful since the YM2608 does not have exclusive-use rhythm channels. (->˜1-2-2) Because patterns are defined in the R channel, Those patterns are specified in sequential order in the K channel. Within the R channel, in the defined order, numbers from 0 to 255 are attached. When you specify the musical order use that number in channel K To specify the use of R commands.(->˜6-7) [Example] K R0 L [R1]3R2 R0 l16[@64c]4 R1 l8 @1c@128c@2c@128c R2 @1c@16c@8c@4c [Result]In the intro, a Snare2 roll(Line 2,R0)is entered, an 8 beat pattern(Line 3,R1)is repeated three times, and a tom fill-in(Line 4,R2)is entered, and the whole loops. Since the R Channel's notation back number is a dummy, it is possible to omit it, but inputting it makes reading it easier to understand.(->˜1-1-2) [see also] R commands (->˜6-7) @ command (->˜6-1) ------------------------------------------------------------------------------- ˜1-2-2 Using the YM2608 Rhythm Sound Source ------------------------------------------------------------------------------- PMD does not have an exclusive-use channel for the YM2608's Rhythm Sound Source, but since Rhythm Sound Source commands may be input in any channel(->˜14), producing the same rhythm, using the SSG rhythm channels(K/R)for this purpose is convenient. [Example] K \V63\vs31\vb31\vh15\vt31 ;Rhythm Sound Source volume settings K R0 L [R1]3R2 R0 l16[\sr]4 R1 l8 \br\hr\sr\hr R2 \br\tr\tr\tr [Result]The high and low toms are not included, but this produces the same rhythm pattern as Example ˜1-2-1 using the Rhythm Sound Source. However, Since Rhythm Sound Source commands(->˜14)can basically be used in any channel, use in the FM Channels and SSG Channels is not prevented. [see also] MML commandsERhythm Sound Source commands(->˜14) ------------------------------------------------------------------------------- ˜1-2-3 About using the K/R channels' rhythm with the SSG channels ------------------------------------------------------------------------------- For producing an SSG rhythm with the K/R channels, the third SSG channel is used. Therefore, this results in competition with the I channel. It is safer to avoid using both simultaneously, but in case this is done, It is practical to use the below rules: 1) At KEYON for one channel cut the sound for the other channel. 2) If both channels have KEYON simultaneously, give the K/R channels priority. =============================================================================== ˜1-3 Numerical Notation Method ------------------------------------------------------------------------------- In notating numerical values, it is possible to specify in both decimal and hexadecimal. If you use hexadecimal notation, attach a "$" sign to the head line. Only during tone specification can you directly specify the internal counter value by attaching a "%" symbol to the head line. Between the command name and the number parameter, it doesn't matter if you leave space with SPACE or TAB, but it is necessary to immediately follow up a number with a comma. [Example ‚P] c4 [Result]Inputs a 4-length C note. [Example ‚Q] c$10 [Result]Inputs a 16-length C note. [Example ‚R] c%12 [Result]Inputs an 8-length(Internal clock 12)C note. [Example ‚S] MA 12, 1, 8, 2 [Result]Ignoring the spaces, it becomes equivalent to MA12,1,8,2 [Wrong Example] MB 12 , 1 , 8 , 2 [Result]Error. Space cannot be entered between the number and comma. =============================================================================== ˜1-4 Comment Notation Method ------------------------------------------------------------------------------- If you want to write comments into MML, basically write a semicolon(->˜16-5), and go from there to before a new line. [Example ‚P] A @13 v13 ; A.Piano ~~~~~~~~~~ comment However, if you have space from SPACE or TAB at the head line, even without the semicolon, all info will be treated as comments. [Example ‚Q] Part A (<-comment) A ₯₯₯ B ₯₯₯ In MML, if you want to have several lines of comments, the "`" symbol(->˜16-6) results in all info until the next "`" being treated as comments. [Example 3] ` MML Coded by M.Kajihara. Copyright(c)1994. ` If you want to add a comment within MML code, it is possible to implement it with the "`" symbol. [Example ‚S] A @13 v13 `c major` cdefgab>c< `c minor` cde-fga-b->c< Again, with full-width characters inside MML, excluding special commands like "#", since it all is ignored, comments composed of full-width characters are especially fine. [Example ‚T] A @13 v13 major scale¨ cdefgab>c< minor scale¨ cde-fga-b->c< However, below are special cases where a comment cannot be inputted. 1) A character string inside a # defined command 2) A command defined or used with !, contains a character string variable 3) A command defined with @ =Instrument name character string [Wrong Example] #Title Sample Music ;music title ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The whole underlined part is treated as the title. [see also] ; command (->˜16-5) ` command (->˜16-6) =============================================================================== ******************************************************************************* ˜2 [[[[ Entire control commands ]]]] ******************************************************************************* =============================================================================== The below commands, because they are specified at the beginning lines, Perform all sorts of definitions affecting all channels and control of the song itself. For: "Filename" "Composer" "Extend" and other alphabet strings, upper and lower case do not matter. Commands, strings, and numbers must be separated by at least one SPACE or TAB. To be processed in one PASS, it does not matter where in the MML file the commands are, but if commands other than #Memo are duplicated, whatever is behind the line will be validated. =============================================================================== ˜2-1 Output Filename Specification #Filename ------------------------------------------------------------------------------- [Format 1]#Filename Filename [Format 2]#Filename .extension ------------------------------------------------------------------------------- Changes the filename of the output song data by the MC.EXE compiler. By default, MC.EXE compiles into the ".M" file extension. If only the file extension is changed, Only the extension will be changed from the default ".M". The filename is defined by other than TAB/ESC before the CTRL code comes up. (It it usually until the end of the line.) [Caution] You cannot attach a comment after it with ";". [Example ‚P] #Filename SAMPLE.M [Result]Regardless of the MML filename, it compiles to a file named "SAMPLE.M". [Example ‚Q] #Filename .M2 [Result]Using the original MML filename, it will attempt to save it under the extension ".M2". =============================================================================== ˜2-2 Use of SSGPCM Filename Setting #PPSFile ------------------------------------------------------------------------------- [Format] #PPSFile filename ------------------------------------------------------------------------------- Defines the name of the PPS(SSGPCM)file in use.(->PPS.DOC) The filename, with the exception of TAB/ESC, is defined before the inclusion of control code. (Usually before the line end(CR).) [Caution 1] You cannot attach a comment after it with ;. [Caution 2] You cannot omit the filename extension. [Caution 3] While using MC.EXE, in to not define timbre data inside of song data, it can only load a file if you use MC.EXE's /P or /S options to have immediate playback. [Example] #PPSFile PPS01.PPS [Result] Uses PPS01.PPS for the K/R parts' SSGPCM instrument patch. =============================================================================== ˜2-3 Use PCM Filename Setting #PCMFile , #PPCFile ------------------------------------------------------------------------------- [Format1] #PCMFile filename [Format2] #PPCFile filename ------------------------------------------------------------------------------- Defines a PCM file for use on channel J. (.PPC/.PVI/.P86) (->PMDPCM.DOC) If you are using PMDPPZE it indicates a .PVI/.PZI filename. #PCMFile and #PPCFile are completely identical. The filename is defined by the string of characters ending with a CTRL code other than TAB or ESC. (Typically the end of the line.) [Caution1] You cannot write a comment with ; after it. [Caution2]You cannot omit the filename. [Caution3] When using MC.EXE, if you do not define instrument data within the song data (->MC.DOC), the file will only be loaded if you use MC.EXE's /P or /S options for immediate playback. [Example ] #PCMFile SAMPLE.PPC [Result] Uses SAMPLE.PPC for channel J's instrument data. =============================================================================== ˜2-4 Use Instrument Filename Setting #FFFile ------------------------------------------------------------------------------- [Format] #FFFile filename[.FF/.FFL] ------------------------------------------------------------------------------- Defines an instrument filename (.FF/FFL) to be used. The filename is defined by the string of characters ending with a CTRL code other than TAB or ESC. (Typically the end of the line.) This has the exact function as writing the filename on the command line in MC.EXE (->MC.DOC). If the file exists, it will automatically be attached at the same time as the /V option is used; if the file does not exist, if it is filled in with the effect of the /VW option, the set filename will be used. If you omit the file extension, when the OPL option (/L) is used, it is assumed to be .FFL; if the OPL option is not used, it is assumed to be .FF. [Caution1] When used jointly with the instrument definition command (@), please always respect the numbering sequence from the FFFile. There is the possibility of the file instruments being written to the top of the file if you write the instruments to the bottom. (?) [Caution2] Even if you set the instruments at the command line, when this command is used, only this command will take effect. [Example ‚P] #FFFile EFFEC.FF [Result] Loads and uses the FM instrument "EFFEC.FF". [see also] FM instrument definition(@) (->˜3-1) MC.DOC =============================================================================== ˜2-5 Compiler Option Settings #Option ------------------------------------------------------------------------------- [Format]#Option character string ------------------------------------------------------------------------------- Sets the options for the compiler. The settings on the character string are identical to those on a command line. (->MC.DOC) [Caution 1] In the settings on the command line, it is added in appended form. With /N and /L , if there is a conflict between simultaneously set options, The former setting will be validated. [Caution 2] With /N, /M, and /L, If you set the option that pertains to FM sound definition, always set the sound definition (@) before it. [Example] #Option /L/S/A/O [Result] Sets the MC command line options: /L/S/A/O [See also] FM Sound definition(@) (->˜3-1) MC.DOC =============================================================================== ˜2-6 Title Definition #Title ------------------------------------------------------------------------------- [Format] #Title Title character string ------------------------------------------------------------------------------- Defines the song's title. The filename is defined by the string of characters ending with a CTRL code other than TAB or ESC. (Typically the end of the line.) [Caution 1] You cannot attach a comment after the title on the same line. [Caution 2] When you are using MC.EXE, without defining the sound data within the song data,(->MC.DOC) if you only use MC.EXE's /P or /S option for immediately playing the song, that character string will not be displayed. [Example] #Title sample song [Result] The song title is set to "sample song". =============================================================================== ˜2-7 Composer Definition #Composer ------------------------------------------------------------------------------- [Format] #Composer Composer name character string ------------------------------------------------------------------------------- Defines the composer's name. For the default, if the environment variable "COMPOSER=" or "USER=" has been defined, that defined character string will be used.(->MC.DOC) The name is defined by the string of characters ending with a CTRL code other than TAB or ESC. (Typically the end of the line.) [Caution 1] You cannot attach a comment after it on the same line. [Caution 2] When you are using MC.EXE, without defining the sound data within the song data,(->MC.DOC) if you only use MC.EXE's /P or /S option for immediately playing the song, that character string will not be displayed. [Example] #Composer M.Kajihara [Result] The composer's name is set to "M.Kajihara". =============================================================================== ˜2-8 Arranger Definition #Arranger ------------------------------------------------------------------------------- [Format] #Arranger Arranger's name character string ------------------------------------------------------------------------------- Defines the arranger's name. For the default, if the environment variable "ARRANGER=" or "USER=" has been defined, that defined character string will be used.(->MC.DOC) The name is defined by the string of characters ending with a CTRL code other than TAB or ESC. (Typically the end of the line.) [Caution 1] You cannot attach a comment after it on the same line. [Caution 2] When you are using MC.EXE, without defining the sound data within the song data,(->MC.DOC) if you only use MC.EXE's /P or /S option for immediately playing the song, that character string will not be displayed. [Example] #Arranger M.Kajihara [Result] The arranger's name is set to "M.Kajihara". =============================================================================== ˜2-9 Memo Definition #Memo ------------------------------------------------------------------------------- [Format] #Memo memo character string ------------------------------------------------------------------------------- Defines a memo character string. It can be used many times, defined in order, for up to 128 lines. [Caution 1] You cannot attach a comment after it on the same line. [Caution 2] When you are using MC.EXE, without defining the sound data within the song data,(->MC.DOC) if you only use MC.EXE's /P or /S option for immediately playing the song, that character string will not be displayed. [Example] #Memo Made on 3/25/94 [Result] Defines the memo: "Made on 3/25/94".B =============================================================================== ˜2-10 Tempo Setting #Tempo #Timer ------------------------------------------------------------------------------- [Format 1] #Tempo numerical value [Format 2] #Timer numerical value ------------------------------------------------------------------------------- [Range] [Format 1] 18`255 [Format 2] 0`250 ------------------------------------------------------------------------------- Specifies the tempo. If #Tempo is used, it will specify how many times in one minute 48 clock cycles will repeat. The default length of 48 clock cycles is a half note, but it can be changed with the #Zenlen command or the C command. If #Timer is used, it will directly set the value of TimerB. If this command is used, a t or T command will be automatically issued at the beginning of channel G. [Example 1] #Tempo 60 [Result] The tempo is set at 60 half-notes in one minute. (120 quarter notes in one minute) [Example 2] #Timer 100 [Result] The value of the internal TimerB is set to 100. [see also] t command (->˜11-1) T command (->˜11-2) C command (->˜4-11) #Zenlen command (->˜2-11) =============================================================================== ˜2-11 Whole Note Length Setting #Zenlen ------------------------------------------------------------------------------- [Format] #Zenlen numerical value ------------------------------------------------------------------------------- [Range] 1`255 ------------------------------------------------------------------------------- Specifies the whole note length. This is identical to the MML C command, and if a value other than 96 is specified, a C command will be automatically added to channel G. Any whole note you specify cannot be a non-divisible number. Since the default value is 96APossible values are 1,2,3,4,6,8,12,16,24,32,48,or 96. [Caution] If you use this command, the note length that determines the tempo in the #Tempo command will change. [Example] #Zenlen 192 [Result] With whole notes set to the internal clock value 192, The possible note lengths (1,2,3,4,6,8,12,16,24,32,48,64,96,192) increase to 14 more kinds. Specifying a value for #Tempo or t will determine the length of a 4-note. [Supplement] If you use this command to make the whole note longer, the more minute your not lengths are, the more CPU power your track will consume at playback time. In particular, when you are making a track which will be used as BGM for a video game scene which requires more CPU speed, if you make this value smaller, your track will use less CPU power at playback time. [see also] C command (->˜4-11) #Tempo command (->˜2-10) t command (->˜11-1) =============================================================================== ˜2-12 High-Low Octave Function Setting #Octave ------------------------------------------------------------------------------- [Format 1] #Octave Reverse [Format 2] #Octave Normal ------------------------------------------------------------------------------- Reverse reverses the < and > commands, while Normal keeps them the same. This is identical to the MML X command, and if it is used, an X command will be automatically issued to channel A. [Example] #Octave Reverse [Result] > decrements the octave, while < increments it. [see also] X Command (->˜4-6) > < Commands (->˜4-5) =============================================================================== ˜2-13 Default Loop Number Setting #LoopDefault ------------------------------------------------------------------------------- [Format] #LoopDefault number ------------------------------------------------------------------------------- [Range] 0`255 ------------------------------------------------------------------------------- When the number of loops is omitted on a "]" loop, this sets the default number. The default number is 0(no loop). [Example] #LoopDefault 2 [Result] If a number is omitted for the "]" command, it sets the number of loops to 2. [See also] ] command (->˜10-1) =============================================================================== ˜2-14 Whether To Use DT2 Setting #DT2Flag ------------------------------------------------------------------------------- [Format 1] #DT2Flag on [Format 2] #DT2Flag off ------------------------------------------------------------------------------- Sets whether DT2 values will be used in an instrument definition. By default, it is changed by the /m option: If /m is set: -> on If /m is not set: -> off If DT2 is necessary for the instrument, and this flag is set to off, DT2 will be set to 0 for all slots. [Example] #DT2Flag on [Result] Regardless of the format, attaches DT2 to the instrument patch. [See also] FM Instrument Definition(@) (->˜3-1) =============================================================================== ˜2-15 Bend Range Setting #Bendrange ------------------------------------------------------------------------------- [Format] #Bendrange number ------------------------------------------------------------------------------- [Range] 0`255 ------------------------------------------------------------------------------- Sets the bend range. The default is 0. Being identical to the MML B command, if this is used it automatically sets a B command at the beginning of channel A. If a value other than 0 is specified, the I command will become effective, and for I}8192, the pitch deviation will be the bend range times the difference of a half-note. [Caution] When setting the bend range, on top of using considerable caution concerning the I command (->˜7-5), because this can make your MML hard to look at, unless you are converting from MIDI it is safer to just not use this command. [Example] #Bendrange 12 [Result] With I at }8192, this sets the pitch shift to exactly one octave. [see also] B command (->˜7-4) I command (->˜7-5) =============================================================================== ˜2-16 SSG Pitch Extend/Normal Selection #Detune ------------------------------------------------------------------------------- [Format1] #Detune Extend [Format2] #Detune Normal ------------------------------------------------------------------------------- Selects whether to use Extend or Normal for the SSG's Detune/LFO. If you set this to Extend, it is equivalent to adding "DX1" to the beginning of each of the SSG channels (G,H,I). If you set this to Normal, when the Detune/LFO is shifted 1 degree, the pitch value sent to the chip will always be shifted 1 degree. (for any Detune value, if the pitch range is large the shift will also be large). When using Extend, if on a high pitch range the detune value is as low as it can go, the detune value will be revised to match up with the same pitch degree. (?) [Example] #Detune Extend [Result] The SSG Detune is changed to be extended. [see also] DX command (->˜7-3) D DD commands (->˜7-1) M MA MB commands (->˜9-1) =============================================================================== ˜2-17 Software LFO Speed Extend/Normal Selection #LFOSpeed ------------------------------------------------------------------------------- [Format 1] #LFOSpeed Extend [Format 2] #LFOSpeed Normal ------------------------------------------------------------------------------- Selects whether the software LFO will be extended to be independent of the tempo. If you set this to Extend, it is equivalent to adding "MXA1 MXB1" to the beginning of the FM, SSG, and ADPCM channels. If you only want to set one LFO please use the MX command. [Example] #LFOSpeed Extend [Result] Sets the software LFO to be independent of the tempo. [see also] MX MXA MXB commands (->˜9-5) M MA MB commands (->˜9-1) =============================================================================== ˜2-18 Software Envelope Speed Extend/Normal Selection #EnvelopeSpeed ------------------------------------------------------------------------------- [Format 1] #EnvelopeSpeed Extend [Format 2] #EnvelopeSpeed Normal ------------------------------------------------------------------------------- Selects whether the SSG/PCM envelope speed will be independent of the tempo. If you set this to Extend, it is equivalent to adding "EX1" to the beginning of the SSG and PCM channels (G-J). [Example] #EnvelopeSpeed Extend [Result] Sets the SSG/PCM envelope speeds to be independent of the tempo. [see also] EX command (->˜8-2) E command (->˜8-1) =============================================================================== ˜2-19 PCM Volume Value Extend/Normal Selection #PCMVolume ------------------------------------------------------------------------------- [Format 1] #PCMVolume Extend [Format 2] #PCMVolume Normal ------------------------------------------------------------------------------- Selects which way the v and V volume commands will be related on the PCM channels: Normal: V = v~16 Extend: V = v~v Using Extend in PMDB2 and PMDVA, and using Normal in PMD86, will set the volume curve of the v command roughly to a straight line. [Example ] #PCMVolume Extend [Result] Sets the volume conversion on the PCM channels to V = v~v. [see also] v command (->˜5-1) V command (->˜5-2) =============================================================================== ˜2-20 FM Channel 3 Expansion #FM3Extend ------------------------------------------------------------------------------- [Format] #FM3Extend notation‚P[notation‚Q[notation‚R]]] ------------------------------------------------------------------------------- [Notation] Any of LMNOPQSTUVWXYZabcdefghijklmnopqrstuvwxyz ------------------------------------------------------------------------------- Expands the 3rd FM channel by creating new channels with the notated letter. You may set up to 3 extension channels. The third FM channel can play up to four independent tones, but by default, except for PMD/PMDVA1, the third FM channel has only one tone by default, this command creates more. On PMD/PMDVA1, the D, E, and F channels are defined as the FM3 extension tones by default, so this command will change that. [Example ] #FM3Extend XYZ [Result] Channels X, Y, and Z are newly created for FM3. If using PMD/PMDVA1, it changes D,E,F to X,Y,Z. [see also] Correspondence between channel notation and soundchip channels(->˜1-1-3) =============================================================================== ˜2-21 MML File Insertion #Include ------------------------------------------------------------------------------- [Format] #Include filename ------------------------------------------------------------------------------- Loads and inserts an MML file between the #include line and the next line. You cannot omit the file extension. It is very useful to include default settings for # commands, @ instruments, ! variables, etc. However, use appropriate caution to avoid exceeding the 61KB MML size limit. It is also possible to include a file which itself includes a file (nesting). [Example ] #Include default.mml [Result] Loads and inserts default.mml at that position. =============================================================================== ˜2-22 Separate Volume Down Setting #Volumedown ------------------------------------------------------------------------------- [Format] #Volumedown [F[S[P[R]]]][}]number[,[F[S[P[R]]]][}]number,]₯₯₯₯ ------------------------------------------------------------------------------- [Range] [without }] 0`255 [with }] -128`+127 ------------------------------------------------------------------------------- Changes the volume down value separately for each sound source. Each sound source is represented as: F = FM S = SSG P = PCM R = Rhythm If this is used, DF, DS, DP, and DR commands will automatically be added to the beginning of channel G. If a + or - is inserted before the number, the change will be relative to PMD's /DF, /DS, /DP, and /DR option values. Be careful to take note that + lowers the volume. [Caution] Because the values set with this command are local to the track they are used on, when beginning playback again, this resets the values of PMD's /DF, /DS, /DP, and /DR commands, then returns them to the normal values. [Example ‚P] #Volumedown FR+16,P+128,S+32 [Result] Adds 16 to FM, 128 to PCM, and 32 to SSG, relative to the PMD options (lowers volume). [Example ‚Q] #Volumedown F-16 [Result] Adds 16 to FM, relative to the PMD options (raises volume). [Example ‚Q] #Volumedown P96 [Result] Regardless of the PMD options, sets the PCM volume down to 96. [see also] DF DS DP DR commands (->˜15-4) PMD /DF /DS /DP /DR options (->PMD.DOC) =============================================================================== ˜2-23 PCM Channel Specification Setting #ADPCM ------------------------------------------------------------------------------- [Format1] #ADPCM on [Format2] #ADPCM off ------------------------------------------------------------------------------- This is only effective when used with PMD86. When set to on, matches ADPCM volume and loops (with /s option) When set to off, does not match ADPCM volume and loops (without /s option) Regardless of the /s option, it changes the PCM condition. Because the values set with this command are local to the track they are used on, playing back another song will return the values to normal. When this command is used, it issues an A command to the beginning of channel J. [Example ] #ADPCM on [Result] When the track is played back on PMD86, it will playback with the PCM channels using the same methods as the ADPCM channel. [see also] A command (->˜15-10) =============================================================================== ˜2-24 Playback Start Position Setting #Jump ------------------------------------------------------------------------------- [Format1] #Jump positionnumber ------------------------------------------------------------------------------- [Range] 0`65535 ------------------------------------------------------------------------------- Effective only when the track is played back with MC.EXE or MCH.EXE using the /P and /S options, sets the starting position for playback. Because this has no effect on a created .M file, when you play it back on a program such as PMP.COM, be careful since the song will be played back from the beginning. Also, on slow CPUs, when the beginning position set is large, it will take a bit of time before the song plays. [Example ] #Jump 16 [Result] When played back on MC.EXE or MCH.EXE using the /P and /S options, it will begin at position 16. =============================================================================== ˜2-25 PPZ8 Channel Extension #PPZExtend ------------------------------------------------------------------------------- [Format] #PPZExtend notation‚P[notation‚Q[notation‚R]₯₯₯₯(up to 8)]] ------------------------------------------------------------------------------- [notation] Any of LMNOPQSTUVWXYZabcdefghijklmnopqrstuvwxyz ------------------------------------------------------------------------------- Extends the PPZ8 channels with the notated channels. It is possible to set up to 8 new channels. [Example ] #PPZExtend abcdefgh [Result] Creates new PPZ8 channels a,b,c,d,e,f,g,h [see also] Correspondence between channel notation and soundchip channels(->˜1-1-3) =============================================================================== ˜2-26 PPZ PCM Filename Setting #PPZFile ------------------------------------------------------------------------------- [Format] #PPZFile filename[.PVI/.PZI][,filename[.PVI/.PZI]] ------------------------------------------------------------------------------- Sets the filename of the PCM samples to be used on the extended PPZ8 channels. if the file extension is omitted, at loading time it will check for a matching PZI file, then a PVI file. You may define up to two PCM files to use. The 2nd PCM file will have 128 added to each instrument number, ranging from @128-@255. The filename is defined by the string of characters ending with a CTRL code other than TAB or ESC. (Typically the end of the line.) [Caution1] You cannot add comments on the line with ;. [Caution2] When using a 2nd PCM file, you cannot leave space on either side of the comma. [Caution3] When using MC.EXE, if you do not define instrument data within the song, the file(s) will not be loaded unless you use the /P or /S option for immediate playback. [Example ] #PPZFile SAMPLE.PZI [Result] Uses SAMPLE.PZI for the PCM data on the channels set with #PPZExtend. [Example 2] #PPZFile BASEPCM.PZI,EXTEND.PVI [Result] Uses BASEPCM.PZI for PCM instruments @0-@127; uses EXTEND.PVI for PCM instruments @128-@255, on the channels set with #PPZExtend. [Error Example]#PPZFile BASEPCM.PZI , EXTEND.PVI [Result] You cannot put space on either side of the comma. At PCM loading time there will be an error. =============================================================================== ˜2-27 Whole Transposition Setting #Transpose ------------------------------------------------------------------------------- [Format] #Transpose number ------------------------------------------------------------------------------- [Range] -128`+127 ------------------------------------------------------------------------------- Sets the transposition for the whole song. It is equivalent to adding "_M" to the beginning of every channel except the rhythm channels. For channels such as those used for rhythm, which you do not want to be transposed, please cancel this by putting "_M0" at the beginning of each appropriate channel. [Example ] #Transpose 1 [Result] Transposes the whole track up one half-note. [see also] _M command (->˜4-16) =============================================================================== =============================================================================== ******************************************************************************* ˜3 [[[[ Definition Commands ]]]] ******************************************************************************* =============================================================================== For FM channel sounds, commands that define MML variables. To be processed in one PASS, it doesn't matter where in the MML file the commands are located. However, if a duplicate command is specified, the former will be used. =============================================================================== ˜3-1 FM Instrument definition @ ------------------------------------------------------------------------------- [Format1] @ Instrument number ‚`‚k‚f ‚e‚a ‚`‚q ‚c‚q ‚r‚q ‚q‚q ‚r‚k ‚s‚k ‚j‚r ‚l‚k ‚c‚s ‚`‚l‚r ‚`‚q ‚c‚q ‚r‚q ‚q‚q ‚r‚k ‚s‚k ‚j‚r ‚l‚k ‚c‚s ‚`‚l‚r ‚`‚q ‚c‚q ‚r‚q ‚q‚q ‚r‚k ‚s‚k ‚j‚r ‚l‚k ‚c‚s ‚`‚l‚r ‚`‚q ‚c‚q ‚r‚q ‚q‚q ‚r‚k ‚s‚k ‚j‚r ‚l‚k ‚c‚s ‚`‚l‚r [Format 2] @ Instrument number ‚`‚k‚f ‚e‚a ‚`‚q ‚c‚q ‚r‚q ‚q‚q ‚r‚k ‚s‚k ‚j‚r ‚l‚k ‚c‚s ‚c‚s‚Q ‚`‚l‚r ‚`‚q ‚c‚q ‚r‚q ‚q‚q ‚r‚k ‚s‚k ‚j‚r ‚l‚k ‚c‚s ‚c‚s‚Q ‚`‚l‚r ‚`‚q ‚c‚q ‚r‚q ‚q‚q ‚r‚k ‚s‚k ‚j‚r ‚l‚k ‚c‚s ‚c‚s‚Q ‚`‚l‚r ‚`‚q ‚c‚q ‚r‚q ‚q‚q ‚r‚k ‚s‚k ‚j‚r ‚l‚k ‚c‚s ‚c‚s‚Q ‚`‚l‚r [Format 3] @ Instrument number ‚`‚k‚f ‚e‚a ‚`‚q ‚c‚q ‚q‚q ‚r‚k ‚s‚k ‚j‚r‚k ‚l‚k ‚j‚r‚q ‚d‚f‚s ‚u‚h‚a ‚`‚l ‚`‚q ‚c‚q ‚q‚q ‚r‚k ‚s‚k ‚j‚r‚k ‚l‚k ‚j‚r‚q ‚d‚f‚s ‚u‚h‚a ‚`‚l ------------------------------------------------------------------------------- [Note] In any location, it is possible to define an instrument. ------------------------------------------------------------------------------- [Range] [Format 1 and 2] ‚`‚k‚f ₯₯₯₯ 0`7 ‚e‚a ₯₯₯₯ 0`7 ‚`‚q ₯₯₯₯ 0`31 ‚c‚q ₯₯₯₯ 0`31 ‚r‚q ₯₯₯₯ 0`31 ‚q‚q ₯₯₯₯ 0`15 ‚r‚k ₯₯₯₯ 0`15 ‚s‚k ₯₯₯₯ 0`127 ‚j‚r ₯₯₯₯ 0`3 ‚l‚k ₯₯₯₯ 0`15 ‚c‚s ₯₯₯₯ -3`3 or 0`7 ‚`‚l‚r ₯₯₯₯ 0`1 [Format 2] ‚c‚s‚Q ₯₯₯₯ 0`3 [Format 3] ‚`‚k‚f ₯₯₯₯ 0`1 ‚e‚a ₯₯₯₯ 0`7 ‚`‚q ₯₯₯₯ 0`15 ‚c‚q ₯₯₯₯ 0`15 ‚q‚q ₯₯₯₯ 0`15 ‚r‚k ₯₯₯₯ 0`15 ‚s‚k ₯₯₯₯ 0`63 ‚j‚r‚k ₯₯₯₯ 0`3 ‚l‚k ₯₯₯₯ 0`15 ‚j‚r‚q ₯₯₯₯ 0`1 ‚d‚f‚s ₯₯₯₯ 0`1 ‚u‚h‚a ₯₯₯₯ 0`1 ‚`‚l ₯₯₯₯ 0`1 ------------------------------------------------------------------------------- Defines an FM instrument. The "@" must be the first character on a line, and you must insert a space, tab, comma, or new line between each number. However, the instrument name must be ended with a tab or a new line. [Format 1] In MC.EXE, without the /M option, it is treated according to "#DT2Flag off". [Format 2] In MC.EXE, with the /M option, it is treated according to "#DT2Flag on". [Format 3] It is treated according to the function of the /L option in MC.EXE. From the @ to the last number, without inserting a ; or =, entering any character besides a number will produce an error. Except for the instrument name, you cannot omit any number. for the meanings of each parameter, please refer to the original manual or an FM synthesis manual. (Addition by translator: here are the meanings of some parameters: FB - Feedback AR - Attack rate DR - Decay rate SR - Sustain rate RR - Release rate SL - Sustain level TL - Output level KS - Keyscale ML - Multiple DT - Detune AM - Amplitude modulation ) [Caution] When using MC.EXE, if you do not use a defined instrument within the track sequence, it it useless. [Example ‚P] @ 0 4 5 =falsyn? 31 0 0 0 0 22 0 2 3 0 18 10 0 6 0 0 0 8 3 0 31 0 0 0 0 23 0 4 -3 0 18 10 0 6 0 0 0 4 -3 0 [Result] Instrument number 0 is defined as "falsyn?". [Example ‚Q] When using the /M option in MC.EXE or #DT2Flag on ; NM AG FB Falcom Synth @ 0 4 5 =falsyn? ; AR DR SR RR SL TL KS ML DT DT2 AMS 31 0 0 0 0 22 0 2 3 0 0 18 10 0 6 0 0 0 8 3 0 0 31 0 0 0 0 23 0 4 -3 0 0 18 10 0 6 0 0 0 4 -3 0 0 [Result] Instrument number 0 is defined as "falsyn?". [Example ‚R] When using the /L option in MC.EXE ; NM AG FB E.Bass @ 2 0 5 =E.Bass ; AR DR RR SL TL KSL ML KSR EGT VIB AM 11 5 2 2 29 0 0 0 0 1 0 12 8 6 1 0 0 1 1 1 1 0 [Result] Instrument number 2 is defined as "E.Bass". [see also] @ command(MML) (->˜6-1) #DT2Flag command (->˜2-14) MC.EXE /N /M /L options (->MC.DOC) =============================================================================== ˜3-2 MML Variable Definition ! ------------------------------------------------------------------------------- [Format 1] !characterstring MMLsequence [Format 2] !numericalvalue MMLsequence ------------------------------------------------------------------------------- [Character string] Can be characters per inch or characters per class. Distinctively from the head line up to 30 half-width characters. [Range] 0`255 ------------------------------------------------------------------------------- Defines MML variables. Up to 256 kinds of character strings can be defined; same for numerical values. It is possible to define each independently. For character strings, if the head line is not a numeral, any character can be used. ( !Snare, etc. Defining double-byte characters is also possible) Character strings and numerical values must be separated by at least one SPACE or TAB. Variable nesting is also possible, but please do not use recursion. Variables are used in MML by the ! command. [Caution 1] Only up to 30 half-width characters are recognized. If you input more than that, the remaining characters are not recognized. [Caution 2] A perpetually recursive loop is a terrible mistake to make, and will run wild. Use appropriate caution. [Example ‚P] !A cde !1 !A fga A l8 !1 b [Result] (A l8 cdefgab) <- Equivalent to this. [Example ‚Q] !BassDrum @0v12 !SnareDrum @1v14 A !BassDrum cc !SnareDrum g !BassDrum c [Result] A @0v12 cc @1v14 g @0v12 c [Wrong example] !A cde !B !B cde !A A !A [Result]!A and !B continually refer back to each other; this results in a stack overflow, and is a terrible mistake to make. [see also] ! command(MML) (->˜16-1) =============================================================================== ******************************************************************************* ˜4 [[[[ MML CommandsEInterval/Duration ]]]] ******************************************************************************* =============================================================================== From here on is an explanation of real MML commands. Optionally, you can enclose the parameters inside brackets [ ]. The [Sound Source] marker shows which channels may use a given command. Each specific sound source is listed below: FM: FM sound channel (PC-88/98: A-F, as well as FM3 extensions X68000: A-H IBM: A-I) SSG: SSG sound channel (G-I) PCM: PCM sound channel (J (FM Towns: J-K) as well as PPZ extensions) R Selection: rhythm selection channel (K) R Definition: rhythm definition channel (R) FM(OPNA): FM sound channel (Exclusively for PMDB2/VA/86: A-F as well as FM3 extensions) FM(OPM): FM sound channel (Exclusively for PMD.X: A-H) FM(ch3): FM sound channel (Exclusively for PMD.COM: C-F, or PMDB2/VA/86: C, as well as FM3 extensions) PCM(AD): PCM sound channel (Exclusively for PMDB2/PMDVA: J) PCM(86): PCM sound channel (Exclusively for PMD86: J) PCM(68): PCM sound channel (Exclusively for PMD.X: J) PCM(PPZ): PCM sound channel (Exclusively for PPZ extensions) The commands involving intervals and duration are summarized in this section. These commands can almost never be used on Channel K (R Selection). =============================================================================== ˜4-1 Interval/Duration Setting c/d/e/f/g/a/b/x ------------------------------------------------------------------------------- [Format 1] c/d/e/f/g/a/b [=] [+/-] [Duration] [.] [Format 2] x [Duration] [.] ------------------------------------------------------------------------------- [Range] 1`255, whole-note length divisor(->˜2-11) or clock value attached by % ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Definition ------------------------------------------------------------------------------- This represents a single note. Respectively, c = do d = re e = mi f = fa g = sol a = la b = ti are supported. Also, if x is used for note data, previous notes will be adopted. (Example: By using c4x8 , c4c8 is played) For high-low octaves,o < > are used for commands. However, Interval x adopts the octave of the previous note. With the R channel, In PMD.X's J channel(PCM), c`b,x will be the same for any note. By using _{ } commands(->˜4-15), If transposition specification is used, in intervals c`b, The transposition will be automatically processed, but if = notation(natural) is attached, it will be ignored. If + notation(jump) is attached, it will jump up a half-tone, if - notation(flat) is attached, it will lower a half-tone. For + and - notation, specifying 2 or more commands is possible. (double-flat, et cetera) However, This cannot be used with interval x. If the note duration is omitted, it will use the duration specified by the l command. If . notation(period) is attached, the duration is multiplied by 1.5. If 2 or more are attached, the note's length will be continually multiplied by 1.5. [Example ‚P] c2.. [Result] c2&c4&c8 For ‚RC‚U marks, please use the calculation of 3,6,12,24,48,96 length notes. [Example ‚Q] c12d12e12 [Result] three 8-cycle length notes ( In N88Basic, same as {CDE}4 ) [Supplement] Since adding three twelfth notes is the same as a quarter note, You can divide a quarter note into three equal twelfth notes. For note lengths which are indivisible, use a % to directly set the number of clock cycles. [Example ‚R] c%4 d%5 e%5 f%5 g%5 [Result] Splits a quarter note into 5 notes cdefg ( In N88Basic, same as {CDEFG}4 ) [Supplement] Since a quarter note is 24 clock cycles (If C=96), dividing 24 by 5 gives 4 with a remainder of 4. Thus, if four notes are of length %5, and one is of length %4, it will still generally be heard as a smooth sequence. When using W or S commands, the note lengths will be affected by the automatic addition of software echoes or grace notes. [Caution1] In PMD.X, notes c, c+, and d on octave 1 will be played back as note d. [Caution2] In PMDB2/VA, on the PCM channel, any notes above octave 6 will be played back at octave 6. [Caution3] Please do not leave space between the scale notation (c/d/e/f/g/a/b) and the dot (.). In particular, if you leave space between =, +, or -, take caution as they will be recognized as l=, l+, and l- commands respectively. [Caution4] If the number of clock cycles exceeds 255, depending on the condition it may not be possible to define such a note. [Error Example] C192 W24,-2 c1. [Result] Note length overflow error. [Supplement] If a W or S command would cause the note length to exceed 255 clock cycles, it cannot be used. [Caution5] If you use an x note on channel R, it unconditionally takes the note length data; even if the note before it is a rest, all rests will not be done (?). [see also] o command (->˜4-4) > < commands (->˜4-5) _{ } commands (->˜4-15) l command (->˜4-8) W command (->˜12-2) S command (->˜12-1) =============================================================================== ˜4-2 Rest/Duration Setting r ------------------------------------------------------------------------------- [Format] r [duration] [.] ------------------------------------------------------------------------------- [Range] 1`255, whole-note length divisor(->˜2-11) or clock value attached by % ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Definition ------------------------------------------------------------------------------- Represents one rest. If the duration is omitted, If the note duration is omitted, it will use the duration specified by the l command. If . notation(period) is attached, the duration is multiplied by 1.5. If 2 or more are attached, the note's length will be continually multiplied by 1.5. [Example] r4. [Result] 4 and . rest [see also] l command (->˜4-8) =============================================================================== ˜4-3 Portamento Setting { } ------------------------------------------------------------------------------- [Format] {interval1 interval2} [length1] [.] [,length2] ------------------------------------------------------------------------------- [Range] [length1] 1`255,whole-note length divisor(->˜2-11) or clock value attached by % [length2] Adding to above, a value shorter than length 1. ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,PPZ) ------------------------------------------------------------------------------- From interval 1 to interval 2, specifies the length of the smooth connexion between the intervals. If interval 2 is specified, From the start of pronunciation until the movement of the interval lasting standby, specifies a so-called delay. About the length "E" period: c d e f g a b equivalent to r command. You cannot specify a length exceeding 255 steps. Inside the { }, please use only the c d e f g a b o > < commands. This cannot be used on channel R. [Caution 1] PMD86 and PMD.X's PCM part cannot use the portamento. If it is specified, Interval 1 will be disregarded.({cd}2 same as d2 ) [Caution 2] In this command, the effects of the W S commands do not apply. [Example 1] {cg}4 [Result] A portamento of a length of 4 going from "do" to "so". [Example 2] {cg}4,8 [Result] A portamento of a length of 4, after a delay of 8, going from "do" to "so". In reality, it is identical to c8&{cg}8 [see also] W command (->˜12-2) S command (->˜12-1) =============================================================================== ˜4-4 Octave setting o ------------------------------------------------------------------------------- [Format] o numerical value ------------------------------------------------------------------------------- [Range] 1`8 1`6 (PMDB2's PCM channel) 1`5 (PMD.X's PCM channel) ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM ------------------------------------------------------------------------------- Specifies the octave. Possible settings: ‚e‚l Channel^‚o‚r‚f; 1`8, 88/VA/98's ‚o‚b‚l: 1`6. For the X68000 version's PCM channel, possible values are 1`5A roughly changes the pitch of each octave. (?) the default octave is 4. [Example] o6 [Result] The octave is set to 6. =============================================================================== ˜4-5 Octave Up/Down > < ------------------------------------------------------------------------------- [Format 1] > [Format 2] < ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM ------------------------------------------------------------------------------- > increases by one octave. < decreases by one octave. With the X #Octave command, it is possible to reverse the set octave. [Example ‚P] o4 c8>c8 [Result] After an 8-length octave 4 c note, An 8-length octave 5 c note plays. [Caution] If it is specified during a loop, on returning to the head of the loop, the octave will differ on returning to the beginning of the loop. If you use something similar to this, please use a __ command. [Example ‚Q] o4[cdefgab>]2cde [Result] o4cdefgab o4cdefgab o5cde [Example ‚R] o4[cdefgab__12]2__-24cde [Result] o4cdefgab o5cdefgab o4cde [see also] X command (->˜4-6) #Octave command (->˜2-12) __ command (->˜4-14) =============================================================================== ˜4-6 Octave Up/Down Notation Reversal X ------------------------------------------------------------------------------- [Format] X ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM ------------------------------------------------------------------------------- Reverses the effect of the > and < commands. It is identical to the #Octave command, but this command makes it possible to temporarily locally change the octave. [Example] c>c< X d X [Result] Identical to c>c< d>d< [Caution 1] Since the change is temporary, Always return to the original setting. If you don't, starting with the next part all parts will be affected. [Caution 2] With this command, if you want to change the MML entirely, It is necessary to describe it at the head of Channel A. This has the same effect as the #Octave command. [see also] #Octave command (->˜2-12) > < command (->˜4-5) =============================================================================== ˜4-7 Whole Octave Change o+ o- ------------------------------------------------------------------------------- [Format 1] o+ numerical value [Format 2] o- numerical value ------------------------------------------------------------------------------- [Range] -7`+7 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM ------------------------------------------------------------------------------- From a part's o command value, fluctuates the octave from the set value. Also, it simultaneously increases the octave from the numerical value. ( from the use of the o command) [Example] G o-1 H o-0 GH o4 cdefg [Result] For cdefg, with G channel at o3 and H channel at o4 plays music. (octave layering) =============================================================================== ˜4-8 Default Length Setting l ------------------------------------------------------------------------------- [Format] l[%]length[.] ------------------------------------------------------------------------------- [Range] 1`255,whole-note length divisor(->˜2-11) or clock value attached by % ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- With c d e f g a b r { } l= l+ l- l^ commands, if the length is omitted, Sets the length to be used. The default is 4. [Example ‚P] l8cdefg [Result] Plays the 8-length notes cdefg. [Caution] If this is used in the rhythm selection( K ), only the most recently used setting will become the default value for the R channel. If this is used in the rhythm definition( R ) it will affect the R channel from then on. For example, If set in R0, it will also affect R1. [Example ‚Q] K l8R0l2 R0 @1c@2c [Result] For the SSG rhythm's bass drum€ becomes a 2-length note for the snare. (l8 is disregarded.) [see also] c`b commands (->˜4-1) r command (->˜4-2) { } commands (->˜4-3) l= l+ l- l^ commands (->˜4-9) =============================================================================== ˜4-9 Processing the previously used note length l= l+ l- l^ ------------------------------------------------------------------------------- [Format 1] [l] [=] [length] [.] [Format 2] [l] + length [.] [Format 3] [l] - length [.] [Format 4] [l] ^ numerical value ------------------------------------------------------------------------------- [Range] [length] 1`255,whole-note length divisor(->˜2-11) or clock value attached by % [numerical value] 1`255 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Definition ------------------------------------------------------------------------------- Changes the previously used note length. l= changes the previous note length. l+ adds to the previous note length. l- subtracts from the previous note length. l^ multiplies the previous note length. It is possible to omit l notation and = notation. If . notation is attached, the note length is multiplied by 1.5. If more than one is attached, the length will be multiplied successively by 1.5 for each period. However, you cannot exceed 255 steps with the use of . notation. For the l= command, if only a period is used, it has the effect of a period attached to the previous note length. If both the length and period are omitted, it will use the length determined by the l command. For the l+ command, it has the same effect as a notated length followed by the & command. (or after the &?) (->˜4-10 & command) The l= command is usually used together with the MML variables. [Example ‚P] !b @0c ;Bass Drum !s @1c ;Snare Drum J [!b4!s4!b8!b8!s4]2 [Result] J [ @0c4 @1c4 @0c8 @0c8 @1c4 ]2 For the l- command, this is convenient for restoring a delayed part to the original length. [Example ‚Q] G l4v10 cdefg ab>c< H l4v07r8cdefg l-8 v10fg a [Result] In the last 3 notes, the G and H channels' timing and volume become uniform. [Example ‚R] a8l=4. a8=4. a8 4. a8l+4 a4+8 a4&8 a2l-8 a2-8 a8l^3 a16^6 a4. [Result] All of these are equal to a 4-length with a period. [Caution 1] For the l= and l^ commands, If the previously set interval length is compressed or altered, it produces an error. (?) Also, with the l- command specifying a length longer than the previous length being altered will produce an error. ~ c2&c2 =4 (the previous interval is compressed to c1) ~ W24,-2 c2 =4 (the previous interval is altered to c4(^2c4 ) ~ c2&c2^4 (the previous interval is compressed to c1 ) ~ W24,-2 c2^4 (the previous interval is changed to c4(^2c4 ) ~ C192 c1.^4 (the previous interval is expanded to c%255&c%33 ) ~ c4-2 ~ W24,-2 c1-2 (c1 is changed to c4(^2c4(^4c4(^6c4) [Caution 2] For interval lengths increased by the l+ command, do not attach effects with the W and S commands. [Caution 3] The tone notations c d e f g a b with = + - attached right after are judged as natural jump flat notation. With this, please attach a SPACE or l notation. [Example ‚S] c=4 c natural quarter note c =4 c natural quarter note ( identical to c4) cl=4 c natural quarter note ( identical to c4) l2c-8 c flat eighth note l2c -8 c flat quarter note with a period l2cl-8 c flat quarter note with a period l4c+8 c sharp eighth note l4c +8 c sharp quarter note with a period l4cl+8 c sharp quarter note with a period (?) [see also] & command (->˜4-10) =============================================================================== ˜4-10 Tie/slur Setting & && ------------------------------------------------------------------------------- [Format 1] & [Format 2] && [Format 3] & [length][.] [Format 4] && [length][.] ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Definition ------------------------------------------------------------------------------- Ties two notes(&) or tie as a slur(&&). When two notes are different, if a tie is used, it will not do "keyoff" of the previous note, but since it will do "keyoff" for a slur,there is a difference for when the Keyon time attack will be understood(=&&) or not understood(=&). Please attach this always after an interval command. If a length is specified immediately after &, it is treated the same as an l+ command, and the length is added to the one right before it. [Example ‚P] a8&2 a8l+2 a8&a2 [Result] A half-note is added to the length of the eighth note. If you specify a length immediately after &&, it will play the note immediately preceding the command with the length immediately following it. [Example ‚Q] a8&&2 [Result] a8&&a2 [Caution 1] During the execution of W,S commands,only the note of after the change of the last volume/interval is changed. Also, the effects of the W and S commands cannot be used on the interval immediately following a & command. [Caution 2] On the rhythm definition(R) channel, only format 3 is effective. formats 1, 2, and 4 cannot be used. [Example ‚R] R0 @1 c4&c4 [Result] Causes an error. If c2 is used, please use c4 r4. For the SSG rhythm channel, the sound cannot be cut during a rest. [see also] l+ command (->˜4-9) =============================================================================== ˜4-11 Whole tone length setting C ------------------------------------------------------------------------------- [Format] C Numerical value ------------------------------------------------------------------------------- [Range] 1`255 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R select / R definition ------------------------------------------------------------------------------- Determines the length of the whole tone. Identical to the #Zenlen command. If it is set at the head of any channel it will affect every channel. For setting the length of every interval, every length will be divided by this value. Since the default value is 96, usable lengths include 1,2,3,4,6,8,12,16,24,32,48, and 96. If you want to specify up to a 64-length note, please specify the length C192, et cetera. [Caution 1] if you want to change ths, the tempo value for one minute for value for any note length will be changed. [Caution 2] At the point of specifying, the l command's value will be returned to the initial value of 4. [Example] C192 [Result] The whole note length is set to the internal clock value 192, so the possible note lengths are increased to 14 kinds: 1,2,3,4,6,8,12,16,24,32,48,64,96,192 For specifying the value of #Tempo as well as the t command, it will become the value of a 4-length note. [see also] #Zenlen command (->˜2-11) #Tempo command (->˜2-10) t command (->˜11-1) l command (->˜4-8) =============================================================================== ˜4-12 Sound Cut Setting 1 Q ------------------------------------------------------------------------------- [Format] Q [%] numerical value ------------------------------------------------------------------------------- [Range] 0`8 ( If % is attached, 0`255 ) ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM ------------------------------------------------------------------------------- Specifies the way of cutting sound. Just like N88Basic's MML, in 1/8 units, it is possible to specify 1~8. If a % is specified, in 1/256 units, it is possible to specify the smaller 1~255. If a 0 is specified, all notes up to the last will not be cut. the default is 0. Actually, With this command specified, from the point of being cut, the numerical value of the q command will lengthen the timing of "keyoff". [Example] Q4c4 [Result] The note's length is cut by one-half. [See also] q command (->˜4-13) =============================================================================== ˜4-13 Sound Cut Setting 2 q ------------------------------------------------------------------------------- [Format 1] q [number1][-[number2]] [,number3] [Format 2] q [llength[.]][-[llength]] [,llength[.]] ------------------------------------------------------------------------------- [Range] [number1] 0`255 [number2] 0`255Ahowever the difference in number1 is within +127`-127 [Format 3] 0`255 [length] 1`255 and must be a value divisible by the whole note ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM ------------------------------------------------------------------------------- Sets a sound cut. The sound after this: 1) if number2 is not set [number1's time span], 2) if number2 is set [is randomly within the number1`number2's range], ~~~~~~~~ The sound will be cut from behind. However, if the cut length is not shorter than number3's length, The set length for number3 will be used for the length of the note. (number3 = if you want this to be used as the lowest note length, please recognize this.) For the numbers, if l is added on determines the note length, if it is not added, it will be set to the internal clock value. If you specify a value of 0 for number1, no notes will be cut before the end. The default value is 0. If number2 is set to the same value as number1, or is omitted, the cut time will be fixed at number1's value. The default is fixed at this. If you specify a value of 0 for number3, the lowest guaranteed note length will be 1. The default value is 0. It is possible to omit numbers 1~3, respectively. However, if number2 is specified, number1 must always be set as well. If a value is omitted, for numbers 1~3, if a value is not given the previous value will be reserved. If only number3 is specified, Take care to set the q and 4 commands. Actually, if the Q command is specified, from the point of the note cut, the values cut with this command: number1`2's suspended timing, if those exceed number3's timing, number3's specified timing will be set as Keyoff. [Example] Q4 q2 c4 [Result] Since a 4-length note with an internal clock value of C96 is 24, half of 24, being 12, 2 held value of 10 clock points, has the effect of keyoff. [Example 2] ql8,l16 c4 c8 [Result] with c4 actually corresponding to c8 r8, c8 is effectively the lowest pronunciation length, and is actually equivalent to c16 r16. [Example 3] q2-4 c4 c4 c4 c4 [Result] For every pronunciation, q2,q3,q4's state will be randomly selected from the list. [supplement] About making the Volume/Pitch random, an LFO random wave can be performed.(¨˜9-1-4) (Example) M0,255,1,6MW3*2 [see also] Q command (->˜4-12) =============================================================================== ˜4-14 changing note setting _ __ ------------------------------------------------------------------------------- [Format 1] _ +number [Format 2] _ -number [Format 3] __ +number [Format 4] __ -number ------------------------------------------------------------------------------- [Range] -128`+127 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM ------------------------------------------------------------------------------- With this pitch command all set note values will be altered by a half-note. _ is an absolute setting, while __ is a relative setting. When shifting pitch, of course this command is useful for things like a glissando. If an _M command(¨˜4-16) is specified, with this command and the master changing note value, the set value will be specified to be added. [Example] _-2[e__+1]8_0 [Result] dd+eff+gg+a [see also] _M command (->˜4-16) =============================================================================== ˜4-15 Transposition setting _{ } ------------------------------------------------------------------------------- [Format 1] _{+ tone1 tone2₯₯₯} [Format 2] _{- tone1 tone2₯₯₯} [Format 3] _{= tone1 tone2₯₯₯} ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM ------------------------------------------------------------------------------- Sets the transposition. In the set parts, after this command is set, it will automatically be appended by a sharp, flat or natural. [Example ‚P] _{-eab} [Result] To e, a, and b, a flat is automatically added. (E-flat major, or C minor) [Example ‚Q] _{=eab} [Result] Example ‚P's settings are reversed. =============================================================================== ˜4-16 Master Note Change Value Setting _M ------------------------------------------------------------------------------- [Format 1] _M +number [Format 2] _M -number ------------------------------------------------------------------------------- [Range] -128`+127 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM ------------------------------------------------------------------------------- Sets the master note change value for every channel. If this command is recognized, the note change will be immediately set; furthermore, the following _ commands will affect the pitch shift according to the value set by this command. [see also] _ __ command (->˜4-14) #Transpose command (->˜2-27) =============================================================================== ******************************************************************************* ˜5 [[[[ MML Commands/Volume Section ]]]] ******************************************************************************* =============================================================================== In this section, The commands regarding volume are assembled. =============================================================================== ˜5-1 Volume setting 1-1 v ------------------------------------------------------------------------------- [Format] v volumenumber ------------------------------------------------------------------------------- [Range] 0`15 (SSG,SSG rhythm source part) 0`16 (FM,PCM source part) ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,86,PPZ) / R selection / R Definition ------------------------------------------------------------------------------- Roughly sets the volume. On the SSG rhythm channels (K/R), this will have no effect if PPSDRV has not been loaded into memory. [Reference] For the FM channels,from v0`v16, shows conversion between v & V. v | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15| 16| V | 85| 87| 90| 93| 95| 98|101|103|106|109|111|114|117|119|122|125|127| For the PCM channels, the conversion chart is shown below. V(2) is for when #PCMVolume has been set to Extend. v | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15| 16| V(1) | 0| 16| 32| 48| 64| 80| 96|112|128|144|160|176|192|208|224|240|255| V(2) | 0| 1| 4| 9| 16| 25| 36| 49| 64| 81|100|121|144|169|196|225|255| [Example] v13 [Result] Sets the volume to 13. [see also] #PCMVolume command (->˜2-19) V command (->˜5-2) =============================================================================== ˜5-2 Volume setting 2 V ------------------------------------------------------------------------------- [Format] V volumenumber ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,86,PPZ) / R Selection / R Definition ------------------------------------------------------------------------------- [Range] 0`127 (FM Channel parts) 0`255 (PCM Channel parts) 0`15 (SSG Channel, SSG rhythm, PPZ parts) ------------------------------------------------------------------------------- Finely sets the volume. On the K/R channels, this will have no effect if PPSDRV has not been loaded into memory. [Example] V120 [Result] Sets the volume to 120. =============================================================================== ˜5-3 Entire Volume change 1 v+ v- ------------------------------------------------------------------------------- [Format 1] v+ number [Format 2] v- number ------------------------------------------------------------------------------- [Range] + 0`127 - 0`128 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,86,PPZ) / R Selection / R Definition ------------------------------------------------------------------------------- Increases or decreases the volume of all set volumes, according to the volumes set by other commands. (?) Also, it simultaneously increases or decreases the current volume. (Issued V command) The number is set according to the V command level (fine value). This is convenient when you want to switch the volume for the whole song. [Example ‚P] v-8 [Result] From the volume value for the previously set volume, subtracts 8 from it every time. [Caution] If this is used 2 times in one part, during the second time the first time will be ineffective. (There will not be relative change.) [Example ‚Q] v-4 V100 c4 v-6 V100 d4 [Result] c4 will be set to V96, d4 will be set to V94 (not V90) [see also] V command (->˜5-2) =============================================================================== ˜5-3 Entire volume change 2 v) v( ------------------------------------------------------------------------------- [Format 1] v) number [Format 2] v( number ------------------------------------------------------------------------------- [Range] 0`16 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,86,PPZ) ------------------------------------------------------------------------------- Increases or decreases the volume of all set volumes, according to the volumes set by other commands. (?) The differences between this and the first: 1) This command specifies the effect of a v command (rough value). 2) This command is only effective for the v command.( does not change V ) 3) This command will not have an immediate effect on the current volume. ( comes into effect after the next v command ) [Example ‚P] v(2 [Result] After the part's v command, subtracts 2 from the volume. [Caution] If this is used 2 times in one part, during the second time the first time will be ineffective. (There will not be relative change.) [see also] v command (->˜5-1) =============================================================================== ˜5-5 Relative volume change ) ( ------------------------------------------------------------------------------- [Format 1] ) [^] [%] [number] [Format 2] ( [^] [%] [number] ------------------------------------------------------------------------------- [Range] 0`255 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,86,PPZ) / R Selection / R Definition ------------------------------------------------------------------------------- Causes relative change for the set volume value. ) results in addition; ( results in subtraction. If a numerical value is omitted, it will be treated as 1. If ^ notation is added, it restricts the note change to only the next note. (accent) If % notation is added, the volume change will be fine(equivalent to V), while if it is not added, the change will be rough(equivalent to v). [Caution] For the volume value, If a % has not been added, simply: For FM channels, multiplies the value by 4 For PCM channels, multiplies the value by 16 (?) they will thus be changed. With that, In the FM channel section, with #PCMVolume set to Extend in the PCM channel section, after the change the volume will slide further than the expected value. (?) [Example ‚P] v12 c ) c (FM channel section) [Result] V117 c V121 c (larger than v13) [Example ‚Q] v13 c ( c (FM channel section) [Result] V119 c V115 c (smaller than v12) [see also] V command (->˜5-2) v command (->˜5-1) =============================================================================== ******************************************************************************* ˜6 [[[[ MML CommandsEinstrument setting section ]]]] ******************************************************************************* =============================================================================== In this section, covers and explains the commands for instrument number settings as well as instrument definition. =============================================================================== ˜6-1 Instrument number setting @ ------------------------------------------------------------------------------- [Format 1] @[@] instrumentnumber [Format 2] @[@] instrumentnumber[,number1[,number2[,number3]]] ------------------------------------------------------------------------------- [Range] instrumentnumber FM,PCM 0`255 instrumentnumber SSG 0`9 instrumentnumber SSG Rhythm 0`16383 number1 PCM -32768`+32767 number2 PCM -32768`+32767 number3 PCM -32768`+32767 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Definition ------------------------------------------------------------------------------- Sets the instrument number for the instrument to be used thereafter. If @@ is used, 128 will be added to the instrument number (?) (The second is convenient for using the PPZFile's instrument selection) ------------------------------------------------------------------------------- ˜6-1-1 Instrument number setting/For FM Channels ------------------------------------------------------------------------------- Specifies the instrument which uses the @ instrumentnumber. [Example] @1 cde @2 fga [Result] Plays c,d,e for Instrument 1, and f,g,a for Instrument 2. [Caution] If a slot is masked with the s command, For that part The instrument can only be defined for the set slot. If the s command is used, It is safer to redefine the instrument wherever possible. [see also] s command (->˜6-2) FM Instrument Definition(@) (->˜3-1) ------------------------------------------------------------------------------- ˜6-1-2 Instrument number setting/For SSG channels ------------------------------------------------------------------------------- With the @ instrumentnumber, prepared for the MML compiler, Selecting from 10 SSG software envelopes, develops for the E command. (?) The development matter is listed below. @0 E0,0,0,0 standard @1 E2,-1,0,1 Synth type 1 @2 E2,-2,0,1 Synth type 2 @3 E2,-2,0,8 Synth type 3 @4 E2,-1,24,1 Piano type 1 @5 E2,-2,24,1 Piano type 2 @6 E2,-2,4,1 Glockenspiel/Marimba type @7 E2,1,0,1 Strings Type @8 E1,2,0,1 Brass type 1 @9 E1,2,24,1 Brass type 2 @10 Please do not specify beyond these. [Example] @6v10l8 cegb>c˜8-1) ------------------------------------------------------------------------------- ˜6-1-3 Instrument number setting/SSG Rhythm Definition Part(without PPSDRV) ------------------------------------------------------------------------------- For the R part, Selects any of the internal PMD SSG drums to be used. The instrument numbers and corresponding sounds are listed below. @1 Bass Drum @2 Snare Drum 1 @4 Low Tom @8 Middle Tom @16 High Tom @32 Rim Shot @64 Snare Drum 2 @128 Hi-Hat Close @256 Hi-Hat Open @512 Crash Cymbal @1024 Ride Cymbal For PMDB2/PMDVA/PMD86, if the /N option(->PMD.DOC) has not been used, an appropriate sound from the rhythm channels will be played simultaneously. In this case, if you add the instrument numbers together, the sound will be changed so that both desired drum sounds will be somewhat audible. (It is preferable to use small-numbered SSG rhythm sounds.) [Example 1] @2c [Result] Plays a snare drum. [Example 2] @129c [Result] On PMD.COM, @1 plays a bass drum. On PMDB2/VA/86, adding to above, the rhythm source's hi-hats play simultaneously. ------------------------------------------------------------------------------- ˜6-1-4 Instrument number Definition/SSG Rhythm Definition Part(With PPSDRV) ------------------------------------------------------------------------------- If PDR,PPSDRV is loaded, selects a SSGPCM instrument. Adding to the SSG rhythm instruments listed in ˜6-1-3, this adds three new rhythm instruments with numbers @2048, @4096, and @8192. The relation between the rhythm instruments and the instrument numbers is changed according to the contents of the .PPS file. If played back with PDR set to #Double mode, it is possible to play up to 2 sounds simultaneously. (?) [Example ] @4c [Result] Plays the third SSGPCM sound defined in the .PPS file. ------------------------------------------------------------------------------- ˜6-1-5 Instrument number setting/For the PCM Source part ------------------------------------------------------------------------------- After adding an @instrumentnumber, with PMDB2/PMDVA/PMD86/PMDPPZ, it is possible to add an instrument's repeat address settings.(?) ( ->˜6-1 [Format 2] ) For each number: number1 = repeat address number2 = repeat end address (default 0) number3 = note release address (default $8000) ¦Ineffective for PMDPPZ,PMDPPZE It is possible to set values from -32768`+32767. If any number is positive(+), it is an addition to the start address of the instrument; if any number is negative(-), it is a subtraction from the end address of the instrument. If number1 is not set, there is no repeat setting. (One-shot PCM) If number2 is 0 or not set, the instrument will loop from the start location to the end address. If number3 is $8000 or not set, even at keyoff, the instrument will remain looping from the loop begin address to the loop end address. Each value is calculated as: PMD86/PMDPPZ: 1 byte PMDB2/PMDVA: 16 bytes However, if you use the /S option with PMD86 (->PMD.DOC), the values are calculated as 32 bytes. (so that ADPCM 16 bytes = PCM 32 bytes) In this case, since this is done 32 times internally, please keep each number in the range of -1024~+1023. [Example ] For PMDB2 With instrument @0 being 4000 bytes in size, in units of 16 bytes, the instrument start address is 0 and the end address is 250. J @0,100,-50,-50 g1 That is played back according to this sequence: 1) From the head address, plays until +200 (250 -|number2|). 2) Repeats playback from +100(number1) to +200(250 -|number2|). 3) At the moment of keyoff, plays from +200(250 -|number3|) to +250, and then ends. [Supplement] If there is repeat playback on the YM2608 (PMDB2/PMDVA), at the moment of repetition, the next voltage difference prediction value from the data is cleared to 0. Since this is a hardware method, you cannot do anything to change it. Because of this, when you have set a repeat, at the moment of repetition, it may happen from time to time that the volume will drop extremely. In this case, please try changing the repeat address to various other values. A trick is to: first, in the middle of playing back the target sound, use data started with an abrupt sound; if during repeat it returns to the beginning of the instrument, the volume dropping phenomenon will not happen. In this case, please express volume changes in the instrument with software envelopes. Furthermore, if you have waited for a tool which lets you view PCM waveforms while editing it, please try taking the repeat start and end addresses, setting the nearby voltage to }0, then if you choose a quiet location for voltage change, it may reduce the resulting noise from repeating. =============================================================================== ˜6-2 FM Slot Use Setting s ------------------------------------------------------------------------------- [Format] s number ------------------------------------------------------------------------------- [Range] 0`15 ------------------------------------------------------------------------------- [Sound Source] FM ------------------------------------------------------------------------------- Used mainly for the 3rd FM channel, it sets the slots(operators) used in an MML sequence. The number determines which slots are used on the channel: As slot1 = 1 , slot2 = 2 , slot3 = 4 , and slot4 = 8, you set the total sum of any of those numbers. For the 3rd FM channel, it is possible to playback each slot (4 total) independently. Thus, if you have separated the 3rd FM channel into multiple channels, you can use this command on those channels to play phrases separately on each of the slots. [Example ‚P] Using an ALG4 instrument to separate the slots into slot1&2 + slot3&4: #FM3Extend X C s3₯₯₯ X s12₯₯₯ After setting this command, using an instrument setting command @ (->˜6-1) will only use the parameters for the available slots. Outside an example, with the feedback defined only to be used on slot 1, the algorithm is always unconditionally defined. Related to that, because only the algorithm number remains the same, it is also possible to use different instrument numbers on the same 3rd FM channel. If you use this command on any channel other than the 3rd FM channel, it will only playback those selected slots. (slot masking operation) [Caution1] s3 @200cde s15 fga Because @200 is only defined for slots 1 and 2, the fga part will be played back strangely. [Caution2] Please do not make the 3rd FM channels have overlapping slot assignments. (In PMD.COM, without #FM3Extend: C-F; with #FM3Extend: C + extended channels) There is no guarantee that it will work if they do overlap. [Caution3] Because algorithm is defined unconditionally, for example: While playing back slots 1, 2, 3, and 4 with ALG6, if the channel using slots 1 and 2 changes to an ALG4 instrument, slots 3 and 4 will sound strange. Use plenty of caution. However, regarding feedback, using a sound with feedback=7 on slots 1 and 2, and defining an instrument with feedback=0 on slots 3 and 4, because feedback is not defined on those slots anyway, there will be no effect on slots 1 and 2. [Example ‚Q] In PMD.COM ; nm alg fbl @202 004 007 ; ar dr sr rr sl tl ks ml dt ams Trumpet *2 013 014 000 003 001 023 002 004 000 000 ;slot1 019 003 000 010 000 000 001 008 000 000 ;slot2 013 014 000 003 001 020 002 004 000 000 ;slot3 019 003 000 010 000 000 001 004 000 000 ;slot4 C s$3 ;slot1,2 only D s$c ;slot3,4 only CD @202v12M12,1,8,2*1 C o3l8W12,-2[[a4ga4>c4d4:c4c4f4fg4 d4 D o3l8W12,-2[[e4ee4 a4b4:a4 ge4e4]4: a4 fg4d4]2>c4cd4˜6-5) =============================================================================== ˜6-7 Rhythm pattern selection/composition R ------------------------------------------------------------------------------- [Format] R number ------------------------------------------------------------------------------- [Range] 0`255 ------------------------------------------------------------------------------- [Sound Source] R Selection ------------------------------------------------------------------------------- By using the rhythm definition part (R), plays a rhythm pattern specified by the number of the defined rhythm value. [Example] R0R0R0R1 [Result] Plays the R0 pattern 3 times, and then the R1 pattern once. [see also] How to use the rhythm parts(K/R) (->˜1-2) =============================================================================== ******************************************************************************* ˜7 [[[[ MML CommandsE Detune section ]]]] ******************************************************************************* =============================================================================== In this section, the commands for subtly altering pitch are enumerated. =============================================================================== ˜7-1 Detune setting D DD ------------------------------------------------------------------------------- [Format 1] D number [Format 2] DD number ------------------------------------------------------------------------------- [Range] -32768`+32767 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,86,PPZ) ------------------------------------------------------------------------------- Sets the detuneifrequency shifting valuej. D Command sets an absolute detune; DD Command changes the value relative to the previous set detune. The default detune value is 0. On the SSG channels, if you used #Detune Extend or DX, even the same detune values will produce different conditions. For #Detune set to Normal or DX0, the value output to the FM Source LSI will respond as expected, for example, a value of +1 will slide the pitch +1. For #Detune Extend or DX1, on any octave, the same detune value will produce the same pitch slide. However, at non-zero values (for example, D1), they will always, at a minimum, be separate by 1. (?) For the PCM and FM sources, they will be raised or lowered as expected with the pitch value sent to the FM Source LSI (?) If the DM command (¨˜7-6) is used, the detune will be set to the value of this command plus the master detune value. [Example] G D0 v13 o5g1 H D1 v13 o5g1 [Result] For parts G and H, they will be played together with subtly differing frequencies. [Caution] When the DD command executes it does not check if you set the detune value above +32767 or below -32768. [See also] DX command (->˜7-3) #Detune command (->˜2-16) DM command (->˜7-6) =============================================================================== ˜7-2 FM Channel 3 Independent Operator Detune Setting sd sdd ------------------------------------------------------------------------------- [Format1] sd operatornumber , number [Format2] sdd operatornumber , number ------------------------------------------------------------------------------- [Range] operatornumber 1`15 number -32768`+32767 ------------------------------------------------------------------------------- [Sound Source] FM(Channel 3) ------------------------------------------------------------------------------- Only usable on FM channel 3, this sets the detune values of the operators independently. The sd command sets an absolute value; The sdd command changes the value relative to the current value. Sets the number of the operator to be used, then the detune value. The number determines which slots are used on the channel: As slot1 = 1 , slot2 = 2 , slot3 = 4 , and slot4 = 8, you set the total sum of any of those numbers. As it is possible to use this command simultaneously with the D command, in that case, AFTER the detune values of every operator in the selected channel are modified by the D command, it adds the effect of this command to the selected operators. By default all operators are set to 0. [Caution] All of the FM Channel 3 MML channels share access to the operator values. For example, using PMD.COM, If channel C is set to use operators 1 and 2, and channel D is set to use operators 3 and 4, if you use the command "sd8,+10" on channel C, It will add +10 to the detune value of the instrument used on channel D. In order to avoid this phenomenon, please do not use operator numbers outside the scope of the MML channel. Else, it is necessary to return the detune values of unused operators to 0 when changing an operator which is still being used. (?) [Example ] sd6,-4 [Result] Subtracts 4 from the detune on slots 2 and 3. [see also] s command (->˜6-2) D DD commands (->˜7-1) =============================================================================== ˜7-3 SSG Pitch Revision Setting DX ------------------------------------------------------------------------------- [Format] DX number ------------------------------------------------------------------------------- [Range] 0`1 ------------------------------------------------------------------------------- [Sound Source] SSG ------------------------------------------------------------------------------- Selects whether to use the revision of the SSG channels' pitch. If set to 0, when using detune/LFO, if the value shifts by one, the value sent to the SSG channel will also be shifted by one. (even with the same detune value, the SSG channel will have a wider frequency range and the pitch will slide further.) If set to 1, it reduces the frequency range of the SSG channel so that the same detune/LFO value will produce the same frequency on different sound channels. This has the same function as #Detune, but it is possible to affect channels independently with this command. The default value is 0. [Example ] DX1 [Result] After this the detune pitch values will be revised. [see also] #Detune command (->˜2-16) D DD commands (->˜7-1) M MA MB commands (->˜9-1) =============================================================================== ˜7-4 Bend width setting B ------------------------------------------------------------------------------- [Format] B number ------------------------------------------------------------------------------- [Range] 0`255 ------------------------------------------------------------------------------- [Sound Sources] FM / SSG / PCM(AD,86,PPZ) ------------------------------------------------------------------------------- Sets a MIDI-like bend width. Identical to #Bendrange. It is possible to set between 0 and 255 half-notes of length. The I command will take effect if you set any value other than 0. The effect of this command extends over all subsequent channels. For example, if you only set B12 on channel C, channels A and B will not be set, but all channels after C (CDEFGHIJ{#FM3Extend channels) will be set. However, if the value is set with #Bendrange it will take effect on all channels. [Caution] When setting the bend range, even if you a cautionary note after I commands, because this makes the MML very hard to read, it is best to not use this command outside of making conversions to MIDI. [Example ] B12 [Result] An I command with a value of 8192 will slide the pitch exactly one octave. [see also] #Bendrange command (->˜2-15) I command (->˜7-5) =============================================================================== ˜7-5 Pitch Setting I ------------------------------------------------------------------------------- [Format] I ------------------------------------------------------------------------------- [Range] -32768`+32767 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,86,PPZ) ------------------------------------------------------------------------------- A MIDI-like pitch setting. Slides across the bend range frequency with }8192. Unless the bend width is set with #Bendrange or a B command, this is ineffective. [Caution1] Only the FM channels accurately set the pitch. The SSG/ADPCM channels as they are would be raised and lowered, but it is easier to not use this command. [Caution2] If you set the bend range AFTER this command to make it take effect, The pitch/detune values will be first set after the next pitch command takes place. (?) [Example ‚P] A B2I0[cdeI8192fga]2 [Result] The same as A B2[I0cdeI8192fga]2 The D command will also be affected. [Example ‚Q] A B0D10[cdeD0]2 If written like this... [Result] A D10 cdeD0 cdeD0 ...will sound like this, but [Example ‚R] A B2D10[cdeD0]2 if written like this... [Result] A D10cdeD0 D10cdeD0 ...will sound like this, so take caution. [Example ‚S] A B12o4l8 I0cI1000cI2000cI3000cI4000cI5000cI6000cI7000cI8192c [Result] The pitch will be raised little by little from c on octave 4 to c on octave 5. [see also] #Bendrange command (->˜2-15) B command (->˜7-4) D DD command (->˜7-1) =============================================================================== ˜7-6 Master Detune setting DM ------------------------------------------------------------------------------- [Format] DM number ------------------------------------------------------------------------------- [Range] -32768`+32767 ------------------------------------------------------------------------------- [Sound Sources] FM / SSG / PCM(AD,86,PPZ) ------------------------------------------------------------------------------- Sets the master detune value for each respective channel. If this command is recognized, it sets an immediate detune, and any D commands after this point will increase or decrease the detune value. (?) [see also] D DD commands (->˜7-1) =============================================================================== ******************************************************************************* ˜8 [[[[ MML Commands EEnvelope section ]]]] ******************************************************************************* =============================================================================== In this section, commands about software envelopes for the change of the tone of SSG/PCM are enumerated. =============================================================================== ˜8-1 SSG/PCM software envelope setting E ------------------------------------------------------------------------------- [Format 1] E number1 , number2 , number3 , number4 [Format 2] E number1 , number2 , number3 , number4 , number5 [, number6] ------------------------------------------------------------------------------- [Sound Source] SSG / PCM(AD,86,PPZ) ------------------------------------------------------------------------------- [Range] [Format1] number1 0`255 number2 -15`+15 number3 0`255 number4 0`255 [Format 2] number1 0`31 number2 0`31 number3 0`31 number4 0`15 number5 0`15 number6 0`15 ------------------------------------------------------------------------------- Sets a software envelope (only for OPN/OPNA SSG/ADPCM channels). It is possible to select two envelopes. However, they cannot be used simultaneously. If you only write 4 numbers, it will be treated as Format 1, and for 5 or 6 numbers it will be treated as Format 2. With #Envelopespeed Normal or EX0, the speed depends on the tempo. With #Envelopespeed Extend or EX1, the speed is fixed. ------------------------------------------------------------------------------- ˜8-1-1 Software envelope setting/For Format 1 ------------------------------------------------------------------------------- This is a simple method for setting volume envelopes, unique to PMD. number 1 = Attack Length (AL) number 2 = Decay Depth (DD) number 3 = Sustain Rate (SR) number 4 = Release Rate (RR) With #Envelopespeed set to Normal or EX0, 1 clock = 1 internal clock With #Envelopespeed set to Extend or EX1, 1 clock = about 56 Hz Listed below are how each setting affects the sound. 1. After keyon, with the set volume, after the AL clock ends, the volume is increased or decreased according to the value of DD. 2. After each SR clock cycle, the volume is decreased by 1. 3. At keyoff, after each RR clock cycle, the volume is decreased by 1. When SR = 0, At step 2 the volume will not decay. When RR = 0, At step 3 the volume will instantly drop to 0. [Example] C96 EX0 E1,-2,2,1 v13 l16 gr [Result] The volume changes according to below: 13 11 11 9 9 7 7 6 5 4 3 2 ͺkeyon ͺkeyoff ------------------------------------------------------------------------------- ˜8-1-2 Software envelope setting/For Format 2 ------------------------------------------------------------------------------- The method is nearly identical to an FM volume envelope. number 1 = Attack Rate (AR) number 2 = Decay Rate (DR) number 3 = Sustain Rate (SR) number 4 = Release Rate (RR) number 5 = Sustain Level (SL) number 6 = Attack Level (Default 0) Attack Level sets the starting volume for the attack phase. While it is similar to an FM envelope, please be cautious of the fact that the envelope speed may be different. In particular, with #EnvelopeSpeed Normal or EX0, the envelope speed will be dependent on tempo. Please consult an FM synthesis manual or something for the meaning of the parameters. [Example] E31,18,4,15,2 [Result] Sets a piano-like envelope. ------------------------------------------------------------------------------- [See also] #Envelopespeed command (->˜2-18) EX command (->˜8-2) =============================================================================== ˜8-2 Software envelope speed setting EX ------------------------------------------------------------------------------- [Format] EX number ------------------------------------------------------------------------------- [Range] 0`1 ------------------------------------------------------------------------------- [Sound Sources] SSG / PCM(AD,86,PPZ) ------------------------------------------------------------------------------- If set to 1 the E command will change to be independent of the tempo. If set to 0 it will be dependent on the tempo. (If the tempo is slow, the envelope is slow) Has the same function as #EnvelopeSpeed, but with this it is possible to change the setting for individual channels. The default is 0. [Example ] EX1 [Result] The envelope on the channel this is used on will operate independently of the tempo. [see also] #Envelopespeed command (->˜2-18) E command (->˜8-1) =============================================================================== ******************************************************************************* ˜9 [[[[ MML CommandsE‚k‚e‚n Section ]]]] ******************************************************************************* =============================================================================== In this section, commands about ‚k‚e‚n(Low Frequency Oscillation) are enumerated. LFOs are generally used for the FM/SSG/PCM pitch/volume, as well as the FM modulation level, to create effects such as vibrato (pitch), tremolo (volume), and a "wah-wah" effect (modulation level). Also, because various waveforms have been prepared for this use, including a random wave, it is convenient for creating sound effects. =============================================================================== ˜9-1 Software LFO setting M MA MB ------------------------------------------------------------------------------- [Format 1] M number1 [Format 2] M l length[.] [Format 3] M number1 , number2 , number3 , number4 [Format 4] M l length[.] , number2 , number3 , number4 [Format 5] MA number1 [Format 6] MA l length[.] [Format 7] MA number1 , number2 , number3 , number4 [Format 8] MA l length[.] , number2 , number3 , number4 [Format 9] MB number1 [Format 10] MB l length[.] [Format 11] MB number1 , number2 , number3 , number4 [Format 12] MB l length[.] , number2 , number3 , number4 ------------------------------------------------------------------------------- [Range] [number1] 0`255 [number2] 0`255 [number3] -128`+127 [number4] 0`255 [length] 1`255, divisible by the whole note length ------------------------------------------------------------------------------- [Sound Sources] FM / SSG / PCM(AD,PPZ) ------------------------------------------------------------------------------- Sets the software LFO. In PMD, if 2 software LFO's are set, It is possible to use each independently. For M or MA, the first LFO is set, (Below: LFO1) For MB, the second LFO is set. (Below: LFO2) The settings for each number are listed below. number1 = delay number2 = speed number3 = depthA number4 = depthB If the only setting is delay, only the current delay value will change. If you attach an "l" before the delay value, it will be treated as a note length; if not, it is treated as a number of internal clock cycles. For the LFO speed: If #LFOSpeed Normal or MX0 is used, it will depend on the tempo. If #LFOSpeed Extend or MX1 is used, it will be based on a fixed speed. You need to use the MW command to select a waveform. Each value setting is subtly different depending on which waveform you use. If #LFOSpeed Normal or MX0 is used, 1 clock = 1 internal clock If #LFOSpeed Extend or MX1 is used, 1 clock = about 56 Hz This changes the LFO according to the below explanations. Please understand that the MX, MW, and * commands used below are commands to change the LFO settings. (For LFO B, these commands are MXB, MWB, and *B) ------------------------------------------------------------------------------- ˜9-1-1 Software LFO Setting/For MW0 (Triangle Wave ‚P) ------------------------------------------------------------------------------- 1) At keyon, waits out the delay. 2) According to the speed, adds depthA to the volume/pitch. 3) 2) is repeated depthB times. If set to 255 will loop infinitely. 4) Inverts depthA, and doubles depthB during the first inversion.(?) 5) Returns to 2). (I'm really not sure how any of these graphs originally looked) [Image]@‚c @^_ @^@@ _ ^@@@@ _@@@@@@@@ ^ }‚O¨ EEEE----------_-------^-- ¨ @@@ ‚`@@@‚a@@ ‚b_@@@@^ _@@^ @ _^ ‚``‚a (length) : delay (parameter‚P) ‚a`‚b (length) : speed ~ depthB (parameter‚Q ~ parameter‚S) ‚a`‚c (depth) : depthA ~ depthB (parameter‚R ~ parameter‚S) ------------------------------------------------------------------------------- ˜9-1-2 Software LFO Setting/For MW1 (Sawtooth Wave) ------------------------------------------------------------------------------- 1) After keyon, waits out the delay. 2) According to the speed, adds depthA to the volume/pitch. 3) 2) is repeated depthB times. If set to 255 will loop infinitely. 4) Inverts the depth of the volume/pitch, and doubles depthB during the first inversion. (?) 5) Returns to 2). [Image]@@ ‚c @^ @^ @^ ^ ^ @@@^ @@^ }‚O¨ EEEE------------^------------^-- ¨ @@@ ‚`@@@‚a@@‚b@ ^ ^ @^ @@@^ ^ @@^ ‚``‚a (length) : delay (parameter‚P) ‚a`‚b (length) : speed ~ depthB (parameter‚Q ~ parameter‚S) ‚a`‚c (depth) : depthA ~ depthB (parameter‚R ~ parameter‚S) ------------------------------------------------------------------------------- ˜9-1-3 Software LFO Setting/For MW2 (Pulse Wave?) ------------------------------------------------------------------------------- 1) After Keyon, waits out the delay. 2) The depth of the volume/pitch is depthA~depthB. 3) Waits out the speed clock length. If set to 255, there is no change. 4) Inverts the depth of the volume/pitch. 5) Returns to 3). [Image]@@‚cEEEE EEEE }‚O¨ EEEE------------------------------ ¨ @@@ ‚`@@@‚a@@@ ‚b EEEE EEE ‚``‚a (length) : delay (parameter1) ‚a`‚b (length) : speed (parameter2) ‚a`‚c (depth) : depthA ~ depthB (parameter3 ~ parameter4) ------------------------------------------------------------------------------- ˜9-1-4 Software LFO Setting/For MW3 (Random Wave) ------------------------------------------------------------------------------- 1) After Keyon, waits out the delay. 2) Sets the pitch/volume depth to a random value between 0 and (depthA ~ depthB). 3) Waits out the speed clock length. If set to 255, there is no change. 4) Returns to )2. [Image]@@‚cEE EE @@EE@@EE }‚O¨ EEEE----------------EE---------- ¨ @@@ ‚`@@@‚a@‚b @@EE @@@@EE @@E ‚``‚a (length) : delay (parameter‚P) ‚a`‚b (length) : speed (parameter‚Q) ‚a`‚c (depth) : ‚O`}( depthA ~ depthB ) @ ( ‚O`}(parameter‚R ~ parameter‚S) ) ------------------------------------------------------------------------------- ˜9-1-5 Software LFO Setting/For MW4 (Triangle Wave 2) ------------------------------------------------------------------------------- 1) After Keyon, waits out the delay. 2) According to the speed, adds depthA to the volume/pitch. 3) Repeats 2) depthB times. If set to 255 will loop infinitely. 4) Inverts depthA. Unlike MW0, this does not change depthB. 5) Returns to 2). [Image]@@ ‚c@ ^_@@@@^_@@@@^ @^@@_ @^@@_ @^ ^@@@@_^@@@@_^ }‚O¨ EEEE------------------------------ ¨ @@@ ‚`@@@‚a@@‚b ‚``‚a (length) : delay (parameter‚P) ‚a`‚b (length) : speed ~ depthB (parameter‚Q ~ parameter‚S) ‚a`‚c (depth) : depthA ~ depthB (parameter‚R ~ parameter‚S) [Supplement] MW0 or Triangle Wave 1 creates a wave from -(depthA ~ depthB) to +(depthA ~ depthB). MW4 or Triangle Wave 2 creates a wave from 0 to +(depthA ~ depthB). This second triangle wave is mainly useful for volume LFO(tremolo/"wah-wah"). For a pitch LFO, this is suitable for things like simulating a guitar's arm. (?) ------------------------------------------------------------------------------- ˜9-1-6 Software LFO Setting/For MW5 (Triangle Wave 3) ------------------------------------------------------------------------------- 1) After Keyon, waits out the delay clock. 2) According to the speed, adds depthA ~bdepthAbto the volume/pitch. 3) Repeats 2) depthB times. If set to 255 will loop infinitely. 4) Inverts the depth of the volume/pitch, and doubles depthB during the first inversion. (?) 5) Returns to 2). [Image]@@ ‚c @^_ @^@@_ ^@@@@_@@@@@@@@^ }‚O¨ EEEE------------_------------^-- ¨ @@@ ‚`@@@‚a@@‚b@@@ _@@@@^ _@@^ @_^ ‚``‚a (length) : delay (parameter‚P) ‚a`‚b (length) : speed ~ depthB (parameter‚Q ~ parameter‚S) ‚a`‚c (depth) : depthA ~ bdepthAb ~ depthB @ (parameter‚R ~ bparameter‚Rb ~ parameter‚S) [Supplement] This is a deeper triangle wave. [Caution] The LFO variation is from -32768 to +32767. To reduce CPU use, it does not check whether this range is exceeded, so use caution. [Example ] M0,1,32,64 MW5 *1 For the above example, pitch change for each 1 clock: 32~32 = 1024, however, because with 32768/1024 = 32 clock cycles pass +32768, if a longer note is played, the pitch will be reversed. (?) ------------------------------------------------------------------------------- ˜9-1-7 Software LFO Setting/For MW6 (One-shot) ------------------------------------------------------------------------------- 1) After Keyon, waits out the delay clock. 2) According to the speed, adds depthA to the volume/pitch 3) Repeats 2) depthB times. If set to 255 will loop infinitely. 4) Continues to maintain the condition after the repetition ends. [Image]@@ ‚c @^PPPPPPPPPPPP @^ ^ }‚O¨ EEEE------------------------------ ¨ @@@ ‚`@@@‚a@@‚b ‚``‚a (length) : delay (parameter‚P) ‚a`‚b (length) : speed ~ depthB (parameter‚Q ~ parameter‚S) ‚a`‚c (depth) : depthA ~ depthB (parameter‚R ~ parameter‚S) [Supplement] Using the volume LFO, this is useful for when you want to temporarily make a sustained sound decay. Also, depending on how you use it, it can be used for stuff like fading in a trumpet sound. ------------------------------------------------------------------------------- [Caution1] This command will not immediately change the LFO. The LFO will receive the effect of this command after the LFO is turned on with the * command. However, this limitation does not apply if the LFO is already turned on. [Caution2] When this command is processed, even if an LFO switch independent of keyon is set inside a tie, the LFO used up to that point will be reset, and the next note will receive the effect of the delay value. [Example ] MW0 M24,1,8,2 *1 [Result] Sets LFO 1 to be a triangle wave LFO with delay 24, speed 1, and depth 8~2. [see also] #LFOSpeed command (->˜2-17) MX MXA MXB commands (->˜9-5) MW MWA MWB commands (->˜9-2) * *A *B commands (->˜9-3) =============================================================================== ˜9-2 Software LFO Waveform Setting MW MWA MWB ------------------------------------------------------------------------------- [Format1] MW number [Format2] MWA number [Format3] MWB number ------------------------------------------------------------------------------- [Range] 0`6(?) ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,PPZ) ------------------------------------------------------------------------------- Sets the LFO waveform. MWA and MWB set the waveforms of LFOs 1 and 2 respectively. MW is identical to MWA. The effects of each set number are listed below. Please consult the explanations of the M, MA, and MB commands for their effects. 0 Triangle Wave 1 (default) 1 Sawtooth Wave 2 Pulse Wave 3 Random Wave 4 Triangle Wave 2 5 Triangle Wave 3 6 One-shot [Example ] MW2 [Result] From this point LFO2 will have a pulse wave waveform. [see also] M MA MB commands (->˜9-1) =============================================================================== ˜9-3 Software LFO Switch * *A *B ------------------------------------------------------------------------------- [Format1] * number1[,number2] [Format2] *A number1[,[B] number2] [Format3] *B number1[,A number2] ------------------------------------------------------------------------------- [Range] 0`7 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,PPZ) ------------------------------------------------------------------------------- Controls the software LFO on/off and keyon correspondence. By default, number1 affects LFO1, and number2 (may be omitted) affects LFO2. However, by putting an A or B after the * or , you can change the target LFO. The effects of each set number are listed below. number@=@0 LFO off (default) number@=@1 pitch LFO on, at keyon number@=@2 volume LFO on, at keyon number@=@3 pitch and volume LFO on, at keyon number@=@4 LFO off number@=@5 pitch LFO on, independent of keyon number@=@6 volume LFO on, independent of keyon number@=@7 pitch and volume LFO on, independent of keyon [Example ‚P] *1 [Result] Sets LFO1 to be on at keyon, affecting pitch. LFO2 is not affected. [Example ‚Q] *0,2 [Result] Shuts of LFO1, and sets LFO2 to be on at keyon, affecting volume. [Example ‚R] *B5 [Result] Sets LFO2 to be on independent of keyon, affecting pitch. LFO1 is not affected. [Caution1] If you set a volume LFO on an FM channel, in practice the change value of the LFO will be inverted. Accordingly, if the LFO value is positive it will make the volume rise (the TL drops). When changing the target operator, as with making a "wah-wah" effect take caution. [Caution2] The PCM(86) channel cannot use a pitch LFO. [Caution3] On the rhythm channels (K/R), this is a PDR execution mode control command. [Caution4] Both the pitch and volume LFOs use the same LFO parameters (the settings in the M, MA, and MB commands). When you want to use different parameters please use two separate LFOs. [Caution5] If you use a repeated command like *B1,B2, the B1 in front will be ignored and only the B2 part will matter. [see also] M MA MB commands (->˜9-1) * command (PDR execution mode control, ->˜15-2) =============================================================================== ˜9-4 Software LFO Operator Setting MM MMA MMB [Format1] MM operatornumber [Format2] MMA operatornumber [Format3] MMB operatornumber ------------------------------------------------------------------------------- [Range] 0`15 ------------------------------------------------------------------------------- [Sound Source] FM ------------------------------------------------------------------------------- Only effective on the FM channels, this sets the operators that will be affected by the LFO. On the 3rd FM channel this can affect both pitch and volume, while on the other FM channels this can only affect volume. MMA affects LFO1, and MMB affects LFO2. MM is identical to MMA. The set number: As slot1 = 1 , slot2 = 2 , slot3 = 4 , and slot4 = 8, you set the total sum of any of those numbers. For example, if you want to affect operators 2 and 4 you will use MM10. If 0 is set: (default) For a volume LFO, it affects the carrier operators. For a pitch LFO, it affects all operators. [Example ] MM3 [Result] Affects operators 1 and 2 of LFO1. [Caution] If you set any number except 0, it will return to default when an instrument is changed. =============================================================================== ˜9-5 Software ‚k‚e‚n speed setting MX MXA MXB ------------------------------------------------------------------------------- [Format 1] MX number [Format 2] MXA number [Format 3] MXB number ------------------------------------------------------------------------------- [Range] 0`1 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,PPZ) ------------------------------------------------------------------------------- If set to 1, it changes the LFO to the extended functionality which is independent of the tempo. MXA sets LF01; MXB sets LFO2. MX is identical to MXA. If set to 0, the LFO speed is dependent on tempo, so if the tempo is slow the LFO will also be slow. This is functionally identical to #LFOSpeed, but it is possible to change the setting on separate channels with this command. The default value is 0. [Example] MXB1 [Result] LFO2 is set to be independent of the tempo. [see also] #LFOSpeed command (->˜2-17) M MA MB commands (->˜9-1) =============================================================================== ˜9-6 Rise/Fall Exclusive-use LFO Setting MP MPA MPB ------------------------------------------------------------------------------- [Format1] MP }number1[,number2[,number3]] [Format2] MP }number1[,l[.][,number3]] [Format3] MPA }number1[,number2[,number3]] [Format4] MPA }number1[,l[.][,number3]] [Format5] MPB }number1[,number2[,number3]] [Format6] MPB }number1[,l[.][,number3]] ------------------------------------------------------------------------------- [Range] [number1] -128`+127 [number2] 0`255 [number3] 0`255 [length] 1`255 and must be divisible by the whole note ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,PPZ) ------------------------------------------------------------------------------- Selects the rise/fall-type LFO and turns it on. MPA sets LFO1, and MPB sets LFO2. MP is identical to MPA. }number1 = depth number2 = delay (0 if omitted) number3 = speed (1 if omitted) If "l" is included before the delay, it will be a note length, otherwise it will be a number of clock cycles. This is practically the same as writing MA(or MB)number2,number3,number1,255 *1. [Example ] MP-80 [Result] Sets a dropping LFO for something like a drum channel. [Caution] Since this is simply a combined M and * command, if you have selected the pulse or random wave with MW, MWA, or MWB, this will not operate normally. [see also] M MA MB commands (->˜9-1) * *A *B commands (->˜9-3) MW MWA MWB commands (->˜9-2) =============================================================================== ˜9-7 LFO Depth Periodic Change Setting MD MDA MDB ------------------------------------------------------------------------------- [Format1] MD number1[,}number2[,number3]] [Format2] MDA number1[,}number2[,number3]] [Format3] MDB number1[,}number2[,number3]] ------------------------------------------------------------------------------- [Range] [number1] 0`255 [number2] -128`+127 [number3] 0`127 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,PPZ) ------------------------------------------------------------------------------- Sets a periodic change for the LFO depth (depthA). This makes it possible to have an LFO which gradually gets deeper or lighter. MDA sets LFO1, and MDB sets LFO2. MD is identical to MDA. number1 = speed }number2 = depth (plus sign may be omitted) @number3 = time (0 is infinite) For each LFO speed cycle, it changes depthA according to the value of depth, repeats the set number of times, then stops. Regardless of the LFO depthA sign, the plus sign means increasing depth, and the minus sign means decreasing depth. If number1 is 0, there is no periodic change. Only if number1 is 0 may number2 be omitted. (defaults to 0) If number3 is omitted, it creates an infinite loop. (same as 0) The LFO cycle will increase by one according to below. Because the one-shot LFO has no cycle, this will have no effect. 1. Triangle Wave Has effect when the LFO change amount is 0. 2. Sawtooth or Pulse Wave Has effect when the LFO is inverted. 3. Random Wave Has effect when the LFO change amount is changed. [Example 1] MD2,1 [Result] After every 2 cycles(?), adds 1 to depthA, and continues until Keyoff. [Example 2] MD3,2,4 [Result] After every 3 cycles(?), adds 2 to depthA and repeats 4 times. [see also] M MA MB commands (->˜9-1) =============================================================================== ˜9-10 Hardware LFO Speed/Delay Setting H ------------------------------------------------------------------------------- [Format1] H number1[,number2][,number] [Format2] H number1[,number2][,l[.]] ------------------------------------------------------------------------------- [Range] [number1] 0`7 [number2] 0`3 [number3] 0`255 [length] 1`255 and must be divisible by the whole note ------------------------------------------------------------------------------- [Sound Source] FM(OPNA,OPM) ------------------------------------------------------------------------------- Sets the hardware LFO PMS and AMS. (only for OPNA/OPM FM channels) number1 = PMS ( pitch speed ) number2 = AMS ( volume speed ) number3 = Delay ( time to wait after Keyon(equivalent to #D command)) If AMS is omitted, it defaults to 0. If Delay is omitted, it is not set.(retains the previous value) It is necessary to set the depth with the # or ## commands before starting the LFO. [Caution] On the OPNA, even if the hardware LFO is set to off with the # command, if the AMS value is big, it seems that the channel volume will get quiet. Therefore, to completely turn off the LFO when using AMS, please set "#0H0". [Example ] H6,2,l4 [Result] Sets the hardware LFO to have a PMS value of 6, an AMS value of 2, and to be delayed by a fourth note. [see also] # command (->˜9-11) ## command (->˜9-12) #D command (->˜9-13) =============================================================================== ˜9-11 Hardware LFO Switch/Depth Setting (OPNA) # ------------------------------------------------------------------------------- [Format] # number1[,number2] ------------------------------------------------------------------------------- [Range] [number1] 0`1 [number2] 0`7 ------------------------------------------------------------------------------- [Sound Source] FM(OPNA) ------------------------------------------------------------------------------- Switches the hardware LFO on or off. (only for OPNA FM channels) n1 = switch (0 is off, 1 is on; default 0) n2 = depth (may be omitted if switch is 0) Each of the FM channels (A-F) share the same values. [Example ] #1,6 [Result] Switches the hardware LFO on, and sets the depth to 6. [see also] H command (->˜9-10) =============================================================================== ˜9-12 Hardware LFO Frequency/Waveform/Depth Setting (OPM) ## #f #w #p #a ------------------------------------------------------------------------------- [Format] ## number1,number2,}number3,number4 #f number1 #w number2 #p }number3 #a number4 ------------------------------------------------------------------------------- [Range] [number1] 0`255 [number2] 0`3 [number3] -64`+63 [number4] 0`127 ------------------------------------------------------------------------------- [Sound Source] FM(OPM) ------------------------------------------------------------------------------- Sets the hardware LFO frequency/waveform/PMD/AMD. (only for the OPM FM channels) number1 LFO_FRQ ( frequency ) number2 Waveform ( waveform ) }number3 PMD ( pitch depth ) number4 AMD ( volume depth ) #f is FRQ; #w is Waveform; #p is PMD; #a is AMD. They may be used independently. Each of the FM channels (A-I) share the same values. [Example ] ##100,0,20,10 [Result] Sets the hardware LFO to have LFO_FRQ 100, Waveform 0, PMD +20, and AMD 10. [see also] H command (->˜9-10) =============================================================================== ˜9-13 Hardware LFO Delay Setting #D ------------------------------------------------------------------------------- [Format1] #D number [Format2] #D l[.] ------------------------------------------------------------------------------- [Range] [number] 0`255 [length] 1`255 and must be divisible by the whole note ------------------------------------------------------------------------------- [Sound Source] FM(OPNA,OPM) ------------------------------------------------------------------------------- Sets the hardware LFO delay. This allows you to set the third parameter of the H command independently. After keyon, until the set time has passed, PMS/AMS will be set to 0. If "l" is included before the length, it will be a note length, otherwise it will be a number of clock cycles. This does not mean that the PMS and AMS are not set with the H command. [Example ] #D24 [Result] Sets the hardware LFO to start after a fourth note length of time has passed (if the whole note is 96 clock cycles). [see also] H command (->˜9-10) =============================================================================== ******************************************************************************* ˜10 [[[[ MML Commands ELoop control section ]]]] ******************************************************************************* =============================================================================== In this section, commands about global and local loops are enumerated. Local loops are useful for decreasing MML code length as well as filesize after compilation. The global loop sets the song to loop infinitely. =============================================================================== ˜10-1 Local loop setting [ : ] ------------------------------------------------------------------------------- [Format] [ mml1 [:] mml2 ] [number] ------------------------------------------------------------------------------- [Range] 0`255 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Sets a loop(repetition). If the number of loop times is set to 0, it will loop indefinitely. If the value is omitted, it will be set to the number set with #LoopDefault. If #LoopDefault has not been set it will be 0. A colon ":" will break out of the loop at that point during the last iteration of the loop. [Example 1] [ cde : fga ]2 b [Result] Plays cde fga cde b. [Caution 1] You may nest up to 32 loops. Nesting is when you include a loop within a loop, and [[[[[[[cde]2]2]2]2]2]2]2 has a depth of 7 nested loops, but [[cde]2[fga]2[b>cd<]2]2 has a depth of 2 nested loops. [Caution 2] The values of the following commands will return to their values before the loop when the loop point is reached. Also, when breaking a loop, they will have the value set at the end of the loop. o > < X ₯₯₯ Octave Setting l ₯₯₯ Default Note Length Setting S ₯₯₯ Ornamental Note Setting W ₯₯₯ Fake Echo Setting C ₯₯₯ Whole Note Length Setting _{ } ₯₯₯ Transpose Setting However, all other commands, include the Volume Setting, will have their values carried over. [Supplement] If a single note is set in MML, I think it is easy to understand if you think of the compiler as automatically setting the five values: "pitch", "note length", "octave", "ornamental note", and "mock echo". (?) [Example 2] o4l8 cccc The compiler changes this into: [Result] o4c8 o4c8 o4c8 o4c8 [Example 3] o4l8 [ c o5l4c ]2 [Result] o4c8 o5c4 o4c8 o5c4 The o and l commands are o5l4 at the loop end, but at returning to the front of the loop they return to their starting setting o4l8. [Example 4] o4 [ c : >c ]2 d [Result] o4c o5c o4c o5d At the loop break the octave is o4, but after the loop exit command ] it immediately changes to o5. If you do not think you understand the above explanations, you can avoid trouble if you always reset the o, l, S, and W commands after using the [ and ] commands. [Example 5] [ o4l8 cdl4ef : gab>c ] o5l8 def [Result] o4l8 cdl4ef gab>c o4l8 cdl4ef o5l8 def [see also] #LoopDefault command (->˜2-13) =============================================================================== ˜10-2 Global loop setting L ------------------------------------------------------------------------------- [Format ] L ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- When the MML for a channel ends, it will return to the point set with this command. If this is not set, the channel will stop playing. [Caution] Like with a local loop, the octave, note length, etc, will be switched back to their settings at the location of the L. But, conversely, any other commands will have their settings carried over from the end of the global loop, so please take caution. As much as possible, put initialization commands immediately after the L command, to avoid having the song repeat in an unexpected way. [Wrong example] A @0 v12 cccc A L cccc : A @1v10 cccc [Result] On line 2, the sequence will be played once with @0v12, but at the 2nd iteration and after, it plays with @1v10. [Correct example] A @0 v12 cccc A L @0 v12 cccc : A @1v10 cccc [Result] On line 2, each repetition will play @0 v12. Actually, if LFO settings, envelopes, transposition commands, etc, are changed after the global loop, they should also have reset commands placed immediately after the L command. =============================================================================== ******************************************************************************* ˜11 [[[[ MML CommandsETempo setting section ]]]] ******************************************************************************* =============================================================================== In this section, the commands affecting the tempo are listed. =============================================================================== ˜11-1 Tempo setting 1 t ------------------------------------------------------------------------------- [Format] t number [Format 2] t }number ------------------------------------------------------------------------------- [Range] 18`255 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Sets the tempo. This is equivalent to #Tempo, but with this command you can change the tempo during the song. All channels share the same tempo value. If a plus sign or minus sign is included, the tempo will be changed relative to the current value. This will set how many times in one minute 48 clock cycles will repeat. When a whole note is 96 clock cycles (default), this will be equivalent to half notes. When a whole note is 192 clock cycles, this will be equivalent to fourth notes. You cannot set a value lower than 18. [Example ‚P] C96 t100 [Result] This sets the tempo to be so that one minute is equivalent to 100 half notes of length. [Example ‚Q] t+10 [Result] Adds 10 to the tempo value. [see also] #Tempo command (->˜2-10) =============================================================================== ˜11-2 Tempo setting 2 T ------------------------------------------------------------------------------- [Format 1] T number [Format 2] T} number ------------------------------------------------------------------------------- [Range] 0`255 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- This sets the tempo, but unlike the t command, this sets the direct value passed to TimerB. This is equivalent to #Timer, but with this command you can change the tempo during the song. All channels share the same tempo value. If a plus sign or minus sign is included, the tempo will be changed relative to the current value. Particularly for slow tempos, this allows you to set the tempo more finely than with the t command. On the X68000, to be compatible with the OPN version, this inputs a calculated OPM value from the OPN value. The default value is 200. [Example ‚P] T180 [Result] Timer-B is set to a value of 180. [Example ‚Q] T+10 [Result] Adds 10 to Timer-B. [see also] #Timer command (->˜2-10) =============================================================================== ******************************************************************************* ˜12 [[[[ MML CommandsENote processing commands ]]]] ******************************************************************************* =============================================================================== In this section, grace notes, fake echos, and note processing commands are listed. Unknown in other sound drivers and unique to PMD, while these effects can be performed using other commands, if you can master how to use these commands, you will be able to create more realistic sounding compositions with fewer sound channels. =============================================================================== ˜12-1 Grace Note Setting S ------------------------------------------------------------------------------- [Format 1] S number1[,}number2[,number3]] [Format 2] S l-length[.][,}number2[,number3]] ------------------------------------------------------------------------------- [Range] [number1] 0`255 [number2] -128`+127 [number3] 0`1 [length] 1`255, a value divisible by the whole note value ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,86,PPZ) ------------------------------------------------------------------------------- This automatically attaches an ornamental note at compile time on a single sound channel for notes after this command. number1 = speed (0 is off) }number2 = depth (default is -1) number3 = tie flag (default is 1) For the input pitch, from a pitch shifted a number of half steps according to the depth, with the set speed, sets an ornamental note which then returns to the normal pitch. If "l" is included before the speed, it will be a note length, otherwise it will be a number of clock cycles. If the tie flag is 0, the sound will not be connected, similar to a glissando. If a note length less than the absolute value of (speed~depth) is set, this command will not take effect. If S0 is written, the channel will return to usual. (no more grace notes) [Example ‚P] S2,-2e8 [Result] d%2 & d+%2 & e%10 [Example ‚Q] S1,-3,0e8 [Result] c+%1 d%1 d+%1 e%9 [Caution1] Because this effect is added at compile time, if you use it too much the filesize will get large. [Caution2] While this command is being used, you cannot use l^ or l= commands. [see also] l^ l= commands (->˜4-9) =============================================================================== ˜12-2 Fake Echo Setting W ------------------------------------------------------------------------------- [Format1] W number1[,[%]}number2[,number3]] [Format2] W llength[.][,[%]}number2[,number3]] ------------------------------------------------------------------------------- [Range] [number1] 0`255 [number2] -128`+127 [number3] 0`3 [length] 1`255 and must be divisible by the whole note ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM(AD,86,PPZ) ------------------------------------------------------------------------------- After this command is used, all notes will have a fake echo effect automatically added at compile time. This is useful for when you cannot spare an extra channel for an echo effect. number1 = delay (0 is off) }number2 = depth (default is -1) number3 = continuation/tie flag (default is 0) After Keyon, and the delay has passed, it does Keyoff(if a tie flag is used it does not do Keyoff), increases or decreases the volume according to the depth, then does Keyon one more time. If a continuation flag is used it will repeat the allowed number of times. If "l" is included before the delay, it will be a note length, otherwise it will be a number of clock cycles. Returns to the original volume at Keyoff. Continuation/tie flags: 0: Continuation, no tie 1: Continuation, with tie 2: One time limit, no tie 3: One time limit, with tie If "%" is included before the depth, it will be equivalent to a v command level, otherwise it will be equivalent to a V command level. If a note length less than the delay is set, this command will not be performed. If W0 is written, the channel will return to usual. (no more fake echos) [Example ‚P] W8,-2a4 [Result] a%8 (^2 a%8 (^4 a%8 [Example ‚Q] W12,-2,3a2 [Result] a%12& (^2 a%36 [Example ‚R] W12,%-3,1a2 [Result] a%12 (^%3 a%12 (^%6 a%12 (^%9 a%12 [Caution1] As with the S command, this command is added at compile time, so if you use it too much the filesize will get large. [Caution2] If you attach a % to set a fine value, the range of the volume change will be -128~+127. Because the PCM volume has a range of 0~255, you cannot have a volume change from the current volume greater than +127 or less than -128. [Caution3] While this command is being used, you cannot use l^ or l= commands. [see also] l^ l= commands (->˜4-9) =============================================================================== ˜12-3 Individual Operator Keyon Delay Setting sk ------------------------------------------------------------------------------- [Format1] sk number1[,number2] [Format2] sk number1[,l[.]] ------------------------------------------------------------------------------- [Range] [number1] 0`15 [number2] 0`255 [length] 1`255 and must be divisible by the whole note ------------------------------------------------------------------------------- [Sound Source] FM ------------------------------------------------------------------------------- This command may only be used on the FM channels. It delays the Keyon for the set operators. number1 = operator number number2 = delay The operator number determines the delayed operators: As slot1 = 1 , slot2 = 2 , slot3 = 4 , and slot4 = 8, you set the total sum of any of those numbers. If "l" is included before the delay, it will be a note length, otherwise it will be a number of clock cycles. If number1 is 0, number2 (or length) may be omitted. [Example ] sk12,l8 [Result] After this command, operators 3 and 4 will have Keyon delayed by an eighth note length. [Caution] If a note has a length shorter than the set delay value, the delayed operators will not do Keyon. =============================================================================== ******************************************************************************* ˜13 [[[[ MML CommandsEPan setting command ]]]] ******************************************************************************* =============================================================================== In this section, the commands affecting the tone output location (pan) are listed. However, for OPN and SSG, these commands will have no effect because the sound source itself is monaural. =============================================================================== ˜13-1 Pan setting 1 p ------------------------------------------------------------------------------- [Format] p number ------------------------------------------------------------------------------- [Range] 0`3 ------------------------------------------------------------------------------- [Sound Source] FM(OPNA,OPM) / PCM ------------------------------------------------------------------------------- Sets the tone output location (pan). The settings are listed below. FM(OPNA),PCM(AD,PPZ) 1 right 2 left 3 center ( default ) FM(OPM),PCM(68) 1 left 2 right 3 center ( default ) PCM(86) 1 right 2 left 3 center ( default ) 0 reverse phase [Supplement] The reverse phase switches the left-right output. As an effect, unlike usual compositions, this makes it feel like the sound is coming from behind you. This effect can be heard especially when using headphones. =============================================================================== ˜13-2 Pan Setting 2 px ------------------------------------------------------------------------------- [Format] px }number1[,number2] ------------------------------------------------------------------------------- [Range] [number1] -128`+127 [number2] 0`1 ------------------------------------------------------------------------------- [Sound Source] FM(OPNA,OPM) / PCM ------------------------------------------------------------------------------- Sets the sound output location (pan) as well as setting in-phase/reverse-phase. Only on the PCM channels(86,PPZ) can the fine control be used. FM(OPNA),PCM(AD) number1 -128`-1 right ( only hard-right ) +1`+127 left ( only hard-left ) 0 center ( default ) FM(OPM),PCM(68) number1 -128`-1 left ( only hard-left ) +1`+127 right ( only hard-right ) 0 center ( default ) PCM(86) number1 -128`-1 near right +1`+127 near left 0 center ( default ) number2 0 in-phase 1 reverse-phase PCM(PPZ) number1 -128`-4 left ( only hard-left ) -3`-1 near left +1`+3 near right +4`+127 right ( only hard-right ) 0 center ( default ) =============================================================================== ******************************************************************************* ˜14 [[[[ MML CommandsERhythm source commands ]]]] ******************************************************************************* =============================================================================== In this section, the commands for the rhythm sound source in the YM2608 are listed. These commands may be written in any MML channel, but they do not have a direct effect on those channels. I think that it is easier to understand if you just use these commands on a channel that is used as a drum track.. When you are only using the rhythm channels for a drum track, it may be better to use the SSG rhythm channels for this. (->˜1-2-2) =============================================================================== ˜14-1 Rhythm Sound Source Shot/Dump Control \b \s \c \h \t \i \bp \sp \cp \hp \tp \ip ------------------------------------------------------------------------------- [Format 1] \b[p] [Format 2] \s[p] [Format 3] \c[p] [Format 4] \h[p] [Format 5] \t[p] [Format 6] \i[p] ------------------------------------------------------------------------------- [Sound Source] FM(OPNA) / SSG / PCM(AD,86,PPZ) / R Selection / R Definition ------------------------------------------------------------------------------- Outputs/stops each sound in the rhythm sound channels. Each command's corresponding rhythm sound is listed below. b Bass Drum s Snare Drum c Cymbal h Hi-Hat t Tom i Rim Shot ( be careful to not put "r" ) If a "p" is inserted, it stops(dumps) the sound. If you want to output multiple sounds simulaneously, please write as follows: \s\t\i [Example ‚P] \b\s [Result] The Bass Drum and Snare Drum play simultaneously. [Example ‚Q] \cp [Result] The Cymbal sound is cut. [Caution 1] If you include a p or px (pan) command in front, for example "\bp3", because this will be treated as being "\bp 3" and it will cause an error, please leave a space like this: "\b p3". [Caution2] On the OPNA, if you have consecutive rhythm sound output and cuts, it will make considerably large waits necessary at output. In PMD, it deals with this issue by inserting an appropriate wait time only when consecutive \ commands are used, but if during that time a command which does not have a note length (such as q or v) is inserted, the necessary wait for consecutive output will not be included, and the track may not play correctly. In particular, this problem will become obvious if after playing one rhythm sound you cut another, so please take caution. [Example ‚R] I [\h \cp r32 ]0 [Result] PMD automatically adds a wait time, and the hi-hat sound outputs correctly with an in-between wait of a 32nd note length. [Example 4] I [\h q0 \cp r32 ]0 [Result] Because a wait time is not added, the hi-hat sound will have erratic playback. =============================================================================== ˜14-2 Rhythm Sound Source Master Volume Setting \V ------------------------------------------------------------------------------- [Format] \V [}]number ------------------------------------------------------------------------------- [Range] 0`63 ------------------------------------------------------------------------------- [Sound Source] FM(OPNA) / SSG / PCM(AD,86,PPZ) / R Selection / R Definition ------------------------------------------------------------------------------- Sets the master volume of the rhythm sound source. If a plus or minus sign is inserted, the volume will be changed relative to the previous volume. The volume range is 0`63; the default is 48. [Example] \V63 [Result] The rhythm source's volume is set to the maximum. =============================================================================== ˜14-3 Rhythm Sound Source Individual Volume Setting \vb \vs \vc \vh \vt \vi ------------------------------------------------------------------------------- [Format] \vb [}]number @@@@@@@@\vs [}]number @@@@@@@@\vc [}]number @@@@@@@@\vh [}]number @@@@@@@@\vt [}]number @@@@@@@@\vi [}]number ------------------------------------------------------------------------------- [Range] 0`31 ------------------------------------------------------------------------------- [Sound Source] FM(OPNA) / SSG / PCM(AD,86,PPZ) / R Selection / R Definition ------------------------------------------------------------------------------- Sets the volume for individual rhythm channels. If a plus or minus sign is inserted, it will be a change relative to the previous volume. Like the shot/dump command, the letter after \v determines the individual channel to be affected. [Example ‚P] \vb25 [Result] Sets the Bass Drum volume to 25. [Example ‚Q] \vs+2 [Result] Adds 2 to the Snare Drum volume. =============================================================================== ˜14-4 Rhythm Sound Source Output Location Setting \lb \ls \lc \lh \lt \li \mb \ms \mc \mh \mt \mi \rb \rs \rc \rh \rt \ri ------------------------------------------------------------------------------- [Format] \lb \mb \rb \ls \ms \rs \lc \mc \rc \lh \mh \rh \lt \mt \rt \li \mi \ri ------------------------------------------------------------------------------- [Sound Source] FM(OPNA) / SSG / PCM(AD,86,PPZ) / R Selection / R Definition ------------------------------------------------------------------------------- Sets the output location (pan) of an individual rhythm channel. The character after the \ determines the pan, as listed below: l Left r Right m Center Like the shot/dump command, the next letter determines the individual channel to be affected. [Example ] \lh [Result] Sets the hi-hat to output to the left side. =============================================================================== ******************************************************************************* ˜15 [[[[ MML Commands E FM LSI/Driver Control ]]]] ******************************************************************************* =============================================================================== This section explains the commands for direct control of the FM Sound Source LSI, PMD, and PDR drivers. Rarely do you need to use these, but in case you do, be careful since there is a lot of necessary knowledge on how to use them. =============================================================================== ˜15-1 FM LSI Direct Output y ------------------------------------------------------------------------------- [Format] y , ------------------------------------------------------------------------------- [Range] [number1] 0`255 [number2] 0`255 ------------------------------------------------------------------------------- [Channels] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Directly sets a variable to be output to the FM LSI. Outputs the value of number2 to the register with address number1. On the OPNA, channels D, E, and F will output to the back port, but the other channels will output to the front port. [Example ] y$58,7 [Result] Sets the attack rate of slot 2 of FM channel 1 to 7. [Caution1] Since this is dangerous if you do not have a good understanding of the FM channel LSI, please avoid using it. [Caution2] While this makes it possible to finely set FM instrument parameters, keep in mind that after returning from a pause, sound effects, or channel masking, the FM instrument will be redefined and return to normal. When changing the feedback and modulation level (TL), only use the FB and O commands. That way you can avoid that kind of phenomenon. [see also] FB Command (->˜6-4) O Command (->˜6-3) =============================================================================== ˜15-2 PDR Operation Mode Control * ------------------------------------------------------------------------------- [Format] * number ------------------------------------------------------------------------------- [Range] 0`5 ------------------------------------------------------------------------------- [Sound Source] R Selection / R Definition ------------------------------------------------------------------------------- Used in the K/R channels; controls the PDR operation mode. n=0 Double Mode setting n=1 Single Mode setting n=2 16KHz Mode setting n=3 8KHz Mode setting n=4 EI Mode setting n=5 DI Mode setting [Example] *0 [Result] Sets the PDR to Double Mode. [Caution 1] In PDR control, normally, please do not use anything other than 0 or 1. Particularly on slow computer models, there is the danger of causing a hangup when using *2 when PDR is loaded into memory. [Caution2] Since this looks identical to the software LFO switch command, it must be separate from a channel which uses the software LFO. Use caution to avoid confusion. (?) [see also] * command (software LFO switch) (->˜9-3) =============================================================================== ˜15-3 Fadeout Setting F ------------------------------------------------------------------------------- [Format] F number ------------------------------------------------------------------------------- [Range] 0`127 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Causes a fadeout effect on the selected channels. The number sets the speed. 1 is the slowest and 127 is the fastest. [Example ] F16 [Result] Sets a fadeout with speed 16. =============================================================================== ˜15-4 Individual Sound Source Volume Down Setting DF DS DP DR ------------------------------------------------------------------------------- [Format 1] DF [}]number [Format 2] DS [}]number [Format 3] DP [}]number [Format 4] DR [}]number ------------------------------------------------------------------------------- [Range] [without }] 0`255 [with }] -128`+127 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Changes an individual sound source's volume down. DF is for FM sound source; DS is for SSG sound source; DP is for PCM sound source; DR is for the Rhythm sound source. If a + or - is attached to the number, it changes respectively from the current number. Be careful since + lowers the volume. However, if +0 or -0 is set, the value in PMD's options will be reinitialized. [Example] G [cdefgab>c< DS+16]8 [Result] For each loop iteration, all SSG channels will gradually drop in volume. [Caution] The volume down values set here are local to the track in which they are used, when another track is played, The PMD options /DF, /DS, /DP, and /DR will be reset, and return to normal. [see also] #VolumeDown command (->˜2-22) PMD /DF /DS /DP /DR options (->PMD.DOC) =============================================================================== ˜15-5 FM Sound Effect Playback N ------------------------------------------------------------------------------- [Format] N number ------------------------------------------------------------------------------- [Range] 0`255 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Plays back an FM sound effect. If 0 is set it stops playback. [Caution] While an FM sound effect can be defined as number 0, number 0 cannot be played back in MML. [Example ] N4 [Result] Plays back FM sound effect 4. =============================================================================== ˜15-6 SSG Sound Effect Playback n ------------------------------------------------------------------------------- [Format] n number ------------------------------------------------------------------------------- [Range] 0`255 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Plays back an SSG sound effect. If 0 is set it stops playback. If PDR,PPSDRV have been loaded into memory: 1`127 plays an SSG sound effect 128`255 plays an SSGPCM sound effect (Value is a number added to 128) [Example ] n15 [Result] Plays back SSG sound effect 15. =============================================================================== ˜15-7 Channel Mask Control m ------------------------------------------------------------------------------- [Format] m number ------------------------------------------------------------------------------- [Range] 0`1 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Sets the channel mask to on or off. 0 = off (channel plays) 1 = on (channel does not play) Usually there is no reason to use this. [Example ] m1 [Result] Masks the set channel. =============================================================================== ˜15-8 Musical Measure Length Setting Z ------------------------------------------------------------------------------- [Format] Z number ------------------------------------------------------------------------------- [Range] 0`255 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Sets the musical measure length. Has absolutely no effect on the sound. When PMD is loaded for things like games, so that a visualization feature may match up with the track, this allows the programmer to list the measure number of the track, but since the concept of measures does not exist in MML, if you use triple or uncommon time, if it does not understand the measure length, the driver cannot obtain an accurate value. This command always tells the driver the measure length, and if you have set an accurate length, the programmer can get the correct measure count. The default is 96. [Example ] Z72 [Result] After this it tells the driver that the song is in 3/4 time. [Caution] If you change the time signature during a track, always change the measure length at the beginning of the section. [Supplement] If you use this feature in a way such as telling the driver than a fourth note length is 1 measure, it makes it possible to synchronize in units of a fourth note length. (?) =============================================================================== ˜15-9 Storing a number in Status1 ~ ------------------------------------------------------------------------------- [Format1] ~ number [Format2] ~ }number ------------------------------------------------------------------------------- [Range] [Format1] 0`255 [Format2] -128`+127 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Stores a number in Status1 (Lets the driver pass and the programmer may receive the number). If a plus or minus sign is included, it increases or decreases the current number in Status1, respectively. [Caution] The range of possible numbers for Status1 is 0~255. Since it does not check for an out-of-bounds number, for example -1, the Status1 will be set to 255. [Example ] ~2 [Result] Writes the number 2 to Status1. =============================================================================== ˜15-10 PCM Method Selection A ------------------------------------------------------------------------------- [Format] A number ------------------------------------------------------------------------------- [Range] 0`1 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- This is effective on PMD86. PCM channel methods: 0 PMD86 normal method 1 PMDB2 compatibility method (volume and loop settings differ) Almost the same as PMD86's /s option, this is a local change, and when a different track is played it will return to normal. [Example ] A1 [Result] Matches the PCM method to the ADPCM method. [see also] #ADPCM command (->˜2-23) =============================================================================== ******************************************************************************* ˜16 [[[[ MML CommandsECompiler control ]]]] ******************************************************************************* =============================================================================== In this section, All compile time control commands are listed. =============================================================================== ˜16-1 Variable Definition/Use ! ------------------------------------------------------------------------------- [Format 1] ! characterstring [Format 2] ! number ------------------------------------------------------------------------------- [characterstring] Any alphanumeric characters. Recognizes up to 30 half-width characters. [Range] 0`255 ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Labels an MML sequence with a character string or number which can be called later to use the sequence. [Caution1] It is safest to avoid as much as possible using variable names like "!b" and "!bc", where one name differs from another by one character. For example, when two MML variables "!b" and "!bc" are used, if the MML comes to the sequence "!bcc", it becomes extremely difficult to tell whether it will play as "!b cc" or "!bc c". If that kind of MML is used, it uses the variable with the longer name (in that example, !bc). (sequentially searches for "!bcc", "!bc", "!b") If in that case you want to use variable !b, it will work if you insert a space or tab after the variable name ("!b cc"). (See Example 1) [Caution2] After a numbered variable ("!") if you want to write a character (like an l= command without the l=), you will need to insert a space or tab. [Caution3] Even when referencing a variable with a name longer than 30 half-width characters, it is always necessary to add a space or tab after the name. (since the variable name is not defined after 30 half-width characters, it will be impossible to tell where the variable ends.) [Example ‚P] !b @0 !bc @1 !s @2 A !bcc !sg !bc [Result] @1 c @2g @1 [Example ‚P'] !b @0 !bc @1 !s @2 A !b cc !s g !b c [Result] @0 cc @2 g @0 c For details please refer to MML Variable Definition. (->˜3-2) [see also] ! command (MML Variable Definition) (->˜3-2) =============================================================================== ˜16-2 MML Skip Control 1 " ------------------------------------------------------------------------------- [Format] " ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition Or the beginning of a line ------------------------------------------------------------------------------- Until the next " command or until a ' command is found, skips all commands that take a note length. When a " command has already been set, it ends the skipping. If an m command is used simultaneously, according to the part masking during the skip, it will skip at high speed. This command can be written either in a channel or at the beginning of a line. [Example 1] A "@0v13o3 cdefgab >@1 cdefgab " >c [Result] A m1 @0v13 o3 > @1 m0 >c Inside the double quotes, only the notes c,d,e,f,g,a,b are read. [Example 2] " ; skip beginning A @0 v13 o5 cde B @1 v13 o4 ccc " ; skip ending A gfd B [Result] A @0 v13 o5 gfd B @1 v13 o4 =============================================================================== ˜16-2 MML Skip Control 2 ' ------------------------------------------------------------------------------- [Format] ' ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition Or the beginning of a line ------------------------------------------------------------------------------- Forces an MML skip to end. Performs an m0 command simultaneously. This command can be written either in a channel or at the beginning of a line. [Example 1] A " t80 v12 @10 cder ' def [Result] A t80 v12 @10 def [Example 2] " A cde B efg ' A fga B ab>c [Result] A fga B ab>c =============================================================================== ˜16-3 Channel Restriction Setting | |! ------------------------------------------------------------------------------- [Format 1] | [notation[notation₯₯]] mml [Format 1] |! [notation[notation₯₯]] mml ------------------------------------------------------------------------------- [Sound Sources] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- If set at the beginning of a line it is effective for multiple channels; this limits the affected channels at compile time. If a ! is added, all channels EXCEPT the channel in bars will be limited. To end the notation, it is necessary to insert at least one space or tab between the channel letter and the MML. For the compiler's operation, if a channel's letter has not been set (an ! is added), it will skip the MML up to the next | command. (?) If there are no characters after the |, the limitation will be completely cancelled. [Example] ABC @12v11o4l2 |A D0ccd |B D3efg |C D-3gab |!C >c& |C g4e4 | c [Result] A @12v11o4l2 D0 ccd >c& c B @12v11o4l2 D3 efg >c& c C @12v11o4l2 D-3gab g4e4 c =============================================================================== ˜16-4 Compile End / ------------------------------------------------------------------------------- [Format] / ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- Sets an end for the compiler for a specific channel. [Example] A cde / A fga [Result] A cde =============================================================================== ˜16-5 Comment Setting ; ------------------------------------------------------------------------------- [Format] ; ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition ------------------------------------------------------------------------------- The compiler will ignore all text after this point and continue to the next line. [Example ] A cde ; comment A fga [Result] A cde A fga =============================================================================== ˜16-6 Comment setting 2 ` ------------------------------------------------------------------------------- [Format] ` ------------------------------------------------------------------------------- [Sound Source] FM / SSG / PCM / R Selection / R Definition Or the beginning of a line ------------------------------------------------------------------------------- All text after one ` until the next will be ignored as comments. If set at the beginning of a line, it sets a flag for whether or not all channel notation is comments. Also, any # @ ! commands inside the two "`"s are also ignored. If this is included between MML, it is always necessary at the beginning of the line. (?) This is useful for when you want to write documentation in MML, or when you want to write comments between an MML sequence. [Example ‚P] A l4cde ` this is a comment A this is also a comment ` cde [Result] The text between the "`"s becomes a comment. [Example ‚Q] !A cdefg ` #Detune Extend ` [Result] Variable !A is defined, but the line with #Detune Extend is ignored. [Caution1] Even if you set this between MML on a particular channel, it has no effect on other channels. [Example 3] ` G cde fga ` b H cde ` fga b [Result] Channel G plays up to a, and Channel H plays up to e. The other text is ignored. [Caution2] It is only possible within channel MML to write this command somewhere other than the beginning of the line. If you want the whole text to be comments, please always write this at the beginning of the line. [Example 4] ` Comment ` In the above example, the two "`"s are ignored, and all subsequent MML will be skipped. You must write it like this: ` Comment ` =============================================================================== ******************************************************************************* ˜17 Contact/Inquiry ******************************************************************************* =============================================================================== [!!Caution!!] On 1996/03/01 my residence/phone number changed. §167 “Œ‹ž“s™•ΐ‹ζγˆδ‘@‚Q|‚R‚S|‚Q‚Q@ƒvƒ‰ƒ“ƒ^ƒ“ˆδŒϋ@102†ŽΊ ŠŒ΄@³—T TEL&FAX (03)3395-9766 (24 hour calls OK) ƒTƒ|[ƒg‚a‚a‚r[PMD-BBS] (03)3395-9600 (3 lines) ¦For details please see the PMDBBS.CM file. (I may not be able to answer your questions by mail) =============================================================================== --- End of PMDMML.MAN --- ===============================================================================