両方とも前のリビジョン
前のリビジョン
次のリビジョン
|
前のリビジョン
|
translation:adc:audio:audio_queue_services_programming_guide:0300_recordingaudio [2014-09-08 19:05] Decomo [Audio Queue Bufferサイズの設定] |
translation:adc:audio:audio_queue_services_programming_guide:0300_recordingaudio [2020-12-04 09:32] (現在) Decomo |
<align right>翻訳元:[[https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQRecord/RecordingAudio.html|Audio Queue Services Programming Guide: Recording Audio]]</align> | <WRAP rightalign>翻訳元:[[https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQRecord/RecordingAudio.html|Audio Queue Services Programming Guide: Recording Audio]]</WRAP> |
| |
※以前のwikiで本章は翻訳途中だったため、10.9のリファレンスから再翻訳しています。 | ※以前のwikiで本章は翻訳途中だったため、10.9のリファレンスから再翻訳しています。 |
| |
- 使用するAudio Queue Bufferの数の設定。 | - 使用するAudio Queue Bufferの数の設定。 |
-- <ilcode>AudioStreamBasicDescription</ilcode>構造体(<ilcode>CoreAudioType.h</ilcode>より)は、ディスクに書き込む音声データフォーマットを表します。このフォーマットは<ilcode>mQueue</ilcode>フィールドで指定されるAudio Queueによって使用されます。 | -- ''AudioStreamBasicDescription''構造体(''CoreAudioType.h''より)は、ディスクに書き込む音声データフォーマットを表します。このフォーマットは''mQueue''フィールドで指定されるAudio Queueによって使用されます。 |
.. <ilcode>mDataFormat</ilcode>フィールドは、“[[Set Up an Audio Format for Recording]]”で解説されるように、最初はあなたのプログラムのコードによって埋められます。“[[Getting the Full Audio Format from an Audio Queue]]”で解説するように、Audio Queueに<ilcode>kAudioQueueProperty_StreamDescription</ilcode>プロパティを問い合わせて、このフィールドを更新するのが良い方法です。Mac OS X v10.5では、代わりに<ilcode>kAudioConverterCurrentInputStreamDescription</ilcode>プロパティを使います。 | .. ''mDataFormat''フィールドは、“[[Set Up an Audio Format for Recording]]”で解説されるように、最初はあなたのプログラムのコードによって埋められます。“[[Getting the Full Audio Format from an Audio Queue]]”で解説するように、Audio Queueに''kAudioQueueProperty_StreamDescription''プロパティを問い合わせて、このフィールドを更新するのが良い方法です。Mac OS X v10.5では、代わりに''kAudioConverterCurrentInputStreamDescription''プロパティを使います。 |
.. <ilcode>AudioStreamBasicDescription</ilcode>構造体の詳細は、[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/CoreAudioDataTypesRef/Reference/reference.html|Core Audio Data Types Reference]]をご覧ください。 | .. ''AudioStreamBasicDescription''構造体の詳細は、[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/CoreAudioDataTypesRef/Reference/reference.html|Core Audio Data Types Reference]]をご覧ください。 |
- あなたのアプリケーションによって生成される録音Audio Queue。 | - あなたのアプリケーションによって生成される録音Audio Queue。 |
- そのAudio Queueによって管理されるAudio Queue Bufferへのポインタの配列。 | - そのAudio Queueによって管理されるAudio Queue Bufferへのポインタの配列。 |
- プログラムが音声データを記録するファイルを表すAudio Fileオブジェクト。 | - プログラムが音声データを記録するファイルを表すAudio Fileオブジェクト。 |
- 各Audio Queue Bufferの大きさのバイト数。この値は、以下のサンプルの<ilcode>DeriveBufferSize</ilcode>関数で、Audio Queueが生成されAudio Queueが開始される前に計算されます。“[[Write a Function to Derive Recording Audio Queue Buffer Size]]”をご覧ください。 | - 各Audio Queue Bufferの大きさのバイト数。この値は、以下のサンプルの''DeriveBufferSize''関数で、Audio Queueが生成されAudio Queueが開始される前に計算されます。“[[Write a Function to Derive Recording Audio Queue Buffer Size]]”をご覧ください。 |
- 現在のAudio Queue Bufferから書き出される最初のパケットのパケットインデックス。 | - 現在のAudio Queue Bufferから書き出される最初のパケットのパケットインデックス。 |
- Audio Queueが実行中かどうかを示すブール値。 | - Audio Queueが実行中かどうかを示すブール値。 |
==== 録音Audio Queueコールバックの宣言 ==== | ==== 録音Audio Queueコールバックの宣言 ==== |
| |
リスト2-2は録音Audio Queueコールバック関数の宣言例で、<ilcode>AudioQueue.h</ilcode>ヘッダで<ilcode>AudioQueueInputCallback</ilcode>として宣言されています: | リスト2-2は録音Audio Queueコールバック関数の宣言例で、''AudioQueue.h''ヘッダで''AudioQueueInputCallback''として宣言されています: |
| |
**リスト 2-2** 録音Audio Queueコールバック宣言 | **リスト 2-2** 録音Audio Queueコールバック宣言 |
コードの働きを見てみましょう: | コードの働きを見てみましょう: |
| |
- 典型的には<ilcode>aqData</ilcode>は、“[[#状態を管理する独自構造体の定義]]”で解説したAudio Queueの状態データを含む独自構造体で | - 典型的には''aqData''は、“[[#状態を管理する独自構造体の定義]]”で解説したAudio Queueの状態データを含む独自構造体で |
- このコールバックを所持するAudio Queueです。 | - このコールバックを所持するAudio Queueです。 |
- 録音で入ってくる音声データを含むAudio Queue Bufferです。 | - 録音で入ってくる音声データを含むAudio Queue Bufferです。 |
- Audio Queue Bufferの先頭サンプルのサンプル時間です(簡易的な録音では必要ありません)。 | - Audio Queue Bufferの先頭サンプルのサンプル時間です(簡易的な録音では必要ありません)。 |
- <ilcode>inPacketDesc</ilcode>パラメータが持つパケット記述子の数。<ilcode>0</ilcode>はCBRデータを表します。 | - ''inPacketDesc''パラメータが持つパケット記述子の数。''0''はCBRデータを表します。 |
- パケット記述子を必要とする圧縮音声データ形式のための、バッファ内のパケット用のエンコーダが提示するパケット記述子。 | - パケット記述子を必要とする圧縮音声データ形式のための、バッファ内のパケット用のエンコーダが提示するパケット記述子。 |
| |
録音Audio Queueコールバックの最初の仕事は、Audio Queue Bufferをディスクに書き出す事です。 | 録音Audio Queueコールバックの最初の仕事は、Audio Queue Bufferをディスクに書き出す事です。 |
このバッファは、たった今コールバックのAudio Queueが入力デバイスからの新しい音声データで埋めたものです。 | このバッファは、たった今コールバックのAudio Queueが入力デバイスからの新しい音声データで埋めたものです。 |
リスト2-3で示すように、コールバックは<ilcode>AudioFile.h</ilcode>ヘッダファイルの<ilcode>AudioFileWritePackets</ilcode>関数を使います。 | リスト2-3で示すように、コールバックは''AudioFile.h''ヘッダファイルの''AudioFileWritePackets''関数を使います。 |
| |
**リスト 2-3** Audio Queue Bufferをディスクに書き出す | **リスト 2-3** Audio Queue Bufferをディスクに書き出す |
コードの働きを見てみましょう: | コードの働きを見てみましょう: |
| |
- <ilcode>AudioFile.h</ilcode>ヘッダファイルで宣言されている<ilcode>AudioFileWritePackets</ilcode>関数は1つのバッファの内容を音声データファイルに書き出します。 | - ''AudioFile.h''ヘッダファイルで宣言されている''AudioFileWritePackets''関数は1つのバッファの内容を音声データファイルに書き出します。 |
- 音声ファイルオブジェクト(<ilcode>AudioFileID</ilcode>型)は書き出し先の音声ファイルを表します。<ilcode>pAqData</ilcode>変数はリスト2-1で解説したデータ構造体へのポインタです。 | - 音声ファイルオブジェクト(''AudioFileID''型)は書き出し先の音声ファイルを表します。''pAqData''変数はリスト2-1で解説したデータ構造体へのポインタです。 |
- <ilcode>false</ilcode>は、関数が書き込み時にデータをキャッシュすべきではない事を示します。 | - ''false''は、関数が書き込み時にデータをキャッシュすべきではない事を示します。 |
- 書き出す音声データのバイト数です。<ilcode>inBuffer</ilcode>変数はAudio Queueがコールバックに渡したAudio Queue Bufferを表します。 | - 書き出す音声データのバイト数です。''inBuffer''変数はAudio Queueがコールバックに渡したAudio Queue Bufferを表します。 |
- 音声データのパケット記述子配列です。NULLはパケット記述子が必要ない事を示します(CBRの音声データなど)。 | - 音声データのパケット記述子配列です。NULLはパケット記述子が必要ない事を示します(CBRの音声データなど)。 |
- 書き出す先頭パケットのパケットインデックスです。 | - 書き出す先頭パケットのパケットインデックスです。 |
コードの働きを見てみましょう: | コードの働きを見てみましょう: |
| |
- <ilcode>AudioQueueEnqueueBuffer<ilcode>関数はAudio Queue BufferをAudio Queueのバッファキューに追加します。 | - ''AudioQueueEnqueueBuffer''関数はAudio Queue BufferをAudio Queueのバッファキューに追加します。 |
- 指定したAudio Queue Bufferを追加するAudio Queue。<ilcode>pAqData</ilcode>変数はリスト2-1で解説したデータ構造体へのポインタです。 | - 指定したAudio Queue Bufferを追加するAudio Queue。''pAqData''変数はリスト2-1で解説したデータ構造体へのポインタです。 |
- キューに追加するAudio Queue Buffer。 | - キューに追加するAudio Queue Buffer。 |
- Audio Queue Bufferのデータのパケット記述子の数。本パラメータは録音では使わないので、<ilcode>0</ilcode>を設定します。 | - Audio Queue Bufferのデータのパケット記述子の数。本パラメータは録音では使わないので、''0''を設定します。 |
- Audio Queue Bufferのデータのパケット記述子配列。本パラメータは録音では使わないので、<ilcode>0</ilcode>を設定します。 | - Audio Queue Bufferのデータのパケット記述子配列。本パラメータは録音では使わないので、''0''を設定します。 |
| |
| |
| |
- サイズを特定したいバッファを持つAudio Queue。 | - サイズを特定したいバッファを持つAudio Queue。 |
- Audio Queueの<ilcode>AudioStreamBasicDescription</ilcode>構造体。 | - Audio Queueの''AudioStreamBasicDescription''構造体。 |
- 音声の秒数を単位とした、必要とするAudio Queue Bufferの大きさ。 | - 音声の秒数を単位とした、必要とするAudio Queue Bufferの大きさ。 |
- 出力で、バイト数を単位としたAudio Aueue Bufferのサイズ。 | - 出力で、バイト数を単位としたAudio Aueue Bufferのサイズ。 |
- Audio Queue Bufferサイズの上限(バイト数)。この例では320KBに設定されている。これはサンプリング周波数96kHz/24ビット/ステレオでおよそ5秒に対応する。 | - Audio Queue Bufferサイズの上限(バイト数)。この例では320KBに設定されている。これはサンプリング周波数96kHz/24ビット/ステレオでおよそ5秒に対応する。 |
- CBR音声データ用に、<ilcode>AudioStreamBasicDescription</ilcode>構造体からパケットサイズ(定数)を得る。この値を最大パケットサイズとして使う。 | - CBR音声データ用に、''AudioStreamBasicDescription''構造体からパケットサイズ(定数)を得る。この値を最大パケットサイズとして使う。 |
- この割り当ては、その音声データの録音がCBRかVBRかを特定する副作用をもたらす。VBRならば、Audio Queueの<ilcode>AudioStreamBasicDescription</ilcode>構造体のbytes-per-packetの値は0を示す。 | - この割り当ては、その音声データの録音がCBRかVBRかを特定する副作用をもたらす。VBRならば、Audio Queueの''AudioStreamBasicDescription''構造体のbytes-per-packetの値は0を示す。 |
- VBR音声データ用に、Audio Queueに見積もり最大パケットサイズを問い合わせる。 | - VBR音声データ用に、Audio Queueに見積もり最大パケットサイズを問い合わせる。 |
- バイト数でバッファサイズを計算する。 | - バイト数でバッファサイズを計算する。 |
- この関数の成否を表す返値変数。 | - この関数の成否を表す返値変数。 |
- マジッククッキーのデータサイズを保持する変数。 | - マジッククッキーのデータサイズを保持する変数。 |
- Audio Queueからマジッククッキーのデータサイズを取得し、<ilcode>cookieSize</ilcode>変数に格納します。 | - Audio Queueからマジッククッキーのデータサイズを取得し、''cookieSize''変数に格納します。 |
- マジッククッキー情報を保持するバイト列を確保します。 | - マジッククッキー情報を保持するバイト列を確保します。 |
- Audio Queueの<ilcode>kAudioQueueProperty_MagicCookie</ilcode>プロパティを問い合わせてマジッククッキーを取得します。 | - Audio Queueの''kAudioQueueProperty_MagicCookie''プロパティを問い合わせてマジッククッキーを取得します。 |
- 記録するAudio Fileにマジッククッキーを設定します。<ilcode>AudioFileSetProperty</ilcode>関数は<ilcode>AudioFile.h</ilcode>ヘッダファイルで宣言されています。 | - 記録するAudio Fileにマジッククッキーを設定します。''AudioFileSetProperty''関数は''AudioFile.h''ヘッダファイルで宣言されています。 |
- 一時クッキー変数のメモリを解放します。 | - 一時クッキー変数のメモリを解放します。 |
- 関数の成否を返します。 | - 関数の成否を返します。 |
リスト2-8は、各属性を固定値とした録音用の音声形式の構成を示します。 | リスト2-8は、各属性を固定値とした録音用の音声形式の構成を示します。 |
製品コードでは、通常、音声形式の幾つかないし全ての項目をユーザーが設定できるようにすべきでしょう。 | 製品コードでは、通常、音声形式の幾つかないし全ての項目をユーザーが設定できるようにすべきでしょう。 |
いずれのアプローチでも、目的は“[[#状態を管理する独自構造体の定義]]”で解説した<ilcode>AQRecorderState</ilcode>独自構造体の<ilcode>mDataFormat</ilcode>のフィールドを埋めることです。 | いずれのアプローチでも、目的は“[[#状態を管理する独自構造体の定義]]”で解説した''AQRecorderState''独自構造体の''mDataFormat''のフィールドを埋めることです。 |
| |
**リスト 2-8** Audio Queueの音声データ形式の指定 | **リスト 2-8** Audio Queueの音声データ形式の指定 |
コードの働きを見てみましょう: | コードの働きを見てみましょう: |
| |
- <ilcode>AQRecorderState</ilcode>独自構造体の実体を生成します。構造体の<ilcode>mDataFormat</ilcode>フィールドは<ilcode>AudioStreamBasicDescription</ilcode>構造体を含みます。<ilcode>mDataFormat</ilcode>フィールドでセットされた値は、Audio Queueの音声フォーマットの初期定義を提供します—それはまた、記録先ファイルの音声フォーマットでもあります。リスト2-10では、より完全な音声フォーマット仕様を取得しますが、Core Audioはそれらをフォーマットタイプとファイルタイプに基づいて提供します。 | - ''AQRecorderState''独自構造体の実体を生成します。構造体の''mDataFormat''フィールドは''AudioStreamBasicDescription''構造体を含みます。''mDataFormat''フィールドでセットされた値は、Audio Queueの音声フォーマットの初期定義を提供します—それはまた、記録先ファイルの音声フォーマットでもあります。リスト2-10では、より完全な音声フォーマット仕様を取得しますが、Core Audioはそれらをフォーマットタイプとファイルタイプに基づいて提供します。 |
- 音声データタイプをリニアPCMとして定義します。利用可能なデータ形式の完全なリストは//[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/CoreAudioDataTypesRef/Reference/reference.html|Core Audio Data Types Reference]]//をご覧下さい。 | - 音声データタイプをリニアPCMとして定義します。利用可能なデータ形式の完全なリストは//[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/CoreAudioDataTypesRef/Reference/reference.html|Core Audio Data Types Reference]]//をご覧下さい。 |
- サンプリング周波数を44.1kHzとします。 | - サンプリング周波数を44.1kHzとします。 |
- パケットあたりのバイト数とフレームあたりのバイト数は4とします(2チャンネル×サンプルあたり2バイト)。 | - パケットあたりのバイト数とフレームあたりのバイト数は4とします(2チャンネル×サンプルあたり2バイト)。 |
- パケットあたりのフレーム数は1とします。 | - パケットあたりのフレーム数は1とします。 |
- ファイルタイプはAIFFとします。利用可能なファイルタイプの完全なリストは<ilcode>AudioFile.h</ilcode>ヘッダファイルの音声ファイルタイプ列挙値をご覧下さい。“[[0200_aboutaudioqueues#コーデックと音声データ形式を使う]]”で解説したように、インストール済みコーデックが存在するあらゆるファイルタイプを書くことが出来ます。 | - ファイルタイプはAIFFとします。利用可能なファイルタイプの完全なリストは''AudioFile.h''ヘッダファイルの音声ファイルタイプ列挙値をご覧下さい。“[[0200_aboutaudioqueues#コーデックと音声データ形式を使う]]”で解説したように、インストール済みコーデックが存在するあらゆるファイルタイプを書くことが出来ます。 |
- 特定のファイルタイプで必要となるフォーマットフラグを設定します。 | - 特定のファイルタイプで必要となるフォーマットフラグを設定します。 |
| |
| |
リスト2-9は録音Audio Queueの作り方を示したものです。 | リスト2-9は録音Audio Queueの作り方を示したものです。 |
<ilcode>[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueNewInput|AudioQueueNewInput]]</ilcode>関数が、前のステップで構成したコールバック、独自構造体、音声データ形式を使う点に注目して下さい。 | ''[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueNewInput|AudioQueueNewInput]]''関数が、前のステップで構成したコールバック、独自構造体、音声データ形式を使う点に注目して下さい。 |
| |
**リスト 2-9** 録音Audio Queueの生成 | **リスト 2-9** 録音Audio Queueの生成 |
コードの働きを見てみましょう: | コードの働きを見てみましょう: |
| |
- <ilcode>[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueNewInput|AudioQueueNewInput]]</ilcode>関数は新しい録音Audio Queueを生成します。 | - ''[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueNewInput|AudioQueueNewInput]]''関数は新しい録音Audio Queueを生成します。 |
- 録音に使う音声データ形式です。“[[#録音用音声フォーマットの構成]]”をご覧下さい。 | - 録音に使う音声データ形式です。“[[#録音用音声フォーマットの構成]]”をご覧下さい。 |
- 録音Audio Queueが使うコールバック関数です。“[[#録音Audio Queueコールバックの実装]]”をご覧下さい。 | - 録音Audio Queueが使うコールバック関数です。“[[#録音Audio Queueコールバックの実装]]”をご覧下さい。 |
- 録音Audio Queueの独自データ構造体です。“[[#状態を管理する独自構造体の定義]]”をご覧下さい。 | - 録音Audio Queueの独自データ構造体です。“[[#状態を管理する独自構造体の定義]]”をご覧下さい。 |
- コールバックを呼び出す実行ループを指定します。<ilcode>NULL</ilcode>はデフォルトの挙動を示し、Audio Queue内部のスレッドでコールバックが呼ばれます。これは典型的な使い方で、アプリケーションのユーザーインタフェーススレッドが録音停止の入力を待つ間、Audio Queueによる録音を許可します。 | - コールバックを呼び出す実行ループを指定します。''NULL''はデフォルトの挙動を示し、Audio Queue内部のスレッドでコールバックが呼ばれます。これは典型的な使い方で、アプリケーションのユーザーインタフェーススレッドが録音停止の入力を待つ間、Audio Queueによる録音を許可します。 |
- コールバック呼び出しの実行ループモードです。通常、ここには<ilcode>kCFRunLoopCommonModes</ilcode>定数を使います。 | - コールバック呼び出しの実行ループモードです。通常、ここには''kCFRunLoopCommonModes''定数を使います。 |
- 将来拡張用です。<ilcode>0</ilcode>を指定して下さい。 | - 将来拡張用です。''0''を指定して下さい。 |
- 新たに確保された録音Audio Queueが出力されます。 | - 新たに確保された録音Audio Queueが出力されます。 |
| |
==== Audio Queueから完全な音声形式を取得する ==== | ==== Audio Queueから完全な音声形式を取得する ==== |
| |
Audio Queueの実体が出来ると(“[[#録音Audio Queueの生成]]”をご覧下さい)、Audio Queueは特に圧縮フォーマットにおいて、あなたが持っているものより完全に<ilcode>AudioStreamBasicDescription</ilcode>構造体を埋めるでしょう。 | Audio Queueの実体が出来ると(“[[#録音Audio Queueの生成]]”をご覧下さい)、Audio Queueは特に圧縮フォーマットにおいて、あなたが持っているものより完全に''AudioStreamBasicDescription''構造体を埋めるでしょう。 |
完全なフォーマット記述を取得するには、リスト2-10で示すように<ilcode>AudioQueueGetProperty</ilcode>関数を呼びます。 | 完全なフォーマット記述を取得するには、リスト2-10で示すように''AudioQueueGetProperty''関数を呼びます。 |
記録先のAudio Fileを作る際は、その完全な音声フォーマットをしようします(“[[#Audio Fileの生成]]”をご覧下さい)。 | 記録先のAudio Fileを作る際は、その完全な音声フォーマットをしようします(“[[#Audio Fileの生成]]”をご覧下さい)。 |
| |
| |
- Audio Queueに音声データ形式を問い合わせる時に使う、プロパティ値の期待サイズを得ます。 | - Audio Queueに音声データ形式を問い合わせる時に使う、プロパティ値の期待サイズを得ます。 |
- <ilcode>[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueGetProperty|AudioQueueGetProperty]]</ilcode>関数はAudio Queueから指定のプロパティ値を得ます。 | - ''[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueGetProperty|AudioQueueGetProperty]]''関数はAudio Queueから指定のプロパティ値を得ます。 |
- 音声データ形式を取得するAudio Queueです。 | - 音声データ形式を取得するAudio Queueです。 |
- Audio Queueのデータ形式値を得るためのプロパティIDです。 | - Audio Queueのデータ形式値を得るためのプロパティIDです。 |
- 出力で、Audio Queueから得られた<ilcode>AudioStreamBasicDescription</ilcode>構造体による完全な音声データ形式です。 | - 出力で、Audio Queueから得られた''AudioStreamBasicDescription''構造体による完全な音声データ形式です。 |
- 入力では、<ilcode>AudioStreamBasicDescription</ilcode>構造体の期待サイズです。出力では、実際のサイズが入ります。あなたの録音アプリケーションでは、この値を利用する必要はありません。 | - 入力では、''AudioStreamBasicDescription''構造体の期待サイズです。出力では、実際のサイズが入ります。あなたの録音アプリケーションでは、この値を利用する必要はありません。 |
| |
===== Audio Fileの生成 ===== | ===== Audio Fileの生成 ===== |
コードの働きを見てみましょう: | コードの働きを見てみましょう: |
| |
- <ilcode>CFURL.h</ilcode>ヘッダファイルで宣言される<ilcode>[[https://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFURLRef/Reference/reference.html#//apple_ref/doc/c_ref/CFURLCreateFromFileSystemRepresentation|CFURLCreateFromFileSystemRepresentation]]</ilcode>関数は、記録に使うファイルを表す<ilcode>CFURL</ilcode>オブジェクトを生成します。 | - ''CFURL.h''ヘッダファイルで宣言される''[[https://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFURLRef/Reference/reference.html#//apple_ref/doc/c_ref/CFURLCreateFromFileSystemRepresentation|CFURLCreateFromFileSystemRepresentation]]''関数は、記録に使うファイルを表す''CFURL''オブジェクトを生成します。 |
- <ilcode>NULL</ilcode>(または<ilcode>kCFAllocatorDefault</ilcode>)を使うと、現在のデフォルトメモリアロケータを使います。 | - ''NULL''(または''kCFAllocatorDefault'')を使うと、現在のデフォルトメモリアロケータを使います。 |
- <ilcode>CFURL</ilcode>オブジェクトに変換したいファイルシステムパスです。製品コードでは、通常、<ilcode>filePath</ilcode>からユーザー指定の値を得ます。 | - ''CFURL''オブジェクトに変換したいファイルシステムパスです。製品コードでは、通常、''filePath''からユーザー指定の値を得ます。 |
- ファイルシステムパスのバイト数です。 | - ファイルシステムパスのバイト数です。 |
- <ilcode>false</ilcode>は<ilcode>filePath</ilcode>がディレクトリではなくファイルである事を示します。 | - ''false''は''filePath''がディレクトリではなくファイルである事を示します。 |
- <ilcode>AudioFile.h</ilcode>ヘッダファイルの<ilcode>[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioFileConvertRef/Reference/reference.html#//apple_ref/doc/c_ref/AudioFileCreateWithURL|AudioFileCreateWithURL]]</ilcode>関数は、音声ファイルの新規作成ないし既存ファイルの初期化を行います。 | - ''AudioFile.h''ヘッダファイルの''[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioFileConvertRef/Reference/reference.html#//apple_ref/doc/c_ref/AudioFileCreateWithURL|AudioFileCreateWithURL]]''関数は、音声ファイルの新規作成ないし既存ファイルの初期化を行います。 |
- 新規音声ファイルの作成、もしくは既存ファイルの初期化の対象となるURLです。URLは手順1の[[https://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFURLRef/Reference/reference.html#//apple_ref/doc/c_ref/CFURLCreateFromFileSystemRepresentation|CFURLCreateFromFileSystemRepresentation]]に由来します。 | - 新規音声ファイルの作成、もしくは既存ファイルの初期化の対象となるURLです。URLは手順1の[[https://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFURLRef/Reference/reference.html#//apple_ref/doc/c_ref/CFURLCreateFromFileSystemRepresentation|CFURLCreateFromFileSystemRepresentation]]に由来します。 |
- 新しいファイルのファイルタイプです。本章のサンプルコードでは、前に<ilcode>kAudioFileAIFFType</ilcode>ファイルタイプ定数を経由してAIFFに設定されています。“[[#録音音声フォーマットの構成]]”をご覧下さい。 | - 新しいファイルのファイルタイプです。本章のサンプルコードでは、前に''kAudioFileAIFFType''ファイルタイプ定数を経由してAIFFに設定されています。“[[#録音音声フォーマットの構成]]”をご覧下さい。 |
- <ilcode>AudioStreamBasicDescription</ilcode>構造体として指定される、ファイルに記録する音声のデータ形式です。本章のサンプルコードでは、これも“[[#録音音声フォーマットの構成]]”で設定されています。 | - ''AudioStreamBasicDescription''構造体として指定される、ファイルに記録する音声のデータ形式です。本章のサンプルコードでは、これも“[[#録音音声フォーマットの構成]]”で設定されています。 |
- ファイルが既に存在していた場合、そのファイルを消します。 | - ファイルが既に存在していた場合、そのファイルを消します。 |
- 出力で、記録先の音声ファイルを表す(<ilcode>AudioFileID</ilcode>型の)Audio Fileオブジェクトです。 | - 出力で、記録先の音声ファイルを表す(''AudioFileID''型の)Audio Fileオブジェクトです。 |
| |
===== Audio Queue Bufferサイズの設定 ===== | ===== Audio Queue Bufferサイズの設定 ===== |
| |
録音中に使うAudio Queue Bufferセットを準備する前に、先に書いた<ilcode>DeriveBufferSize</ilcode>関数(“[[#録音Audio Queue Bufferサイズを計算する関数の実装]]”をご覧下さい)を使います。 | 録音中に使うAudio Queue Bufferセットを準備する前に、先に書いた''DeriveBufferSize''関数(“[[#録音Audio Queue Bufferサイズを計算する関数の実装]]”をご覧下さい)を使います。 |
このサイズを使用する録音Audio Queueのサイズに割り当てます。 | このサイズを使用する録音Audio Queueのサイズに割り当てます。 |
リスト2-12がその様子を示します: | リスト2-12がその様子を示します: |
コードの働きを見てみましょう: | コードの働きを見てみましょう: |
| |
- “[[#録音Audio Queue Bufferサイズを計算する関数の実装]]”で解説した<ilcode>DeriveBufferSize</ilcode>関数は、妥当なAudio Queue Bufferサイズを設定します。 | - “[[#録音Audio Queue Bufferサイズを計算する関数の実装]]”で解説した''DeriveBufferSize''関数は、妥当なAudio Queue Bufferサイズを設定します。 |
- バッファサイズを設定するAudio Queueです。 | - バッファサイズを設定するAudio Queueです。 |
- 記録するファイルの音声データ形式です。“[[#録音音声フォーマットの構成]]”をご覧下さい。 | - 記録するファイルの音声データ形式です。“[[#録音音声フォーマットの構成]]”をご覧下さい。 |
===== Audio Queue Bufferセットの準備 ===== | ===== Audio Queue Bufferセットの準備 ===== |
| |
You now ask the audio queue that you’ve created (in “Create a Recording Audio Queue”) to prepare a set of audio queue buffers. Listing 2-13 demonstrates how to do this. | それでは、(“[[#録音Audio Queueの生成]]”で)生成したAudio Queueに、Audio Queue Bufferセットを準備するように命令します。 |
| リスト 2-13はそのデモンストレーションです。 |
Listing 2-13 Preparing a set of audio queue buffers | |
| |
| **リスト 2-13** Audio Queue Bufferセットの準備 |
<code c_mac> | <code c_mac> |
for (int i = 0; i < kNumberBuffers; ++i) { // 1 | for (int i = 0; i < kNumberBuffers; ++i) { // 1 |
コードの働きを見てみましょう: | コードの働きを見てみましょう: |
| |
- Iterates to allocate and enqueue each audio queue buffer. | - Audio Queue Buffer確保とキュー追加のためにイテレートします。 |
- The AudioQueueAllocateBuffer function asks an audio queue to allocate an audio queue buffer. | - ''[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueAllocateBuffer|AudioQueueAllocateBuffer]]''関数はAudio QueueにAudio Queue Bufferを確保するよう指示します。 |
- The audio queue that performs the allocation and that will own the buffer. | - バッファを確保し所持するAudio Queueです。 |
- The size, in bytes, for the new audio queue buffer being allocated. See “Write a Function to Derive Recording Audio Queue Buffer Size.” | - 新しく確保されるAudio Queue Bufferのバイト数です。“[[#録音Audio Queue Bufferサイズを計算する関数の実装]]”をご覧下さい。 |
- On output, the newly allocated audio queue buffer. The pointer to the buffer is placed in the custom structure you’re using with the audio queue. | - 新しく確保されたAudio Queue Bufferが出力されます。バッファへのポインタはAudio Queueと共に使う独自構造体の中に置かれます。 |
- The AudioQueueEnqueueBuffer function adds an audio queue buffer to the end of a buffer queue. | - ''[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueEnqueueBuffer|AudioQueueEnqueueBuffer]]''関数はバッファキューの最後にAudio Queue Bufferを追加します。 |
- The audio queue whose buffer queue you are adding the buffer to. | - キューに加えるAudio Queue Bufferを持つAudio Queue。 |
- The audio queue buffer you are enqueuing. | - キューに加えるAudio Queue Buffer。 |
- This parameter is unused when enqueuing a buffer for recording. | - 録音におけるバッファのキュー追加では、本パラメータは使用しません。 |
- This parameter is unused when enqueuing a buffer for recording. | - 録音におけるバッファのキュー追加では、本パラメータは使用しません。 |
| |
===== 録音 ===== | ===== 録音 ===== |
コードの働きを見てみましょう: | コードの働きを見てみましょう: |
| |
- Audio Fileの先頭から記録するためにパケットインデックスを<ilcode>0</ilcode>に初期化します。 | - Audio Fileの先頭から記録するためにパケットインデックスを''0''に初期化します。 |
- Audio Queueが実行中を表すフラグを独自構造体にセットします。このフラグは録音Audio Queueコールバックで使用されます。 | - Audio Queueが実行中を表すフラグを独自構造体にセットします。このフラグは録音Audio Queueコールバックで使用されます。 |
- <ilcode>[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueStart|AudioQueueStart]]</ilcode>関数は、Audio Queue自身のスレッドでAudio Queueを開始します。 | - ''[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueStart|AudioQueueStart]]''関数は、Audio Queue自身のスレッドでAudio Queueを開始します。 |
- 開始するAudio Queue。 | - 開始するAudio Queue。 |
- <ilcode>NULL</ilcode>を使うと、Audio Queueが直ちに録音を開始する事を示します。 | - ''NULL''を使うと、Audio Queueが直ちに録音を開始する事を示します。 |
- <ilcode>[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueStop|AudioQueueStop]]</ilcode>関数は録音Audio Queueを停止しリセットします。 | - ''[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueStop|AudioQueueStop]]''関数は録音Audio Queueを停止しリセットします。 |
- 停止するAudio Queue。 | - 停止するAudio Queue。 |
- <ilcode>true</ilcode>を使うと、同期的に止めます。停止における同期と非同期の説明は“[[0200_aboutaudioqueues#Audio Queueの状態と制御]]”をご覧ください。 | - ''true''を使うと、同期的に止めます。停止における同期と非同期の説明は“[[0200_aboutaudioqueues#Audio Queueの状態と制御]]”をご覧ください。 |
- Audio Queueが非実行中を示すフラグを独自構造体にセットします。 | - Audio Queueが非実行中を示すフラグを独自構造体にセットします。 |
| |
コードの働きを見てみましょう: | コードの働きを見てみましょう: |
| |
- <ilcode>[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueDispose|AudioQueueDispose]]</ilcode>関数はAudio Queueと、バッファを含むその全ての資源を破棄します。 | - ''[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/c_ref/AudioQueueDispose|AudioQueueDispose]]''関数はAudio Queueと、バッファを含むその全ての資源を破棄します。 |
- 破棄したいAudio Queue。 | - 破棄したいAudio Queue。 |
- <ilcode>true</ilcode>を使うとAudio Queueを同期的に(すなわち、即座に)破棄します | - ''true''を使うとAudio Queueを同期的に(すなわち、即座に)破棄します |
- 記録に使ったAudio Fileを閉じます。<ilcode>[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioFileConvertRef/Reference/reference.html#//apple_ref/doc/c_ref/AudioFileClose|AudioFileClose]]</ilcode>関数は<ilcode>AudioFile.h</ilcode>ヘッダファイルで宣言されています。 | - 記録に使ったAudio Fileを閉じます。''[[https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioFileConvertRef/Reference/reference.html#//apple_ref/doc/c_ref/AudioFileClose|AudioFileClose]]''関数は''AudioFile.h''ヘッダファイルで宣言されています。 |
| |