2009-06-16 17 views
10

私は、物理的な楽器をエミュレートするアプリケーションを作成しようとしています。私はオーディオサンプルを持っていますが、ピッチ/周波数を動的に増やしたいので、あまりにも多くのファイルからロードする必要はありません。iPhoneのオーディオ

オーディオAPIでこれを行うことができますか?私はOpenALかAudio Queue Servicesのどちらかを考えていますが、どれが適切かはわかりません。ガイド/サンプルコードへのリンクも大変ありがとうございます。

ありがとうございます。

答えて

19

私は2009年にAudio Toolkit、Audio Queue Services、openALを試し、最後にRemoteIO AudioUnitを使ってこの道を歩みました。

オーディオツールボックスは、基本的なトリガサウンドエフェクトでは問題ありませんが、周波数やループサンプルを変更できませんでした。

オーディオキューサービスではサンプルをループすることができますが、サンプルの再生頻度を調整するための唯一の方法は、ファイルからデータを再読み込みすることでした。非常に苦労しました。さらに、フレームワークは非常に面倒です - 私はインターネットから何かをストリーミングしようとしていた場合にのみ使用します。

OpenALは、アップルの「CrashLanding」iPhoneサンプルアプリに手を差し伸べてから1時間以内に起動していました。私は、OpenALがゲームや楽器にも理想的に適していることを発見しました。サンプルはあらかじめロードされていても、周波数を調整するのは簡単でしたし、ループも問題ありませんでした。私のためのディール・ブレーカーは、ループ・サンプルを開始して停止すると、ほとんど毎回厄介な "ポップ"になるということでした。また、組み込みの3d位置オーディオミキサーは、好みに合わせてCPUが多すぎます。

楽器がループサンプルを使用していない場合は、OpenALルートを最初に試してみることをお勧めします。学習曲線ははるかに威圧的です。これは(ループされたサンプルは私のための要件だったので

http://benbritten.com/blog/2008/11/06/openal-sound-on-the-iphone/

、私は最終的にAudioUnitsに落ち着い:「SoundEngine.h」を追跡するようにしてください「CrashLanding」または「TouchFighter」、または次のリンクをチェックアウトiPhoneの場合は、入力または出力を行う場合は「RemoteIO」と呼ばれます)。 Audio Queue Servicesと非常によく似ていますが、インプリメンテーションの中核は、生のSInt16値を持つアウトバウンドオーディオのバッファを埋めるために1秒間に数回呼び出される「バッファコールバック」の中にあるという点で、実装が非常に困難でした。

最終的には、マルチノートのポリフォニー、ループされたサンプル、ポップなし、最小限のレイテンシーで楽器を美しく仕上げました。

残念ながら、RemoteIOは十分に文書化されていません。マイケルタイソンは長さでRemoteIOについて書くことがフィールドの最初の、そして彼の投稿(とコメント)の一つであった私にとって非常に有用であった:

http://michael.tyson.id.au/2008/11/04/using-remoteio-audio-unit/

幸運!

編集年:私は上記のRemoteIO/AudioUnitsコードを公開しています:https://github.com/glenn-barnett/hexaphone/blob/master/Classes/Instrument.m - 混乱のためのお詫び、私はコードとコメントを整理するのに時間を取ることを望みます。

+0

チップをありがとう。私は現時点でoalTouchのサンプルコードでOpenALを試していますが、その場でピッチや周波数を変更する設定が見つかりません。正しい方向の先端は非常に高く評価されています! – Matthew

+0

Nevermind。ピッチを調整する方法を知りました。 oalTouchのサンプルコードは1つのサウンドファイルしか管理していないので、私はsoundManager afterallを見る必要があると思います。 – Matthew

+0

soundEngineのコードは、iPhone OS 2.21 SDKではうまく機能しますが、3.0のSDKではコンパイルできません。そこに新しいバージョンがあればどんなアイデアですか? – Matthew

0

基本的にMIDIファイルを再生するウェーブテーブル合成メソッドを作成しているようです。使用できるiPhone用のシンセサイザーを見つけて、オーディオサンプルを使用してウェーブテーブルセットを作成することができます。トーンを演奏したいときはいつでも、あなたのロードされたウェーブテーブルセットと共にiPhone MIDIシンセにMIDIイベントを送るだけです。

+0

私はシンセサイザーであり、技術面では(ウェーブテーブル合成よりも単純なサンプリングされた楽器のように聞こえます)。私は両方をやった。 http://en.wikipedia.org/wiki/Wavetable_synthesis – Nosredna

+0

私はシンセオタクではなく、サウンドプログラミングの経験はほとんどありません。私は一般的なコンピュータ知識の身体からの類似点を見たと思ったので私は単に答えを書いていました。私が書いた時に回答が載っていなかったので、私は2セントに入れました。私はより良い答えを掲示しているよりも、この分野ではるかに多くの経験を積んだ人が嬉しいです。 –

+0

私はあなたに投票していませんでしたか、何か涼しいウェーブテーブルシンセがどれだけ優れているかを熱心に指摘しました。 :-) – Nosredna

1

オーディオユニットを作成してみてください。私は何か似たようなことをしていて、AUは私にとってうまくいった。 最初はオーディオキューを使用しましたが(より高いレベルですか?)、 が同期していましたが、応答性に欠けていたので、オーディオユニット のためにダンプしました。

関連する問題