簡體   English   中英

如何使用Swift通過用戶輸入保存音頻錄制的文件?

[英]How to save audio recorded file by user input using Swift?

我的場景,我正在嘗試創建audio record並將文件保存到iPhone documentdirectory

我已完成錄制功能,但我需要根據用戶輸入實現save file名。 之后audio record ,如果用戶點擊保存按鈕,我問的file名用戶通過alertviewcontrollertextfield

在這里,我的音頻文件由static文件名(audio.m4a)保存,因為在viewdidload我實現了保存文檔目錄代碼,但我不知道如何根據保存操作中的用戶輸入實現保存文件名。

override func viewDidLoad() {
  super.viewDidLoad() 
  let session = AVAudioSession.sharedInstance()
        try? session.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try? session.overrideOutputAudioPort(.speaker)
        try? session.setActive(true)
        if let basePath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {
            let baseComponents = [basePath,"audio.m4a"]
            if let audioURL = NSURL.fileURL(withPathComponents: baseComponents) {
                var settings: [String: Any] = [:]
                self.audioURL = audioURL
                settings[AVFormatIDKey] = Int(kAudioFormatMPEG4AAC)
                settings[AVSampleRateKey] = 44100.0
                settings[AVNumberOfChannelsKey] = 2
                audioRecorder = try? AVAudioRecorder(url: audioURL, settings: settings)
                audioRecorder?.prepareToRecord()
            }
        }
}

@IBAction func record_click(_ sender: Any) {
        if let audioRecorder = self.audioRecorder {
            if (audioRecorder.isRecording) {
                audioRecorder.stop()
           } else {
                audioRecorder.record()
            }
        }
    }

// Within below action I am calling alertview with textfield for asking file name
@IBAction func save_click(_ sender: Any) {
   self.savefileAlertView()
}

如果要設置已保存的文件名,可以重命名。

您可以創建此功能

func renameAudio(newTitle: String) {
    do {
        let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        let documentDirectory = URL(fileURLWithPath: path)
        let originPath = documentDirectory.appendingPathComponent("audio.m4a")
        let destinationPath = documentDirectory.appendingPathComponent("\(newTitle).m4a")
        try FileManager.default.moveItem(at: originPath, to: destinationPath)
    } catch {
        print(error)
    }
}

在警報控制器中使用它並作為警報內文本字段的參數傳遞文本。

import UIKit
import AVFoundation
import Speech

class ViewController: UIViewController,AVSpeechSynthesizerDelegate {

var utterance = AVSpeechUtterance()
let synthesizer = AVSpeechSynthesizer()

var filename : String       = "audio.m4a"

@IBOutlet weak var speechBtnOutlet: UIButton!
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
    super.viewDidLoad()



    utterance = AVSpeechUtterance(string: self.textView.text)
    utterance.voice = AVSpeechSynthesisVoice(language: "en-GB")
    utterance.rate = 0.1
    synthesizer.delegate = self
    synthesizer.speak(utterance)

}

func renameAudio(newTitle: String) {
    do {
        let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        let documentDirectory = URL(fileURLWithPath: path)

        let originPath = documentDirectory.appendingPathComponent(utterance.speechString)

        let destinationPath = documentDirectory.appendingPathComponent("\(newTitle).m4a")
        try FileManager.default.moveItem(at: originPath, to: destinationPath)

    } catch {
        print(error)
    }
}



  @IBAction func speechBtn(_ sender: Any) {       
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM