2013-08-18 46 views
7

Tôi có một ứng dụng phát âm thanh phát trực tuyến. Làm thế nào tôi có thể ghi lại âm thanh trực tuyến từ AVPlayer bằng cách sử dụng AVAudioRecorder (hoặc cái gì khác?). Cảm ơn.AVAudioRecorder ghi lại âm thanh luồng

+0

Có thể được nhân đôi? https://stackoverflow.com/questions/33004383/record-audio-streamed-from-avplayer –

Trả lời

0

Swift 3+ Đây là VC đơn giản mà sẽ tiết kiệm được phiên âm các văn bản 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 
     } 
    } 
} 
Các vấn đề liên quan