Кажется, это мое последнее испытание
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: .allowBluetooth)
try audioSession.setMode(AVAudioSessionModeDefault)
try audioSession.setActive(true)
} catch {
print(error)
}
Теперь я могу использовать мои наушники с Bluetooth для записи и воспроизведения без внутреннего (iphone) микрофона или динамика. вот полный код.
import UIKit
import AVFoundation
class ViewController: UIViewController {
var engine = AVAudioEngine()
let player = AVAudioPlayerNode()
let audioSession = AVAudioSession.sharedInstance()
override func viewDidLoad() {
super.viewDidLoad()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: .allowBluetooth)
try audioSession.setMode(AVAudioSessionModeDefault)
try audioSession.setActive(true)
} catch {
print(error)
}
let input = engine.inputNode!
engine.attach(player)
let bus = 0
let inputFormat = input.inputFormat(forBus: bus)
engine.connect(player, to: engine.mainMixerNode, format: inputFormat)
input.installTap(onBus: bus, bufferSize: 512, format: inputFormat) { (buffer, time) -> Void in
self.player.scheduleBuffer(buffer)
print(buffer)
}
}
@IBAction func start(_ sender: Any) {
do{
try! engine.start()
} catch {
print(error)
}
player.play()
}
@IBAction func stop(_ sender: Any) {
try! engine.stop()
player.stop()
}
}
не забудьте подключить действия IB (кнопки пуска и останова) перед тестированием