原文 [[https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/CoreAudioOverview/WhatisCoreAudio/WhatisCoreAudio.html|Core Audio Overview: What Is Core Audio?]]
====== Core Audio とは ======
Core Audio は Mac OS X における、オーディオの全てのニーズに答えるために設計されています。
Core Audio を用いる事で、オーディオの生成、録音、ミックス、編集、操作、再生を行うことが可能となります。
同様に、MIDIデータの作成、記録、操作、再生を、ハードウェアとソフトウェアの両方のMIDI音源を分け隔てる事無く行う事が出来ます。
Core Audio は、緻密なシステムの統合体と C のプログラミングインターフェースを結びつけます。その結果、一連の信号を低レイテンシのまま扱える、柔軟なプログラミング環境となりました。Core Audio によってもたらされる恩恵には、以下のようなものが含まれています:
* オーディオシンセサイザやオーディオのデジタル信号処理(DSP)向けの、プラグインインターフェース。
* 幅広い種類のオーディオファイルとオーディオ形式を読み書きする為の、組み込みサポート。
* 関係する一連の信号を構築する為の、モジュールによるアプローチ。
* 複数チャンネルによる自由自在な入出力設定。
* 録音/再生におけるオーディオデータとMIDIデータの同期の簡単化。
* 接続の種類(USB, FireWire, PCI など)によらない、全ての内蔵、外部デバイスへの標準化されたインターフェース。
メモ: Core Audio は C 言語のインターフェースを持ちますが、
Core Audio の関数群は Cocoa アプリケーションや Objective-C から呼び出すことが可能です。
===== Mac OS X における Core Audio の位置づけ =====
Core Audio は Mac OS X に緻密に統合されています。Figure 1-1 に示されるように、Core Audio の大部分のサービスは、ハードウェア抽象化層(HAL)と Core MIDI の上に成り立っています。オーディオ信号は HAL を通して行き来し、Core MIDI は MIDI データと MIDI デバイス向けに、同様のインターフェースを提供します。
**Figure 1-1** Core Audio アーキテクチャ\\
{{core_audio_architecture.jpg|Core Audio アーキテクチャ}}
==== デジタルオーディオ/リニア PCM 略説 ====
恐らく皆さんの期待通り、Core Audio はデジタルフォーマットのオーディオデータを扱います。
Core Audio の殆どの構成体は、リニアパルス符号変調(**リニア PCM**)のオーディオデータを扱います。このデータ形式は、デジタルオーディオにおける最も普遍的な非圧縮データ形式です。
パルス符号変調は、一定間隔(**サンプリングレート**)でオーディオ信号の大きさを計測し、各々の標本を数値に変換することで実現されます。
この値は信号の振幅に合わせて直線的に変化します。
例えば、一般的なCDオーディオは44.1KHzのサンプリングレートを持ち、信号の振幅を表すのに16bit(65536通りの値を取ることができます)使います。
Core Audio のデータ構造は、どんなサンプリングレートもビット深度も持つことができ、サンプル値として整数値と浮動小数点値の両方をサポートする、リニア PCM と説明できます。
Core Audio は通常、オーディオデータがネイティブエンディアンの32bit浮動小数点リニア PCM 形式であることに期待します。
しかし、オーディオデータの異なるリニア PCM の形式間の変換の為に、オーディオコンバータを作ることもあるでしょう。
また、それらコンバータを使って、MP3 や Apple ロスレスといった圧縮オーディオ形式とリニア PCM 間の変換を行うこともできます。
Core Audio は、大部分の一般的なデジタルオーディオ形式を扱う為のコーデックを提供します(ですが MP3 へと変換するエンコーダは提供されていません)。
Core Audio は、オーディオデータを保存する為の多くの一般的なファイル形式もサポートしています。
==== Audio Unit ====
**Audio Unit** はオーディオデータを扱うプラグインです。
Mac OS X アプリケーションでは、殆ど全てのオーディオデータの処理や操作が、Audio Unit を通して行われます(中には必要としないものもあります)。
いくつかのユニットは、単純な共通作業の為に開発者に利用されます(信号の分離やハードウェアのインターフェースなど)。一方、それ以外はユーザーが信号処理過程へと組み込む事のできる信号処理装置として、画面上に現れます。
例えば、ソフトウェアベースのエフェクト処理装置は、しばしば(ディストーション装置といった)現実世界のものを、画面上で模倣します。
Audio Unit の中には、プログラム的に、あるいは MIDI 入力に反応する形で、自分自身で信号を生成しするものもあります。
Audio Unit の実装の例を、以下にいくつか挙げます:
* 信号処理装置(例えば、ハイパスフィルタ、フランジャ、コンプレッサ、ディストーション)。1つのエフェクトユニットはオーディオデジタル信号処理装置(DSP)のように振る舞い、エフェクト装置や外部の信号処理装置に相当します。
* 音源やソフトウェアシンセサイザ。これら音源ユニット(ミュージックデバイス Audio Unit とも呼ばれます)は、決まって MIDI 入力に反応する形で音楽的な音色を生成します。音源ユニットは、ファイルや外部の MIDI でバイスからの MIDI データを解釈することができます。
* 信号発振器。発振ユニットは、信号発振器として開発者が実装する Audio Unit です。音源ユニットと違い、発振ユニットは MIDI データによって発声することはなく、コードを通して発声を制御します。例えば、発振ユニットは正弦波を計算・生成したり、発声データをファイルやネットワーク越しに得たりするでしょう。
* ハードウェアの入出力のインターフェース。更なる情報は[[core_audio_のプログラミングインターフェース#ハードウェア抽象化層|"ハードウェア抽象化層"]]と[[audio:core_audio_概要:interfacing_with_hardware_devices]]をご覧ください。
* 信号変換器。これは、Audio Converter を使用し、サンプリングレートや量子化ビット数などが様々な、リニア PCM 同士の変換を行います。より詳しい情報は[[audio:core_audio_概要:audio_converters_and_codecs]]をご覧ください。
* ミキサーとスプリッタ。例えば、ミキサーユニットはトラックのミックスダウンを行ったり、ステレオエフェクトや 3D 定位エフェクトをかけたりします。スプリッタユニットは、モノラル信号にくし形フィルタを適用し2つのチャンネルに分離することで、疑似ステレオ化したりします。
* オフラインエフェクトユニット。オフラインエフェクトユニットは処理を集中的に行ったり、単にリアルタイムで行うことが不可能な場合に用います。例えば、ファイル中のサンプルを前後逆転させるようなエフェクト(結果として音楽は逆再生状態になります)は、オフラインでかけるべきです。
Audio Unit がモジュールなのは、使用者の要求に対して、これらをどんな順番でもミックスでき、適合できるようにする為です。
Figure 1-2 は、Audio Unit の簡単な接続関係図です。この接続関係は音源ユニットを使いオーディオ信号を生成し、その後、バンドパスフィルタとディストーションのエフェクトユニットを通過するようになっています。
**Figure 1-2** Audio Unit の簡単な接続関係\\
{{simple_au_chain.jpg|Audio Unit の簡単な接続関係}}
様々な多岐にわたるアプリケーションから利用可能なオーディオ DSP コードを開発するならば、それは Audio Unit として固めるのがよいでしょう。
オーディオアプリケーションの開発者は、Audio Unit をサポートすることで、既に存在する(サードパーティと Apple の提供する) Audio Unit のライブラリを借り、開発するアプリケーションの機能を拡張することができます。
Apple はフィルタリング、ディレイ、リバーブ、といった一般的な処理を行ういくつかの Audio Unit を、そして、入出力デバイスを表すためのユニットを提供します(例えば、オーディオデータのネットワーク越しの送受信を可能にするユニット)。
Mac OS X v10.4 で提供される Audio Unit のリストは[[audio:core_audio_概要:システム組込み_audio_unit|"システム組込み Audio Unit"]] をご覧ください。
Audio Unit の実験を行う簡単な方法は、XCode Tools に含まれ /Developer/Applications/Audio にインストールされる AU Lab.app をご覧ください。
この方法では、出力デバイスを通してオーディオデータ源から、信号処理過程を作ることになります。
==== ハードウェア抽象化層 ====
Core Audio は、アプリケーションがハードウェアと双方向にやり取りするための、首尾一貫した分かり切ったインターフェースである、ハードウェア抽象化層(HAL)を使用します。
また、HAL はアプリケーションが簡単に同期をとったり、レイテンシを補正するためのタイミング情報も提供します。
大体のケースにおいては、HAL と直接やり取りする必要さえありません。
Apple は AUHAL と呼ばれる特別な Audio Unit を提供し、これが別の Audio Unit からのオーディオデータを、直接ハードウェアデバイスへと送ることを可能にします。
同様に、Figure 1-3 に示されるように、ハードウェアデバイスから入ってくるデータも AUHAL を通り、その後に続く Audio Unit が利用できるようになっています。
**Figure 1-3** ハードウェアからの入力データは HAL と AUHAL を通過する\\
{{hardware_input_hal.jpg|ハードウェアからの入力データは HAL と AUHAL を通過する}}
AUHAL は、Audio Unit と ハードウェア間のオーディオデータ転送で要求される、どんなデータ変換でもチャンネルマッピングでも処理します。
==== MIDI サポート ====
Core MIDI は MIDI プロトコルに対応するCore Audio の一部です。
Core MIDI は、アプリケーションの、キーボードやギターといった MIDI デバイスとのやり取りを可能にします。
MIDI デバイスからの入力は MIDI データとして蓄えられるか、音源ユニットを通してオーディオ信号へと変化します。
アプリケーションは MIDI デバイスへ情報を出力することもできます。
Core MIDI は MIDI デバイスの表現のため、そして、標準的な MIDI ケーブルによる接続(MIDI In, MIDI Out, MIDI Thru)を模倣するために抽象化を行い、低レイテンシの I/O を提供します。
また、Core Audio は MIDI データの再生に用いることのできる、音楽プレーヤプログラミングインターフェースもサポートしています。
MIDI プロトコルの機能に関するより詳しい情報は、MIDI Manufacturers Association のサイト www.midi.org をご覧ください。
==== Audio MIDI 設定.app ====
Mac OS X でオーディオを使用する際には、ユーザーと開発者共に Audio MIDI 設定.app を使用して、オーディオと MIDI の設定をすることになるでしょう。Audio MIDI 設定.app を使って、以下の設定が可能です:
* デフォルトのオーディオ入出力デバイスを指定する。
* サンプリングレートやビット深度といった、入出力デバイスの特性を設定する。
* 使用可能なスピーカへのオーディオチャンネルの割り当て(ステレオ、5.1チャンネルサラウンド など)。
* アグリゲートデバイスの作成(アグリゲートデバイスに関する情報は [[audio:core_audio_概要:using_aggregate_devices]] をご覧ください)。
* MIDI ネットワークと MIDI デバイスの設定。
Audio MIDI 設定.app は Mac OS X v10.2 以降の /Applications/Utilities フォルダにあります。
===== Core Audio レコーディングスタジオ =====
Core Audio は録音や再生など、オーディオに関する多くの処理を包含していますが、これをレコーディングスタジオの機能要素と比較すると分かりやすいかもしれません。
簡単なハードウェアベースのレコーディングスタジオは、Figure 1-4 に示されるような、1つ2つの楽器がいくつかのエフェクタを経て、MIDI キーボードからのオーディオと一緒にミキシングコンソールに繋がっています。
ミキサはモニタスピーカだけではなく、テープデッキ(あるいは、もしかしたら HDD)といった記録装置へと、信号を出力します。
**Figure 1-4** 簡単なレコーディングスタジオ\\
{{simple_recording_studio.jpg|簡単なレコーディングスタジオ}}
スタジオの中で使用されている多くのハードウェアが、ソフトウェアベースの同等の物に置き換えることができます。
特化した音楽スタジオアプリケーションは、オーディオの録音、シンセサイザ、編集、ミックス、処理、そして再生を行えます。
同様に MIDI データについても、ハードウェア音源とソフトウェア音源の両方で、記録、編集、処理、再生が可能です。
Mac OS X では、アプリケーションは Figure 1-5 に示されるように、これら全ての仕事を扱うために、Core Audio に頼っています。
**Figure 1-5** Core Audio "レコーディングスタジオ"\\
{{core_audio_recording_studio.jpg|:Core Audio "レコーディングスタジオ"}}
図を見てみると、信号チェインの大部分が Audio Unit で構成されていることがわかります。他の Core Audio のインターフェースはアプリケーションレベルのサポートを提供し、アプリケーションの、様々な形式のオーディオデータや MIDI データの取得、そしてそれらのファイルや出力デバイスへの出力を可能にします。
[[core_audio_のプログラミングインターフェース|"Core Audio のプログラミングインターフェース"]] では それら Core Audio のインターフェースの構成について、より詳しく解説します。
以上の例え以外にも、Core Audio はコンピュータ上に更なるレコーディングスタジオを真似て構築することが可能です。
単純なシステム音声の再生から、圧縮オーディオファイルの作成、現実のものと錯覚するようなゲームプレーヤのオーディオ体験まで、これらの全てに Core Audio を使用することができます。
===== Core Audio SDK を用いた開発 =====
オーディオソフト開発者の負担軽減のため、Apple は Core Audio のソフトウェア開発キット(SDK)を提供しています。
この SDK は、オーディオと MIDI の両サービスをカバーする多くのサンプルコードだけではなく、診断ツールやテストアプリケーションも提供します。
例えば、以下のようなものが含まれます:
* 取り付けられているハードウェアデバイスを含む、そのシステムのオーディオステータス全体とやり取りする為のアプリケーション(HALLab)
* Audio Unit を読み込み、操作するホストアプリケーション(AudioUnitHosting)。しかし、Audio Unit の実際のテストでは、[[audio:core_audio_概要:core_audio_とは#Audio Unit|"Audio Unit"]] でも触れている AU Lab.app を利用すべきです。
* それぞれ、オーディオファイルと MIDI ファイルを読み込み再生するための、サンプルコード(PlayFile と PlaySequence)。
この文章は、決まり切った仕事をこなす方法を与える Core Audio SDK の追加例を指します。
Core Audio SDK は Audio Unit を作るための C++ のフレームワークも含みます。
このフレームワークは、コンポーネントマネージャのプラグインインターフェースを切り離すことで、開発者がしなければならない多くの仕事を簡略化します。
また、この SDK は共通の Audio Unit 型のテンプレートを用意しています。なので、大部分において、用意されているメソッドを自分のカスタム Audio Unit に合わせて、オーバーライドするだけで済みます。
いくつかのサンプル Audio Unit プロジェクトが、これらテンプレートとフレームワークを使用方法を示しています。
フレームワークとテンプレートのより詳しい使用方法については、//[[http://developer.apple.com/documentation/MusicAudio/Conceptual/AudioUnitProgrammingGuide/index.html|Audio Unit Programming Guide]]// をご覧ください。
Apple は Audio Unit 開発の補佐の為にサンプルコードとして C++ フレームワークを提供します。
このフレームワークは、開発の要求に沿ってご自由に改変して頂いて構いません。
Core Audio SDK は、開発環境として Xcode が使われているものと仮定しています。
最新の SDK は http://developer.apple.com/sdk/ からダウンロードすることができます。
インストール後は、SDK のファイルは /Developer/Examples/CoreAudio に位置しています。