Advertisement
Guest User

AudioNoteController.swift

a guest
Aug 13th, 2015
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 5.68 KB | None | 0 0
  1. import UIKit
  2. import AVFoundation
  3. import CoreData
  4.  
  5. @objc class AudioNoteController: BaseViewController, AVAudioPlayerDelegate, AVAudioRecorderDelegate  {
  6.    
  7.     var recorder: AVAudioRecorder!
  8.     var player:AVAudioPlayer!
  9.     var soundFileURL:NSURL!
  10.    
  11.     @IBOutlet var recordButton: UIButton!
  12.     @IBOutlet var stopButton: UIButton!
  13.     @IBOutlet var playButton: UIButton!
  14.     @IBOutlet var counter: UILabel!
  15.    
  16.     var audioNote: AudioNote!
  17.    
  18.     override func viewDidLoad() {
  19.         super.viewDidLoad()
  20.        
  21.         self.title = "Audio Note"
  22.         let cancelButton: UIBarButtonItem = UIBarButtonItem(title: "Back", style: .Plain, target: self, action: nil)
  23.         self.navigationItem.backBarButtonItem = cancelButton
  24.        
  25.         recordButton.enabled = true
  26.         stopButton.enabled = false
  27.         playButton.enabled = false
  28.        
  29.         setSessionPlayback()
  30.     }
  31.    
  32.     override func didReceiveMemoryWarning() {
  33.         super.didReceiveMemoryWarning()
  34.         //recorder = nil
  35.         //player = nil
  36.     }
  37.    
  38.     @IBAction func saveAudioNote(sender: AnyObject) {
  39.         createAudioNote()
  40.     }
  41.    
  42.     @IBAction func record(sender: AnyObject) {
  43.         if recorder?.recording == false {
  44.             playButton.enabled = false
  45.             recordButton.enabled = false
  46.             stopButton.enabled = true
  47.             recorder?.record()
  48.             println("Recording")
  49.         } else {
  50.             println("not recording")
  51.         }
  52.     }
  53.    
  54.     @IBAction func stopRecord(sender: AnyObject) {
  55.         stopButton.enabled = false
  56.         playButton.enabled = true
  57.         recordButton.enabled = true
  58.        
  59.         if recorder?.recording == true {
  60.             recorder?.stop()
  61.             println("Recording Stopped")
  62.         } else {
  63.             player?.stop()
  64.             println("Playing Stopped")
  65.         }
  66.     }
  67.    
  68.     @IBAction func playAudio(sender: AnyObject) {
  69.         if recorder?.recording == false {
  70.             stopButton.enabled = true
  71.             recordButton.enabled = false
  72.            
  73.             var error: NSError?
  74.            
  75.             player = AVAudioPlayer(contentsOfURL: recorder?.url,
  76.                 error: &error)
  77.            
  78.             player?.delegate = self
  79.            
  80.             if let err = error {
  81.                 println("audioPlayer error: \(err.localizedDescription)")
  82.             } else {
  83.                 player?.play()
  84.                 println("Playing Started")
  85.             }
  86.         }
  87.     }
  88.    
  89.     func createAudioNote() {
  90.         let appDelegate: AppDelegate  = localAppDelegate()
  91.         let managedContext: NSManagedObjectContext = appDelegate.managedObjectContext!
  92.         let entityDescription:NSEntityDescription! = NSEntityDescription.entityForName("AudioNote", inManagedObjectContext: managedContext)
  93.        
  94.         audioNote = AudioNote(entity: entityDescription, insertIntoManagedObjectContext: managedContext)
  95.         audioNote.date_created = NSDate()
  96.         audioNote.url = "\(soundFileURL)"
  97.        
  98.         if (appDelegate.userLocation != nil){
  99.             println(appDelegate.userLocation!.coordinate.latitude)
  100.             println(audioNote)
  101.             audioNote.latitude = appDelegate.userLocation!.coordinate.latitude
  102.             audioNote.longitude = appDelegate.userLocation!.coordinate.longitude
  103.         }
  104.     }
  105.    
  106.     func setSessionPlayback() {
  107.         var format = NSDateFormatter()
  108.         format.dateFormat="yyyy-MM-dd-HH-mm-ss"
  109.         var currentFileName = "recording-\(format.stringFromDate(NSDate())).caf"
  110.        
  111.         let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
  112.         let docsDir = dirPaths[0] as! String
  113.         let soundFilePath = docsDir.stringByAppendingPathComponent(currentFileName)
  114.         soundFileURL = NSURL(fileURLWithPath: soundFilePath)
  115.         let recordSettings = [AVEncoderAudioQualityKey: AVAudioQuality.Low.rawValue,
  116.                               AVEncoderBitRateKey: 32,
  117.                               AVNumberOfChannelsKey: 2,
  118.                               AVSampleRateKey: 44100.0]
  119.        
  120.         var error: NSError?
  121.        
  122.         let audioSession = AVAudioSession.sharedInstance()
  123.         audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord,
  124.             error: &error)
  125.        
  126.         if let err = error {
  127.             println("audioSession error: \(err.localizedDescription)")
  128.         }
  129.        
  130.         recorder = AVAudioRecorder(URL: soundFileURL,
  131.             settings: recordSettings as [NSObject : AnyObject], error: &error)
  132.        
  133.         if let err = error {
  134.             println("audioSession error: \(err.localizedDescription)")
  135.         } else {
  136.             recorder?.prepareToRecord()
  137.             println("prepared")
  138.         }
  139.     }
  140.    
  141.     func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool) {
  142.         recordButton.enabled = true
  143.         stopButton.enabled = false
  144.     }
  145.    
  146.     func audioPlayerDecodeErrorDidOccur(player: AVAudioPlayer!, error: NSError!) {
  147.         println("Audio Play Decode Error")
  148.     }
  149.    
  150.     func audioRecorderDidFinishRecording(recorder: AVAudioRecorder!, successfully flag: Bool) {
  151.     }
  152.    
  153.     func audioRecorderEncodeErrorDidOccur(recorder: AVAudioRecorder!, error: NSError!) {
  154.         println("Audio Record Encode Error")
  155.     }
  156.    
  157.     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  158.         if (segue.identifier == "showAudioNoteDetails") {
  159.             if let noteController = segue.destinationViewController as? AudioNoteDetailsController{
  160.                 //noteController.audioNote = audioNote
  161.             }
  162.         }
  163.     }
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement