Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从无线耳机录制音频并通过蓝牙扬声器播放_Ios_Objective C_Bluetooth_Core Bluetooth_Wireless - Fatal编程技术网

Ios 从无线耳机录制音频并通过蓝牙扬声器播放

Ios 从无线耳机录制音频并通过蓝牙扬声器播放,ios,objective-c,bluetooth,core-bluetooth,wireless,Ios,Objective C,Bluetooth,Core Bluetooth,Wireless,从蓝牙耳机录制音频。录制完成后,通过无线BT扬声器切换线路并播放 我已经实现了,但音频是在同一个耳机或扬声器中录制和播放的。如何录制和播放?有什么解决办法吗。? 提前感谢音频会话可用于设置会话的默认输出端口 首先要做的是设置类别AVAudioSession。这里有几个选项,因为我们希望能够播放和录制声音 AvaudioSessionCategoryPlay和record-播放和录制。输入和输出不需要同时发生,但可以在需要时进行。用于音频聊天应用程序 AVAudioSessionCategoryM

从蓝牙耳机录制音频。录制完成后,通过无线BT扬声器切换线路并播放

我已经实现了,但音频是在同一个耳机或扬声器中录制和播放的。如何录制和播放?有什么解决办法吗。?
提前感谢

音频会话
可用于设置会话的默认输出端口

首先要做的是设置类别
AVAudioSession
。这里有几个选项,因为我们希望能够播放和录制声音

AvaudioSessionCategoryPlay和record
-播放和录制。输入和输出不需要同时发生,但可以在需要时进行。用于音频聊天应用程序

AVAudioSessionCategoryMultiRoute
-播放和录制。允许同时输入和输出不同的音频流,例如USB和耳机输出。DJ应用程序将受益于使用多路线类别。DJ通常需要在播放另一首曲目的同时听一首曲目。使用multiroute类别,DJ应用程序可以通过耳机播放未来曲目,同时为舞者播放当前曲目

在这种情况下,
AVAudioSessionCategoryPlayAndRecord
似乎是合适的。设置如下:

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

if (!success) { /* handle the error in setCategoryError */ }
苹果建议设置一次类别,然后根据我们的需要修改输入路径

将类别设置为AvaudioSessionCategoryPlay和Record后,下面的行将返回可用输入和输出路由的列表

NSArray <AVAudioSessionPortDescription *> *availableInputs = [AVAudioSession sharedInstance].availableInputs;
录制完成后,可以从可用输入列表中选择另一个设备进行播放。最有可能的是,BT扬声器的播放端口是
AVAudioSessionPortBluetoothA2DP
,但是

这样设置:

[[AVAudioSession sharedInstance] setPreferredInput:AVAudioSessionPortBluetoothHFP error: &error];
[[AVAudioSession sharedInstance] setPreferredInput:AVAudioSessionPortBluetoothA2DP error: &error];
现在,声音应该播放到BT扬声器


这里需要注意的是,
[[AVAudioSession sharedInstance]覆盖了OutputaudioPort:AVAudioSessionPortOverrideSpeaker error:&error]
将还原为手机的内置扬声器,而不是BT扬声器。

请使用音频会话方法。
-(BOOL)setCategory:(NSString*)类别
withOptions:(AVAudioSessionCategoryOptions)选项

错误:(n错误**)外部错误
要接收蓝牙附件事件,您必须在视图控制器中写入以下代码:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

[self becomeFirstResponder];
然后,我认为将音频会话类别设置为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);
}

祝你好运

嘿@Rushi我想这段代码会帮助你播放音频

    -(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];

    }
}

我已经试过了。但我的问题是BT扬声器的输出不是默认的iphone扬声器。哦,我误解了操作。我以为你想播放BT扬声器。我将在早上编辑我的答案,以演示如何使用iPhone扬声器。我希望使用BT扬声器而不是iPhone扬声器进行输出,我认为您需要睡眠。使用这一个AvaudioSessionCategoryOptionalLowBluetooth您对sleep@Rushi的看法是正确的。我将更新我的帖子,提供更多关于iOS上BT设置的详细信息,因为这可能会让人困惑。我将从后面的一点开始,给你一些关于你能做什么的选择。如果有不清楚的地方,请在评论中再次告诉我。非常好…但只能使用手动设置的蓝牙耳机和扬声器。您可以声明您的代码吗?
    -(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];

    }
}