iOS用のCore Audioを使用して非常に簡単なオーディオエフェクトチェーンを構築しようとしています。今まで私はシミュレータで完璧に動作するEQ - Compression - Limiterチェーンを実装しました。ただし、デバイスでは、入力および出力ハードウェア形式の見た目の不一致により、ノードをAVAudioEngineに接続するとアプリケーションがクラッシュします。AVAudioEngineの入力と出力のハードウェア設定を一致させる
'com.apple.coreaudio.avfaudio', reason: 'required condition is false:
IsFormatSampleRateAndChannelCountValid(outputHWFormat)'
私のオーディオグラフは、次のとおりです。
Mic -> Limiter -> Main Mixer (and Output)
グラフは、上記の例外を除いてクラッシュ
engine.connect(engine.inputNode!, to: limiter, format: engine.inputNode!.outputFormatForBus(0))
engine.connect(limiter, to: engine.mainMixerNode, format: engine.inputNode!.outputFormatForBus(0))
を使用して移入されます。エンジンのオーディオ・ノードを接続する前kAudioUnitErr_FormatNotSupportedエラー
'com.apple.coreaudio.avfaudio', reason: 'error -10868'
でミキサーに
engine.connect(engine.inputNode!, to: limiter, format: engine.inputNode!.outputFormatForBus(0))
engine.connect(limiter, to: engine.mainMixerNode, format: limiter.outputFormatForBus(0))
アプリケーションがクラッシュを接続する場合、私は代わりにリミッタのフォーマットを使用する場合、inputNodeは1つのチャネルと有しますサンプルレートは44.100Hzであり、outputNodeは0チャンネルでサンプルレートは0Hzです(outputFormatForBus(0)プロパティを使用して推定されます)。しかし、出力ミキサーにまだノードが接続されていないことが原因ですか? の好ましいサンプルレートの設定AVAudioSessionは違いがありません。
ここには何かがありますか?私は、マイクへのアクセス(AVAudioSession.sharedInstanceを(使用して検証)。recordPermission())を持っている、と私はレコードにAVAudioSessionモードを設定している(AVAudioSession.sharedInstance()。setCategory(AVAudioSessionCategoryRecord))。次のように初期化さ
リミッターがAVAudioUnitEffectです:私は、これは、シミュレータを使用して完全に正常に動作し、言ったように
let limiter = AVAudioUnitEffect(audioComponentDescription:
AudioComponentDescription(
componentType: kAudioUnitType_Effect,
componentSubType: kAudioUnitSubType_PeakLimiter,
componentManufacturer: kAudioUnitManufacturer_Apple,
componentFlags: 0,
componentFlagsMask: 0))
engine.attachNode(limiter)
とエンジンが(グローバル、クラス変数
var engine = AVAudioEngine()
で、 Macのデフォルトハードウェア)、iOS8のさまざまなiPadsで継続的にクラッシュする& iOS9。私は単純に出力ミキサーここ
do {
file = try AVAudioFile(forWriting: NSURL.URLToDocumentsFolderForName(name: "test", WithType type: "caf")!, settings: engine.inputNode!.outputFormatForBus(0).settings)
} catch {}
engine.connect(player, to: engine.mainMixerNode, format: file.processingFormat)
にプレイヤーにマイク入力を供給し、超基本的な例の作業を持って出力ノードが2つのチャンネルと44.100Hzのサンプリングレートを有しているinputNodeは、1つのチャネルおよび44.100Hzのサンプリングレートを持っていますミスマッチは発生していないようです。したがって、問題は、AVAudioUnitEffectが出力ミキサーに接続されている方法でなければなりません。
ご協力いただければ幸いです。
あなたはこれを理解しましたか? – user3344977
AVAUdioは後ろにひどい痛みがあり、ドキュメンテーションの書き方が悪く、エンジンは実際にはあいまいなルールや役に立たないエラーコードに従って動作します。それは吸うが、我々は前方に耕す必要があります。私はそれを解決すれば私は答えを掲示するでしょう。 – Josh
これを再現するプロジェクトはありますか? –