首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >利用AudioKit的AKHighPassFilter实现频率滤波

利用AudioKit的AKHighPassFilter实现频率滤波
EN

Stack Overflow用户
提问于 2017-05-01 18:42:44
回答 1查看 373关注 0票数 2

我正在尝试用AudioKit过滤掉低于指定阈值的频率。我正在使用AKHighPassFilter来完成这项工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func playSound(duration: Int, frequencyRange: Range<Double>) {

    generator = AKOperationGenerator() { parameters in

        let volume = AKOperation.sineWave(frequency: parameters[0]).scale(minimum: 0, maximum: 0.1)
        let jitter = AKOperation.jitter(amplitude: parameters[1], minimumFrequency: lowerFrequency, maximumFrequency: upperFrequency)

        return AKOperation.sineWave(frequency: jitter, amplitude: volume)
    }

    generator!.parameters = [baseFrequency, amplitude]

    // Exception thrown at this line after method called 1 time
    var highPassFilter = AKHighPassFilter(generator)
    highPassFilter.cutoffFrequency = frequencyRange.lowerBound
    highPassFilter.resonance = 0

    AudioKit.output = highPassFilter
    AudioKit.start()

    generator?.play()
}

我第一次调用playSound(duration:, frequencyRange:)时,它工作得很好。一旦我停止AudioKit并尝试第二次播放声音,就会在该行抛出一个异常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var highPassFilter = AKHighPassFilter(generator)

以下是崩溃的控制台输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2017-05-01 14:32:01.169 MyApp[18123:3459824] *** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'required condition is false: [_nodes containsObject: node]'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000109ea7b0b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010990c141 objc_exception_throw + 48
    2   CoreFoundation                      0x0000000109eabcf2 +[NSException raise:format:arguments:] + 98
    3   AVFAudio                            0x000000010cdc3a9e _Z19AVAE_RaiseExceptionP8NSStringz + 158
    4   AVFAudio                            0x000000010cdc9cbb _ZN17AVAudioEngineImpl10DetachNodeEP11AVAudioNodeb + 421
    5   AVFAudio                            0x000000010cdc9ad0 -[AVAudioEngine detachNode:] + 67
    6   AudioKit                            0x0000000108d3bee4 _TToFC8AudioKit6AKNodeD + 84
    7   libobjc.A.dylib                     0x0000000109920b8e _ZN11objc_object17sidetable_releaseEb + 202
    8   AudioKit                            0x0000000108d39a99 _TToFC8AudioKit16AKHighPassFilterE + 25
    9   libobjc.A.dylib                     0x000000010990a9bc _ZL27object_cxxDestructFromClassP11objc_objectP10objc_class + 127
    10  libobjc.A.dylib                     0x0000000109916d34 objc_destructInstance + 129
    11  libobjc.A.dylib                     0x0000000109916d66 object_dispose + 22
    12  AudioKit                            0x0000000108d3bf1b _TToFC8AudioKit6AKNodeD + 139
    13  libobjc.A.dylib                     0x0000000109920b8e _ZN11objc_object17sidetable_releaseEb + 202
    14  MyApp                             0x00000001087301ec _TFC7MyApp11SoundPlayerClass9playSoundfT8durationSi14frequencyRangeGVs5RangeSd__T_ + 988
    15  MyApp                             0x000000010873a1a4 _TFC7MyApp18MainViewController13playFrequencyfCS_12FrostyButtonT_ + 2276
    16  MyApp                             0x000000010873a4fa _TToFC7MyApp18MainViewController13playFrequencyfCS_12FrostyButtonT_ + 58
    17  UIKit                               0x000000010ab63d22 -[UIApplication sendAction:to:from:forEvent:] + 83
    18  UIKit                               0x000000010ace825c -[UIControl sendAction:to:forEvent:] + 67
    19  UIKit                               0x000000010ace8577 -[UIControl _sendActionsForEvents:withEvent:] + 450
    20  UIKit                               0x000000010ace74b2 -[UIControl touchesEnded:withEvent:] + 618
    21  UIKit                               0x000000010abd149a -[UIWindow _sendTouchesForEvent:] + 2707
    22  UIKit                               0x000000010abd2bb0 -[UIWindow sendEvent:] + 4114
    23  UIKit                               0x000000010ab7f7b0 -[UIApplication sendEvent:] + 352
    24  UIKit                               0x000000011e3c075c -[UIApplicationAccessibility sendEvent:] + 85
    25  UIKit                               0x000000010b362adc __dispatchPreprocessedEventFromEventQueue + 2926
    26  UIKit                               0x000000010b35aa3a __handleEventQueue + 1122
    27  UIKit                               0x000000010b35bd08 __handleEventQueue + 5936
    28  CoreFoundation                      0x0000000109e4dc01 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    29  CoreFoundation                      0x0000000109e330cf __CFRunLoopDoSources0 + 527
    30  CoreFoundation                      0x0000000109e325ff __CFRunLoopRun + 911
    31  CoreFoundation                      0x0000000109e32016 CFRunLoopRunSpecific + 406
    32  GraphicsServices                    0x000000010ecd4a24 GSEventRunModal + 62
    33  UIKit                               0x000000010ab620d4 UIApplicationMain + 159
    34  MyApp                             0x000000010872cb77 main + 55
    35  libdyld.dylib                       0x000000010fbaf65d start + 1
    36  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

