import UIKit
import Foundation
import AudioToolbox
import AVFoundation
import CoreAudio
class ViewController: UIViewController{
//var recorder=AVAudioRecorder()
var recorder :AVAudioRecorder
var timer=NSTimer()
var audioURL: String
var audioNSURL=NSURL()
var avpLAY=AVAudioPlayer()
var session=AVAudioSession()
@IBOutlet weak var imageview: UIImageView!
@IBOutlet weak var recordBtn: UIButton!
@IBOutlet weak var playMedia: UIButton!
required init(coder aDecoder: NSCoder) {
var baseString : String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String
self.audioURL = NSUUID().UUIDString + "sound.m4a"
var pathComponents = [baseString, audioURL]
audioNSURL = NSURL.fileURLWithPathComponents(pathComponents)!
self.session = AVAudioSession.sharedInstance()
self.session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil)
session.setActive(true, error: nil)
var recordSettings: [NSObject : AnyObject] = Dictionary()
recordSettings[AVFormatIDKey] = kAudioFormatMPEG4AAC
recordSettings[AVSampleRateKey] = 44100.0
recordSettings[AVNumberOfChannelsKey] = 2
self.recorder = AVAudioRecorder(URL: audioNSURL, settings: recordSettings, error: nil)!
self.recorder.meteringEnabled = true
self.recorder.prepareToRecord()
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.imageview.image=UIImage(named: "record_animate_01.png")
recordBtn.addTarget(self,action:"btnDown:",forControlEvents:UIControlEvents.TouchDown)
recordBtn.addTarget(self,action:"btnUp:",forControlEvents:UIControlEvents.TouchUpInside)
recordBtn.addTarget(self,action:"btnDragUp:",forControlEvents:UIControlEvents.TouchDragExit)
playMedia.addTarget(self,action:"playRecordSound:",forControlEvents:UIControlEvents.TouchDown)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func btnDown(sender:UIButton){
recorder.record()
timer=NSTimer.scheduledTimerWithTimeInterval(0, target: self, selector:"detectionVoice", userInfo: nil, repeats: true)
}
func btnUp(sender:UIButton){
var cTime = recorder.currentTime;
if (cTime > 2) {//如果录制时间<2 不发送
println("发出去")
}else {
var alert=UIAlertView()
alert.title="提示"
alert.message="录音时间太短"
alert.addButtonWithTitle("确定")
alert.show()
//删除记录的文件
recorder.deleteRecording()
//删除存储的
}
recorder.stop()
timer.invalidate()
}
func btnDragUp(sender:UIButton){
//删除录制文件
recorder.deleteRecording()
recorder.stop()
timer.invalidate()
println("取消发送");
}
//播放录音
func playRecordSound(sender:UIButton){
avpLAY = AVAudioPlayer(contentsOfURL: audioNSURL, error: nil)
avpLAY.play()
}
func detectionVoice(){
recorder.updateMeters()//刷新音量数据
var lowPassResults:Float=pow(10, 0.05*recorder.peakPowerForChannel(0))
println("\(lowPassResults)")
//最大50 0
//图片 小-》大
if lowPassResults>0&&lowPassResults<=0.06 {
imageview.image=UIImage(named: "record_animate_01.png")
}else if lowPassResults>0.06&&lowPassResults<=0.13{
imageview.image=UIImage(named: "record_animate_02.png")
}else if lowPassResults>0.13&&lowPassResults<=0.20 {
self.imageview.image=UIImage(named: "record_animate_03.png")
}else if lowPassResults>0.20&&lowPassResults<=0.27 {
self.imageview.image=UIImage(named: "record_animate_04.png")
}else if lowPassResults>0.27&&lowPassResults<=0.34 {
self.imageview.image=UIImage(named:"record_animate_05.png")
}else if lowPassResults>0.34&&lowPassResults<=0.41 {
self.imageview.image=UIImage(named:"record_animate_06.png")
}else if lowPassResults>0.41&&lowPassResults<=0.48 {
self.imageview.image=UIImage(named:"record_animate_07.png")
}else if lowPassResults>0.48&&lowPassResults<=0.55 {
self.imageview.image=UIImage(named:"record_animate_08.png")
}else if lowPassResults>0.55&&lowPassResults<=0.62 {
self.imageview.image=UIImage(named:"record_animate_09.png")
}else if lowPassResults>0.62&&lowPassResults<=0.69 {
self.imageview.image=UIImage(named:"record_animate_10.png")
}else if lowPassResults>0.69&&lowPassResults<=0.76 {
self.imageview.image=UIImage(named:"record_animate_11.png")
}else if lowPassResults>0.76&&lowPassResults<=0.83 {
self.imageview.image=UIImage(named:"record_animate_12.png")
}else if lowPassResults>0.83&&lowPassResults<=0.9 {
self.imageview.image=UIImage(named:"record_animate_13.png")
}else {
self.imageview.image=UIImage(named:"record_animate_14.png")
}
}
}