ios - iOS“默认” UIWebView/WebKit上的WebAudio支持

标签 ios cordova uiwebview web-audio-api hybrid-mobile-app

欢迎提出任何改进问题或标题的建议。

首先是客观问题,完整的问题如下:

  • 一个Cordova项目将如何确定WebKit的哪个“版本”和/或WebAudio API的哪个构建/版本?我是Objective-C和XCode的完全新手,如果对此有明显的答案,请原谅我。
  • 是否可以使用最新版本的WebKit来构建Cordova应用程序以支持最新的WebAudio实现?
  • 有点主观,但是鉴于我的应用程序要求,任何人都可以评论我可以研究的WebAudio替代品,以及这些替代品在实践中如何工作?不幸的是,我为此应用程序在Javascript / HTML上进行了大量投资,但是需要考虑,即使进入Objective-C重写应用程序或构建本机扩展(插件)是否也会取得成果。

  • 这些要求基本上是:
  • 播放简短的音频样本(最多2-3s),延迟小于50ms以响应UI。
  • 延迟需要从最终标注中确定。也就是说,从最终调用.playSound(...)开始,不能再有其他可变的延迟。这是给定序器的。
  • 加载MP3或OGG样本(不是原始音频)。
  • 可以动态加载和卸载样本集。

  • 我知道的iOS唯一选项是Flash / AIR,带有HTMl5音频的Javascript,带有WebAudio的Javascript和本机Objective-C。最后一个包括与Cordova一样的本机扩展/插件。

    问题的详细描述如下。

    我碰壁了,使用Javascript为iPad开发吉他应用程序,并且陷入了一些糟糕的解决方案。该应用程序使用WebAudio来创建波形表合成器,并实时响应用户输入。回放的核心功能可能会导致约100-200ms的延迟,但应用程序的感觉和某些辅助功能依赖于响应速度更快的约10-50ms延迟。

    我(不明智,是的)完全在台式机Chrome中开发了该应用程序,并在iOS Safari中进行了一些测试,这鼓励了我一切正常。我(不明智地)推迟了使用Cordova / Phonegap或CocoonJS进行的令人不快的工作,因为我认为快速迭代开发要比在(咳嗽)目标平台上进行测试驱动重要。

    比找出所有无法在目标平台上运行的代码更糟糕的是什么?发现很难确定您的代码是否可以在目标平台上工作,因为构建和调试非常麻烦...

    我遇到的问题,如果确实如此,出乎意料:
  • 使用Cordova进行构建时,应用无法初始化。我没有控制台输出。 org.apache.cordova.console插件偶尔会起作用,我还无法弄清楚这是否可以解决(其他人也有类似问题)。
  • 我可以打开Safari并附加一个远程开发者控制台,但是在应用加载和初始化之前无法执行此操作。再次重申,很难弄清楚WebAudio会发生什么。
  • 在某些运行中,我得到了一个测试WebAudio应用程序来产生声音;在其他运行中,它是无声的。没有控制台输出可帮助识别这一点。
  • 从webkitAudioContext迁移到最终的无前缀AudioContext涉及一些小的代码更改。但是,(显然)前者仍由Cordova所构建的WebKit版本使用(或所有本机iOS应用程序都可以访问的版本?),而后者则用于(远远更远,更有用,更可靠)。开发)的最新版本的Chrome。因此,似乎我必须编写一些可以使用API​​的任何版本的适配器代码,但是却没有可靠的方法可以在目标平台上调试该API。
  • 互连网上的很多(不是很最近的)ter不休让我想知道WebAudio是否将使用其较早版本的WebKit在混合应用程序中充分发挥性能(假设我最终将解决上述所有问题,并使该应用程序发出声音) 。我花了大量时间进行分析和优化,以使其能够在Safari中正常运行,但没有意识到这可能与独立应用程序的性能(或就此而言,性能更好)有很大不同。
  • 不特定于WebAudio,但是由于Cordova多次复制了(不变的)音频样本,我的应用需要花费几分钟来构建每次更改。这是告诉我为什么Cordova / Phonegap如此痛苦的声誉的众多危险信号之一。

  • 最重要的是,我被困在一个地方,可能需要花费大量精力来确定是否应该做出更大的努力来追求已经投资的技术选择(WebAudio,JS / HTML),并且如果有相关的人会喜欢的经验可以帮助我预测这一努力的结果。我可以开始学习Objective-C并学习为Cordova插件编写本机代码(至少有两个现有项目支持简单的本机音频)。同样,我可以朝着完全重写Flash的方向发展,这将解决应用程序中的其他问题(例如,管理可伸缩UI并简化代码和构建管理),但据我所知,可以保证较差的音频延迟,并且当然会有其他问题。如果可以使现有代码库在iOS(iPad 2及更高版本)上运行,我会喜欢的。不幸的是我没有几个月要重新开始,但是如果重新开始是唯一可行的选择……

    任何帮助表示赞赏。

    最佳答案

    好吧,首先,我可以为您提供一些调试提示:

    我从我自己的经验中知道,在deviceReady被解雇之前出现的这种“加载错误”确实很麻烦,而且很难找到。

    您可以尝试两件事:

    首先,要附加到Safari远程调试器,请在初始化WebAudio内容之前编写alert('test');。诀窍在于,只要您不处理警报消息,应用程序的执行就会停止。因此,有足够的时间连接远程调试器,处理警报消息并从那里获取远程输出。

    您可以尝试调试的另一件事是另一个远程调试器weinre。要设置weinre,请通过sudo npm -g install weinre安装它,在开发人员计算机上打开weinre localhost实例,然后将<script src="http://<your developer machine IP>:8080/target/target-script-min.js#anonymous"></script>行粘贴到index.html中。如果我没记错的话,那么必须在包含任何其他脚本之前插入这一行。

    使用浏览器连接至http://localhost:8080,在其中找到远程控制台并启动您的应用程序。使用此工具,我在代码中发现了一些难以发现的问题。

    我在WebAudio方面不能为您提供具体帮助,但是您是否看过Low Latency Plugin for Phonegap?不久前,当我在Phonegap项目中遇到音频延迟问题时,我偶然发现了它,事实证明它对我很有帮助。

    在链接页面上观看YouTube演示。通过其预加载音频的功能和更多改进,它的性能很高,看上去非常适合您的用例。而且,当然,您不需要自己编写本机代码。

    关于ios - iOS“默认” UIWebView/WebKit上的WebAudio支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701371/

    相关文章:

    ios - iTunes 连接中的应用程序名称和设备上显示的名称应该相同吗?

    javascript - 是否有类似 Email Composer for Android 的 Phonegap 插件?

    android - 如何在 Manifest.json 中设置 minSdkVersion (Android/Ionic)

    ios - App Store 提交/分发错误 "failed to open ssh session"

    android - Cocos2d-x:可以使用 HTML(UIWebView)吗?

    ios - 如何将源代码从 xcode 转移到另一个开发人员?

    ios - Swift - 带导航栏的 UITableViewController

    iOS - TextField 推荐清除按钮行为

    iphone - 如何在 viewWillDisappear 中安全地关闭正在加载的 UIWebView?

    ios - MonoTouch 中的简单融合图不起作用