Core Audioの復習

2010. 05. 29
クロックの作成』で作ったクロックアプリケーションを改造して、アラームを設定するのですが、その前にCore Audioの復習をしたいと思います。

以前書いた『Core Audioテクノロジーの概要』の焼き直しですが、ご容赦ください。


●Core Audioアーキテクチャ


・iPhone OSのオーディオテクノロジー

iPhone OSにおけるオーディオテクノロジーは、基本的にCore Audioアーキテクチャが担い、OpenALもサポートしています。

Core Audioアーキテクチャは、Core Audioファミリのフレームワークで構成されており、各フレームワークが実際の処理を行うサービスを提供するという形になっています。

『Core Audioテクノロジーの概要』でも触れましたが、『Core Audio』はオーディオ全般のアーキテクチャの総称であると同時に、オーディオデータタイプを定義する同名のフレームワークが存在することに注意してください。
(CoreAudio.frameworkが、Core Audioアーキテクチャの中心や親となるフレームワークというわけでもありません)


Core Audioアーキテクチャ
    |
    ∟Core Audio系フレームワーク
    |        |
    |        ∟AudioToolbox.framework
    |        |        ∟AudioConverter.h(Audio Converter Services
    |        |        ∟AudioFile.h(Audio File Services
    |        |        ∟AudioFileStream.h(Audio File Stream Services
    |        |        ∟AudioFormat.h(Audio Format Services
    |        |        ∟AudioQueue.h(Audio Queue Services
    |        |        ∟AudioServices.h(Audio Session Services、System Sound Services
    |        |        ∟AudioToolbox.h
    |        |        ∟AUGraph.h(Audio Processing Graph Services
    |        |        ∟ExtendedAudioFile.h(Extended Audio File Services
    |        |
    |        ∟AudioUnit.frameworkAudio Unit Services
    |        |        ∟AUComponent.h(Audio Unit Component Services
    |        |        ∟AudioComponent.h(Audio Component Services
    |        |        ∟AudioOutputUnit.h(Output Audio Unit Services
    |        |        ∟AudioUnit.h
    |        |        ∟AudioUnitParameters.h
    |        |        ∟AudioUnitProperties.h
    |        |
    |        ∟CoreAudio.framework
    |        |        ∟CoreAudioTypes.h
    |        |
    |        ∟AVFoundation.framework
    |                ∟AVAudioPlayer.h(AVAudioPlayerクラス
    |
    ∟OpenAL系フレームワーク
            |
            ∟OpenAL.framework(定位オーディオを提供するクロスプラットフォーム標準)
                    ∟al.h
                    ∟alc.h
                    ∟oalMacOSX_OALExtensions.h
                    ∟oalStaticBufferExtension.h


フレームワークの中で、iPhone OS 2.2で追加されたAVFoundation.frameworkのみObjective-Cのインターフェイスで、OpenALを含め他は全てC言語のインターフェイスです。


Audio Toolboxフレームワーク

Audio Toolboxフレームワークは、録音、再生、ストームの解析のインターフェイスを提供します。

iPhone OSでは、オーディオセッションを管理する追加インターフェイスも提供します。


・Audio Converter Services

Audio Converterオブジェクトは、様々なリニアPCMオーディオフォーマットの変換を行います。

リニアPCMと圧縮フォーマット間の変換をすることができます。

サポートされている変換は以下の通りです。

・PCMのビット深度
・PCMのサンプルレート
・浮動小数点PCMと固定小数点PCMの相互変換
・PCMのインターリーブと非インターリーブの相互変換
・PCMと圧縮フォーマットとの相互変換

1つのオーディオコンバータが2種以上の変換を行う場合があります。


・Audio File Services

ディスクまたはメモリバッファの様々なオーディオデータを、読み込みまたは書き込みを行うCプログラミングインターフェイスです。

Audio File Servicesでは以下のことができます。

・オーディオファイルの生成、初期化、開く、閉じる
・オーディオファイルの読み込みと書き込み
・オーディオファイルの最適化
・ユーザデータとグローバル情報の操作


・Audio File Stream Services

Audio File Stream Servicesは、ストリームのオーディオファイルを解析するインターフェイスを提供します。
(一度に入手できるデータのウィンドウは限定されています)

オーディオファイルストリームは、特性上ランダムアクセスはできません。

ストリームからデータを要求する時、データの先頭がアクセス可能な長さではなかったり、末尾のデータがまだ入手できていない場合があります。

さらに、入手するデータには解析に必要なパケット部分を含んでいる場合もあります。

ストリームのオーディオデータを解析するには、パーサ(解析プログラム)の要求を満たす部分データを覚えていて、残りのデータを待つことができる必要があります。

パーサは必要に応じて解析を保留したり、再開できる必要があります。

パーサを使用するには、ストリームのオーディオファイルを取得して、パーサにデータを渡します。

パーサは完全なオーディオデータのパケットまたは完全なプロパティを受け取ると、コールバック関数を呼び出します。

コールバックでは解析したデータを再生したり、ディスクへ書き込んだりします。

以下に、典型的なオーディオファイルストリームのパーサの処理手順の要点を示します。

1)AudioFileStreamOpen関数を呼び出し、新しいオーディオファイルストリームのパーサを生成します
コールバック関数にオーディオデータとメタデータのポインタを渡します。
(AudioFileStream_PacketsProcとAudioFileStream_PropertyListenerProc)
AudioFileStreamOpen関数で新しいパーサに参照を渡します。

2)ストリームデータを取得します。
AudioFileStreamParseBytes関数を呼び出し、パーサにデータを渡します。
パーサにデータを順次、できれば隙間無く送ります。

a.パーサは利用可能なオーディオデータのバッファを取得すると、オーディオデータのコールバックを呼び出します。
コールバックはデータを再生したり、ファイルに書き込んだりなどの処理を行います。

b.パーサはメタデータを取得すると、プロパティのコールバックを呼び出し、AudioFileStreamGetPropertyInfoとAudioFileStreamGetProoerty関数を呼び出してプロパティ値を入手します。

3)ストリームの解析が終わるとAudioFileStreamClose関数を呼び出し、パーサを閉じて解放します。

Audio File Stream Servicesは以下のオーディオデータタイプをサポートします。

・AIFF
・AIFC
・WAVE
・NeXT
・ADTS
・MPEG Audio Layer 3
・AAC


・Audio Format Services

iPhone OSとMac OS Xの、オーディオフォーマットとコーデックの情報を入手するCインターフェイスです。


・Audio Queue Services

Audio Queue Servicesは、Core Audioの一部であるAudio ToolboxフレームワークのCプログラミングインターフェイスです。

audio queueは、オーディオの録音または再生に使うソフトウェアオブジェクトです。

audio queueの仕事は、

・オーディオハードウェアへの接続
・メモリ管理
・オーディオ圧縮フォーマットに必要なコーデック採用
・再生または録音の仲介

Audio Queue Servicesは、リニアPCMや圧縮フォーマット(例えばApple LosslessとAAC)と、ユーザがインストールしているコーデックの他フォーマットのオーディオの録音と再生を行います。

Audio Queue Servicesは、スケジュール再生と複数のaudio queuesの同期、オーディオとビデオの同期をサポートします。


・Audio Session Services

Audio Session Servicesは、他のアプリケーションの状況によって、アプリケーションのオーディオの動作を管理するCインターフェイスです。

Audio Session Servicesは、iPhone OSアプリケーションでのオーディオの動作を指定できます。

例えば、貴方のアプリケーションでビルトインアプリケーションを無音にしたり、またそれらのオーディオとミックスさせることもできます。

またAudio Session Servicesを使って、電話の呼び出し時などにアプリケーションの動作を中断するよう指定することもできます。


・Audio Unit Processing Graph Services

Audio Unit Processing Graph Servicesは、オーディオユニットの設定を表すインターフェイスを提供するもので、入力と出力を接続、コールバックが使用する入力を提供します。

また、総合的な信号チェーンの一部の論理構造を考慮し、親グラフにサブ(または子)の処理グラフを埋め込むことができます。

(AUGraph型の)オーディオ処理グラフオブジェクトは、オーディオ信号処理ネットワークを完全に作図します。

Audio Unit Processing Graph Servicesは、オーディオユニットのインスタンスの管理にAUGraphOpen関数を呼び出します。

オーディオ処理グラフオブジェクトは、完全な 情報 全てのオーディオユニットのグラフに関する完全な情報を得ます。


グラフには様々なノードオブジェクト(各AUNode型)が有り、それぞれのオーディオユニットまたはサブグラフを表し、追加や削除、連携や修正をすることもできます。

グラフオブジェクトの状態は、描画スレッドと他のスレッドの両方を操作できます。

その結果、グラフの状態に影響する全てのアクティビティは保護され、メッセージングモデル間の呼び出しスレッドとグラフオブジェクトの出力ユニットが呼び出したスレッド(描画スレッド)がロックされます。

グラフオブジェクトは一つのヘッドノード(出力ユニット)を持ちます。

出力ユニットは、グラフの描画操作の開始と終了に使用され、実行されているグラフの状態を安全に操作できるポイントに送り込まれます。


・Extended Audio File Services

Extended Audio File Servicesは、オーディオファイルのアクセスを簡素化し、Audio File ServicesとAudio Converter Servicesを合わせた特徴を持っています。

リニアPCMオーディオファイルと同様に、圧縮ファイルの読み込みと書き込みの統一したインターフェイスを提供します。


・System Sound Services

System Sound Servicesは、短いサウンドの再生とバイブレーションの呼び出しを行うCインターフェイスです。

System Sound Servicesは30秒以下の短いサウンドの再生ができます。

このインターフェイスは、レベル、ポジショニング、タイミング制御を提供しません。

System Sound Servicesは、iPhoneのバイブレーション機能や、iPod touchの(圧電振動子を使用した)短時間の警告音機能を使用することができます。


●Audio Unitフレームワーク

Audio Unitフレームワークは、ビルトインとカスタムのオーディオ処理プラグインと、既知のオーディオユニットを使用するインターフェイスを提供します。

iPhone OSでは、アプリケーションでビルトインのオーディオユニットを使用できます。

Mac OS Xでは、サードパーティ製を含むビルトインまたはカスタムのオーディオユニットを使用できます。

以下に役立つ追加ドキュメントを示します。

・オーディオ処理グラフにオーディオユニットを接続するAPIの説明については、『Audio Toolbox Framework Reference』の『Audio Unit Processing Graph Services Reference』を参照してください。

・iPhone OSのオーディオユニットへのアクセスの情報については『Audio Unit Hosting Guide for iOS』を参照してください。


・Audio Component Services

Audio Component Servicesは、オーディオユニットとオーディオコーデックの検索と開くためのインターフェイスを定義します。

Mac OS X v10.5でコンポーネントインターフェイスのバイナリ互換を保持するには、コンポーネントマネージャーの依存を削除してください。


・Audio Unit Component Services

Audio Unit Component Servicesは、オーディオユニットを使用するためのCインターフェイスを提供します。

オーディオユニットはプラグインを使うオーディオ処理や、オーディオデータの生成を行います。

オーディオユニットを検索、開く、閉じるには『Audio Component Services Reference』で述べている、Audio Component Servicesのコンパニオンインターフェイスを使用してください。

オーディオユニットには『type』、『subtype』、『manufacturer ID』の3組の識別コードが有ります。

詳細は、Audio Component Services ReferenceのAudioComponentDescription構造体を参照してください。


・Output Audio Unit Services

Output Audio Unit Servicesは、Audio UnitフレームワークのCインターフェイスです。

このインターフェイスはI/Oオーディオユニット(多くの場合、出力オーディオユニットと呼ばれる)の開始と停止に使用します。


●Core Audioフレームワーク

Core Audioフレームワーク(Core Audioの他のサービス向けのアンブレラフレームワークではなく、むしろ同等)の他のCore Audioインターフェイスが使用する、データ型と定数を定義します。

このフレームワークには便利な機能を持つ関数が含まれています。


・Core Audio Data Types

Core Audioで使用する全てのデータ型と定数を表しています。

また、これらの型と定数を操作する便利な機能もあります。


●AV Foundationフレームワーク

AV Foundationフレームワークは、iPhone OSアプリケーションでのオーディオの再生と録音を行う、Objective-Cインターフェイスを提供します。

また、アプリケーションのオーディオセッションの設計と管理をする、AVAudioSessionClassを提供します。


・AVAudioPlayerクラス

AVAudioPlayerクラスのインスタンスはオーディオプレイヤと呼ばれ、ファイルまたはメモリからオーディオデータの再生を提供します。

アプリケーションの要求が、ステレオポジションや正確な同期、ネットワークストリームからのキャプチャされたオーディオの再生でない限り、Appleはこのクラスを使用したオーディオの再生を推奨します。

オーディオテクノロジーの概要については『Audio & Video Starting Point』を参照してください。

オーディオプレイヤを使用すると以下のことができます。

・任意の時間のサウンドの再生
・ファイルまたはメモリバッファからのサウンドの再生
・ループ再生
・オーディオプレイヤごとに1サウンドで、複数同時再生
・再生中の各サウンドの相対的な再生レベルの制御
・サウンドファイルの特定の位置へのシーク、アプリケーションによる速い巻き戻しと早送り機能のサポート
・再生レベルメータに使用できるデータの取得

AVAudioPlayerクラスは、iPhone OSが使用するオーディオフォーマットのサウンドを再生できます。

(例えば、電話の呼び出し時など)処理の中断や、サウンドの再生終了時のユーザインターフェイスの更新には、デリゲートを使用します。

AVAudioPlayerクラスのデリゲートメソッドについては、『AVAudioPlayerDelegate Protocol Reference』を参照してください。

このクラスは、サウンドのタイムラインの再生位置や、ボリュームやループなど再生のオプションへのアクセスといったサウンドについての情報を管理に、Objective-Cで宣言したプロパティの機能を使用します。

また、プロパティ(再生)をテストで使う際は、必ず再生中に行ってください。

再生のための適切なオーディオセッションを設定するには、『AVAudioSession Class Reference』と『AVAudioSession Delegate Protocol Reference』を参照してください。


・AVAudioRecorderクラス

AVAudioRecorderクラスのインスタンスはオーディオレコーダと呼ばれ、アプリケーションのオーディオの録音機能を提供します。

オーディオレコーダを使用すると以下のことができます。

・ユーザが停止するまでの録音
・指定された時間の録音
・録音の一時停止と再開
・入力レベルメータに使用できるデータの取得

オーディオレコーダでの録音の中断や完了、デコードエラーへの対応には、デリゲートオブジェクトを使用します。

ビット深度やビットレート、サンプルレート変更の品質など、オプションを含む録音の設定は辞書で構成します。

録音のための適切なオーディオセッションを設定するには、『AVAudioSession Class Reference』と『AVAudioSession Delegate Protocol Reference』を参照してください。


●AVAudioSessionクラス

AVAudioSessionクラスのインスタンスはオーディオセッションと呼ばれ、シングルトンオブジェクトを採用し、アプリケーションにオーディオコンテキストを設定します。

このクラスを使用すると以下のことができます。

・アプリケーションのオーディオセッションを有効または無効にします
・オーディオセッションのカテゴリを設定
・オーディオハードウェアのサンプルレートとI/Oバッファ時間の指定

iPhone OS 3.0以降では、Objective-CでAudio Session Servicesの代替手段を提供します。

オーディオセッションの詳細については、『Audio Session Programming Guide』を参照してください。



参考文献

iOSテクノロジーの概要

Core Audioの概要

Audio Toolbox Framework Reference

Audio Converter Services Reference

Audio File Services Reference

Audio File Stream Services Reference

Audio Format Services Reference

Audio Queue Services Reference

Audio Session Services Reference

Audio Unit Processing Graph Services Reference

Extended Audio File Services

System Sound Services Reference

Audio Unit Framework Reference

Audio Component Services Reference

Audio Unit Component Services Reference

Output Audio Unit Services Reference

Core Audio Framework Reference

Core Audio Data Types Reference

AV Foundation Framework Reference

AVAudioPlayer Class Reference

AVAudioRecorder Class Reference

AVAudioSession Class Reference

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






SoundLink Mini Bluetooth speaker_ii_limited
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
05 | 2017/06 | 07
Sun Mon Tue Wed Thu Fri Sat
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

SoundLink Mini Bluetooth speaker_ii_limited
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR