6

プログラムで音波を発生させ、AVAudioPlayerで再生したい。波形をリニアPCM、44100Hz、モノラル、サンプルあたり8ビットとしてエンコードするコードがあります。

AVAudioPlayerがこのバッファをPCMとして認識するために、このバッファをラップアラウンドする必要があるエンベロープの種類がわかりません。

4

3 に答える 3

5

PCMは、アナログオーディオ信号の単なるデジタル表現です。残念ながら、オーディオに関するメタデータ(チャネル、ビット深度、サンプルレート)はすべてカプセル化されていません。これらはすべて、上記のPCMデータを適切に読み取るために必要です。AVAudioPlayerオブジェクトでこれらの変数を手動で設定できる限り、AVAudioPlayerはNSDataオブジェクトにラップされたこのPCMデータを受け入れると思います。残念ながら、これらの変数は読み取り専用であるため、ドキュメントにはAVAudioPlayerがCore Audioで処理できるものはすべて処理できると記載されていますが、生のLPCMデータを処理する方法はありません。

zoulが述べたように、これを行う最も簡単な方法は、WAVヘッダーをスローすることだと思います。これは、ヘッダーがAVPlayerに上記の必要な変数を通知するためです。44バイトで、簡単にモックアップされ、適切に定義されています。上記と同じ定義を使用して、wavヘッダーのエンコードとデコードを実装しました。また、変更されていないLPCMデータの前に追加されるだけです。

于 2010-03-31T20:39:03.190 に答える
4

WAVヘッダーを追加すると役立つでしょうか?

于 2010-03-28T08:52:40.337 に答える
0

AVAudioPlayer initWithData で使用するオーディオ フロート サンプルのバッファーをインメモリ WAV ファイルに変換する Swift 5 の例を (GitHub Gist として) 投稿しました

于 2019-05-16T21:06:32.477 に答える