【Swift】ステレオ音源の左右を反転させて、センター部分を消す処理

Swift言語でステレオ音源の左右を反転させてセンター部分を消す処理を書きました。
初歩的なボーカル削除技術としても有名ですね。

ソースコードはGitHub上にも公開しています: https://github.com/KanoeGitHub/removeSoundCentral-for-swift

使用方法

このコードは iOSApp用ではありません。コマンドラインや適当なエディタの実行ボタンから動作させる用です。

お使いの場合は下記のコードの4行目の”sample.mp3″という部分を任意の音源パスに置き換えてください。

説明

30 ~36行目が実際の処理の内容になります。
ステレオのL側では L-Rを、R側ではR-Lを行っているだけです。
こうすることで打ち消すことができます。

53行目ではsleep関数で少し処理を止めています。
理由は、ローカルでプレーヤーを再生すると、そのままでは音源が再生されるまでに処理が進んでしまうため、音源が流れずに処理が終わってしまいます。
そのため、音源の長さ分+1秒間スリープさせて、時間を稼いでいます。

課題点

現在はステレオの左右側でそれぞれ処理を行っているために、時間がかかっています。

AVAudioEngineでどうにかリアルタイムに処理できたらいいなと思っています。

また、理想は音源のL側R側を途中でモノラルとして扱って、片方に再生する際にエフェクトとして -1 をかけることができれば、一番素早く処理が行えると思いますが、ステレオからモノラルに変換する方法や、自分でリアルタイムなPCMデータに掛けるエフェクトを実装する方法がまだわかっていません。(多分AudioEnginの何かしらを使うのでしょうが….)