translation:adc:audio:audio_queue_services_programming_guide:0400_playingaudio

音声の再生

Audio Queue Serviceを使って音声を再生する際、その信号源はどんなものでも有り得ます。ディスク上のファイル、ソフトウェアシンセサイザ、メモリ上のオブジェクトなどです。 本章では最も一般的な方法-ディスク上のファイルの再生方法について説明します。

本文章中のコードサンプルは時々、Core Audio SDKのCクラスを用いて簡単化されています。 しかし、Audio Queue Serviceの利用にあたって、Core Audio SDKとC++言語は必須ではありません。 </note> より単純化するため、これらコード例は強力なエラー処理(robust error handling)を省いています。 Audio Queue Serviceを用いた録音/再生を実装する際は、潜在的なエラーを扱うためのコードを必ず追加するようにして下さい。 アプリケーションに音声再生機能を追加するには、通常、以下の段階を踏むと良いでしょう: - 状態、フォーマット、ファイルパス情報を管理する独自構造体を定義する。 - 実際に再生を行うAudio Queueコールバック関数を書く。 - Audio Queue Bufferに適したバッファサイズを決定するためのコードを書く。 - 再生するファイルを開き、その音声データ形式を決定する。 - 再生Audio Queueを生成し、それを再生用に設定する。 - Audio Queue Bufferを確保しデータを詰める。そしてAudio Queueに再生開始を伝える。再生終了時は、再生コールバックがAudio Queueに停止を伝える。 - Audio Queueを破棄する。各種リソースを開放する。 この章の残りで、これら段階をそれぞれ詳細に解説します。 ===== 状態管理用の独自構造体の定義 ===== 手始めに、音声形式とAudio Queueの状態の管理に使用する、独自構造体を定義します。 リスト3-1はその構造体の例です: **リスト3-1** 再生Audio Queue向けの独自構造体 <code c> static const int kNumberBuffers = 3; // 1 struct AQPlayerState { AudioStreamBasicDescription mDataFormat; // 2 AudioQueueRef mQueue; // 3 AudioQueueBufferRef mBuffers[kNumberBuffers]; // 4 AudioFileID mAudioFile; // 5 UInt32 bufferByteSize; // 6 SInt64 mCurrentPacket; // 7 UInt32 mNumPacketsToRead; // 8 AudioStreamPacketDescription *mPacketDescs; // 9 bool mIsRunning; // 10 }; </code> この構造体の殆どのメンバ変数は、“[[音声の記録]]”の[[音声の記録#状態管理用の独自構造体の定義
  • translation/adc/audio/audio_queue_services_programming_guide/0400_playingaudio.txt
  • 最終更新: 2020-12-03 16:15
  • by Decomo