Подтвердить что ты не робот

Поток аудио с микрофона через Bluetooth на другой iPhone

Я пытаюсь принять входящий звук микрофона и передать его на другой iPhone. В основном телефонный звонок, но через Bluetooth. У меня есть звук, входящий через AVAudioRecorder:

func startRecording() {
    audioRecorder = nil
    let audioSession:AVAudioSession = AVAudioSession.sharedInstance()
    audioSession.setCategory(AVAudioSessionCategoryRecord, error: nil)

    var recordSettings:NSMutableDictionary = NSMutableDictionary(capacity: 10)
    recordSettings.setObject(NSNumber(integerLiteral: kAudioFormatLinearPCM), forKey: AVFormatIDKey)
    recordSettings.setObject(NSNumber(float: 44100.0), forKey: AVSampleRateKey)
    recordSettings.setObject(NSNumber(int: 2), forKey: AVNumberOfChannelsKey)
    recordSettings.setObject(NSNumber(int: 16), forKey: AVLinearPCMBitDepthKey)
    recordSettings.setObject(NSNumber(bool: false), forKey: AVLinearPCMIsBigEndianKey)
    recordSettings.setObject(NSNumber(bool: false), forKey: AVLinearPCMIsFloatKey)

    soundPath = documentsDirectory.stringByAppendingPathComponent("record.caf")
    refURL = NSURL(fileURLWithPath: soundPath as String)
    var error:NSError?

    audioRecorder = AVAudioRecorder(URL: refURL, settings: recordSettings as [NSObject : AnyObject], error: &error)

    if audioRecorder.prepareToRecord() == true {
        audioRecorder.meteringEnabled = true
        audioRecorder.record()
    } else {
        println(error?.localizedDescription)
    }
}

Затем я попытался использовать StreamReader из ЗДЕСЬ - StreamReader из @martin-r

Использование:

if let aStreamReader = StreamReader(path: documentsDirectory.stringByAppendingPathComponent("record.caf")) {
                while let line = aStreamReader.nextLine() {
                    let dataz = line.dataUsingEncoding(NSUTF8StringEncoding)
                    println (line)

Затем отправьте данные на другое устройство, используя:

self.appDelegate.mpcDelegate.session.sendData(data: NSData!, toPeers: [AnyObject]!, withMode: MCSessionSendDataMode, error: NSErrorPointer )

Я конвертирую строку в NSData, затем используя dispatch_after через 0,5 секунды, я отправляю ее на другое устройство через bluetooth.

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

Мой вопрос: как я могу взять звук с микрофона и отправить его на другой iPhone через Bluetooth? У меня есть часть bluetooth, все настроено, и она отлично работает. Мой вопрос очень похож на ЭТО, за исключением iPhone и Swift - я хочу иметь телефонный звонок через bluetooth.

Спасибо заранее.

4b9b3361

Ответ 1

Для одновременной записи и перенаправления вывода вам необходимо использовать категорию AVAudioSessionCategoryMultiRoute.

Здесь ссылка на список категорий: https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/#//apple_ref/doc/constant_group/Audio_Session_Categories

Если все остальное не удается, вы можете использовать готовое решение: http://audiob.us

Он имеет API, который позволяет интегрировать потоковое аудио из одного приложения в другое: https://developer.audiob.us/

Он поддерживает несколько конечных точек вывода.

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