2017-05-27 3 views
1

J'ai utilisé de nombreux codes pour enregistrer et jouer la voix, mais la plupart d'entre eux ne sont pas dans swift3 et ils ne fonctionnent pas dans mon application. Le code fonctionne, mais je veux créer une classe séparée à partir du viewcontroller qui enregistre les voix en cours de lecture. Aussi le code github mentionné est complexe et je cherche un code simplifié.Enregistrement et lecture de voix dans une classe séparée (Swift3)

Mise à jour:

Après l'enregistrement, quand je vérifie l'existence du fichier enregistré, le fichier n'existe pas, et il génère l'erreur EXC_BAD_ACCESS sur appDelegate.

Qu'est-ce qui ne va pas?

Toutes les suggestions seraient appréciées.

Répondre

2

Essayez d'enregistrer audio en ligne wirting

let isRec = AudioManager.shared.record(fileName: "rec") 

si ISREC retourne vrai, alors l'enregistrement se passe ailleurs pas. Pour terminer l'utilisation d'enregistrement: let recordedURL = AudioManager.shared.finishRecording()

Pour lire le fichier enregistré envoyer ci-dessus URL pour fonction setupUpPlayer() en classe gestionnaire

Ne pas oublier d'utiliser des extraits de code d'extension donnent ci-dessous l'extrait de code qui sont des fonctions de délégué de AVAudioRecorder et AVAudioPlayer

import Foundation 

import AVFoundation 

class AudioManager: NSObject { 

static let shared = AudioManager() 

var recordingSession: AVAudioSession? 
var recorder: AVAudioRecorder? 
var meterTimer: Timer? 
var recorderApc0: Float = 0 
var recorderPeak0: Float = 0 
//PLayer 
var player: AVAudioPlayer? 
var savedFileURL: URL? 

func setup() { 
    recordingSession = AVAudioSession.sharedInstance() 
    do { 
     try recordingSession?.setCategory(AVAudioSessionCategoryPlayAndRecord, with: .defaultToSpeaker) 
     try recordingSession?.setActive(true) 
     recordingSession?.requestRecordPermission({ (allowed) in 
      if allowed { 
       print("Mic Authorised") 
      } else { 
       print("Mic not Authorised") 
      } 
     }) 
    } catch { 
     print("Failed to set Category", error.localizedDescription) 
    } 
} 

func record(fileName: String) -> Bool { 
    setup() 
    let url = getUserPath().appendingPathComponent(fileName + ".m4a") 
    let audioURL = URL.init(fileURLWithPath: url.path) 
    let recordSettings: [String: Any] = [AVFormatIDKey: kAudioFormatMPEG4AAC, 
             AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue, 
             AVNumberOfChannelsKey: 2, 
             AVSampleRateKey: 44100.0] 
    do { 
     recorder = try AVAudioRecorder.init(url: audioURL, settings: recordSettings) 
     recorder?.delegate = self 
     recorder?.isMeteringEnabled = true 
     recorder?.prepareToRecord() 
     recorder?.record() 
     self.meterTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true, block: { (timer: Timer) in 
      //Update Recording Meter Values so we can track voice loudness 
      if let recorder = self.recorder { 
       recorder.updateMeters() 
       self.recorderApc0 = recorder.averagePower(forChannel: 0) 
       self.recorderPeak0 = recorder.peakPower(forChannel: 0) 
      } 
     }) 
     savedFileURL = url 
     print("Recording") 
     return true 
    } catch { 
     print("Error Handling", error.localizedDescription) 
     return false 
    } 
} 

func getUserPath() -> URL { 
    return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] 
} 

func finishRecording() -> String { 
    recorder?.stop() 
    self.meterTimer?.invalidate() 
    var fileURL: String? 
    if let url: URL = recorder?.url { 
     fileURL = String(describing: url) 
    } 
    return /fileURL 
} 
//Player 
func setupPlayer(_ url: URL) { 
    do { 
     try player = AVAudioPlayer.init(contentsOf: url) 
    } catch { 
     print("Error1", error.localizedDescription) 
    } 
    player?.prepareToPlay() 
    player?.play() 
    player?.volume = 1.0 
    player?.delegate = self 
} 
} 

//MARK:- Audio Recorder Delegate 

    extension AudioManager: AVAudioRecorderDelegate { 

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

     print("AudioManager Finish Recording") 

    } 
    func audioRecorderEncodeErrorDidOccur(_ recorder: AVAudioRecorder, error: Error?) { 
     print("Encoding Error", /error?.localizedDescription) 
    } 

} 

//MARK:- Audio Player Delegates 

    extension AudioManager: AVAudioPlayerDelegate { 

     func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, 
    successfully flag: Bool) { 

      player.stop() 

      print("Finish Playing") 

     } 

     func audioPlayerDecodeErrorDidOccur(_ player: AVAudioPlayer, 
    error: Error?) { 

      print(/error?.localizedDescription) 

     } 

    } 
+0

Merci Pour la réponse m'a vraiment aidé –