2013-08-18 26 views
7

Ses akışı yürüten bir uygulama var. AVAudioRecorder (veya başka bir şey?) Kullanarak AVPlayer'dan ses akışı nasıl kaydedebilirim? Teşekkürler.AVAudioRecorder kayıt akışı ses akışı

+0

yinelenir etsin kurtaracak basit VC nedir? https://stackoverflow.com/questions/33004383/record-audio-streamed-from-avplayer –

cevap

0

Swift 3+ İşte belgelere ses oturumu dir (audio.aac)

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 

    var audioRecorder: AVAudioRecorder? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     verifyRecordPermission() 
    } 

    @IBAction func recordButonAction(_ sender: UIButton) { 
     if audioRecorder?.isRecording == true { 
      audioRecorder?.stop() 
      sender.setTitle("Record", for: .normal) 
     } 
     else { 
      startRecording() 
      sender.setTitle("Stop", for: .normal) 
     } 
    } 

    func verifyRecordPermission() { 
     let permission = AVAudioSession.sharedInstance().recordPermission() 
     switch permission { 
     case .denied: 
      print("recording not allowed") 
     case .granted: 
      print("recording allowed") 
     default: 
      AVAudioSession.sharedInstance().requestRecordPermission() { (granted) -> Void in 
       print("recording granted:\(granted)") 
      } 
     } 
    } 

    func startRecording() { 
     guard AVAudioSession.sharedInstance().recordPermission() == .granted else { 
      return 
     } 

     let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] 
     let audioUrl = URL(fileURLWithPath: "\(documentsPath)/audio.aac") 
     let session = AVAudioSession.sharedInstance() 
     do { 
      try session.setCategory(AVAudioSessionCategoryRecord) 
      try session.setActive(true) 
      try audioRecorder = AVAudioRecorder(url: audioUrl, 
               settings: [AVFormatIDKey: Int(kAudioFormatMPEG4AAC), 
                  AVSampleRateKey: 24000.0, 
                  AVNumberOfChannelsKey: 1 as NSNumber, 
                  AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue]) 
     } catch { 
      // handle error... 
      return 
     } 

     guard let audioRecorder = audioRecorder else { 
      return 

     } 
     audioRecorder.prepareToRecord() 
     audioRecorder.record() 
    } 

    func stop(session: AVAudioSession = AVAudioSession.sharedInstance()) { 
     audioRecorder?.stop() 
     audioRecorder = nil 
     do { 
      try session.setActive(false) 
     } catch { 
      // handle session errors 
     } 
    } 
}