如何使用网络音频 API 播放声音文件 Safari?

2024-01-22

我正在修改一个脚本来播放我在 Codepen 上找到的 mp3,以使其能够在 Safari 上运行。在 Firefox 和 Chrome 中它工作正常,但 Safari 抱怨:“未处理的承诺拒绝:类型错误:没有足够的参数 索引.html:25"

我读了https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/PlayingandSynthesizingSounds/PlayingandSynthesizingSounds.html https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/PlayingandSynthesizingSounds/PlayingandSynthesizingSounds.html这涉及到比我需要的更高级的东西。我只想播放 mp3 中的声音。不过,我需要网络音频,因为这是让它在 iOS Safari 上工作的唯一方法。

有谁知道如何让 Safari 开心吗?

https://codepen.io/kslstn/full/pagLqL https://codepen.io/kslstn/full/pagLqL

(function () {
    
  if('AudioContext' in window || 'webkitAudioContext' in window) {  
    // Check for the web audio API. Safari requires the webkit prefix.


  const URL = 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/123941/Yodel_Sound_Effect.mp3';
    
  var AudioContext = window.AudioContext || window.webkitAudioContext;
  var context = new AudioContext(); // Make it crossbrowser    
      
  const playButton = document.querySelector('#play');
    
  let yodelBuffer;

  window.fetch(URL)
    .then(response => response.arrayBuffer())
    .then(arrayBuffer => context.decodeAudioData(arrayBuffer))
    .then(audioBuffer => {
      yodelBuffer = audioBuffer;
    });
    
    playButton.onclick = () => play(yodelBuffer);

  function play(audioBuffer) {
    const source = context.createBufferSource();
    source.buffer = audioBuffer;
    source.connect(context.destination);
    source.start();
  }

}

}());
<button id="play">Yodel!</button>

Safari(Webkit) 不支持 BaseAudioContext.decodeAudioData() 基于 Promise 的语法。请参阅以下链接详细的浏览器兼容性

https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/decodeAudioData https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/decodeAudioData

因此,您需要使用旧的回调语法,如下所示。它适用于高于 6.0 的 Safari 和高于 10 的 Chrome

window.fetch(URL)
  .then(response => response.arrayBuffer())
  .then(arrayBuffer => context.decodeAudioData(arrayBuffer, 
                                               audioBuffer => {
                                                 yodelBuffer = audioBuffer;
                                                }, 
                                               error => 
                                               console.error(error)
                                              ))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用网络音频 API 播放声音文件 Safari? 的相关文章

  • 我怎样才能勾勒出文本字体?

    我想在边框 轮廓 中显示另一种颜色的文本 我正在尝试使用在 MapOverlayView 中显示文本 text drawAtPoint CGPointMake 0 30 withFont UIFont fontWithName Helvet
  • 如何使 d3 饼图响应式?

    我有一个 PIE 图表 它工作正常 但我无法使其具有响应能力和可调整大小 我需要它与移动浏览器和 iPad 等兼容 div div
  • JavaScript 将键添加到数组中的每个值

    我下面有这个数组 它由一个简单的数组组成 我想要完成的是放一把钥匙id在每个数组值前面以实现类似的效果 id a id b id c id d 有没有一种简单的方法可以做到这一点 任何帮助将不胜感激 谢谢 var test a b c d
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • Google 地图 API -> OpenGLES 崩溃

    日志是从 Crashlytics 粘贴的 对于许多用户来说 崩溃经常发生 据我所知 它与设备 iOS 版本无关 我在我的代码中找不到任何错误 这似乎是纯粹的库问题 是 Google 地图 API 错误吗 我可以做些什么来修复它 或者我应该在
  • NVActivityIndi​​catorView 仅适用于特定视图

    我正在使用这个库https github com ninjaprox NVActivityIndi catorView https github com ninjaprox NVActivityIndicatorView用于显示加载指示器
  • 如果没有 /// 标签,TypeScript 的“将 JavaScript 输出合并到文件中”选项无法推断出正确的脚本顺序

    我正在开发一个使用 将 JavaScript 输出合并到文件中 选项的 TypeScript 解决方案 我经常引用另一个文件中定义的项目 例如 In MyBaseClass ts export class MyBaseClass In My
  • 使用 JQuery 禁用和启用所有超链接

    我有以下禁用所有超链接的内容 但在事件发生后我想再次启用它们 我该如何执行此操作 a click function return false 我认为这不仅仅是将其设置为 true 那么简单 谢谢大家 不要以这种方式绑定 点击 处理程序 而是
  • ES6继承:使用`super`访问父类的属性

    JavaScript 的super关键字 当我在 Chrome Babel TypeScript 上运行代码时 得到了不同的结果 我的问题是哪个结果是正确的 规范的哪一部分定义了这种行为 下面的代码 class Point getX con
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • webpack中动态加载外部模块失败

    我正在尝试建立以下架构 一个核心 React 应用程序 它具有一些基本功能 并且能够在运行时加载其他 React 组件 这些额外的 React 组件可以按需加载 并且它们在构建核心应用程序时不可用 因此它们不能包含在核心应用程序的捆绑包中
  • 苹果企业程序分发问题[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这个问题涉及到Apple iOS 开发者企业计划 http developer apple com programs ios enterprise 我
  • Web组件中嵌套槽的内容不可见

    我有一个 Web 组件 它应该接受任意元素来包装其内容 虽然我可以在 Chrome 开发工具中看到插槽已正确分配 但 DOM 中什么也没有出现 以前有人见过这个问题吗 定义 class ExampleParent extends HTMLE
  • 呃!尝试将包发布到 npm 时出现 403

    我正在尝试将包发布到 npm 您可以在此处查看存储库 https github com biowaffeln mdx state https github com biowaffeln mdx state 我登录到 npmnpm login
  • 尝试使用 Javascript 解决对称差异

    我正在尝试找出对称的解决方案 使用 javascript 完成以下任务的差异 目标 接受未指定数量的数组作为参数 保留数组中数字的原始顺序 不删除单个数组中数字的重复项 删除数组中出现的重复项 因此 例如 如果输入是 1 1 2 6 2 3
  • 在故事板中的视图控制器之间滑动手势

    我希望添加左右滑动手势来在视图控制器之间进行更改 这是否可能 并且有没有一种简单的方法可以在故事板中执行此操作 谢谢 故事板允许您在两个视图控制器之间设置 Segues 我想说首先在视图之间附加 Segues 给它一个标识符 然后使用类似的
  • Swift 中的 UIAlert 自动消失?

    我有以下代码 Creates Alerts on screen for user func notifyUser title String message String gt Void let alert UIAlertController
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们
  • ThreeJS 中阴影的奇怪行为

    所以我有一个 ThreeJS 场景 并且添加了一些球体 多材质 我还添加了定向光 this light new THREE DirectionalLight 0xFFFFFF 1 this light position set 2 10 2
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo

随机推荐

  • update-alternatives:错误:arptables 的替代 /usr/sbin/arptables-legacy 未注册;不设置

    我在 Buster 主机上有 Debian 10 Buster KVM 来宾计算机 尝试切换到旧版iptables在以下虚拟机上Debian 维基 https wiki debian org iptables update alternat
  • 在 python 中使用鼻子进行并行化测试

    我有一个包含大量 py 文件的目录 例如 test 1 py test 2 py 等 每个文件都经过正确编写 可以与鼻子一起使用 因此 当我运行 notests 脚本时 它会找到所有 py 文件中的所有测试并执行它们 我现在想要并行化它们
  • 更改 svg 组元素中心

    我想将 svg 组的中心平移到其左上角 代替 x x gt
  • 如何在 OS X 中为我的文档创建图标

    我有一个基于文档的应用程序 因此 我需要为我的应用程序提供一个图标 也为我的文档提供一个图标 在 Xcode Images xcassets 中有一个名为 AppIcon 的项目 我可以用它来设置应用程序的图标 但是如何为我的文档制作图标呢
  • 为什么 jQuery 会抛出错误“fadeOut is not a function”?

    我正在使用 jQuery 并将以下代码放入我的 javascript 中 function HideMe itemID var myDiv item itemID myDiv fadeOut slow 但它给了我这个错误 fadeOut不是
  • Node/Express文件上传

    我正在使用 Node v0 10 26 和 Express v4 2 0 而且我对 Node 还很陌生 在过去的三个小时左右的时间里 我一直在用头撞桌子 试图让文件上传表单与节点一起使用 此时我只是试图让 req files 不返回未定义
  • Java 中 LTRIM 和 RTRIM 的良好替代品是什么?

    JavaScript 的一个好的替代品是什么ltrim and rtrim Java 中的函数 使用正则表达式你可以写 String s String ltrim s replaceAll s String rtrim s replaceA
  • 在Vba中从多个工作表中收集平均值

    我需要将多个工作表中某个范围 C2 C11 的平均值计算到一个新工作表中 如果添加新工作表并将数据输入到指定范围内 该功能应该仍然有效 到目前为止我有这个 Sheets Add Dim myavg As Collection Set mya
  • php彩票问题多赢家问题

    我用 php 创建了一个彩票脚本 我现在的问题是选择不止一名获胜者 因为玩家的门票上有可能有相同的号码 这里我提供两个表结构和源代码 lotto game id int jackpot int status varchar10 pick 1
  • 如何使用Java JSch库逐行读取远程文件?

    我正在尝试使用Java逐行读取文件 这非常简单 stackoverflow com上有多种解决方案 但这里需要注意的是该文件位于远程服务器上 并且它不是可以获取本地副本 它是单个 txt 文件中数百万条亚马逊评论的大量集合 JSch 附带了
  • 毛伊岛:在 Android 上使用 Acrobat Reader 打开捆绑(资产)pdf 文件

    我的应用程序在下面有一个 PDF 帮助文件Resources Raw helpfile pdf 在 Android 上 应通过将其 发送 到 Acrobat Reader 来打开它 前提是它已安装在设备上 我尝试了像 从捆绑文件写入应用程序
  • 如何以 Symfony 形式制作 RadioButton?

    我有必须用 Symfony Form 重做的表单 但我坚持在这个地方 div class currency label div
  • 从 C# 打开新的 Outlook 邮件

    我希望从我的程序中生成 Outlook 消息 我能够从程序中构建和发送或构建并保存 我想要的是构建然后显示以允许用户从 AD 列表中手动选择收件人 下面的代码是此处示例和其他教程站点的混合 但是我找不到一个只是构建然后 显示 电子邮件而不保
  • Xcode 4 使用不同的配置设置构建静态库依赖项

    我想知道是否可以使用不同的配置设置编译依赖的静态库 我的情况是我有一个项目 project pbxproj 它依赖于静态库 cocoa touch 项目 libStatic pbxproj 我的项目有 3 个配置设置 例如调试 发布和临时配
  • 将列表转换为 pandas 中的日期时间

    我有福尔 熊猫列表 str jan 1 jan 15 feb 1 feb 15 mar 1 mar 15 apr 1 apr 15 may 1 may 15 jun 1 jun 15 jul 1 jul 15 aug 1 aug 15 se
  • 如何在 Android 上停止 HttpURLConnection 连接

    我使用 AsyncTask 连接 URLPath 如下代码所示 Override public void onCreate Bundle savedInstanceState super onCreate savedInstanceStat
  • 从任何活动中打开侧栏应用程序启动器

    我是 Android 开发新手 我正在考虑创建一个示例启动器应用程序来替换 Android 默认启动器 我已经创建了这个启动器 但我面临几个问题 1 单击 应用程序 按钮后 我将显示设备上安装的所有应用程序 但应用程序图标的大小不同 我尝试
  • 如何将遗传算法与一些启发式算法相结合

    我正在研究大学调度问题并为此使用简单的遗传算法 实际上它效果很好 可以在 1 小时内将目标函数值从 0 优化到 90 大约 但随后这个过程会急剧减慢 需要几天时间才能得到最佳解决方案 我看到很多论文认为将其他算法与遗传算法混合是合理的 请您
  • ASP.NET MVC 自定义路由约束、依赖注入和单元测试

    关于这个话题 我又问了一个问题 ASP NET MVC 自定义路由约束和依赖注入 https stackoverflow com questions 8308642 asp net mvc custom route constraints
  • 如何使用网络音频 API 播放声音文件 Safari?

    我正在修改一个脚本来播放我在 Codepen 上找到的 mp3 以使其能够在 Safari 上运行 在 Firefox 和 Chrome 中它工作正常 但 Safari 抱怨 未处理的承诺拒绝 类型错误 没有足够的参数 索引 html 25