def run(self, Mml2vgmInfo, index): #設定値の読み込み Mml2vgmInfo.loadSetting() #初回のみ(設定値が無いときのみ)mucom88.exeの場所をユーザーに問い合わせ、設定値として保存する mc = Mml2vgmInfo.getSettingValue("mucom88path") if mc is None: mc = Mml2vgmInfo.fileSelect( "mucom88.exeを選択してください(この選択内容は設定値として保存され次回からの問い合わせはありません)") if not Mml2vgmInfo.confirm("mucom88.exeの場所は以下でよろしいですか\r\n" + mc): return None Mml2vgmInfo.setSettingValue("mucom88path", mc) Mml2vgmInfo.saveSetting() #念のため if mc is None or mc == "": Mml2vgmInfo.msg("mucom88.exeを指定してください") return None #ファイル選択 muc = Mml2vgmInfo.fileSelect("mucファイルの選択") if muc is None: return None #ファイル情報の整理 #Mml2vgmInfo.msgLogWindow(muc) wp = Path.GetDirectoryName(muc) #Mml2vgmInfo.msgLogWindow(wp) Directory.SetCurrentDirectory(wp) #mucom88.exeでコンパイルを行いmubファイルを生成する args = "-c " + muc Mml2vgmInfo.runCommand(mc, args, True) #mubファイルが出来たかチェック(mucom88.exeはコンパイルが成功するとmucom88.mubというファイルができる) mm = Path.Combine(wp, "mucom88.mub") #Mml2vgmInfo.msgLogWindow(mm) if not File.Exists(mm): return None #mucom88.mubを本来のファイル名にリネーム mub = Path.Combine(wp, Path.GetFileNameWithoutExtension(muc) + ".mub") #Mml2vgmInfo.msgLogWindow(mub) File.Delete(mub) File.Move(mm, mub) #mucom88.exeで演奏を開始 Mml2vgmInfo.runCommand(mc, mub, False) #戻り値を生成(何もしないけど念のため) si = ScriptInfo() si.responseMessage = "" return si
def run(self, Mml2vgmInfo, index): #設定値の読み込み Mml2vgmInfo.loadSetting() #初回のみ(設定値が無いときのみ)git.exeの場所をユーザーに問い合わせ、設定値として保存する gt = Mml2vgmInfo.getSettingValue("soxpath") if gt is None: gt = Mml2vgmInfo.fileSelect( "sox.exeを選択してください(この選択内容は設定値として保存され次回からの問い合わせはありません)") if not Mml2vgmInfo.confirm("sox.exeの場所は以下でよろしいですか\r\n" + gt): return None Mml2vgmInfo.setSettingValue("soxpath", gt) Mml2vgmInfo.saveSetting() #念のため if gt is None or gt == "": Mml2vgmInfo.msg("sox.exeを指定してください") return None #ファイル情報の整理 for fnf in Mml2vgmInfo.fileNamesFull: ext = Path.GetExtension(fnf) bas = Path.GetFileNameWithoutExtension(fnf) wp = Path.GetDirectoryName(fnf) Directory.SetCurrentDirectory(wp) si = ScriptInfo() # 引数を組み立てる if index == 0: args = "--i \"" + bas + ext + "\"" elif index == 1: # -b 8bit # -c 1 mono # -r 14k rate 14KHz args = bas + ext + " -b 8 -r 8k -c 1 " + bas + "_8k" + ext elif index == 2: args = bas + ext + " -r 14k -e signed-integer -c 1 " + bas + "_14k" + ext elif index == 3: args = bas + ext + " -r 16k -e signed-integer -c 1 " + bas + "_16k" + ext elif index == 4: args = bas + ext + " -r 18500 -e signed-integer -c 1 " + bas + "_18500" + ext ret = Mml2vgmInfo.runCommand(gt, args, True) if ret != "": Mml2vgmInfo.msg(ret) else: if index != 0: Mml2vgmInfo.msg("success") Mml2vgmInfo.refreshFolderTreeView() return si
def run(self, Mml2vgmInfo, index): #設定値の読み込み Mml2vgmInfo.loadSetting() #初回のみ(設定値が無いときのみ)sox.exeの場所をユーザーに問い合わせ、設定値として保存する gt = Mml2vgmInfo.getSettingValue("soxpath") if gt is None: gt = Mml2vgmInfo.fileSelect( "sox.exeを選択してください(この選択内容は設定値として保存され次回からの問い合わせはありません)") if not Mml2vgmInfo.confirm("sox.exeの場所は以下でよろしいですか\r\n" + gt): return None Mml2vgmInfo.setSettingValue("soxpath", gt) Mml2vgmInfo.saveSetting() #念のため if gt is None or gt == "": Mml2vgmInfo.msg("sox.exeを指定してください") return None #ファイル情報の整理 for fnf in Mml2vgmInfo.fileNamesFull: ext = Path.GetExtension(fnf) bas = Path.GetFileNameWithoutExtension(fnf) wp = Path.GetDirectoryName(fnf) Directory.SetCurrentDirectory(wp) si = ScriptInfo() argList = [ "--i \"{0}{1}\"", "\"{0}{1}\" -r 8000 -b 8 -c 1 \"{0}_8k{1}\"", "\"{0}{1}\" -r 14000 -b 8 -c 1 \"{0}_14k{1}\"", "\"{0}{1}\" -r 16000 -b 8 -c 1 \"{0}_16k{1}\"", "\"{0}{1}\" -r 18500 -b 8 -c 1 \"{0}_18500{1}\"", "\"{0}{1}\" -b 16 -r 14000 -e signed-integer -c 1 \"{0}_16b_14k{1}\"", "\"{0}{1}\" -b 16 -r 16000 -e signed-integer -c 1 \"{0}_16b_16k{1}\"", "\"{0}{1}\" -b 16 -r 18500 -e signed-integer -c 1 \"{0}_16b_18500{1}\"", "\"{0}{1}\" -n trim 0 1.5 noiseprof \"{0}.noise-profile\"", "\"{0}{1}\" \"{0}_cleaned{1}\" noisered \"{0}.noise-profile\" 0.2 " ] args = argList[index].format(bas, ext) ret = Mml2vgmInfo.runCommand(gt, args, True) if ret != "": Mml2vgmInfo.msg(ret) else: if index != 0: Mml2vgmInfo.msg("success") Mml2vgmInfo.refreshFolderTreeView() return si
def run(self, Mml2vgmInfo, index): #設定値の読み込み Mml2vgmInfo.loadSetting() #初回のみ(設定値が無いときのみ)git.exeの場所をユーザーに問い合わせ、設定値として保存する gt = Mml2vgmInfo.getSettingValue("gitpath") if gt is None: gt = Mml2vgmInfo.fileSelect( "git.exeを選択してください(この選択内容は設定値として保存され次回からの問い合わせはありません)") if not Mml2vgmInfo.confirm("git.exeの場所は以下でよろしいですか\r\n" + gt): return None Mml2vgmInfo.setSettingValue("gitpath", gt) Mml2vgmInfo.saveSetting() #念のため if gt is None or gt == "": Mml2vgmInfo.msg("git.exeを指定してください") return None si = ScriptInfo() commitMsg = "" if index == 1: #git コミット commitMsg = Mml2vgmInfo.inputBox("コミット時のコメントを入力してください") if commitMsg == "": return si #ファイル情報の整理 for fnf in Mml2vgmInfo.fileNamesFull: wp = Path.GetDirectoryName(fnf) Directory.SetCurrentDirectory(wp) if index == 0: #git ステージング args = "add " + fnf ret = Mml2vgmInfo.runCommand(gt, args, True) if ret != "": Mml2vgmInfo.msg(ret) else: #git コミット args = "commit -m\"" + commitMsg + "\"" ret = Mml2vgmInfo.runCommand(gt, args, True) if ret != "": Mml2vgmInfo.msg(ret) return si
def run(self, Mml2vgmInfo, index): #設定値の読み込み Mml2vgmInfo.loadSetting() #ファイル選択 xgmFn = Mml2vgmInfo.fileSelect("xgmファイルの選択") if xgmFn is None: return None if not File.Exists(xgmFn): Mml2vgmInfo.msg("ファイルが見つかりません") return None if Path.GetExtension(xgmFn).ToLower() != ".xgm": Mml2vgmInfo.msg("拡張子が.xgmではありません") return None #ファイル読み込み xgmDat = File.ReadAllBytes(xgmFn) #FCCチェック if xgmDat[0]!=88 or xgmDat[1]!=71 or xgmDat[2]!=77: Mml2vgmInfo.msg("FCCがXGMではありません") return None sampleDataBlockSize = xgmDat[0x100] + xgmDat[0x101] * 0x100 #Mml2vgmInfo.msg(sampleDataBlockSize.ToString()) versionInformation = xgmDat[0x102]; #Mml2vgmInfo.msg(versionInformation.ToString()) dataInformation = xgmDat[0x103]; #Mml2vgmInfo.msg(dataInformation.ToString()) isNTSC = (dataInformation & 0x1) == 0; #Mml2vgmInfo.msg(isNTSC.ToString()) existGD3 = (dataInformation & 0x2) != 0; #Mml2vgmInfo.msg(existGD3.ToString()) multiTrackFile = (dataInformation & 0x4) != 0; #Mml2vgmInfo.msg(multiTrackFile.ToString()) sampleDataBlockAddr = 0x104; #Mml2vgmInfo.msg(sampleDataBlockAddr.ToString()) adr = sampleDataBlockAddr + sampleDataBlockSize * 256 musicDataBlockSize = xgmDat[adr] + xgmDat[adr+1]*0x100 + xgmDat[adr+2]*0x10000 + xgmDat[adr+3]*0x1000000 #Mml2vgmInfo.msg(musicDataBlockSize.ToString()) musicDataBlockAddr = sampleDataBlockAddr + sampleDataBlockSize * 256 + 4; #Mml2vgmInfo.msg(musicDataBlockAddr.ToString()) gd3InfoStartAddr = musicDataBlockAddr + musicDataBlockSize; #Mml2vgmInfo.msg(gd3InfoStartAddr.ToString()) #PCMテーブルを取得&出力 lst = List[Byte]() n = 0 while n < 63*4: ind=n+4 if ind == xgmDat.Length: break lst.Add(xgmDat[ind]) n+=1 File.WriteAllBytes( xgmFn + ".pcmTable.bin" , lst.ToArray() ) lst.Clear(); #PCMデータを取得&出力 if sampleDataBlockSize > 0: n=0 while n < sampleDataBlockSize * 256: ind=n + sampleDataBlockAddr if ind == xgmDat.Length: break lst.Add(xgmDat[ind]) n+=1 File.WriteAllBytes( xgmFn + ".pcmData.bin" , lst.ToArray() ) lst.Clear(); #SEQデータを取得&出力 if musicDataBlockSize > 0: n=0 while n<musicDataBlockSize: ind=n + musicDataBlockAddr if ind == xgmDat.Length: break lst.Add(xgmDat[ind]) n+=1 File.WriteAllBytes( xgmFn + ".seqData.bin" , lst.ToArray() ) lst.Clear(); #GD3データを取得&出力 if existGD3: n=0 while n < xgmDat.Length - gd3InfoStartAddr: ind=n + gd3InfoStartAddr lst.Add(xgmDat[ind]) n+=1 File.WriteAllBytes( xgmFn + ".gd3.bin" , lst.ToArray() ) lst.Clear(); Mml2vgmInfo.msg("xgmファイルを分割しました") #戻り値を生成(何もしないけど念のため) si = ScriptInfo() si.responseMessage = "" return si