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)
如果可以的话只针对iOS 10,您可能会考虑调查Apple的新语音识别API; https://developer.apple.com/videos/play/wwdc2016/509/ –
问题是它需要互联网连接。 – Loanb222