iOS - 将一个音频流发送到内置扬声器,将另一个音频流发送到蓝牙HFP扬声器

 你是我的梦境吗_574 发布于 2023-01-20 17:47

我正在构建一个与物理蓝牙设备配合使用的闹钟应用程序.我需要将一个音频文件(从iTunes资料库中选择的一首歌)发送到内置扬声器,并将一个单独的音频文件同时发送到蓝牙设备(实际上是蓝牙HFP扬声器).

我完成这个的第一个想法是使用AVAudioSession新的AVAudioSessionCategoryMultiRoute,但iOS 7没有检测到我的扬声器作为可能的路线; 它会检测无论是内置扬声器 HFP的扬声器,但是它不会同时检测两种.检测两者需要同时发送两个文件.

我的第二个想法是使用AVAudioSessionCategoryPlayAndRecord(即使应用程序不需要麦克风)并使用overrideOutputAudioPort:AVAudioSessionPortOverrideSpeakeroverrideOutputAudioPort:AVAudioSessionPortOverrideNone喜欢这样:

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"alarm"
                                                          ofType:@"m4a"];

NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

self.bluetoothAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL
                                                               error:nil];

self.bluetoothAudioPlayer.delegate = self;

[self.bluetoothAudioPlayer play];

NSError *error = nil;

NSURL *selectedSongURL = [self.selectedSong valueForProperty:MPMediaItemPropertyAssetURL];

NSLog(@"selectedSongURL: %@", selectedSongURL);

if (selectedSongURL) {
    if (![[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]) {
        NSLog(@"overrideOutput error: %@", error);
    }
    self.internalAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:selectedSongURL error:nil];
    self.internalAudioPlayer.delegate = self;
    [self.internalAudioPlayer play];
}

在此警报静音后,我运行[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];以重置覆盖调用.

但是,这不起作用,因为iOS只是将两个音频信号放在同一个扬声器上.

有没有办法将一个音频流发送到蓝牙HFP扬声器,将另一个音频流发送到内置扬声器?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有