2016-11-16 2 views
2

Я успешно могу использовать Speech (распознавание речи), и я могу использовать AVFoundation для воспроизведения файлов wav в Xcode 8/IOS 10. Я просто не могу использовать их обе вместе. У меня есть код распознавания речи, в котором я импортирую Speech. Когда я импортировать AVFoundation в то же приложение и использовать следующий код, нет звука и никаких ошибок не генерируются:swift 3 с использованием распознавания речи и AVFoundation вместе

var audioPlayer: AVAudioPlayer! 
func playAudio() { 
     let path = Bundle.main.path(forResource: "file.wav", ofType: nil)! 
    let url = URL(fileURLWithPath: path) 

    do { 
     let sound = try AVAudioPlayer(contentsOf: url) 
     audioPlayer = sound 
     sound.play() 
    } catch { 
     //handle error 
    } 

} 

Я предполагаю, что это потому, что оба используют аудио. Может ли кто-нибудь предложить, как использовать оба приложения в одном приложении? Я также обнаружил, что не могу использовать распознавание речи и текст в речь вместе в одном приложении.

+0

Вы нашли решение этой проблемы? –

+0

Вы решили проблему? – AlessandroDP

ответ

1

Кажется, что AVAudioPlayer перестает играть образец, если вы используете AVAudioSession для записи микрофона, как в примере распознавания речи Apple.

Однако мне удалось обойти это, используя AVCaptureSession для захвата аудио, как описано в this answer.

2

Я просто столкнулся с той же проблемой, и вот как я решил,

добавьте следующую строку, если распознавание речи делается. То, что он делает, это в основном установка аудио сессии обратно в категорию AVAudioSessionCategoryPlayback.

let audioSession = AVAudioSession.sharedInstance() 
    do { 
     try audioSession.setCategory(AVAudioSessionCategoryPlayback) 
     try audioSession.setActive(false, with: .notifyOthersOnDeactivation) 
    } catch { 
     // handle errors 
    } 

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

0

Вы должны изменить эту строку:

try audioSession.setCategory(AVAudioSessionCategoryPlayback) 

на:

try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) 

Это должно работать ;-)