首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOS、AVAudioSession和诺沃卡因:如何动态设定采样率?

IOS、AVAudioSession和诺沃卡因:如何动态设定采样率?
EN

Stack Overflow用户
提问于 2015-07-23 15:23:15
回答 1查看 2.1K关注 0票数 0

对于基音检测,我使用Novocaine框架来处理麦克风捕获的数据。

最初-我重写了原来的Novocaine类,以便设置我自己的(降低的)采样率:

_inputFormat.mSampleRate =首选抽样率;//我自己的值_outputFormat.mSampleRate = PREFERRED_SAMPLING_RATE;//我自己的值

我将采样率降低到44100.0 / 4.0,以便捕获低频信号(s.th )。在20赫兹至100赫兹之间)这个很好用!

当我试图获得更高的频率(s.th )。从500 Hz开始,由于采样率低,我得到了偏差。因此,为了达到更高的精度,我需要将采样率提高到44100.0。

我的问题是:由于诺沃卡因是一个单例,有没有一种方法可以动态地改变输出块内的采样率?

由于诺沃卡因依赖AVAudioSession,我试图做以下工作,但没有成功:

代码语言:javascript
复制
[audioManager setOutputBlock:^(float *data, UInt32 numFrames, UInt32 numChannels) {

    self->ringBuffer->FetchInterleavedData(data, numFrames, numChannels);
    [[AVAudioSession sharedInstance] setPreferredSampleRate:NEW_SAMPLING_RATE error:nil];
…  }

但这对诺沃卡因框架的采样率没有影响。

是否有可能在不创建新的音频会话的情况下更改采样率?问题是,输出块属于当前正在运行的会话。

EN

回答 1

Stack Overflow用户

发布于 2016-06-13 03:09:51

当您调用setPreferredSampleRate:error:时,系统可能不会立即(或永远)响应采样速率的变化。从医生那里:

所请求的更改可能不会立即生效。例如,您可以使用内置麦克风端口上的setPreferredDataSource:error:方法在耳机插入时选择前端麦克风--直到耳机拔出和音频路由更改时,此首选项才会生效。

还有关于在技术Q&A QA1631 AVAudioSession -请求音频会话首选项中更改参数的指导

在大多数情况下,设置一个首选值会导致某种类型的音频系统与活动音频会话重新配置,音频数据I/O将被停止,然后重新启动。因此,如果应用程序计划设置多个首选值,通常建议先禁用会话、设置首选项、重新激活会话,然后检查实际值。

在苹果开发者论坛( Apple )上,每一个这个职位,iPhone 6S和6S+只通过内置扬声器支持48 the。永远不要假设您请求的首选采样率是硬件使用的采样率。

另外,我不知道你为什么会看到500赫兹的偏差,采样频率为110~25赫兹--你应该能够准确地捕捉到这一点。你也应该能够捕获20-100赫兹的采样率为44100赫兹-你将只需要增加你的缓冲区大小的4倍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31591686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档