2013-01-15 59 views
-2

我一直在尋找Apple的Aurio Touch示例代碼。我想知道如何使用它來測量風速等風速計。對此有何建議?麥克風對聲音做出反應,向麥克風吹入空氣確實會測量聲音。如何實現這個測量風速?任何人都可以幫助我呢?風速應用 - iOS

+2

而你認爲你可以真正測量麥克風的風速嗎?!?這是不可能的恕我直言 – Lefteris

+0

http://www.goingapps.com/Pages/default.aspx我認爲你應該做一些研究之前得出的結論,它不可能。感謝您的反對 – DesperateLearner

+1

我仍然不相信這是可能的,特別是在非常低的風速和非常高的風速下。外部噪音也會破壞你的測量結果,你剛剛給我看的應用程序沒有證明任何東西。有些應用程序聲稱要做很棒的事情,但只有它們不行。這隻會在多風環境下進行測試和確認。 – Lefteris

回答

2

您可以使用AVAudioRecorder來做到這一點。

// 1的.init AVAudioRecorder這樣的:

NSURL *url = [NSURL fileURLWithPath:@"/dev/null"]; 

      NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys: 
             [NSNumber numberWithFloat: 44100.0],     AVSampleRateKey, 
             [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey, 
             [NSNumber numberWithInt: 1],       AVNumberOfChannelsKey, 
             [NSNumber numberWithInt: AVAudioQualityMax],   AVEncoderAudioQualityKey, 
             nil]; 

      NSError *error; 

      recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error]; 

      if (recorder) { 
       [recorder prepareToRecord]; 
       //  recorder.delegate = self; 
       recorder.meteringEnabled = YES; 
       [recorder record]; 

      } 

//初始化2定時器獲得平均功率

levelTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03 target: self selector: @selector(levelTimerCallback) userInfo: nil repeats: YES]; 

-(void)levelTimerCallback 
{ 
    [recorder updateMeters]; 

    float peak = [recorder averagePowerForChannel:0]; 
    float value = [meterTable valueAt:peak]; 
    //meterTable = [[MeterTable alloc] initWithMinDecibels:-80. TableSize:50 Root: 1.3]; 
    //Value 0.0~1.0 , 
} 

您可以從蘋果範例中得到MeterTable avTouch

+0

但是,儀表表格給出了從線性刻度到dB的轉換值。我如何從計算出的分貝值得出速度? – DesperateLearner

+0

我也不知道,但你可以嘗試在設備上的示例代碼,並吹到麥克風,看看會發生什麼。 –