用于 Microsoft 商店的 Javascript Windows 10 UWP 应用程序中的 decodeAudioData 失败

Posted

技术标签:

【中文标题】用于 Microsoft 商店的 Javascript Windows 10 UWP 应用程序中的 decodeAudioData 失败【英文标题】:Failure of decodeAudioData in Javascript Windows 10 UWP app for Microsoft store 【发布时间】:2019-07-31 12:37:31 【问题描述】:

欢迎任何关于这个谜题的帮助。我正在尝试使此代码适用于使用 Visual Studio 的 Microsoft 商店的 Windows 10 应用程序。

我正在使用sound.js from Github。

它在 Microsoft Edge、Chrome 和 Firefox 中播放声音很好(尽管由于某种原因它无法在 Internet Explorer 中播放任何声音)。在其他方面,UWP 的行为与我的测试中的 Edge 完全一样。

UWP 失败并出现错误

message "EncodingError" String
name    "EncodingError" String

我尝试了 wav 和 mp3 样本,但都失败并出现相同的错误。

音频文件已添加到项目的资产列表中,所以这不是问题。

UWP 还能够使用 AudioContext 播放声音,因此生成音频完全没有问题 - 它能够产生正弦波、三角波、锯齿波和方波并进行攻击。但由于某种原因无法加载这些示例。

这是我正在使用的代码,它在 onFailed 函数中抛出此编码错误。

//The `loadSound` function loads the sound file using XHR
function loadSound(o, source, loadHandler, failHandler) 
  var xhr = new XMLHttpRequest();

  //Use xhr to load the sound file.
  xhr.open("GET", source, true);
  xhr.responseType = "arraybuffer";

  //When the sound has finished loading, decode it using the
  //`decodeAudio` function (which you'll see ahead)
  xhr.addEventListener("load", decodeAudio.bind(this, o, xhr, loadHandler, failHandler)); 

  //Send the request to load the file.
  xhr.send();


//The `decodeAudio` function decodes the audio file for you and 
//launches the `loadHandler` when it's done
function decodeAudio(o, xhr, loadHandler, failHandler) 

  //Decode the sound and store a reference to the buffer.
  actx.decodeAudioData(
    xhr.response,
    function(buffer) 
      o.buffer = buffer;
      o.hasLoaded = true;

      //This next bit is optional, but important.
      //If you have a load manager in your game, call it here so that
      //the sound is registered as having loaded.
      if (loadHandler) 
        loadHandler();
      
    ,
    function(error) 
      if (failHandler) failHandler(o.source, error);
    
  );

// ...

  //The callback function to run if an asset fails to load or decode
    onFailed: function (source, error) 
      if(do_throw_error)
      throw new Error("Audio could not be loaded: " + source);
  ,

这是online metronome that I'm trying to turn into a Windows 19 Microsoft store app - 如果您在 MIcrosoft Edge 中使用它,则会触发与 Windows 10 商店应用程序相同的代码并且它工作正常(我在让混响在 Edge 中工作时遇到问题,但这是另一回事,对于节拍器来说不是什么大问题,虽然它会很好,但无论如何这是一个单独的问题:))。

谢谢!

【问题讨论】:

【参考方案1】:

我找到了解决方案。只是我没有添加文件。我以为我从 Project >> Add Existing Item 中获得了,但这只是将它们复制到其他文件夹之一(css 文件夹或 js 文件夹)。我需要展开以显示目录结构,然后在项目中使用包含作为这里的解决方案: How to play a sound from JS in a UWP app?

【讨论】:

以上是关于用于 Microsoft 商店的 Javascript Windows 10 UWP 应用程序中的 decodeAudioData 失败的主要内容,如果未能解决你的问题,请参考以下文章

微软应用商店(Microsoft Store)的卸载和安装

为 Microsoft 商店打包适用于 Windows 的 Gtk3 应用程序

Microsoft.Phone.Maps.Services 可以在 Windows 应用商店应用中使用吗?

无法使用 Microsoft 应用中心在应用商店上部署应用

乘风破浪,如何查看Windows 11商店应用的安装目录,面向微软商店(Microsoft Store)开发发力

win10应用商店关闭工具