如何通过javascript/html5播放wav音频字节数组?

2023-12-24

我正在使用以下方法来播放包含 wav 数据的字节数组。该函数是从 GWT 项目调用的。

这个函数会播放声音,但听起来像是某种地狱怪物。采样率绝对是正确的(声音是由 neospeech 生成的),并且我已经尝试了 numberOfSamples 的各种值,这似乎代表了音频数据的长度。

numberOfSamples 的值大于 30000 将播放音频文件的完整长度,但它是乱码并且很糟糕。

那么,我做错了什么?

function playByteArray(byteArray, numberOfSamples) {
    sampleRate = 8000;

    if (!window.AudioContext) {
        if (!window.webkitAudioContext) {
            alert("Your browser does not support any AudioContext and cannot play back this audio.");
            return;
        }
        window.AudioContext = window.webkitAudioContext;
    }

    var audioContext = new AudioContext();

    var buffer = audioContext.createBuffer(1, numberOfSamples, sampleRate);
    var buf = buffer.getChannelData(0);
    for (i = 0; i < byteArray.length; ++i) {
        buf[i] = byteArray[i];
    }

    var source = audioContext.createBufferSource();
    source.buffer = buffer;
    source.connect(audioContext.destination);
    source.start(0);
}

我想出了如何做我在问题中描述的事情,并认为我应该为了其他人的利益而发布它。代码如下。我调用 playByteArray 并向其传递一个包含 pcm wav 数据的字节数组。

window.onload = init;
var context;    // Audio context
var buf;        // Audio buffer

function init() {
if (!window.AudioContext) {
    if (!window.webkitAudioContext) {
        alert("Your browser does not support any AudioContext and cannot play back this audio.");
        return;
    }
        window.AudioContext = window.webkitAudioContext;
    }

    context = new AudioContext();
}

function playByteArray(byteArray) {

    var arrayBuffer = new ArrayBuffer(byteArray.length);
    var bufferView = new Uint8Array(arrayBuffer);
    for (i = 0; i < byteArray.length; i++) {
      bufferView[i] = byteArray[i];
    }

    context.decodeAudioData(arrayBuffer, function(buffer) {
        buf = buffer;
        play();
    });
}

