#ADX2 로봇이 소리 개수와 자 합계 획득

13129 단어 ADX2 로봇Adx2Python

개시하다


사운드를 수록할 때 사운드별로 얼마나 되는지 알고 싶을 때ADX2 로봇 기능 해봤어요.

스크립트 내용

  • 검색할 팀 목록 획득
  • 대기열 가져오기
  • 대기열의 주석에 특정 문자가 포함되어 있으면 개수와 자가 증가
  • 이런 흐름.

    대기열 주석


    대기열의 주석에는 검색 키워드가 포함되어 있으며 문자열이 포함되어 있으면 계수 대상이 됩니다.

    주제 밖의 말, 댓글에 이런 글을 넣는 것도 귀찮아서 자동화하고 싶어요.
    (이런 파형에 대한 연출원 정보 같은 정보는 excel과 GSS에서 별도로 관리한다)

    대기열 길이


    파형의 길이는 대기열에 등록된 첫 번째 파형 구역만 측정합니다.
    (여러 개 포함 여부 등은 고려하지 않음)

    길이를 열심히 잡는 게 쉽지 않아요.


    다음과 같은 상황을 고려할 수 있다
    - 간격에 따라 길이도 변경됩니다.
    - 재생 속도가 다르면 길이도 달라져요
    - 순환 파형이 있으면 길이에 기준(데이터 길이인지 실제 재생 시간이 필요한지)
    - 작업, 대기열 링크 등이 있으면 이전 내용을 추적해야 합니다.
    - 덩어리가 있으면 길이를 원하는 게 뭔지 모호해
    - 선택기, 무작위 궤도 재생, 재생 확립 등 재생으로 인해 길이가 달라지는 원인이 있을 때 어떻게 하나.
    등, 용도에 따라 필요한 처리가 바뀔 수 있다고 생각합니다.
    이번에는 발성의 대상을 겨냥하여 다양한 접기를 진행하였다.

    언어 대응


    언어에 대응하는 파형은 언어에 따라 참고할 파형 구역을 다시 검색해야 한다.
    폴더 구성은 이렇습니다.

    경로에 포함된 폴더 이름을 바꾸어 대응합니다.
    스크립트에서
    language = "ja"
    그나저나
    language = "en"
    영어 파형의 길이를 얻습니다.

    각본


    CountWaveLength.py
    
    # --Description:[tatmos]キューのコメントに特定文字があるものをカウントし、総尺を出力する
    import sys
    import cri.atomcraft.project
    import cri.atomcraft.project as acproject
    import cri.atomcraft.debug as acdebug
    import cri.atomcraft.preview as acpreview
    
    # 選択しているキューシートを得る
    selected_CueSheets = acproject.get_selected_objects("CueSheet")["data"]
    if not selected_CueSheets :
        acdebug.warning("解析するキューシートを選択してください.")
        sys.exit()
    
    cues = list()
    #キューを取得
    for cusheet in selected_CueSheets:
        acdebug.log("cusheet Path:\"{0}\"".format(acproject.get_object_path(cusheet)["data"] ))
        #キューを集める 
        cues = acproject.find_objects(cusheet, "Cue")["data"]    
    
    language = "ja"
    languageFolderJa = "/ja/"
    languageFolderEn = "/en/"
    
    #キューのコメントに特定文字が含まれていたら個数と尺を足す
    def CheckLength(targetName):
        #acdebug.log("Name:\"{0}\"".format(targetName ))
        count = 0
        length = 0
        for cue in cues:
            if targetName in acproject.get_value(cue, "Comment")["data"]:
                count+=1
                #長さを得る
                waveformRegions = acproject.find_objects(cue, "WaveformRegion")["data"]  
    
                #リンクされているマテリアルを取得
                tmplinkMaterial = acproject.get_value(waveformRegions[0], "LinkMaterial")["data"]
                tmplinkMaterialPath = acproject.get_object_path(tmplinkMaterial)["data"] 
                #acdebug.log("Target Path:\"{0}\"".format(tmplinkMaterialPath ))
                linkMaterialPath = tmplinkMaterialPath
    
                #言語フォルダーのマテリアルパスに変更
                if language == "ja":
                    linkMaterialPath = tmplinkMaterialPath.replace(languageFolderEn,languageFolderJa)
                else:
                    linkMaterialPath = tmplinkMaterialPath.replace(languageFolderJa,languageFolderEn)
    
                #言語フォルダーのマテリアルに変更
                resultMaterial = cri.atomcraft.project.get_object_from_path(linkMaterialPath)
                #acdebug.log("resultMaterial :\"{0}\"".format(resultMaterial["succeed"] ))
                #acdebug.log("resultMaterial :\"{0}\"".format(resultMaterial["data"] ))
                if resultMaterial["data"]:
                    #acdebug.log("resultMaterial :\"{0}\"".format(linkMaterialPath ))
                    linkMaterial = resultMaterial["data"]
                else:
                    #acdebug.warning("Not Found Target Path:\"{0}\"".format(linkMaterialPath ))
                    linkMaterial = cri.atomcraft.project.get_object_from_path(tmplinkMaterialPath)["data"] #みつからない時
    
    
                #波形の長さを計算
                samplingRate = acproject.get_value(linkMaterial, "SamplingRate")["data"]
                sampleFrames = acproject.get_value(linkMaterial, "SampleFrames")["data"]
                length+= float(sampleFrames)/float(samplingRate)
    
        acdebug.log("Name:\"{0}\" Count:\"{1}\" Length:\"{2:.2f}\" {3}".format(targetName,count,length,language))
    
    CheckLength("クロエ")
    CheckLength("ノア")
    CheckLength("ジュリィ")
    CheckLength("アオバ")
    CheckLength("コーコ")
    CheckLength("ヤマト")
    CheckLength("デイター")
    CheckLength("アニマ")
    
    
    실행하면 이런 느낌으로 로그에 출력됩니다.

    끝말


    어떤 말을 하려면, 분석 도구와 비교적 가깝다.
    이런 것들을 미리 준비해두면 일본어와 영어의 길이 성향이 얼마나 다르거나 말하는 사람마다 비교할 수 있어 편리하다.
    다른 방법으로 뭘 조사하고 싶을 때도 활용할 수 있다.
    총자를 알고 싶을 때 수동으로 하면 귀찮아진다.ADX2 로봇 기능은 매우 어렵다.

    좋은 웹페이지 즐겨찾기