LoginSignup
2
1

マルチチャンネルの波形をチャンネルごとのモノラル波形にする

Last updated at Posted at 2023-10-17

はじめに

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本にするようなコードになっています。

image.png

情報元

備忘録(あとがき)

wav波形フォーマットっていろいろあってうまく読めるライブラリの信頼度に依存する感じがしていて
librosaを最初頼ろうとしてみたところoutputが途中からサポートされなくなっていたようだった。

なんでも開いてくれるffmpegは強い感じがする。

で、ffmpegのpython版もあるけど、-map_channelの呼び方がわからず
今回は仕方ないのでsubprocess呼び出しにしてみたのだった。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1