草庐IT

关于 ios:播放 libPd 补丁期间的噼啪声 – 尤其是。与键盘演示有关

codeneng 2023-03-28 原文

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 声音机制内部的情况下。可能是生成器硬件没有足够快地处理中断,也可能是软件无法足够快地填充中间队列。

    有关关于 ios:播放 libPd 补丁期间的噼啪声 – 尤其是。与键盘演示有关的更多相关文章

    1. ruby - 将差异补丁应用于字符串/文件 - 2

      对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

    2. ruby - 如何验证 IO.copy_stream 是否成功 - 2

      这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

    3. Ruby 文件 IO 定界符? - 2

      我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

    4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

      1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

    5. ruby - 为什么不能使用类IO的实例方法noecho? - 2

      print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

    6. ruby-on-rails - 关于 Ruby 的一般问题 - 2

      我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

    7. 多种方法期间的 Ruby 救援异常 - 2

      我构建了一个简单的银行应用程序,它能够执行通常的操作;充值、提现等我的Controller方法执行这些操作并拯救由帐户或其他实体引发的异常。以下是Controller代码中使用的一些方法:defopen(type,with:)account=createtype,(holders.findwith)addaccountinit_yearly_interest_foraccountboundary.renderAccountSuccessMessage.new(account)rescueItemExistError=>messageboundary.rendermessageendde

    8. ruby-on-rails - 如何在记录更新期间从验证中排除密码字段? ( rails 3.0.4, ruby 1.9.2) - 2

      我有一个允许更新用户记录的表单。它包含:password和:password_confirmation字段,但我不希望在数据库中已存储加密密码时对它们运行验证。View文件中的字段:'ConfirmPassword'%>在互联网上搜索时,我发现了这段代码,我认为它是针对以前版本的Ruby/Rails的。(我会把它放在我的用户模型中。)validates_presence_of:password,:on=>create由于我的用户模型中密码验证的语法不同(如下),我对我需要的语法感到困惑。validates:password,:presence=>true,:confirmation=>

    9. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

      按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

    10. ruby - 关于 Ruby 中 Dir[] 和 File.join() 的混淆 - 2

      我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案

    随机推荐