基本流

Dll版本为A-1.6
用代码生成红石音乐的基本流程

设定对照表文件夹

InheritExpression.SetCompareLists(path)

这一步是非必须的。路径为文件夹的绝对路径。


实例化时间序列

var timeLine = new TimeLine().Serialize(midiPath, wavPath, rate, synchroTick, fre_count, vol_count, cycle, showProgress)

几个属性(Midi路径、Wav路径、播放倍率、节奏间隔(优先)、频率采样数、振幅采样数、采样周期、进度Action)均为选填。其中文件路径是绝对路径。

同时有两个引申的实例化方法,可规定究竟市按照播放倍率生成,还是按照节奏间隔生成:

SerializeByRate(midiPath, wavPath, rate, fre_count, vol_count, cycle, showProgress)
SerializeByBeat(midiPath, wavPath, synchroTick, fre_count, vol_count, cycle, showProgress)

设置

  • Midi设置

    • Midi全局 & 键参数
    • Midi全局参数和键参数可被启用或禁用(默认禁用),以同步输出至计分板。

      • 全局参数
      • timeLine.Enable(bool enable = true, string param = "")

        全局参数有以下几个:(留空表示全体)

        • MidiFileFormat
        • MidiTracksCount
        • MidiDeltaTicksPerQuarterNote
        • MidiBeatPerMinute
        • AudioFileFormat
        • TotalTicks
      • 键参数
      • timeLine.EnableMidi(bool enable = true, string track = "", string instrument = "", int index = -1, string param = "")

        track表示音轨,instrument指乐器,index为键的索引位置。

        键的参数有以下几个:

        • DeltaTickStart
        • MinecraftTickStart
        • DeltaTickDuration
        • MinecraftTickDuration
        • BarIndex
        • BeatDuration
        • Channel
        • Pitch
        • Velocity
        • Playsound
    • Playsound参数
    • Playsound命令中也有许多参数需要设定,包括最重要的音色名和子表达式

      timeLine.Sound_属性(? param, string track = "", string instrument = "", int index = -1)

      类似键参数,也是指音轨、乐器、键位置

      Playsound的属性有以下几个:

      • SoundName
      • ExecuteCood
      • ExecuteTarget
      • PlayTarget
      • PlaySource
      • InheritExpression
      • ExtraDelay
      • MandaVolume
      • PercVolume
      • Enable
      • StopSound
  • Wave设置

  • timeLine.EnableWave(bool enable = true, int index = -1, string channel = "", string param = "")

    其中索引表示一个采样的索引位置,声道可为"Left""Right"。Wave的参数有以下几个:

    • FrequencyPerTick
    • VolumePerTick

(上面提到的参数若为空则表示全体。)

实例化命令序列

var commandLine = new CommandLine().Serialize(timeLine)

一个命令序列中有"Start"、"KeyFrame"、"End"三个列表,分别代表初始化命令、命令流、结束命令。

一个命令序列也允许嵌入的其他命令序列。

commandLine1 = commandLine1.Combine(commandLine1, commandLine2)

表示将commandLine2中的所有命令嵌入到commandLine1中(从commandLine1头部开始)。

生成Schematic

首先需要实例化导出设置。

var exps = new ExportSetting() { AlwaysActive = true, AlwaysLoadEntities = false, AutoTeleport = true, Direction = 0, Width = 5, Type = ExportType.Universal }

表示保持加载命令流,不保持加载实体,自动传送,向X+延伸,序列宽度为5,通用Schematic格式。

new Schematic().ExportSchematic(commandLine, exps, exportPath)

将命令序列按照导出设置导出为Schematic文件。

基本流代码总览

//InheritExpression.SetCompareLists(path); //设置对照表文件夹(可选)
//时间序列操作
var timeLine = new TimeLine().SerializeByRate(midiPath, wavPath, rate, fre_count, vol_count, cycle); //按照播放倍率生成时间序列
timeLine.Enable(bool enable = true, string param = ""); //设置全局参数
timeLine.EnableMidi(bool enable = true, string track = "", string instrument = "", int index = -1, string param = ""); //设置键参数
timeLine.Sound_属性(? param, string track = "", string instrument = "", int index = -1); //设置Playsound参数
timeLine.EnableWave(bool enable = true, int index = -1, string channel = "", string param = ""); // 设置Wave参数
//命令序列操作
var commandLine = new CommandLine().Serialize(timeLine); //生成命令序列
//导出操作
var exps = new ExportSetting() { AlwaysActive = true, AlwaysLoadEntities = false, AutoTeleport = true, Direction = 0, Width = 5, Type = ExportType.Universal }; //导出设置
new Schematic().ExportSchematic(commandLine, exps, exportPath); //生成schematic