Пример #1
0
    def run(self, Mml2vgmInfo, index):

        if Mml2vgmInfo.document is None:
            Mml2vgmInfo.msg("何かドキュメントを開く必要があります")
            return None

        #azukiのDocumentを得る
        doc = Mml2vgmInfo.document.editor.azukiControl.Document

        doc.BeginUndo()

        #選択範囲を取得する
        be = clr.Reference[System.Int32]()
        en = clr.Reference[System.Int32]()
        doc.GetSelection(be, en)

        #選択行を取得する
        br = doc.GetLineIndexFromCharIndex(be.Value)
        er = doc.GetLineIndexFromCharIndex(en.Value)

        #1行ずつ、先頭に';'をつける
        for row in range(br, er + 1):
            ind = doc.GetLineHeadIndex(row)
            doc.Replace(";", ind, ind)

        #選択しなおす
        br = doc.GetLineHeadIndex(br)
        er = doc.GetLineEndIndexFromCharIndex(en.Value)
        doc.SetSelection(br, er)

        doc.EndUndo()

        #ScriptInfo()を返すと置換が発生するためNoneを返す
        return None
Пример #2
0
    def run(self, Mml2vgmInfo, index):

        if Mml2vgmInfo.document is None:
            Mml2vgmInfo.msg("何かドキュメントを開く必要があります")
            return None
        Mml2vgmInfo.msg(Mml2vgmInfo.document.editor.azukiControl.Text)

        si = ScriptInfo()
        return si
Пример #3
0
    def run(self, Mml2vgmInfo, index):

        if Mml2vgmInfo.document is None:
            Mml2vgmInfo.msg("何かドキュメントを開く必要があります")
            return None
        Mml2vgmInfo.document.editor.Text = "はろーはろー"
        Mml2vgmInfo.msg("はろー")

        si = ScriptInfo()
        si.responseMessage = "運命!"
        return si
Пример #4
0
    def run(self, Mml2vgmInfo, index):
        
        if Mml2vgmInfo.document is None:
            Mml2vgmInfo.msg("何かドキュメントを開く必要があります")
            return None

        fn = Mml2vgmInfo.compile()
        if fn == "":
            Mml2vgmInfo.msg("コンパイル時にエラーが発生しました")
            return None

        Mml2vgmInfo.msg( "ファイル名(テンポラリフォルダ):" + fn )

        si = ScriptInfo()
        return si
Пример #5
0
    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
Пример #6
0
    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
Пример #7
0
    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
Пример #8
0
    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
Пример #9
0
    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