[英]How to save audio recorded file by user input using Swift?
我的場景,我正在嘗試創建audio
record
並將文件保存到iPhone
documentdirectory
。
我已完成錄制功能,但我需要根據用戶輸入實現save file
名。 之后audio
record
,如果用戶點擊保存按鈕,我問的file
名用戶通過alertviewcontroller
與textfield
。
在這里,我的音頻文件由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.