2010-03-03 3 views
13

Я пытаюсь вывести звук на гарнитуру bluetooth (не A2DP), используя AVAudioPlayer, AVAudioSession и AudioSessionSetProperty.Как перенаправить iPhone на гарнитуру Bluetooth

Кажется, есть функции для выбора гарнитуры bluetooth в качестве входного сигнала (kAudioSessionSetperty_OverrideCategoryEnableBluetoothInput), но нет эквивалента для установки вывода. Это делается в приложении Voicemail, где вы можете выбрать гарнитуру, динамик телефонной трубки или громкоговоритель. Я пробовал различные комбинации SessionCategories и свойств AudioSession, но я просто не могу использовать подход, который работает.

Я уверен, что кто-то это понял, поделитесь примером?

+0

Кажется, что никто не решил этот (ну никто не говорит, по крайней мере, хотя бы!) Я открыл билет поддержки Apple по этому вопросу и опубликую ответ, когда у меня его будет. – Ethan

+0

у вас есть ответ? – Krishnan

+0

Да, да. Перефразируя «нет, вы не можете этого сделать». Я не думаю, что инженер действительно понял, о чем я просил, потому что я смог это сделать. Я посмотрю, смогу ли я опубликовать соответствующие вопросы в качестве ответа. – Ethan

ответ

16

Этот небольшой тест работал для меня ... он включает в себя настройку гарнитуры bluetooth в качестве входа (не уверен, что это то, что вы хотите). Извините за дурное форматирование кода ...

// create and set up the audio session 
AVAudioSession* audioSession = [AVAudioSession sharedInstance]; 
[audioSession setDelegate:self]; 
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; 
[audioSession setActive: YES error: nil]; 

// set up for bluetooth microphone input 
UInt32 allowBluetoothInput = 1; 
OSStatus stat = AudioSessionSetProperty (
         kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, 
         sizeof (allowBluetoothInput), 
         &allowBluetoothInput 
         ); 
NSLog(@"status = %x", stat); // problem if this is not zero 

// check the audio route 
UInt32 size = sizeof(CFStringRef); 
CFStringRef route; 
OSStatus result = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &route); 
NSLog(@"route = %@", route);  
// if bluetooth headset connected, should be "HeadsetBT" 
// if not connected, will be "ReceiverAndMicrophone" 

// now, play a quick sound we put in the bundle (bomb.wav) 
CFBundleRef mainBundle = CFBundleGetMainBundle(); 
CFURLRef  soundFileURLRef; 
SystemSoundID soundFileObject; 
soundFileURLRef = CFBundleCopyResourceURL (mainBundle,CFSTR ("bomb"),CFSTR ("wav"),NULL); 
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject); 
AudioServicesPlaySystemSound (soundFileObject);  // should play into headset 

Надеюсь, что это поможет!

+0

Это похоже на код, в котором я тоже оказался, извините, я не пришел сюда и не заметил его раньше;) – Ethan

+0

«эта документация неверна. Она влияет как на вход, так и на вывод». из списка рассылки apple coreaudio (http://lists.apple.com/archives/coreaudio-api/2009/Oct/msg00030.html) – mtoy

+2

AudioSessionSetProperty устарел с iOS7. Как бы это выглядело без использования AudioSessionSetProperty? –

6

Мне удалось получить эту работу, но это заняло некоторое время. Я кусочки вместе уместна часть коды здесь:

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err]; 

UInt32 allowBluetoothInput = 1; 
AudioSessionSetProperty(
    kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, 
    sizeof (allowBluetoothInput), 
    &allowBluetoothInput); 

Это также возможно, какие источники доступны и переключаться между Bluetooth, гарнитурами, телефонной трубкой или громкой связью, но вещи становятся очень вовлечены в этот момент. Менеджер аудио-источника, который я написал в конце, составлял более 700 строк.

+5

Мне очень интересно видеть, как переключаться между доступными источниками, которые доступны, как вы думаете, вы можете сделать этот код общедоступным или добавить некоторую информацию в свой профиль, где я могу с вами связаться? –

+0

http://stackoverflow.com/questions/20393249/use-audio-unit-i-o-to-create-audio-on-the-fly – madLokesh

+0

Это работало. – user523234

Смежные вопросы