目次

原文 Core Audio Overview: What Is Core Audio?

Core Audio とは

Core Audio は Mac OS X における、オーディオの全てのニーズに答えるために設計されています。 Core Audio を用いる事で、オーディオの生成、録音、ミックス、編集、操作、再生を行うことが可能となります。 同様に、MIDIデータの作成、記録、操作、再生を、ハードウェアとソフトウェアの両方のMIDI音源を分け隔てる事無く行う事が出来ます。

Core Audio は、緻密なシステムの統合体と C のプログラミングインターフェースを結びつけます。その結果、一連の信号を低レイテンシのまま扱える、柔軟なプログラミング環境となりました。Core Audio によってもたらされる恩恵には、以下のようなものが含まれています:

メモ: 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 アーキテクチャ

デジタルオーディオ/リニア 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 の実装の例を、以下にいくつか挙げます:

Audio Unit がモジュールなのは、使用者の要求に対して、これらをどんな順番でもミックスでき、適合できるようにする為です。 Figure 1-2 は、Audio Unit の簡単な接続関係図です。この接続関係は音源ユニットを使いオーディオ信号を生成し、その後、バンドパスフィルタとディストーションのエフェクトユニットを通過するようになっています。

Figure 1-2 Audio Unit の簡単な接続関係
Audio Unit の簡単な接続関係

様々な多岐にわたるアプリケーションから利用可能なオーディオ DSP コードを開発するならば、それは Audio Unit として固めるのがよいでしょう。

オーディオアプリケーションの開発者は、Audio Unit をサポートすることで、既に存在する(サードパーティと Apple の提供する) Audio Unit のライブラリを借り、開発するアプリケーションの機能を拡張することができます。

Apple はフィルタリング、ディレイ、リバーブ、といった一般的な処理を行ういくつかの Audio Unit を、そして、入出力デバイスを表すためのユニットを提供します(例えば、オーディオデータのネットワーク越しの送受信を可能にするユニット)。 Mac OS X v10.4 で提供される 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 を通過する
ハードウェアからの入力データは 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 を使って、以下の設定が可能です:

Audio MIDI 設定.app は Mac OS X v10.2 以降の /Applications/Utilities フォルダにあります。

Core Audio レコーディングスタジオ

Core Audio は録音や再生など、オーディオに関する多くの処理を包含していますが、これをレコーディングスタジオの機能要素と比較すると分かりやすいかもしれません。 簡単なハードウェアベースのレコーディングスタジオは、Figure 1-4 に示されるような、1つ2つの楽器がいくつかのエフェクタを経て、MIDI キーボードからのオーディオと一緒にミキシングコンソールに繋がっています。 ミキサはモニタスピーカだけではなく、テープデッキ(あるいは、もしかしたら HDD)といった記録装置へと、信号を出力します。

Figure 1-4 簡単なレコーディングスタジオ
簡単なレコーディングスタジオ

スタジオの中で使用されている多くのハードウェアが、ソフトウェアベースの同等の物に置き換えることができます。 特化した音楽スタジオアプリケーションは、オーディオの録音、シンセサイザ、編集、ミックス、処理、そして再生を行えます。 同様に MIDI データについても、ハードウェア音源とソフトウェア音源の両方で、記録、編集、処理、再生が可能です。 Mac OS X では、アプリケーションは Figure 1-5 に示されるように、これら全ての仕事を扱うために、Core Audio に頼っています。

Figure 1-5 Core Audio “レコーディングスタジオ”
:Core Audio "レコーディングスタジオ"

図を見てみると、信号チェインの大部分が Audio Unit で構成されていることがわかります。他の Core Audio のインターフェースはアプリケーションレベルのサポートを提供し、アプリケーションの、様々な形式のオーディオデータや MIDI データの取得、そしてそれらのファイルや出力デバイスへの出力を可能にします。 "Core Audio のプログラミングインターフェース" では それら Core Audio のインターフェースの構成について、より詳しく解説します。

以上の例え以外にも、Core Audio はコンピュータ上に更なるレコーディングスタジオを真似て構築することが可能です。 単純なシステム音声の再生から、圧縮オーディオファイルの作成、現実のものと錯覚するようなゲームプレーヤのオーディオ体験まで、これらの全てに Core Audio を使用することができます。

Core Audio SDK を用いた開発

オーディオソフト開発者の負担軽減のため、Apple は Core Audio のソフトウェア開発キット(SDK)を提供しています。 この SDK は、オーディオと MIDI の両サービスをカバーする多くのサンプルコードだけではなく、診断ツールやテストアプリケーションも提供します。 例えば、以下のようなものが含まれます:

この文章は、決まり切った仕事をこなす方法を与える 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