2016-10-10 18 views
0

私はオーディオチャンネルを分離しようとするステレオオーディオファイルを持っています。左のオーディオのバスと、右のオーディオ信号のバスになります。これらのチャンネルでは、いくつかの操作を行い、再び1つのステレオ信号にマージする必要があります。AVAudioEngine別のチャンネル

オーディオファイルを読み込み、バス上で操作を行い、単一の信号にマージすることは問題ありません(この信号がステレオであるかどうかはテストしていませんが、以前のチャンネルに依存しています)。

私の問題は左と右のチャンネルを分離することです。私はそれを独立して変更することができます。

私のアイデアの一つは、右/左のみ信号を持っているAVAudioPlayerNodepanプロパティを使用していたが、このプロパティはまだAVAudioPlayerNodeに実装されていません(ドキュメントに記載のような)のように、それはすべてにもかかわらず(と思われます使用されているWWDCビデオの例)。

私が見つけた解決策は、thisでした。 memcpyを使用して新しいバッファを作成します。私はかなり時間がかかり、普通のプレーヤーには適していないと思うので、まだ試していない。

第3に、audiokitと呼ばれるフレームワークがあります。これにより、ストリームをモノラル左/右チャンネルに変換し、AKStereoOperationを作成して信号を再度マージするオプションが提供されます。この解決策の私の問題は、非常に単純なユースケースです。オーディオチャンネルを分離する。このため、おそらく動作する(テストされていなくても)ような巨大なフレームワークを含めて正当化するのは難しいと思う。

チャンネルを簡単に分離する方法はありますか?

ありがとうございます!

+0

2つのモノストリームを1つのステレオストリームに結合することはできましたか? – A21

+0

悲しいことに、avaudioengineではありません。 audiokitで可能です – Jan

+0

残念なことに私は自分のプロジェクトに客観的なCを使用しています。私はAudioKitがSwiftのためだと思います。 – A21

答えて

0

あなたは、生のサンプルを取ることができ、ステレオチャンネルをデインタリーブするように設定してAudioConverterNewと出力AudioStreamBasicDescriptionを使用してAudioConverter作成します。これにより、1つのチャネルが最初に連続し、2番目のチャネルがバッファの後半にある1つのバッファになります。

+0

ファイル形式を変更しようとしていない場合でもAudioConverterを使用できますか?私の場合、同じサンプルレートと長さを持つ2つのモノラルCAFファイルを1つのステレオファイルに結合しようとしています。フォーマットを設定する方法を示すAudioConverterNewのサンプルコードはありますか? – A21

+0

はい。 'AudioConverter'ドキュメントは、それがサポートする変換をリストアップしています。私はそれを使用する方法を示すアップルのサンプルがあると信じていますが、私はリンクが手元にありません。 – Tim

+0

私はAudioConverterNewのドキュメントをhttps://developer.apple.com/reference/audiotoolbox/1502936-audioconverternew?language=objcから見ています。この関数には3つのパラメータがありますが、inSourceFormatは単なるソースファイルを取り込むことを示唆しています。しかし、私の場合、私は一意のモノストリームを持つ2つの別々のオーディオファイルを持っています。私は明らかにここに何かを見逃しています。残念ながら、Appleのサイトにはたくさんのドキュメントがありません。 – A21

関連する問題