2016-07-04 57 views
1

我有一个应用程序需要检测何时用户正在与应用程序交谈。我不想拥有任何第三方API。我已经使用this turtorial,但我不得不将其转换为SWIFT 2。这是我使用的代码:检测与swift交谈

import UIKit 
import AVFoundation 
import CoreAudio 

class ViewController: UIViewController, AVAudioPlayerDelegate, AVAudioRecorderDelegate { 

var audioRecorder: AVAudioRecorder? 

var timer = NSTimer() 

@IBAction func start(sender: AnyObject) { 
    if audioRecorder?.recording == false { 
     audioRecorder?.record() 
     timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(ViewController.checkForAudio), userInfo: nil, repeats: true) 
    } 
} 


@IBAction func stop(sender: AnyObject) { 
    if audioRecorder?.recording == true { 
     audioRecorder?.stop() 
     timer.invalidate() 
    } 
} 


func checkForAudio() { 
    audioRecorder?.updateMeters() 

    print("Average: \(audioRecorder?.averagePowerForChannel(0)) Peak: \(audioRecorder?.peakPowerForChannel(0))") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let fileMgr = NSFileManager.defaultManager() 
    let dirPaths = fileMgr.URLsForDirectory(.DocumentationDirectory, inDomains: .UserDomainMask) 
    let soundFileURL = dirPaths[0].URLByAppendingPathComponent("sound.caf") 

    let recordSettings = [AVSampleRateKey: 44100.0, AVNumberOfChannelsKey: 2, AVEncoderBitRateKey: 12800, AVLinearPCMBitDepthKey: 16, AVEncoderAudioQualityKey: AVAudioQuality.Max.rawValue] 

    let audioSession = AVAudioSession.sharedInstance() 

    do { 
     try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) 

     } catch let error as NSError { 
      print("audioSession error: \(error.localizedDescription)") 
     } 

    do { 
     try audioRecorder = AVAudioRecorder(URL: soundFileURL, settings: recordSettings as! [String : AnyObject]) 
     audioRecorder?.prepareToRecord() 
     audioRecorder?.meteringEnabled = true 
    } catch let error as NSError { 
     print("audioSession error: \(error.localizedDescription)") 
    } 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

class func getDocumentsDirectory() -> String { 
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 
    let documentsDirectory = paths[0] 
    return documentsDirectory 
} 

} 

然后在登录它只是打印这一点,我想提出响亮的声音和达灵,但它仍然不会改变。

Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
Average: Optional(-120.0) Peak: Optional(-120.0) 
+1

如果可以的话只针对iOS 10,您可能会考虑调查Apple的新语音识别API; https://developer.apple.com/videos/play/wwdc2016/509/ –

+0

问题是它需要互联网连接。 – Loanb222

回答

2

我想你的代码,你的文件的URL是错误的好歹,我改变了文件的URL作为临时路径:

let pathStr = NSTemporaryDirectory().stringByAppendingString("sound.caf") 
    let soundFileURL = NSURL(fileURLWithPath: pathStr) 

和它的作品

Average: Optional(-27.2326279) Peak: Optional(-13.5865393) 
Average: Optional(-33.1891823) Peak: Optional(-23.3389206) 
Average: Optional(-49.0175018) Peak: Optional(-22.505867) 
Average: Optional(-38.9896851) Peak: Optional(-18.3879299) 
Average: Optional(-33.0929604) Peak: Optional(-20.2775478)