// Play the loaded file
function play() {
    // Create a source node from the buffer
    var source = context.createBufferSource();
    source.buffer = buf;
    // Connect to the final output node (the speakers)
    source.connect(context.destination);
    // Play immediately
    source.start(0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过javascript/html5播放wav音频字节数组? 的相关文章

  • 一个 Next.js 路由中的两个不同子域

    我想使用构建一个新平台Next js https nextjs org React js https reactjs org and 反应路由器 https reacttraining com react router web guides
  • php在html页面中创建额外空间

    我是网络开发新手 我真的被这个愚蠢的问题困扰了 当我在 html 代码之前插入 php 代码时 如下所示 它在我的页面顶部创建了额外的空白空间 并将整个内容 推下 是否有可能以某种方式避免创建额外的空间 如果 php 代码位于 html 的
  • 当我尝试转发电子邮件时,时事通讯无法隐藏 Gmail 上的响应内容

    我正在尝试写一份时事通讯 但当我测试时 我无法隐藏响应式内容GMail On Outlook and Yahoo一切正常 但如果我尝试转发电子邮件 隐藏的内容就会可见 我测试使用 putsmail https putsmail com gt
  • Relay 中的嵌套片段数据始终相同

    我是 Relay 新手 并且遇到了片段上嵌套数据的问题 当我在 graphiql 中进行测试时 以下查询返回正确的数据 因此我确信我的架构是正确的 viewer customers name billing address city 但是
  • 正则表达式 - 避免表达式中出现字符串

    我正在尝试创建一个应该匹配以下情况的正则表达式 如果单词完全匹配 first second third 那么匹配应该失败 但如果它周围有任何字符 那么应该匹配该字符串 我还需要避免字符串中的某些字符集 如果这些字符是字符串的一部分 则匹配结
  • 如何检查jquery数据表中的每个复选框?

    我有一个第一列带有复选框的表格 我使用 jQuery DataTable 插件显示我的表格 我制作了 2 个链接来选择 取消选择每个复选框 这是选择全部的一个 a href Select all a 和 JavaScript functio
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • 页面不会居中对齐

    我遇到了 CSS 问题 http www luukratief design nl dump parallax index html http www luukratief design nl dump parallax index htm
  • chrome 扩展 - 将数据从后台传递到自定义 html 页面

    创建浏览器扩展 我必须从 background js 打开新选项卡并将 JSON 数据传递到这个新选项卡 在新选项卡中 我使用传递的 JSON 数据来操作 渲染 DOM 下面是我的 background js 的一部分 我在其中使用自定义
  • Google 地图 v3 中标准缩放控件的样式

    有没有一种简单的方法可以在 Google Maps JavaScript API v3 中设置缩放控件的样式 我想要的只是改变标准图像 http maps gstatic com intl en ALL mapfiles mapcontro
  • while 循环元素状态 cypress

    我有一个问题 我想单击一个按钮直到它消失 但次数可能会有所不同 所以我想检查可见性状态 当可见 true时单击按钮 当可见 false时结束测试 但问题是我不知道如何循环从获取元素到末尾的所有链 单击按钮一次 由于中断而停止 如果我删除中断
  • Tween JS 基础知识之三个 JS 立方体

    我是 Tween JS 的新手 尝试使用 Tween 制作一个向右移动的简单动画 下面是我在 init 函数中的代码 我使用的是三个 JS var geometry new THREE CylinderGeometry 200 200 20
  • 如何使用 .append() 将 React 组件附加到 HTML 元素

    我正在尝试对我的博客实现无限滚动 我有 const articlesHTML document querySelector articles 作为容器 每次点击装载更多按钮 我想将新文章附加到主 html 元素 如下所示 const res
  • Javascript - 如何计算数字的平方?

    使用 JavaScript 函数 function squareIt number return number number 当给定数字 4294967296 时 函数返回 18446744073709552000 每个人都知道真正的答案是
  • Jade(当前称为“Pug”)模板引擎中的循环

    我想使用一个简单的循环 例如for int i 0 i lt 10 i 如何在 Jade 引擎中使用它 我正在使用 Node js 并使用expressjs 框架 例如 for var i 0 i lt 10 i li array i 你可
  • 在 中动态添加链接样式表 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如何将链接
  • 使用 dnode 从服务器向客户端发送消息

    几个月前 我发现了 nowjs 和 dnode 并最终使用了 nowjs 并且https github com Flotype nowclient https github com Flotype nowclient 用于客户端 服务器双向
  • 如何在 ChartJS 中创建自定义图例

    我需要使用 ChartJS 库为我的圆环图创建自定义图例 我已经使用 ChartJS 提供的默认图例创建了甜甜圈 但我需要一些修改 我希望其价值高于汽车名称 另外 我不喜欢粘性图例 我想将其与甜甜圈分开 这样我就可以更改字体 框的样式 例如
  • 地址更改时如何停止 Angular 重新加载

    我正在使用 Angular 的scrollTo and anchorScroll像这样 app controller TestCtrl function scope location anchorScroll scope scrollTo
  • html 表格顶部对齐?

    我怎样才能让图像和内容向右顶部对齐 如你所见 我尝试了 valign top table border 0 cellspacing 0 cellpadding 0 tbody tr valign top td valign top img

随机推荐

  • 如何使用 cefsharp 将输入传递给 javascript 函数

    我正在尝试将 CefSharp WebView 添加到我的 WPF 应用程序中 以代替我们使用的原始 WebBrowsers WebBrowser 有一个 InvokeScript 函数 http msdn microsoft com en
  • 在java中执行linux命令并将输出显示到html表

    我有jsp代码df h用于在网站上显示磁盘信息 如何使用表格将输出显示为 html 代码如下 String disk String line String process Process p BufferedReader input p R
  • 如何在 C# 中从单个完整路径创建多个目录?

    如果您有如下完整路径 C dir0 dir1 dir2 dir3 dir4 您将如何最好地实现它以便所有目录都存在 BCL中有这个方法吗 如果没有 最优雅的方法是什么 我会打电话Directory CreateDirectory C dir
  • 在Spring security中使用mysql数据库对用户进行身份验证?

    我想使用 Spring security 对我的 Web 应用程序中的用户进行身份验证 由于我不是 Spring 框架的成熟用户 我无法清楚地了解如何进行配置设置以使用 jdbc user service 我已经完成了以下配置 但它不起作用
  • 如何让 NHibernate 忽略 POCO 中的属性

    我们有 POCO 类似 public class Person public Guid PersonID get set public string FirstName get set public string LastName get
  • 使用 Powershell 脚本进行静默安装

    我正在尝试使用 PowerShell 无提示脚本安装一个客户端软件 下面是我创建的脚本 它不起作用并抛出如下错误 无法验证参数 ArgumentList 上的参数 参数为 null 空或参数集合的元素包含 null 值 提供一个不包含任何空
  • JavaScript DOM 对象到 jQuery 对象

    如何将 JavaScript DOM 对象转换为 jQuery 对象 tr function changeStatus myObject XXX removeClass XXX应该写什么 我知道我可以使用 id 和 id 选择器来解决问题
  • 缺少 Style.Triggers 和 x:Type。为什么?

  • 向服务器发送视频和音频流

    我正在尝试开发一个系统 其中有两个客户端可以通过服务器从浏览器相互视频聊天 第一个客户端将其视频流发送到服务器 服务器将其发送到第二个客户端 此外 服务器将客户端的流保存为视频文件 我使用了这个 WebRTC 示例 https github
  • 平台工具集 v140 和 v140_xp 之间有什么区别?

    以结尾的平台工具集之间有什么区别 xp以及那些没有的 例如 v140 vs v140 xp 为什么没有以以下结尾的工具集 vista or 7 当我在 Windows 7 上编译程序时v140工具集 它可以在 Windows XP Vist
  • 禁用 nginx 日志

    如何禁用 nginx 日志记录而不出现严重错误 error log off 不起作用 只是创建文件名 off 真的 不是开玩笑 error log dev null 不支持 操作系统 freebsd 我需要禁用子域的日志记录 http wi
  • 计算数组的位/字节大小

    我有一个 Javascript 数组 其中有很多子数组 计算数组拥有多少位 字节的最佳 最简单方法是什么 我要将数组发送到我的 PHP 服务器 它只能有 5kB 大 有没有本地方法 我对位不太熟悉 如果我理解正确的话 1 个字符适合 8b
  • Python:并行执行cat子进程

    我正在运行几个cat zgrep远程服务器上的命令并单独收集其输出以进行进一步处理 class MainProcessor mp Process def init self peaks array super MainProcessor s
  • 如何查找 Qt SDK 中使用的当前 QtWebKit 版本?

    我想知道 Qt SDK 中使用的 QtWebKit 模块的版本 谁能帮我吗 1 QTWEBKIT VERSION STR 宏给出 QtWebKit 版本 2 qWebKitVersion 给出使用的 webkit 版本
  • 如何将写入流 1 的内容通过管道传送到流 2 中?

    这是我的场景 producer WriteStream stream consumer ReadStream stream 我想要的东西允许由生成的字节producer将逐步转移至consumer 我可以将所有内容写入MemoryStrea
  • 如何将 Hashmap> 膨胀到 Recyclerview 中

    我希望键字符串必须充当标题 并且列表必须在该映射键下膨胀RecyclerView 谢谢你的帮助 public class Adapter extends RecyclerView Adapter
  • MultiFieldQueryParser 中的提升因子

    我可以使用不同的因素来提升 MultiFieldQueryParser 中的不同字段吗 另外 我可以分配给字段的最大提升因子值是多少 万分感谢 埃德 MultiFieldQueryParser有一个接受增强图的 构造函数 1 你可以像这样使
  • WUA API 无法卸载更新

    我在使用 Windows Update Agent WUA API 时遇到问题 每当我尝试使用卸载更新时IUpdateInstaller IsForced True IUpdateInstaller BeginUninstall 我越来越W
  • Angular 2 Jasmine 测试,加载 app.component.ts 中的所有组件?

    我正在开发一个小型测试应用程序 以更好地学习 Angular 2 和 Angular 2 中的单元测试 来自react Jest 背景 将所有组件都包含在 app component ts 中感觉很奇怪 这就是我到目前为止所拥有的组件层次结
  • 如何通过javascript/html5播放wav音频字节数组?

    我正在使用以下方法来播放包含 wav 数据的字节数组 该函数是从 GWT 项目调用的 这个函数会播放声音 但听起来像是某种地狱怪物 采样率绝对是正确的 声音是由 neospeech 生成的 并且我已经尝试了 numberOfSamples