Posted at

ギター入力ができるまで

More than 5 years have passed since last update.

注) @7ganoさん著書『iPhone Core Audio プログラミング』 のパクリ記事です。

Sample Code: github/GuitarInput


上にも書いた通りパクリ記事です。

本の中ではマイクからスピーカーのPlayThroughとして紹介されています。

ギターとiPhoneはApogee Jamを使いました。(iRigでも問題無く動きます)

説明する事がほとんど無いぐらい簡潔に書けてしまう。

ギター入力するためのコードがたった20行程度で書けてしまった。

けっこうすごいねAudioUnit。

- (void)prepareAUGraph {

NewAUGraph(&_graph);
AUGraphOpen(_graph);

AudioComponentDescription cd;
cd.componentType = kAudioUnitType_Output;
cd.componentSubType = kAudioUnitSubType_RemoteIO;
cd.componentManufacturer = kAudioUnitManufacturer_Apple;
cd.componentFlags = 0;
cd.componentFlagsMask = 0;

AUNode remoteIONode;
AUGraphAddNode(_graph, &cd, &remoteIONode);

AudioUnit remoteIOUnit;
AUGraphNodeInfo(_graph, remoteIONode, &cd, &remoteIOUnit);

UInt32 flag = 1;
AudioUnitSetProperty(remoteIOUnit,
kAudioOutputUnitProperty_EnableIO,
kAudioUnitScope_Input,
1,
&flag,
sizeof(flag));

AUGraphConnectNodeInput(_graph, remoteIONode, 1, remoteIONode, 0);

AUGraphInitialize(_graph);

}

AUGraph作って、remoteIO用のAudioUnit作って、繋ぐだけ。

ポイントはremoteIOのenableIOスイッチをオンする所ぐらいでしょうか。


追伸

ギター入力してbluetoothスピーカーへの出力がしたかったのですができませんでした。

カテゴリをAVAudioSessionCategoryPlayAndRecordにするとbluetoothスピーカー読んでくれなくなります。

(パフォーマンスの問題で絞ってるのかも。ただでさえややラグだし)

ちなみにiOS6からカテゴリにAVAudioSessionCategoryMultiRouteができたのですが、

これでもbluetoothスピーカー出力できませんでした。

WWDC2012のセッション見るとHDMI(2ch)とイヤホン(2ch)の表記があるので、

いい音で聞きたかったらiRig+HDMIが良いのかな(できるのかは未確認)

ただそれだとノイズ出そうだし悩ましいw