はじめに
IEM Plug-in Suiteで立体音響とか試していて
マルチチャンネルの波形を扱えるのだけれど、
ゲームとかでオブジェクトオーディオのように扱いたいと思ったけど、
データをさらにバラバラのモノラルにして扱う必要がでてきて
DAWや波形エディタとかだと一つ一つ選んで設定を変えてとか
とても作業が大変なので、
スクリプトで簡単にできるようにしてみた
コードは以下のような感じ
wav_channel_split.py
import PySimpleGUI as sg
import subprocess
# 指定したファイルのチャンネルスプリット
def wav_channel_split():
read_src_path = sg.popup_get_file('チャンネル分離をしたいファイルを選択してください。')
print(read_src_path)
#ffmpeg -i test.wav -map_channel 0.0.0 1.wav -map_channel 0.0.1 2.wav -map_channel 0.0.2 3.wav -map_channel 0.0.3 4.wav -map_channel 0.0.4 5.wav -map_channel 0.0.5 6.wav -map_channel 0.0.6 7.wav -map_channel 0.0.7 8.wav
text = f"ffmpeg -i {read_src_path} "
for ch in range(8):
text +=f"-map_channel 0.0.{ch} {read_src_path[:-4]}_{ch+1}.wav "
print(text)
try:
result = subprocess.run(text,
shell=True, check=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
for line in result.stdout.splitlines():
print('>>> ' + line)
except subprocess.CalledProcessError:
print('外部プログラムの実行に失敗しました {0}'.format(text))
wav_channel_split()
このコードはチャンネル数8chの波形をモノラル8本にするようなコードになっています。
情報元
備忘録(あとがき)
wav波形フォーマットっていろいろあってうまく読めるライブラリの信頼度に依存する感じがしていて
librosaを最初頼ろうとしてみたところoutputが途中からサポートされなくなっていたようだった。
なんでも開いてくれるffmpegは強い感じがする。
で、ffmpegのpython版もあるけど、-map_channelの呼び方がわからず
今回は仕方ないのでsubprocess呼び出しにしてみたのだった。