HTML5 音频缓冲区卡住

2024-04-15

我使用 HTML5 webkitAudioContext 使用以下代码获取用户麦克风的实时级别:

var liveSource;

function getLevel(){
    var context = new webkitAudioContext();  

    navigator.webkitGetUserMedia({audio: true}, function(stream) {

       liveSource = context.createMediaStreamSource(stream);
       liveSource.connect(context.destination);

       var levelChecker = context.createJavaScriptNode(4096, 1 ,1);
       liveSource.connect(levelChecker);

       levelChecker.connect(context.destination);

       levelChecker.onaudioprocess = function(e) {

            var buffer = e.inputBuffer.getChannelData(0);


        var maxVal = 0;
        // Iterate through buffer to check if any of the |values| exceeds 1.
        for (var i = 0; i < buffer.length; i++) {
            if (maxVal < buffer[i]) {
                maxVal = buffer[i];
            }
        }
        if(maxVal <= 0.01){
            console.log(0.0);
        } else if(maxVal > 1){
            console.log(1);
        } else if(maxVal > 0.2){
            console.log(0.2);
        } else if(maxVal > 0.1){
            console.log(0.1);
        } else if(maxVal > 0.05){
            console.log(0.05);
        } else if(maxVal > 0.025){
            console.log(0.025);
        } else if(maxVal > 0.01){
            console.log(0.01);
        }
};
});

 }

getLevel();

如果您将其复制并粘贴到控制台中,然后在麦克风附近单击手指(假设您已启用麦克风输入),您会看到它工作了几秒钟,然后突然停止。它不会报告任何错误。谁能解释为什么会发生这种情况?谢谢

See http://labs.dinahmoe.com/dynamicmusicengine/ http://labs.dinahmoe.com/dynamicmusicengine/例如,级别正常工作。


我有同样的问题,但终于得到了解决方案!问题是 javascript 节点 cicle。 我建议您首先更改 createJavaScriptNode() :

var levelChecker = context.createScriptProcessor(4096, 1 ,1);

