Xcode|iOS バイナリーの音データーを鳴す方法を調べてみた

20160828_001

AIFF,WAVEファイルを使用して音を鳴らす方法はググるとすぐに見つかるけど、バイナリーデータをそのまま使用して音を鳴らす方法はなかなか見つからなかった。

それなら、あまのじゃくHikaruappは調べてみた。

バイナリーデーターを使用して音を鳴らす

なんかわからないけどバイナリーデータの素性が分かればそのデータをそのまま使用すれば音を鳴らすことができる。

バイナリーデーターを使用して音を鳴らすAPIは2種類

1.AudioQueue
2.AudioUnit

使用できるバイナリーデータ

1.Float(32bit)
2.Integer(16bit)

バイナリーデーターの形式を知らないとダメ

1.サンプリング周波数
2.MP3等の圧縮タイプは再生不可能

AudioQueue

基本AudioQueueを使用すると思いますのでAudioQueueを先に説明していきます。

AudioQueue Float

初期設定

サンプリング周波数:48000Hz

バッファーは3個作りました。音以外の処理が重たい場合はバッファーを多くすると途切れた時のプチプチ音が改善される事があります。

コールバック

再生開始と同時にコールバックが呼ばれれますのでC言語でコールバック部分を追記

ここで下記メソッドを呼ぶようにしてあります。

バイナリーデーターの挿入

ここに3000HzのSine波を計算しその値を左、右の順番でアドレス直に入れていきます。

この繰り返しで無音にしたい場合は0を入れてます。

AudioQueue Integer

コードは同じで初期設定だけ違うだけです。

もうこれで完璧ですね。

ではもう一つあまり使用しないであろうAudioUnitの説明

AudioUnit

マイナーだから使用したい、そんな人のために調べました。

AudioUnit Float

AudioUnitからAudioQueueに移行するための参考資料になるかな?

初期設定

サンプリング周波数 48000Hz

多数のバッファーを作れないのでバイナリーデーターを頑張って入れなくてはなりません。

コールバック

ここで気をつけないといけないのが戻り値に”noErr”を返さなくてはなりません。返さないと停止してしまいます。

バイナリーデーターの挿入

これで完了です。次はIntegerバージョンをどうぞ

AudioUnit Integer

コードはFloatを流用ですね

まとめ・駆け足すぎてすみません

これでマスターですね(笑)

バイナリーデーターを使用するときてどんな時?例えばP2Pで音声データーをもらった時とかエンコーダーのライブラリを使用した時に画像と音声が別に吐き出された時に使用します。

この方法で音を鳴らしたHikaruappオリジナルアプリはこれです。

sine wave

sinewavebanner

サンプルコード

今回の音関係のサンプルコードをgithubにUPしておきますので参考にしてください。

プロジェクトファイル – github

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

フォローする

スポンサーリンク