我正在使用AVAudioEngine
通过此代码从麦克风中列出:
NSError *err2 = nil;
engine = [[AVAudioEngine alloc] init];
mainMixer = [engine mainMixerNode];
[mainMixer installTapOnBus:0 bufferSize:1024 format:[mainMixer outputFormatForBus:0] block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
[self normalize:buffer];
}];
[engine startAndReturnError:&err2];
然后,当您看到将缓冲区传递给名为normalize:
的函数时,>
-(void) normalize:(AVAudioPCMBuffer*) buffer{ float sum = 0; NSMutableArray *values = [NSMutableArray new]; for (AVAudioFrameCount i = 0; i < buffer.frameLength; i++) { [values addObject:@(buffer.floatChannelData[0][i])]; } for (int i = 0 ; i< [values count]; i++){ if ([values[i] floatValue] != 0){ NSLog(@"%f", [values[i] floatValue]) ; } } }
目前,我只想打印
floatChannelData
的值。问题在于它始终打印0。因此缓冲区的所有值均为0。为什么会这样呢?值是否应该随着麦克风接收到的声音的变化而变化?
我正在使用AVAudioEngine通过以下代码从麦克风中列出:NSError * err2 = nil; engine = [[AVAudioEngine alloc] init]; mainMixer = [engine mainMixerNode]; [mainMixer installTapOnBus:0 bufferSize:...
这为我解决了问题: