objective-c - Objective-C:从 AVAudioEngine 中的 floatChannelData 获取 0
问题描述
我使用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。为什么会这样?这些值不应该随着麦克风接收到的声音的变化而变化吗?
解决方案
这为我解决了它:
- 转到您的“Info.plist”文件。
- 右键单击并单击“添加行”。
- 然后,在新创建的行的第一列中,找到键“Privacy - Microphone Usage Description”,并添加一个合适的说明,说明您打算如何处理音频作为键的值(第三列)。
现在,当您运行应用程序请求访问麦克风的权限时,将出现一个对话框。基本上,除非您获得用户的明确许可,否则您无法检索音频,即使您在技术上可以与音频设备交谈并启动音频引擎。
推荐阅读
- excel - 不同列中相同对象之间的差异
- javascript - 注入 React 网站的 Chrome 扩展
- python - 计算网格中的距离以找到服务区域
- scala - 在 akka-http 流中未触发 watchTermination
- excel - 确定 Excel 单元格是否脏?
- android - 离子推送通知自定义声音无法在 Android Oreo 及更高版本上播放
- java - 如何将依赖的dll加载到内存中?
- mongodb - mongoimport 无法打开文件,“文件名、目录名或卷标语法不正确”
- postgresql - PostgreSQL 一对一关系不存在
- wildfly - 避免静态内容 WAR 的长时间部署扫描程序延迟