2017-05-27 4 views
1

私は録音用のコードを多く使用していましたが、ほとんどのものはswift3ではなく、私のアプリでは動作しません。録音と再生音声を別々のクラスにまとめたもの(Swift3)

Thisコードが動作しますが、再生音を録音するビューコントローラーとは別のクラスを作成します。また、上記のgithubコードは複雑です。私は単純化されたコードを探しています。

アップデート:私は記録されたファイルの存在を確認したときに記録した後

は、ファイルが存在しない、それがappDelegateにEXC_BAD_ACCESSエラーを発生させます。

どういうところが間違っていますか?

何か提案がありがとうございます。

答えて

2

はISRECを記録、その後真を返した場合、他のではない起こっているライン

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

をwirtingことにより、音声を録音してみてください。使用記録を終了するには :let recordedURL = AudioManager.shared.finishRecording()

録音したファイルを再生するにはマネージャークラスのsetupUpPlayer()機能へのURLの上送信

延長コードスニペットを使用することを忘れないようにはAVAudioRecorderAVAudioPlayer

のデリゲート関数でコードスニペットの下に与えます
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

ありがとうございました本当に私を助けました –

関連する問題