Как сохранить записанный аудио файл путем ввода пользователем с помощью Swift? - PullRequest
0 голосов
/ 11 ноября 2018

Мой сценарий, я пытаюсь создать 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()
}

Ответы [ 2 ]

0 голосов
/ 08 августа 2019
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) {       
   }
}
0 голосов
/ 11 ноября 2018

Если вы хотите установить имя файла, который уже был сохранен, вы можете переименовать его.

Вы можете создать эту функцию

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)
    }
}

И в вашем контроллере предупреждений использовать его и какпараметр передать текст текстового поля внутри оповещения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...