Сбой decodeAudioData в приложении Javascript для Windows 10 UWP для магазина Microsoft - PullRequest
0 голосов
/ 09 марта 2019

Добро пожаловать на любую помощь с этой загадкой. Я пытаюсь заставить этот код работать для приложения Windows 10 для магазина Microsoft с помощью Visual Studio.

Я использую sound.js от 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);
  },

Это онлайн-метроном , который я пытаюсь превратить в приложение магазина Microsoft Windows 19 - если вы используете его в MIcrosoft Edge, то запускается тот же код, что и для приложения магазина Windows 10 и он работает нормально (у меня есть проблемы с получением реверберации для работы в Edge, но это другое дело, и это не большая проблема для метронома, хотя было бы неплохо, так или иначе, это отдельный вопрос :)).

Спасибо!

1 Ответ

0 голосов
/ 11 марта 2019

Я нашел решение. Просто я не добавил файлы. Я думал, что у меня из Project >> Add Existing Item, но он просто скопировал их в одну из других папок (папка css или папка js). Мне нужно было развернуть, чтобы показать структуру каталогов, а затем использовать включить в проекте, как для решения здесь: Как воспроизвести звук из JS в приложении UWP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...