API веб-аудио: decodeAudioData не декодирует опус в Chrome

В настоящее время я пытаюсь заставить пакеты Opus работать с Web Audio API. Однако проблема заключается в том, что, хотя FireFox и Chrome должны изначально поддерживать его, только FireFox может декодировать поток семплов OPUS, используя decodeAudioData из API веб-аудио. Chrome распознает файл, когда я перетаскиваю файл opus в браузер, и он также воспроизводит его! Поэтому мне интересно, что я могу делать что-то не так, что приводит к сбою в Chrome.

Затем я использовал образец кода из http://awm.jp/~yoya/js/audio/meow.html просто загрузите файл opus и попробуйте его декодировать. Опять же, Firefox делает, а Chrome нет. Поэтому мне интересно, может ли кто-нибудь подтвердить мои выводы или сказать мне, что я здесь делаю неправильно. Ниже приведена модифицированная версия по предыдущей ссылке. Спасибо!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<title> decodeAudioData sample </title>
</head>

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
//$(document).ready(function() {
    var catMeowingBuffer = null;
    window.AudioContext = window.AudioContext||window.webkitAudioContext;
    var context = new AudioContext();

    function onError(err) {
       console.log("unable to decode");
    }

    function loadCatSound(url) {
      var request = new XMLHttpRequest();
      request.open('GET', url, true);
      request.responseType = 'arraybuffer';

      // Decode asynchronously
      request.onload = function() {
          context.decodeAudioData(request.response, function(buffer) {
          catMeowingBuffer = buffer;
           var src = context.createBufferSource();
           src.buffer = catMeowingBuffer
           src.connect(context.destination);
           src.start(0);
        }, onError);
      }
      request.send();
    }

    loadCatSound("opus.opus");

    function playCatSound() {
        if (catMeowingBuffer !== null) {
           var src = context.createBufferSource();
           src.buffer = catMeowingBuffer
           src.connect(context.destination);
           src.start(0);
        }
    }
//});
</script>

<body>
<h1> decodeAudioData sample </h1>


<button onclick="playCatSound();"> playCatSound </button>

<hr>
<address></address>
</body> </html>

person rq4t    schedule 22.05.2014    source источник


Ответы (1)


Это ошибка в Хроме. См. https://code.google.com/p/chromium/issues/detail?id=409402.

person hexwab    schedule 21.12.2014
comment
Спасибо, приятно видеть, что это замечают. - person rq4t; 10.01.2015
comment
Как я упоминал в своем вопросе здесь, похоже, что это было исправлено, но это займет некоторое время, прежде чем он станет стабильным. Похоже, спустя 3 года мы наконец-то сможем правильно использовать webaudio в chrome ???? - person ; 12.04.2017