2017-05-11 10 views
0

私はAUSampler & AURemoteIOユニットを使用してユーザー定義ノートを再生する音楽制作アプリを持っています。私はいくつかの使用の後で、サンプラー上のAudioUnitRenderへの呼び出しが決して戻ってこない、オーディオスレッドをぶら下げ、オーディオ出力を消音するという問題を抱えています。オーディオスレッドが継続デバイスコンソール(ないデバッガ出力)にエラーメッセージを吐き出すようにCPU使用率がまた、この時点でアップ撮影:このメッセージはAUSampler内部_os_log_implによって記録されているAudioUnitRender on AUSampler

May 11 11:45:12 <device name> mediaserverd(CoreAudio)[2296] <Notice>: HALS_IOContext.cpp:1496:IOWorkLoop_HandleOverload: HALS_IOContext::IOWorkLoop_HandleOverload: Overload on context 96 current time: 11788974 deadline: 11788958

レンダリング(具体的にはVoiceEnvelope::GetRunFrameCount)。

誰にこのようなことが起こるのか、それを避ける方法についての提案はありますか?

+0

audiounrenderをremoteioの入力コールバックから呼び出していますか?もしそうなら、多分あなたはコードのいくつかを示すことができます。また、コールバックを使用したり、手動でaudiounrenderを呼び出す必要がない場合は、audiounit接続を作成するだけで十分です。 – dave234

+0

これは、remoteIOオーディオユニットのレンダリングコールバックから呼び出されています。私は[The Amazing Audio Engine 2](https://git.io/v9yQx)というライブラリを使用していますが、実際のコールバックの設定とレンダリングを処理していますが、 'AudioUnitRender'の呼び出しは[行163]にありますhttps://github.com/TheAmazingAudioEngine/TheAmazingAudioEngine2/blob/master/TheAmazingAudioEngine/Modules/AudioUnitModule.m#L163) – Jayson

答えて

1

私はこの問題を発見しました。私は、バッファのサイズより大きなオフセットをMusicDeviceMIDIEventに渡していましたが、この問題が発生します。これは、レンダリングコールバックに提供されるタイムスタンプが時々ジャンプするために発生していました。現在のコールバックのフレーム数よりも大きなオフセットでイベントをチェックして無視することで、この問題を解決できました。