Objective-C:从AVAudioEngine中的floatChannelData获取0s

问题描述 投票:1回答:1

我正在使用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:...

objective-c avaudioplayer audio-recording avaudioengine avaudioplayernode
1个回答
0
投票

这为我解决了问题:

© www.soinside.com 2019 - 2024. All rights reserved.