2016-07-04 5 views
1

私は、ユーザーがアプリと話しているときに検出する必要のあるアプリを持っています。私は第三者のAPIを持っていたくない。 I this turtorialを使用しますが、私はこれは私が使用していたコードであるSWIFT 2.に変換しなければならなかった:速報で話すことを検出する

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) 
関連する問題