#はじめに
前回原音再生をやってみたのですが、
どうもPyAudioだと32bitFloat波形が読めないようなので、
選択中のマテリアルを16bit44100Hzにすることで対処した。
環境:CRI AotmCraft 3.45.00
#説明
変換したいマテリアルをツリーで選択し、スクリプトを実行する。
あらかじめffmpegのインストールが必要かもです。(自分の環境では入れていたので未確認)
破壊的な操作なので中間ファイル(_bak)など
万が一の時のために生成していますが、不要なら削除してください。
(無いように書くこともできるけど、元波形が失われる操作なので注意)
プログラムで消すと後で戻せないから本当に要らなくなった時に手動で消すのが安全
#スクリプト
backup_folder のパスは適宜変えてください。
ffmpeg-pythonを使って
wav to wav変換しています。
(レートの指定も外したかったけど、外すと変なファイルができてしまうようでした)
Conv16bit44100WAV.py
# --Description:[tatmos][Conv]マテリアルを16bit44100Hzに変換する
import ffmpeg
import shutil
import os
import cri.atomcraft.project as acproject
import cri.atomcraft.debug as acdebug
#元波形のコピー先
backup_folder = "C:/MyDearest/backup/"
selectedMaterials = acproject.get_selected_objects("Material")["data"]
if len(selectedMaterials) == 0:
acdebug.warning("変換するマテリアルを選択してください。")
sys.exit()
for selectedMaterial in selectedMaterials:
input_path = acproject.get_value(selectedMaterial, "SrcFileAbsolutePath")["data"]
print(input_path)
print(src_path)
#元ファイルをコピー(作業フォルダへコピー)
src_path = backup_folder + os.path.basename(input_path)
shutil.copyfile(input_path, src_path)
#元ファイルリネーム(念のためその場にもバックアップファイル化)
os.rename(input_path,input_path + "_bak")
#16bit44100Hzに変換する
stream = ffmpeg.input(src_path)
stream = ffmpeg.output(stream, input_path, f='wav',ar=44100,acodec='pcm_s16le')
ffmpeg.run(stream)