准确的音频时序
Accurate audio timing
我目前正面临着编写一个应用程序(IOS 和 Android)的任务,其中一个功能是鼓手的节拍器。
我不想有多个项目,所以我决定使用 cordova。我偶然发现了很多问题并解决了其中一些问题:
- 不能使用 setInveral() 或类似的方法进行准确计时
- 不能使用任何其他类型的 "triggering" 音频
- cordova NativeAudio 插件在真正准确的计时方面也做得不好
所以我遇到了 Web Audio API 大多数平台上的 Android Stock 浏览器不支持它所以我找到了人行横道项目支持 Web Audio API.
好消息是我的节拍器测试在 chrome 桌面浏览器上运行良好。它与我的硬件节拍器并行运行时绝对准确。如果我使用当前 Android Chrome 应用程序打开它,它也运行良好。
它也可以在 android cordova 应用程序(Android 4.3.1,Galaxy Nexus)上运行,但有两件事我还没有搞清楚:
1.) 播放点击声音时有时听起来有点滞后(好像一次触发两次但并非总是如此)更重要的是:
2.) 节奏似乎是恒定的,但与具有相同设置的台式电脑相比,速度慢了大约 10-20 bpm。
很难将其放入 fiddle 但我自己将其托管在:
http://gonzales.capella.uberspace.de/sound/
您可以通过 chrome 调试器找到所有源代码。
任何关于为什么这在 Android 设备上 运行 变慢的提示以及我如何解决这个问题的任何提示都会有很大帮助。
"Temp consistently slower" 听起来像是采样率转换问题。无论如何,循环生成的音频文件是可行的,但效率有点低 - 我建议采用一种更像我在 http://www.html5rocks.com/en/tutorials/audio/scheduling/.
中详述的策略
顺便说一句 - 从 KitKat 开始,现有的 android 浏览器现在是 Chrome。当然,这并没有影响所有 Android,但我们正在实现目标。
我目前正面临着编写一个应用程序(IOS 和 Android)的任务,其中一个功能是鼓手的节拍器。
我不想有多个项目,所以我决定使用 cordova。我偶然发现了很多问题并解决了其中一些问题:
- 不能使用 setInveral() 或类似的方法进行准确计时
- 不能使用任何其他类型的 "triggering" 音频
- cordova NativeAudio 插件在真正准确的计时方面也做得不好
所以我遇到了 Web Audio API 大多数平台上的 Android Stock 浏览器不支持它所以我找到了人行横道项目支持 Web Audio API.
好消息是我的节拍器测试在 chrome 桌面浏览器上运行良好。它与我的硬件节拍器并行运行时绝对准确。如果我使用当前 Android Chrome 应用程序打开它,它也运行良好。
它也可以在 android cordova 应用程序(Android 4.3.1,Galaxy Nexus)上运行,但有两件事我还没有搞清楚:
1.) 播放点击声音时有时听起来有点滞后(好像一次触发两次但并非总是如此)更重要的是:
2.) 节奏似乎是恒定的,但与具有相同设置的台式电脑相比,速度慢了大约 10-20 bpm。
很难将其放入 fiddle 但我自己将其托管在:
http://gonzales.capella.uberspace.de/sound/
您可以通过 chrome 调试器找到所有源代码。
任何关于为什么这在 Android 设备上 运行 变慢的提示以及我如何解决这个问题的任何提示都会有很大帮助。
"Temp consistently slower" 听起来像是采样率转换问题。无论如何,循环生成的音频文件是可行的,但效率有点低 - 我建议采用一种更像我在 http://www.html5rocks.com/en/tutorials/audio/scheduling/.
中详述的策略顺便说一句 - 从 KitKat 开始,现有的 android 浏览器现在是 Chrome。当然,这并没有影响所有 Android,但我们正在实现目标。