在添加AKHighPassFilter之前,该方法运行良好。我欢迎建议re:如何解决这个崩溃。感谢您的阅读。

EN

回答 1

Stack Overflow用户

发布于 2017-11-16 17:24:13

我认为这里的主要问题是,您在每次调用playSound时重新创建所有对象,并在每次调用时在play方法中设置AudioKit.output。您要做的是在初始化例程中创建对象链,然后根据需要更改参数。所有的连接只需要建立一次。一种技术是使用AKMixer作为输入或输出,并在其中添加和删除节点。例如,高通滤波器可以对AKMixer的输出进行滤波。这个混合器可以有任意数量的节点附加到它。对于在运行时删除或添加的节点,AVAudioEngine可能会有些敏感。

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

https://stackoverflow.com/questions/43724558

复制
相关文章
OpenCV中图像频率域滤波
图像处理不仅可以在空间域进行还可以在频率域进行,把空间域的图像开窗卷积形式,变换得到频率域的矩阵点乘形式得到比较好的效果。转换到频率域最常见的是通过傅里叶变换得到图像的频率域表示,处理之后再反变换回去。支持各种卷积处理的效果,比如模糊,梯度提取等,OpenCV中支持傅里叶变换与逆变换的函数分别为
OpenCV学堂
2019/07/23
1.9K1
OpenCV中图像频率域滤波
[javascript] 利用Date.Now()实现前端频率限制
比如某个点击事件 , 两秒才能点一次 var ms= 1000*2; var lastClick = Date.now() - ms; $("a,div,p,li").click(function(){ if (Date.now() - lastClick >= ms) { lastClick = Date.now(); //相关操作 } }); Date.Now()是返
唯一Chat
2021/05/17
5010
【OpenCV】Chapter6.频率域图像滤波
OpenCV 中的cv.dft()函数也可以实现图像的傅里叶变换,cv.idft()函数实现图像傅里叶逆变换。
zstar
2022/09/26
1.5K0
【OpenCV】Chapter6.频率域图像滤波
[日常]灵活的频率限制实现
灵活的频率限制实现: 1.比如有这样的需要,当前用户,一分钟限制200次,一小时限制1000次 当前ip,一分钟限制2000次,一小时限制10000次
唯一Chat
2019/09/10
7250
数字图像处理学习笔记(十二)——频率域滤波
滤波器:抑制或最小化某些频率的波和震荡的装置或材料 低通滤波器抑制或最小化高频率的波 高通滤波器抑制或最小化低频率的波 频率:自变量单位变化期间内,一个周期函数重复相同值序列的次数
荣仔_最靓的仔
2021/02/02
2.7K0
数字图像处理学习笔记(十二)——频率域滤波
ADC采样滤波算法利用卡尔曼滤波算法详解
(本文为笔者早期所写,当时对卡尔曼滤波器理解尚未透彻,如今回顾,该模型还有所缺陷,推荐读者看卡尔曼的推导过程或者B站大佬Dr_CAN的空间)
全栈程序员站长
2022/07/01
2.8K0
ADC采样滤波算法利用卡尔曼滤波算法详解
基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.
FPGA开源工作室
2019/10/29
7.2K0
基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比
[图像]中值滤波(Matlab实现)
原文链接:http://blog.csdn.net/humanking7/article/details/46826009
祥知道
2020/03/10
1.6K0
[图像]高斯滤波(Matlab实现)
原文链接:http://blog.csdn.net/humanking7/article/details/46826105
祥知道
2020/03/10
1.5K0
双边滤波算法的简易实现bilateralFilter
没怎么看过双边滤波的具体思路,动手写一写,看看能不能突破一下。 最后,感觉算法还是要分开 水平 与 垂直 方向进行分别处理,才能把速度提上去。 没耐性写下去了,发上来,给大伙做个参考好了。 先上几张效
cpuimage
2018/04/12
1.9K0
双边滤波算法的简易实现bilateralFilter
一阶惯性滤波特点_传递函数的固有频率怎么求
因此启动性能良好,另,一阶惯性环节无超调量,因此可通过修改反馈参数实现最优的跟踪性能。因此在针对温度等变化较小的物理量方面的控制上是较占优势的,但精确跟踪也就意味着出现高频干扰、低频干扰、白噪声时,传感器也会精确地将这些干扰输出。这对一些容易受到干扰的系统是极为不利的。
全栈程序员站长
2022/11/10
3670
一阶惯性滤波特点_传递函数的固有频率怎么求
opencv 滤波 方框滤波 均值滤波 高斯滤波 中值滤波 双边滤波[通俗易懂]
方框滤波是所有滤波器中最简单的一种滤波方式。每一个输出像素的是内核邻域像素值的平均值得到。 通用的滤波kernel如下:
全栈程序员站长
2022/07/25
1.4K0
opencv 滤波 方框滤波 均值滤波 高斯滤波 中值滤波 双边滤波[通俗易懂]
Redis 实现接口访问频率限制
为什么限制访问频率 做服务接口时通常需要用到请求频率限制 Rate limiting,例如限制一个用户1分钟内最多可以范围100次 主要用来保证服务性能和保护数据安全 因为如果不进行限制,服务调用者可以随意访问,想调几次就调几次,会给服务造成很大的压力,降低性能,再比如有的接口需要验证调用者身份,如果不进行访问限制,调用者可以进行暴力尝试 使用 Redis 来实现 通过 Redis 可以方便的实现频率限制功能,下面介绍两种不错的方法 (1)方案1 - Lua脚本 思路 把限制逻辑封装到一个Lua脚本中,调用
dys
2018/04/04
3.8K0
Redis 实现接口访问频率限制
滤波器——BoxBlur均值滤波及其快速实现
在数字图像处理的语境里,图像一般是二维或三维的矩阵,卷积核(kernel)和滤波器(filter)通常指代同一事物,即对图像进行卷积或相关操作时使用的小矩阵,尺寸通常较小,常见的有3*3、5*5、7*7等。卷积操作相当于对滤波器旋转180度后的相关操作,如下图所示,但很多滤波器是中心对称的,而且两者运算上可以等价,所以很多时候不太区分。
李拜六不开鑫
2018/09/04
2.4K0
频率采样法设计FIR 数字滤波器MATLAB版
一、实验目的 1.  掌握用频率采样法设计线性相位 FIR  数字滤波器的方法。 2.  熟悉频率取样理论,熟悉内插函数及其应用。 3.  了解 FIR  数字滤波器的频率特性和相位特性,观察过渡带取样点对滤波器幅频特性的影响。 4.如何由线性相位条件决定采样值。
timerring
2022/07/20
1.5K0
频率采样法设计FIR 数字滤波器MATLAB版
基于FPGA的中值滤波算法的实现
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.
FPGA开源工作室
2019/10/29
1.2K0
基于FPGA的中值滤波算法的实现
直方图实现快速中值滤波
中值滤波能够有效去除图像中的异常点,具有去除图像噪声的作用。传统中值滤波的算法一般都是在图像中建立窗口,然后对窗口内的所有像素值进行排序,选择排序后的中间值作为窗口中心像素滤波后的值。由于这个做法在每
一棹烟波
2018/01/12
1.9K0
直方图实现快速中值滤波
学界 | 无需进行滤波后处理,利用循环推断算法实现歌唱语音分离
选自arXiv 机器之心编译 参与:路雪、李泽南 近日,来自 Fraunhofer IDMT、Tampere University of Technology 与蒙特利尔大学的 Yoshua Bengio 等人在 arXiv 上提交了一篇论文,提出跳过使用泛化维纳滤波器进行后处理的步骤,转而使用循环推断算法和稀疏变换步骤进行歌唱语音分离,效果优于之前基于深度学习的方法。这篇论文已经提交至 ICASSP 2018。 论文:Monaural Singing Voice Separation with Skip
机器之心
2018/05/10
7490
点击加载更多

相似问题

利用MATLAB实现滤波器的频率响应

12

利用NSPredicate实现阵列滤波

16

频率采样滤波器的实现

22

AudioKit:调用'AudioKit.stop()‘后不能重新启动频率的AudioKit采样

13

AudioKit示例MicrophoneAnalysis的最大频率

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文