web-dev-qa-db-ja.com

iOS:オーディオユニットvs OpenALvsコアオーディオ

OpenALがiPhoneのサウンドスキーマにどのように適合するかを誰かに説明してもらえますか?

サウンドを処理するためのさまざまなレベルのAPIがあるようです。より高いレベルのものは理解するのに十分簡単です。

しかし、私の理解は底に向かって曖昧になります。 Core Audio、Audio Units、OpenALがあります。

これらの間の関係は何ですか? openALは、Core Audio(下位レベルのオブジェクトの1つとしてAudio Unitsを含む)が置かれている基盤ですか?

OpenALはXcodeによって文書化されていないようですが、その関数を使用するコードを実行できます。

34
P i

これは私が理解したことです:

基盤はCoreAudioです。具体的には、AudioUnitsです。

そのため、Audio Unitsがベースレイヤーを形成し、その上にいくつかの低レベルのフレームワークが構築されています。そして、caboodle全体はCoreAudioと呼ばれています。

OpenALはマルチプラットフォームAPIです。作成者はOpenGLの移植性を反映しようとしています。 Creative LabsやAppleなど、いくつかの企業がOpenALを後援しています。

したがって、Appleは、基本的にCore Audioの薄いラッパーとしてこのAPIを提供しています。これは、開発者がコードを簡単にプルできるようにするためだと思います。注意してください。これは不完全な実装です。 OpenALにCoreAudioが実行できることを実行させたい場合は、実行しますが、それ以外の場合は実行しません。

直感に反するようなものです。ソースを見るだけで、OpenALのレベルが低いように見えます。そうではありません!

36
P i

Core Audioは、さまざまなファイル形式の読み取りと書き込み、エンコーディング間の変換、ストリームからのフレームのプルなど、多くのことをカバーしています。この機能の多くは、「オーディオツールボックス」として収集されます。 Core Audioは、オーディオストリームの処理、再生、キャプチャ、またはその両方のための複数のAPIも提供します。最も低いレベルのものはAudioUnitsで、これは非圧縮(PCM)オーディオで動作し、エフェクトの適用やミキシングなどに適したものがいくつかあります。AudioUnitsの上に実装されたオーディオキューは、圧縮されたフォーマットで動作するため、はるかに簡単です。 PCM)そしていくつかのスレッドの課題からあなたを救います。 OpenALはAudioUnitにも実装されています。それでもPCMを使用する必要がありますが、少なくともスレッドは怖くありません。違いは、Appleのものではないため、プログラミング規約がCore Audioやその他のiOSとはまったく異なることです(最も明白なのは、プッシュAPIです。OpenALでストリーミングする場合は、ソースをポーリングして、バッファを使い果たし、新しいバッファをプッシュします。対照的に、オーディオキューとオーディオユニットはプルベースであり、再生に新しいサンプルが必要になったときにコールバックを受け取ります)。

あなたが見てきたように、より高いレベルは、MediaPlayerやAVFoundationのような素晴らしいものです。これらは、ファイルを再生するだけの場合ははるかに簡単ですが、何らかのエフェクトや信号処理などを実行する場合は、十分な深さのアクセスが得られない可能性があります。

35
invalidname