我的情况是,我试图创建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()
}
答案 0 :(得分:0)
如果要设置已经保存的文件名,可以重命名。
您可以创建此功能
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)
}
}
然后在警报控制器中使用它,并将警报内文本字段的文本作为参数传递。
答案 1 :(得分:0)
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) {
}
}