2015-12-30 3 views
3

Запись звука из BT-гарнитуры. После записи, переключения маршрута и воспроизведения через беспроводной BT динамик.Запись звука с беспроводной гарнитуры и воспроизведение через динамик Bluetooth

Я реализовал, но звук записывает и воспроизводит ту же гарнитуру или динамик. Как записывать и воспроизводить viseversa? любое решение.? Заранее спасибо

ответ

2

эй @Rushi я думаю, что этот код поможет вам для воспроизведения аудио viseversa

-(IBAction)RecordButtonPlayed:(id)sender 
{ 
    if(player.playing) 
    { 
     [player stop]; 
    } 

    if (!recorder.recording) 
    { 
     [[AVAudioSession sharedInstance] setActive:YES error:NULL]; 
     [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:NULL]; 

     [_btnRecord setImage:[UIImage imageNamed:@"player-stop-outline-512.png"] forState:UIControlStateNormal]; 
     [recorder record]; 
    } 

    else 
    { 
     [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:NULL]; 

     [_btnRecord setImage:[UIImage imageNamed:@"171.png"] forState:UIControlStateNormal]; 
     [recorder stop]; 

    } 
} 
+0

Превосходно ... Но работает только с ручным набором гарнитуры Bluetooth и динамиком –

2

AVAudioSession можно использовать для установки выходного порта по умолчанию для сеанса.

Первое, что нужно сделать, это установить категорию AVAudioSession. Здесь есть пара вариантов, так как мы хотим играть и записывать звуки.

AVAudioSessionCategoryPlayAndRecord - Воспроизведение и запись. Ввод и вывод не обязательно происходят одновременно, но могут при необходимости. Используйте для приложений аудио-чата.

AVAudioSessionCategoryMultiRoute - Воспроизведение и запись. Разрешить одновременный ввод и вывод для различных аудиопотоков, например, выход USB и наушников. Приложение DJ выиграет от использования многопроцессорной категории. Ди-джею часто приходится слушать один трек музыки, пока играет другой трек. Используя категорию multiroute, приложение DJ может воспроизводить будущие треки через наушники, в то время как текущий трек воспроизводится для танцоров.

В этой ситуации это выглядит как AVAudioSessionCategoryPlayAndRecord. Установите его так:

NSError *setCategoryError = nil; 
BOOL success = [[AVAudioSession sharedInstance] 
       setCategory: AVAudioSessionCategoryPlayAndRecord 
         error: &setCategoryError]; 

if (!success) { /* handle the error in setCategoryError */ } 

Apple предлагает установить категорию один раз, а затем изменить маршруты ввода в зависимости от наших потребностей.

Как только категория будет установлена ​​на AVAudioSessionCategoryPlayAndRecord, строка ниже вернет список доступных путей ввода и вывода.

NSArray <AVAudioSessionPortDescription *> *availableInputs = [AVAudioSession sharedInstance].availableInputs; 

От OP этот порт будет использоваться для записи.

AVAudioSessionPortBluetoothHFP - Устройство с поддержкой Bluetooth, поддерживающее профиль Hands-Free (HFP).

Установите его так:

[[AVAudioSession sharedInstance] setPreferredInput:AVAudioSessionPortBluetoothHFP error: &error]; 

После записи будет сделано, еще одно устройство из списка availableInputs может быть выбран для воспроизведения. Скорее всего, порт воспроизведения для динамиков BT будет AVAudioSessionPortBluetoothA2DP, но here is a comprehensive list of all playback ports.

Установите его так:

[[AVAudioSession sharedInstance] setPreferredInput:AVAudioSessionPortBluetoothA2DP error: &error]; 

Теперь звук должен играть на громкоговоритель BT.

Здесь важно отметить, что [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; вернется к внутреннему динамику телефона, а не к динамику BT.

+0

я попробовал это already.but мою проблему для выхода в BT динамике не по умолчанию iPhone динамик. –

+0

О, я неправильно понял ОП. Я, хотя вы хотели играть в динамик BT. Я отредактирую свой ответ утром, чтобы показать, как играть в динамик iPhone вместо этого. –

+0

Я хочу, чтобы выход в динамике BT не был в iphone Динамик, я думаю, вам нужно спать. –

1

Пожалуйста, используйте метод AVAudioSession.

- (BOOL)setCategory:(NSString *)category 
 
     withOptions:(AVAudioSessionCategoryOptions)options 
 
       error:(NSError **)outError
и установить следующие с категории в AVAudioSessionCategoryPlayAndRecord или AVAudioSessionCategoryRecord

и варианты в AVAudioSessionCategoryOptionAllowBluetooth

R emember может работать только для A2DP только Bluetooth. Попробуйте то с этим AVAudioSessionCategoryOptionAllowBluetooth

1

Для того, чтобы получить блютус аксессуар события вы должны написать ниже кода в контроллере представления:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

[self becomeFirstResponder]; 

и тогда я думаю, установив Audio Session Категория для MultiRoute может разрешить разнесение звука отдельно. В то время как я пытался сделать это раньше в iOS7. и кажется, что каждый раз, когда вы меняете вход или выход, iOS полностью меняет аудиоустройство. Я не уверен, возможно ли это с новыми версиями. Однако вы можете получить список всех доступных в настоящее время входов с помощью следующего кода:

// portDesc.portType could be for example - BluetoothHFP, MicrophoneBuiltIn, MicrophoneWired 
NSArray *availInputs = [[AVAudioSession sharedInstance] availableInputs]; 
int count = [availInputs count]; 
for (int k = 0; k < count; k++) { 
    AVAudioSessionPortDescription *portDesc = [availInputs objectAtIndex:k]; 
    NSLog(@"input%i port type %@", k+1, portDesc.portType); 
    NSLog(@"input%i port name %@", k+1, portDesc.portName); 
} 

и выходы как:

AVAudioSession *session = [AVAudioSession sharedInstance]; 
NSLog(@"Outputs: %@", [[session currentRoute] outputs]); 

удачи !!

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