【iOS】Core Audio

リニアPCMについて

  • 1チャンネル分を表す単一の数値をサンプルと呼ぶ
  • 時間的に同じ位置にあるサンプルの集まりをフレームと呼ぶ
  • 1つまたは複数の連続するフレームの集まりをパケットと呼ぶ

オーディオユニット

  • オーディオデータを処理するソフトウェアプラグイン

CoreAudioの3つのAPIレイヤ

  • High-Level Services
    • AVAudioPlayer(iOSでオーディオ再生をサポート)
    • Audio Queue Services(録音、再生、一時停止、ループ再生等)
    • Extended Audio File Services(Audio File ServicesとAudio Converter Servicesを統合したもの)
    • OpenAL(定位オーディオのためのオープンソースOpenAL標準。主にゲーム開発用)
  • Mid-Level Services
    • Audio Converter Services(オーディオデータフォーマットコンバータ操作)
    • Audio File Services(ファイルに対するオーディオデータの読み書き)
    • Audio Unit Services(デジタル信号処理プラグイン)
    • Audio Processing Graph Services(デジタル信号処理プラグイン)
    • Core Audio Clock Services(オーディオとMIDIの同期や時間基準の変換)
    • Audio File Stream Services(ストリーム解析。ネットワークストリーミングなど)
  • Low-Level Services
    • I/O Kit
    • Audio HAL
    • Core MIDI
    • Host Time Services

フレームワーク

  • Audio Toolbox
    • Core Audioの中〜高レベルサービスのI/F
    • Audio Session Servicesを含む(携帯電話等でのオーディオ動作を管理)
  • Audio Unit
    • オーディオプラグイン(オーディオユニットやコーデック)の操作
  • AV Foundation
    • オーディオ再生の効率化
  • OpenAL
    • OpenAL標準のI/F

プロキシオブジェクト

  • ファイル、ストリーム、オーディオプレーヤーなどを表現する手段に使われる

プロパティ、スコープ、要素

  • プロパティキー
    • kAudioFilePropertyFileFormatやkAudioQueueDeviceProperty_NumberChannelsなどのおゆにニーモニック名の付いた列挙子定数
  • プロパティ値
    • void*,Float64,AudioChannelLayot構造体のように、その用途に適した特定のデータ型の値

コールバック関数

  • 新しいオーディオデータのセットをアプリケーションに提供する場合(録音など)
  • 新しいオーディオデータのセットをアプリケーションから要求する場合(再生など)
  • ソフトウェアオブジェクトの状態が変更されたことをアプリケーションに知らせる場合

コールバックの実装は次の2つを実行する

1.コールバック関数の実装

2.対象オブジェクトにコールバック関数を登録

正準形のオーディオデータフォーマット

  • 変換において中間フォーマットと必要になること
  • Core Audioのサービスが最適化されるフォーマットであること
  • 特にASBDを指定しない場合のデフォルトの(想定される)フォーマットであること

Core Audioにおける正準形のフォーマット

  • iOSの入力および出力:リニアPCM
  • iOSのオーディオユニット及びその他のオーディオ処理:非インターリーブのリニアPCM

マジッククッキー

  • 圧縮されたサウンドファイルまたはストリームに添付される不透過のメタデータセット

オーディオデータフォーマット

  • CBR(固定ビットレート):リニアPCMやIMA/ADPCMなど
  • VBR(可変ビットレート):AAC,Apple Lossless,MP3など。フレーム数は同じだが、ビット数が可変
  • VFR(可変フレームレート):各パケットのフレーム数が可変。一般的ではない

※VBRとVFRはAudio Stream Basic Descriptionが必要

データフォーマット変換

  • Audio Queue Servicesでは適切なコンバータが自動的に取得される

新しいサウンドファイルの作成(AudioFileCreateWithURL)

必要なもの

  • ファイルのシステムパス(CFURLまたはNSURL形式)
  • ファイルタイプの識別子。(AudioFile.hのAudio File Typesの列挙で宣言されている)
  • ファイルに格納するオーディオストリーム基本記述

iOSのオーディオファイルフォーマット

AIFF.aif,.aiff
CAF.caf
MPEG-1 Layer 3.mp3
MPEG-2またはMPEG-4 ADTS.aac
MPEG-4.m4a,.mp4
WAV.wav

オーディオセッション

カテゴリアプリケーションの一連のオーディオ動作を識別するキー
割り込み、及び出力先の変更割り込み発生時、終了時、及びハードウェアのオーディオ出力先が変更されたとき、オーディオセッションから通知を送る。この通知によって、正しい応答を行う
ハードウェアの特性デバイスの特性(サンプルレート、チャネル数、オーディオ入力を使用できるかなど)を調べる

AVAudioPlayerクラスを使用した再生

  • 任意の所要時間のサウンド再生
  • ファイルまたはメモリバッファからのサウンド再生
  • サウンドのループ再生
  • 複数のサウンド再生
  • 再生中の各サウンドの相対的な再生レベルの制御
  • サウンドファイル内での特定の位置へのシーク(早送りや巻き戻しなどのアプリケーション機能サポート)
  • オーディオレベル測定機能に使用できるデータの取得

たけぞう

子育てしながら仕事はアプリ開発をやってます。

シェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする