gpt4 book ai didi

ios - 我想每秒调用 20 次 installTapOnBus :bufferSize:format:block:

转载 作者:技术小花猫 更新时间:2023-10-29 11:13:48 25 4
gpt4 key购买 nike

我想在麦克风的实时输入中显示波形。我是用installTapOnBus:bufferSize:format:block:实现的,这个函数一秒调用了3次。我想将此函数设置为每秒调用 20 次。在哪里可以设置?

AVAudioSession *audioSession = [AVAudioSession sharedInstance];

NSError* error = nil;
if (audioSession.isInputAvailable) [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
if(error){
return;
}

[audioSession setActive:YES error:&error];
if(error){
retur;
}

self.engine = [[[AVAudioEngine alloc] init] autorelease];

AVAudioMixerNode* mixer = [self.engine mainMixerNode];
AVAudioInputNode* input = [self.engine inputNode];
[self.engine connect:input to:mixer format:[input inputFormatForBus:0]];

// tap ... 1 call in 16537Frames
// It does not change even if you change the bufferSize
[input installTapOnBus:0 bufferSize:4096 format:[input inputFormatForBus:0] block:^(AVAudioPCMBuffer* buffer, AVAudioTime* when) {

for (UInt32 i = 0; i < buffer.audioBufferList->mNumberBuffers; i++) {
Float32 *data = buffer.audioBufferList->mBuffers[i].mData;
UInt32 frames = buffer.audioBufferList->mBuffers[i].mDataByteSize / sizeof(Float32);

// create waveform
...
}
}];

[self.engine startAndReturnError:&error];
if (error) {
return;
}

最佳答案

他们说,Apple 支持回复:(2014 年 9 月)

Yes, currently internally we have a fixed tap buffer size (0.375s), and the client specified buffer size for the tap is not taking effect.

但有人调整缓冲区大小并获得 40 毫秒 https://devforums.apple.com/thread/249510?tstart=0

无法检查它,在 ObjC 中 :(

UPD 它有效!只是单行:

    [input installTapOnBus:0 bufferSize:1024 format:[mixer outputFormatForBus:0] block:^(AVAudioPCMBuffer *buffer, AVAudioTime *when) {
buffer.frameLength = 1024; //here

关于ios - 我想每秒调用 20 次 installTapOnBus :bufferSize:format:block:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26115626/

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