【问题标题】:Objective-C: Getting 0s from the floatChannelData in AVAudioEngineObjective-C:从 AVAudioEngine 中的 floatChannelData 获取 0
【发布时间】:2019-06-26 07:12:47
【问题描述】:

我通过这个代码使用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。 为什么会这样?这些值不应该随着麦克风接收到的声音的变化而变化吗?

【问题讨论】:

    标签: objective-c avaudioplayer audio-recording avaudioengine avaudioplayernode


    【解决方案1】:

    这为我解决了:

    • 转到您的“Info.plist”文件。
    • 右键单击并单击“添加行”。
    • 然后,在新创建的行的第一列中,找到键“隐私 - 麦克风使用说明”,并添加一个合适的说明,说明您打算如何处理音频作为键的值(第三列)。李>

    现在,当您运行应用程序时会出现一个对话框,要求您获得访问麦克风的权限。基本上,除非您获得用户的明确许可,否则您无法检索音频,即使您在技术上可以与音频设备对话并启动音频引擎。

    【讨论】:

      猜你喜欢
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      相关资源
      最近更新 更多