Я пытаюсь записать голосовое сообщение, и когда я сохраняю URL-адрес и воспроизводлю его с помощью AVAudioPlayer, сообщение настолько низкое, что я едва слышу его.Я даже установил громкость на 1,0
Вот моя функция для записи звукового сообщения:
func startRecordingSpeech() {
if recognitionTask != nil {
recognitionTask?.cancel()
recognitionTask = nil
}
let audioSession = AVAudioSession()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try audioSession.setMode(AVAudioSessionModeMeasurement)
try audioSession.setActive(true)
AVAudioSessionCategoryOptions.mixWithOthers
} catch {
print("audioSession properties weren't set because of an error.")
}
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
let inputNode = audioEngine.inputNode
recognitionRequest!.shouldReportPartialResults = true
recognitionTask = speechRecognizer!.recognitionTask(with: recognitionRequest!, resultHandler: { (result, error) in
var isFinal = false
if result != nil {
self.audioMessage.text = result?.bestTranscription.formattedString
isFinal = (result?.isFinal)!
}
if error != nil || isFinal {
self.audioEngine.stop()
inputNode.removeTap(onBus: 0)
self.recognitionRequest = nil
self.recognitionTask = nil
}
})
let uuid = NSUUID().uuidString
audioReactionUrl = getDocumentsDirectory().appendingPathComponent("recording\(uuid).m4a")
let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
self.recognitionRequest?.append(buffer)
}
audioEngine.prepare()
do {
try audioEngine.start()
} catch {
print("audioEngine couldn't start because of an error.")
}
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 12000,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
do {
self.audioRecorder = try AVAudioRecorder(url: audioReactionUrl!, settings: settings)
self.audioRecorder.record()
} catch {
finishRecording(success: false)
}
}
Приведенный выше фрагмент кода показывает функцию, в которой я измеряю речь и преобразовываю еев текст, сохраняя при этом готовую запись в аудиофайл в виде URL-адреса.
А ниже приведена функция, которую я вызываю при воспроизведении аудиофайла на следующем контроллере представления.
func play(url:URL) {
print("playing \(url)")
do {
try AVAudioSession().setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.defaultToSpeaker)
self.player = try AVAudioPlayer(contentsOf: url)
player!.prepareToPlay()
player!.volume = 1.0
player!.play()
} catch let error as NSError {
//self.player = nil
print(error.localizedDescription)
} catch {
print("AVAudioPlayer init failed")
}
}