質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

0回答

2790閲覧

USBオーディオのステレオ入力をチャンネル毎に切り替えたい

ryota-777

総合スコア13

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

2クリップ

投稿2016/04/09 00:02

編集2016/04/11 12:10

###前提・実現したいこと
こんにちは。
現在iPadとRoland DUO-CAPTURE EX USB Audio Interfaceを繋ぎ
ステレオ音源の取得を行っています。
この入力のLとRをアプリ側で切り替えたいのですが...

Apple純正アプリGarageBandでUSBオーディオ接続時にプラグボタンタップ後に表示されるのマイク入力のチャンネル切り替えがまさにやりたいことなんです!

何卒宜しくお願い申し上げます。神様...

###発生している問題・エラーメッセージ
現状Lしか取れません...

###該当のソースコード
Objective-C,Xcode7.3

記録するデータフォーマットは以下になります。

AudioStreamBasicDescription dataFormat;
dataFormat.mSampleRate = 16000.0f;
dataFormat.mFormatID = kAudioFormatLinearPCM;
dataFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
dataFormat.mBytesPerPacket = 2;(ステレオ録音の場合4)
dataFormat.mFramesPerPacket = 1;
dataFormat.mBytesPerFrame = 2;(ステレオ録音の場合4)
dataFormat.mChannelsPerFrame = 1;(ステレオ録音の場合2)
dataFormat.mBitsPerChannel = 16;
dataFormat.mReserved = 0;

ちなみに()のようにパラメータを変えると普通にステレオは取れてます。
ただ実現したいのは最初から左なら左だけの1ch,右なら右の1chのみの取得なんです...だからここは変えたくないんです...

###試したこと

オーディオセッションでできる感じまではわかったのですが...

//録音カテゴリでオーディオセッションを開始し...
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[audioSession setActive:YES error:nil];

//チャンネル数を選択すると思しきプロパティに値をセットする
[audioSession setPreferredInput:1(L)or2(R) error:nil];

//ログ出力する
NSLog(@"%@",audioSession.preferredInput);
//→1(L)or2(R)と値はちゃんと変わってる...のにマイクの端子をLR入れ替えてもLだけしか取れていない!なんでや...

###補足情報(言語/FW/ツール等のバージョンなど)
Roland DUO-CAPTURE EX USB Audio Interfaceの環境としてはマイク1本しかないのですが、stereoを選択し録音しています。

###追記

申し訳ありません。記述謝ってました!正しくは以下になります。

//usbオーディオ接続中なら以下で取得(接続なければ内蔵マイク)
AVAudioSessionPortDescription *portDescription = [inRoute lastObject];
//usbオーディオ接続中なら設定(接続なければ内蔵マイク)
[audioSession setPreferredInput:portDescription error:nil];
//入力チャンネルの指定
[audioSession setPreferredInputNumberOfChannels:1 error:&error];

ご指摘いただきました内容で書き直しましたが、やはりLeftのみとなります。

イメージ説明

画像はGarageBandの物になります。
このチャンネル切り替えがやりたいことです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Stripe

2016/04/10 10:18

AVAudioSessionのsetPreferredInput:error:メソッドの引数の型はAVAudioSessionPortDescriptionのはずですが?そのコードだとエラーになりませんか?
ryota-777

2016/04/10 10:36

コメントありがとうございます! エラーは出てないのですが、解決かもしれません! 試し次第ご連絡させていただきます!m(__)m
ryota-777

2016/04/11 04:40

申し訳ありません。記述謝ってました!正しくは以下になります。 //usbオーディオ接続中なら以下で取得(接続なければ内蔵マイク) AVAudioSessionPortDescription *portDescription = [inRoute lastObject]; //usbオーディオ接続中なら設定(接続なければ内蔵マイク) [audioSession setPreferredInput:portDescription error:nil]; //入力チャンネルの指定 [audioSession setPreferredInputNumberOfChannels:1 error:&error]; ご指摘いただきました内容で書き直しましたが、やはりLeftのみとなります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問