Цель C: получение 0s из floatChannelData в AVAudioEngine - PullRequest
1 голос
/ 26 июня 2019

Я перечисляю с микрофона, используя 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. Почему это происходит?не должны ли значения изменяться с изменением голосов, полученных микрофоном?

...