gpt4 book ai didi

ios - 使用 AVAudioEngine 进行电平测量

转载 作者:IT王子 更新时间:2023-10-29 08:11:00 63 4
gpt4 key购买 nike

我刚刚在 AVAudioEngine 上观看了 WWDC 视频(Session 502 AVAudioEngine in Practice),我非常兴奋能够制作基于该技术的应用。

我还没想好如何对麦克风输入或调音台输出进行电平监控。

有人可以帮忙吗?明确地说,我说的是监控当前输入信号(并在 UI 中显示),而不是 channel /轨道的输入/输出音量设置。

我知道你可以用 AVAudioRecorder 做到这一点,但这不是 AVAudioEngine 需要的 AVAudioNode

最佳答案

尝试在主混音器上安装一个水龙头,然后通过设置帧长使其更快,然后读取样本并获得平均值,如下所示:

import framework on top

#import <Accelerate/Accelerate.h>

add property

@property float averagePowerForChannel0;
@property float averagePowerForChannel1;

then the below the same>>

self.mainMixer = [self.engine mainMixerNode];
[self.mainMixer installTapOnBus:0 bufferSize:1024 format:[self.mainMixer outputFormatForBus:0] block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
[buffer setFrameLength:1024];
UInt32 inNumberFrames = buffer.frameLength;

if(buffer.format.channelCount>0)
{
Float32* samples = (Float32*)buffer.floatChannelData[0];
Float32 avgValue = 0;

vDSP_meamgv((Float32*)samples, 1, &avgValue, inNumberFrames);
self.averagePowerForChannel0 = (LEVEL_LOWPASS_TRIG*((avgValue==0)?-100:20.0*log10f(avgValue))) + ((1-LEVEL_LOWPASS_TRIG)*self.averagePowerForChannel0) ;
self.averagePowerForChannel1 = self.averagePowerForChannel0;
}

if(buffer.format.channelCount>1)
{
Float32* samples = (Float32*)buffer.floatChannelData[1];
Float32 avgValue = 0;

vDSP_meamgv((Float32*)samples, 1, &avgValue, inNumberFrames);
self.averagePowerForChannel1 = (LEVEL_LOWPASS_TRIG*((avgValue==0)?-100:20.0*log10f(avgValue))) + ((1-LEVEL_LOWPASS_TRIG)*self.averagePowerForChannel1) ;
}
}];

then, get the target value you want

NSLog(@"===test===%.2f", self.averagePowerForChannel1);

要获得峰值,请使用 vDSP_maxmgv 而不是 vDSP_meamgv。


LEVEL_LOWPASS_TRIG 是一个简单的过滤器,值在 0.0 到 1.0 之间,如果您设置 0.0,您将过滤所有值而不获取任何数据。如果将其设置为 1.0,则会产生过多的噪波。基本上,值越高,您将获得更多的数据变化。似乎 0.10 到 0.30 之间的值适合大多数应用。

关于ios - 使用 AVAudioEngine 进行电平测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641439/

63 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com