मुझे एक आईओएस ऐप विकसित करने की जरूरत है जो उपयोगकर्ता से माइक्रोफोन में एक झटका का पता लगाता है। यह एक चुनौती-खेल होना है जहां दो खिलाड़ियों को एक के बाद आईफोन माइक में उड़ना होगा। डेसिबल मूल्यों को मापना चाहिए और मीटर या किलोमीटर में परिवर्तित किया जाना चाहिए ताकि मैं एक विजेता निर्धारित कर सकूं। वह खिलाड़ी जो "आगे बढ़ता है" (खिलाड़ी 1: 50 किमी, प्लेयर 2: 70 किमी) जीतता है।आईओएस - माइक में उड़ें और परिणामों को रूपांतरित करें! (स्विफ्ट)
क्या यह एक संभावित कार्यान्वयन है?
मैं तेजी में इस कोड है और मैं नहीं जानता कि आगे बढ़ने के लिए कैसे:
import Foundation
import UIKit
import AVFoundation
import CoreAudio
class ViewController: UIViewController {
// @IBOutlet weak var mainImage: UIImageView!
var recorder: AVAudioRecorder!
var levelTimer = NSTimer()
var lowPassResults: Double = 0.0
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL.fileURLWithPath("dev/null")
//numbers are automatically wrapped into NSNumber objects, so I simplified that to [NSString : NSNumber]
var settings : [NSString : NSNumber] = [AVSampleRateKey: 44100.0, AVFormatIDKey: kAudioFormatAppleLossless, AVNumberOfChannelsKey: 1, AVEncoderAudioQualityKey: AVAudioQuality.Max.rawValue]
var error: NSError?
// mainImage?.image = UIImage(named: "flyForReal.png");
recorder = AVAudioRecorder(URL:url, settings:settings, error:&error)
if((recorder) != nil){
recorder.prepareToRecord()
recorder.meteringEnabled = true
recorder.record()
levelTimer = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: Selector("levelTimerCallback"), userInfo: nil, repeats: true)
}
else{
NSLog("%@", "Error");
}
}
func levelTimerCallback(timer:NSTimer) {
recorder.updateMeters()
let ALPHA: Double = 0.05
var peakPowerForChannel = pow(Double(10), (0.05 * Double(recorder.peakPowerForChannel(0))))
lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;
if(lowPassResults > 0.95){
NSLog("@Mic blow detected");
}
NSLog("@Average input: %f Peak input: %f Low pass results: %f", recorder.averagePowerForChannel(0), recorder.peakPowerForChannel(0), lowPassResults);
}
}
धन्यवाद आगे!