Crackling during playback of a libPd patch - esp. related to keyboard presentation
我在 iOS 中集成了一个 libPd 补丁。
当输入一个文本字段并显示键盘时,会有一些噼啪声。
我该如何调试呢?
注意我已经用 Objective-C 和 iOS 标记了这个问题,但是这个问题可能需要所有四个标签的知识 - libPd 和 Pure Data 很好:
什么是纯数据
Pure Data 是一种功能强大的编程语言,用于根据核心数学概念处理音频。它广泛用于游戏以及 DJ 和其他以音乐为中心的应用程序。使用 Pure Data 和 libPd 构建的一些示例应用程序包括:RjDj 的 Rj Voyager 应用程序和 Warner Brothers 的 Inception 应用程序。
libPD 是一种在 iOS 应用程序中嵌入 Pure Data 补丁(使用可视化界面开发)的方法。控制 Pd 接口是通过类似于 OSC 或 MIDI 的发布/订阅消息接口完成的。 .
libPd 的 GitHub 页面在这里:https://github.com/libpd
我在寻求什么帮助?
我不确定从哪里开始调试。在 iOS 上集成和使用过 libPd 的人肯定可以分享经验。它可能与以下内容有关:
-
线程如何工作,以及它如何与主队列交互
-
给定目标设备,什么采样率最有效
-
有哪些调试工具可用。
-
通过丰富的经验获得的其他建议。
- 我认为接近投票来自那些不知道 libPd 是什么的人?
-
仅供参考,我将您的问题编辑为不那么具有煽动性(即,将其放入您的烟斗中并吸一点)。有些人会对这种评论反应不佳。
-
@thegrinner 哈!谢谢 :) 。 . .我认为这个话题对于 StackOverflow 来说可能太专业了。 . .不幸的是,这两张关于与编程无关的投票被误导了。
-
我们会的,我用谷歌搜索了 libPd,但仍然没有任何线索。目前还不清楚这里的"补丁"是什么意思。这是未经授权的 iOS 补丁吗? (如果是这样,那么所有的赌注都没有了。)
-
@HotLicks - 我认为您需要了解纯数据
-
我对 PD 一无所知,但键盘的外观似乎可能导致您因某种原因而缺乏 CPU。你可以试试:
-
验证这仍然会在发布时发生并且未附加到调试器(日志消息在附加到调试器时会导致长时间延迟,仅此一项就会导致像这样的打嗝)
-
使用 Instruments 分析您的代码,看看您是否无意中一次使用了大量 CPU 或
-
增加缓冲区大小,这样 PD 就不再需要 CPU。
434511
我在正在开发的应用中遇到了同样的症状。我确实设法在早期确定了一些事情。我最近的更改涉及在应用程序初始化期间向 pd 发送大量消息。我在调试时注意到,当我减少发送的消息量时,声音得到了改善。另外,我在模拟器中没有看到这个,只在设备上看到。
如果您增加可以生成的补丁数量,则 libpd 示例 PolyPatch 在这种情况下非常有用。我发现声音随着打开许多补丁而破裂,与我的应用程序中的方式完全相同。这很简单,使用 libpd 的开销会影响性能。同样清楚的是,简化补丁(因此它包含更少的对象)会影响性能。但到目前为止,最大的成功是创建一个新的、单独的补丁。所以你不会想要创建大量的补丁。调试当然也需要付出代价。
就采样率而言,44.1khz 几乎可以在任何地方使用(这也是 pd 标准)。没有什么可以阻止你在 xcode 中调试 libpd 代码,我已经做过几次了。除此之外,还有调试补丁的问题。您可以直接在 pd 中使用对象的测试版本设置补丁,或者您应该能够设置 libpd 以查看与通常在控制台的 pd 主窗口中看到的相同的输出(您只需要确保你有这样的
1
| [PdBase setDelegate:_dispatcher]; |
在您的代码中 - 当然都在 dox 中)。然后,您只需根据需要在补丁中添加打印消息...
希望它有所帮助,并且在 3 个月后仍然有用...!
-
我对 PD 一无所知,但键盘的外观似乎可能导致您因某种原因而缺乏 CPU。你可以试试:
-
验证这仍然会在发布时发生并且未附加到调试器(日志消息在附加到调试器时会导致长时间延迟,仅此一项就会导致像这样的打嗝)
-
使用 Instruments 分析您的代码,看看您是否无意中一次使用了大量 CPU 或
-
增加缓冲区大小,这样 PD 就不再需要 CPU。
434511
我在正在开发的应用中遇到了同样的症状。我确实设法在早期确定了一些事情。我最近的更改涉及在应用程序初始化期间向 pd 发送大量消息。我在调试时注意到,当我减少发送的消息量时,声音得到了改善。另外,我在模拟器中没有看到这个,只在设备上看到。
如果您增加可以生成的补丁数量,则 libpd 示例 PolyPatch 在这种情况下非常有用。我发现声音随着打开许多补丁而破裂,与我的应用程序中的方式完全相同。这很简单,使用 libpd 的开销会影响性能。同样清楚的是,简化补丁(因此它包含更少的对象)会影响性能。但到目前为止,最大的成功是创建一个新的、单独的补丁。所以你不会想要创建大量的补丁。调试当然也需要付出代价。
就采样率而言,44.1khz 几乎可以在任何地方使用(这也是 pd 标准)。没有什么可以阻止你在 xcode 中调试 libpd 代码,我已经做过几次了。除此之外,还有调试补丁的问题。您可以直接在 pd 中使用对象的测试版本设置补丁,或者您应该能够设置 libpd 以查看与通常在控制台的 pd 主窗口中看到的相同的输出(您只需要确保你有这样的
1
| [PdBase setDelegate:_dispatcher]; |
在您的代码中 - 当然都在 dox 中)。然后,您只需根据需要在补丁中添加打印消息...
希望它有所帮助,并且在 3 个月后仍然有用...!
-
我对 PD 一无所知,但键盘的外观似乎可能导致您因某种原因而缺乏 CPU。你可以试试:
-
验证这仍然会在发布时发生并且未附加到调试器(日志消息在附加到调试器时会导致长时间延迟,仅此一项就会导致像这样的打嗝)
-
使用 Instruments 分析您的代码,看看您是否无意中一次使用了大量 CPU 或
-
增加缓冲区大小,这样 PD 就不再需要 CPU。
434511
我在正在开发的应用中遇到了同样的症状。我确实设法在早期确定了一些事情。我最近的更改涉及在应用程序初始化期间向 pd 发送大量消息。我在调试时注意到,当我减少发送的消息量时,声音得到了改善。另外,我在模拟器中没有看到这个,只在设备上看到。
如果您增加可以生成的补丁数量,则 libpd 示例 PolyPatch 在这种情况下非常有用。我发现声音随着打开许多补丁而破裂,与我的应用程序中的方式完全相同。这很简单,使用 libpd 的开销会影响性能。同样清楚的是,简化补丁(因此它包含更少的对象)会影响性能。但到目前为止,最大的成功是创建一个新的、单独的补丁。所以你不会想要创建大量的补丁。调试当然也需要付出代价。
就采样率而言,44.1khz 几乎可以在任何地方使用(这也是 pd 标准)。没有什么可以阻止你在 xcode 中调试 libpd 代码,我已经做过几次了。除此之外,还有调试补丁的问题。您可以直接在 pd 中使用对象的测试版本设置补丁,或者您应该能够设置 libpd 以查看与通常在控制台的 pd 主窗口中看到的相同的输出(您只需要确保你有这样的
1
| [PdBase setDelegate:_dispatcher]; |
在您的代码中 - 当然都在 dox 中)。然后,您只需根据需要在补丁中添加打印消息...
希望它有所帮助,并且在 3 个月后仍然有用...!
-
我对 PD 一无所知,但键盘的外观似乎可能导致您因某种原因而缺乏 CPU。你可以试试:
-
验证这仍然会在发布时发生并且未附加到调试器(日志消息在附加到调试器时会导致长时间延迟,仅此一项就会导致像这样的打嗝)
-
使用 Instruments 分析您的代码,看看您是否无意中一次使用了大量 CPU 或
-
增加缓冲区大小,这样 PD 就不再需要 CPU。
434511
我在正在开发的应用中遇到了同样的症状。我确实设法在早期确定了一些事情。我最近的更改涉及在应用程序初始化期间向 pd 发送大量消息。我在调试时注意到,当我减少发送的消息量时,声音得到了改善。另外,我在模拟器中没有看到这个,只在设备上看到。
如果您增加可以生成的补丁数量,则 libpd 示例 PolyPatch 在这种情况下非常有用。我发现声音随着打开许多补丁而破裂,与我的应用程序中的方式完全相同。这很简单,使用 libpd 的开销会影响性能。同样清楚的是,简化补丁(因此它包含更少的对象)会影响性能。但到目前为止,最大的成功是创建一个新的、单独的补丁。所以你不会想要创建大量的补丁。调试当然也需要付出代价。
就采样率而言,44.1khz 几乎可以在任何地方使用(这也是 pd 标准)。没有什么可以阻止你在 xcode 中调试 libpd 代码,我已经做过几次了。除此之外,还有调试补丁的问题。您可以直接在 pd 中使用对象的测试版本设置补丁,或者您应该能够设置 libpd 以查看与通常在控制台的 pd 主窗口中看到的相同的输出(您只需要确保你有这样的
1
| [PdBase setDelegate:_dispatcher]; |
在您的代码中 - 当然都在 dox 中)。然后,您只需根据需要在补丁中添加打印消息...
希望它有所帮助,并且在 3 个月后仍然有用...!
我在正在开发的应用中遇到了同样的症状。我确实设法在早期确定了一些事情。我最近的更改涉及在应用程序初始化期间向 pd 发送大量消息。我在调试时注意到,当我减少发送的消息量时,声音得到了改善。另外,我在模拟器中没有看到这个,只在设备上看到。
如果您增加可以生成的补丁数量,则 libpd 示例 PolyPatch 在这种情况下非常有用。我发现声音随着打开许多补丁而破裂,与我的应用程序中的方式完全相同。这很简单,使用 libpd 的开销会影响性能。同样清楚的是,简化补丁(因此它包含更少的对象)会影响性能。但到目前为止,最大的成功是创建一个新的、单独的补丁。所以你不会想要创建大量的补丁。调试当然也需要付出代价。
就采样率而言,44.1khz 几乎可以在任何地方使用(这也是 pd 标准)。没有什么可以阻止你在 xcode 中调试 libpd 代码,我已经做过几次了。除此之外,还有调试补丁的问题。您可以直接在 pd 中使用对象的测试版本设置补丁,或者您应该能够设置 libpd 以查看与通常在控制台的 pd 主窗口中看到的相同的输出(您只需要确保你有这样的
1
| [PdBase setDelegate:_dispatcher]; |
在您的代码中 - 当然都在 dox 中)。然后,您只需根据需要在补丁中添加打印消息...
希望它有所帮助,并且在 3 个月后仍然有用...!
我对 PD 一无所知,但键盘的外观似乎可能导致您因某种原因而缺乏 CPU。你可以试试:
-
验证这仍然会在发布时发生并且未附加到调试器(日志消息在附加到调试器时会导致长时间延迟,仅此一项就会导致像这样的打嗝)
-
使用 Instruments 分析您的代码,看看您是否无意中一次使用了大量 CPU 或
-
增加缓冲区大小,这样 PD 就不再需要 CPU。
- 绝对值得看看 CPU 在噼啪作响时发生了什么。 .第 3 点也值得研究(如果我们确实受到 CPU 限制)。谢谢。
-
"噼啪声"几乎可以肯定是由于发声器"饿死"了。确切的原因很难说,尤其是在不了解 iOS/iPhone 声音机制内部的情况下。可能是生成器硬件没有足够快地处理中断,也可能是软件无法足够快地填充中间队列。