播放录制的文件时Swift AVAudioPlayer音量低

时间:2019-01-24 00:41:51

标签: ios swift avaudioplayer

我正在尝试录制语音消息,当我保存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")
    }

}

0 个答案:

没有答案
相关问题