垃圾收集器对“levelChecker”变量及其 onaudioprocess 存在问题,因此您必须将 scriptprocessor 或 onaudioProcess 回调绑定到窗口。这是神圣的解决方案:

 levelChecker.onaudioprocess = window.audioProcess = function(e) { ...

只需在该行中添加 window.audioProcess ,您将永远不会再处理 tat 问题。

您可以在这里找到更多信息:http://lists.w3.org/Archives/Public/public-audio/2013JanMar/0304.html http://lists.w3.org/Archives/Public/public-audio/2013JanMar/0304.html

希望这对你有用!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML5 音频缓冲区卡住 的相关文章

随机推荐

  • Apache 重写规则将所有请求重定向到包含另一个 .htaccess 的子目录和重写规则

    我的网络服务器上有公共和私人项目 我将所有公开内容放入网络服务器根目录中 并且我有一个private我只能从本地网络访问该文件夹 由其中的 htaccess 设置 我想简单地将每个私人项目放在private文件夹并自动处理请求 但希望 UR
  • 检查字符串列表是否可以链接

    Question 实现一个功能bool chainable vector
  • 如何在Android移动网站中强制使用数字键盘

    我有一个移动网站 它有一些 HTMLinput其中的元素 如下所示
  • CMake:如何标准化路径? [复制]

    这个问题在这里已经有答案了 是否有一种可靠的方法来标准化 CMake 中的路径 例子 Let s assume that an environment variable MY ROOT DIR is set that points to s
  • Windows Phone 8 上“无法安装公司应用程序”

    我为 Windows Phone 8 开发了一个公司应用程序 并完成了所有建议的步骤来设置它进行安装 我拥有 Symantec 代码签名证书 并且已生成应用程序注册令牌和签名的 XAP 并将其托管在 OneDrive 上的公共文件夹中 我使
  • 如何将 UWP StorageFile 转换为 .NET FileInfo?

    现在 UWP 支持 NET Standard 2 0 它可以访问更多 System IO 命名空间 包括Fileinfo https msdn microsoft com en us library system io fileinfo v
  • 在 ember 数据中,在 forEach 循环中调用 destroyRecord 会破坏循环吗?

    我正在为我的一个项目开发一个简单的标签模型 我已经在 Angular 中实现了类似的东西 但我想在 Ember 中尝试一下 型号代码如下 Tag DS Model extend name DS attr string user DS bel
  • Amazon s3 putObject 标记不起作用

    我正在尝试使用 putObject 方法上传到 Amazon s3 时添加标签 根据文档 我已将标签创建为字符串类型 我的文件已上传到 Amazon s3 但我无法使用提供的标签数据查看文件对象的对象级别标签 根据文档遵循以下代码示例 va
  • 使 td 固定大小(宽度,高度),而其余 td 可以扩展

    您知道如何固定表格中 td 宽度和高度的大小 从而允许表格上的其余 td 根据需要扩展吗 问题是 当 td 内部有数据时 它不会比数据缩小得更多 但如果为空 它会一直缩小 如果扩大窗口 td 也会扩大 我想保留 td 的大小 无论您扩展还是
  • Ruby 中的“+=”(加等于)是什么意思? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 本地化 Spring Boot 验证消息中的消息参数未解析

    我正在使用构建一个项目春季启动2 1 8 我有spring boot 启动器 web在我的 POM 中 我可以看到 Maven 拉动休眠验证器 6 0 17到类路径上 我的消息位于资源文件夹中 并且它们似乎已正确查找 因此当我更改区域设置时
  • 如何在android中制作文字动画?

    在我的 Android 应用程序中 我试图显示一个 正在加载 文本 该文本每 100 毫秒就会更改一次 每 100 毫秒后就会增加一个点 所以首先它会像 正在加载 再过 100 毫秒 它将变为 正在加载 当变为 正在加载 时 该过程将终止并
  • 菜单栏隐藏时 JMenuItem 加速器不起作用

    这个问题是后续问题这个问题 https stackoverflow com questions 18093773 jmenubar selectionmodel changelistener only fires once 我有一个JMen
  • 如何在 Windows 的 Java 中启用小型转储

    我不断收到并看到此消息 无法写入核心转储 Windows 客户端版本默认不启用小型转储 所以我需要知道 如何在 Java 中启用小型转储 在 Windows 计算机上 可选 一旦获得小型转储 如何解释它 我试图找到这两个问题的答案 但我发现
  • ASP.NET vNext 全局配置访问

    正确 推荐的访问方式是什么config jsonASP NET vNext 中的文件 或存储配置的其他位置 In the Startup类 我像这样设置配置 public class Startup public IConfiguratio
  • 重置本地git仓库

    几天前 我在 Github 上创建了一个存储库 然后按照步骤将我现有的解决方案添加到其中 我不知道我做错了什么 但是经过一些随机的 git add 命令等等之后 我现在在 Windows 的 github 中收到消息 failed to s
  • 字典和对

    在 R 中 我想知道我是否可以有一本字典 在某种意义上像 python 其中我有一对 i j 作为具有相应整数值的键 我还没有看到一种干净或直观的方法来构建它R 我的字典的视觉效果是 1 2 gt 1 1 3 gt 3 1 4 gt 4 1
  • 使用 Django、webpack、reactjs、react-router 解耦前端和后端

    我正在尝试在项目中解耦我的前端和后端 我的前端由以下组成reactjs和路由将完成react router 我的后端如果做成形式Django我计划使用前端对 Django 进行 API ajax 调用 现在我不确定如何让这两端正确地相互通信
  • 屏幕旋转后,findFragmentById() 返回一个片段,即使布局内没有这样的 ID

    我有两种方向的一种布局 1 个横向和 1 个纵向 layout land main xml有两个片段
  • HTML5 音频缓冲区卡住

    我使用 HTML5 webkitAudioContext 使用以下代码获取用户麦克风的实时级别 var liveSource function getLevel var context new webkitAudioContext navi