2017-06-21 5 views
1

Ich bin neu bei Swift, daher wird jede Hilfe gerne angenommen. Ich erstelle dieses Projekt, um aufzuzeichnen, gespeicherte Daten zu speichern und Daten in der Tabellenansicht anzuzeigen. Im Moment kann ich nur die aktuelle Aufnahme aufnehmen und abspielen. Wenn ich die Aufnahme erneut drücke, wird das vorher aufgenommene Audio gelöscht. Aber ich möchte das aufgenommene Audio dauerhaft speichern und in der Tabellenansicht anzeigen. Das habe ich bis jetzt erreicht. Danke im Voraus!Gespeicherte Sprachnotizen in Tabellenansicht speichern und anzeigen Swift 3

import UIKit 
import AVFoundation 

class ViewController: UIViewController, AVAudioPlayerDelegate, 
AVAudioRecorderDelegate { 


    var audioPlayer: AVAudioPlayer? 
    var audioRecorder: AVAudioRecorder? 

    @IBOutlet weak var recordAudio: UIButton! 
    @IBOutlet weak var stopAudio: UIButton! 
    @IBOutlet weak var playAudio: UIButton! 

    var arrayData: [FileManager] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    playAudio.isEnabled = false 
    stopAudio.isEnabled = false 

    // Creating File Manager 

     let fileMgr = FileManager.default 

     let dirPath = fileMgr.urls(for: .documentDirectory, in: .userDomainMask) 
     let soundFileUrl = dirPath[0].appendingPathComponent("sound.caf") 

     let recordSettings = [AVEncoderAudioQualityKey: AVAudioQuality.min.rawValue, 
           AVEncoderBitRateKey: 16, 
           AVNumberOfChannelsKey: 2, 
           AVSampleRateKey: 44100.0 ] as [String:Any] 

     let audioSession = AVAudioSession.sharedInstance() 

     do { 
       try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) 

     } catch { 

        print(error.localizedDescription) 

     } 

     do { 
       try audioRecorder = AVAudioRecorder(url: soundFileUrl, settings: recordSettings as [String : Any]) 

     audioRecorder?.prepareToRecord() 

     } catch { 

      print(error.localizedDescription) 
     } 
} 

    @IBAction func recordButton(_ sender: Any) { 

     if audioRecorder?.isRecording == false { 

     playAudio.isEnabled = false 
     stopAudio.isEnabled = true 
     audioRecorder?.record() 
    } 

    } 

    @IBAction func stopButton(_ sender: Any) { 

     stopAudio.isEnabled = false 
     playAudio.isEnabled = true 
     recordAudio.isEnabled = true 

     if audioRecorder?.isRecording == true{ 

      audioRecorder?.stop() 

     } else { 

       audioPlayer?.stop() 

     } 

} 

@IBAction func playButton(_ sender: Any) { 

    if audioRecorder?.isRecording == false{ 

     stopAudio.isEnabled = true 
     recordAudio.isEnabled = true 

     do { 
       try audioPlayer = AVAudioPlayer(contentsOf: (audioRecorder?.url)!) 

      audioPlayer!.delegate = self 
      audioPlayer!.prepareToPlay() 
      audioPlayer!.play() 

     } catch { 

       print(error.localizedDescription) 

     } 
    } 
} 

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { 
    recordAudio.isEnabled = true 
    stopAudio.isEnabled = false 
} 

func audioPlayerDecodeErrorDidOccur(_ player: AVAudioPlayer, error: Error?) { 
    print("Audio Player Error") 
} 

func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) { 

} 

func audioRecorderEncodeErrorDidOccur(_ recorder: AVAudioRecorder, error: Error?) { 
     print("Audio Recorder Error") 
} 
+0

Sobald Sie Ihre Aufzeichnung gespeichert haben, müssen Sie diese komprimieren und sie über die Delegate- und Datenquellenmethoden von UITableView in Ihre Tabellenansicht einfügen. Ich würde sagen, wie man die Aufzeichnung speichert, schreibe zuerst diese Methode und dann, wenn du Probleme hast, ein Datenmodell zu erstellen oder Elemente in UITableView einzufügen, dann stell einfach eine neue Frage. Sehen Sie sich diesen Post zum Speichern von Audioaufnahmen an: https://stackoverflow.com/questions/39433639/how-to-save-recorded-audio-ios –

+0

@buttler_baby Vielen Dank für Ihre Antwort, dieser Link hat mir sehr geholfen. Aber sobald die Daten gespeichert sind, weiß ich, wie die Daten in der Tabellenansicht angezeigt werden. Ich weiß nicht, wie man mehrere Aufnahmen speichert. Irgendwelche Vorschläge? –

+0

Ändern Sie den Namen 'soundFileUrl' und Sie erstellen eine neue Audiodatei. Zum Beispiel sound1.caf, sound2.caf, sound3.caf – zsteed

Antwort

0

Der Grund, warum Sie nur ein Video speichern können ist, dass Sie nur einen Dateinamen angegeben haben Wenn Sie mehrere Videos behalten möchten, müssen Sie verschiedene Dateinamen verwenden. Sie können den Benutzer bitten, den Namen der Videodatei einzugeben und sie dann zu speichern. Sie können überprüfen, ob ein Video mit demselben Namen vorhanden ist oder nicht in this way.

Sie müssen alle Ihre Videodateien im Dokumentenordner speichern, damit die Videodateien beim Schließen und erneuten Öffnen der App immer noch vorhanden sind. Ein Array von Videos wird im Speicher Ihres Telefons gespeichert und wenn die App geschlossen wird, verlieren Sie alles.

Nachdem Sie alle Ihre Videodateien im Dokumentenordner gespeichert haben, können Sie beim Start Ihres Videolistenansicht-Controllers use this method eine Liste der Videonamen aus dem Dokumentordner abrufen und dann den Namen in der Tabellenansicht anzeigen.

Verwandte Themen