Аудио контекст разрывается при переключении на новый источник звука - PullRequest
1 голос
/ 10 марта 2020

Я использую chrome, и у меня есть HTML аудиоэлемент, подключенный к анализатору, подобный этому:

            var audio = document.getElementById('audio');
            audio.src = "http://127.0.0.1:5000/api/getfile/new.wav";
            var ctx = new AudioContext();
            var analyser = ctx.createAnalyser();
            var audioSrc = ctx.createMediaElementSource(audio);

            audioSrc.connect(analyser); //breaks here on 2nd run 
            analyser.connect(ctx.destination);

И после завершения я вызываю метод сброса, который передает четыре переменные объявляется здесь, и я пытаюсь отдохнуть / переинициализировать, чтобы я мог использовать их для следующего файла, который передается из того же API / источника:

            audioSrc.disconnect();//analyser);
            analyser.disconnect();//ctx.destination);
            audio.src = "";
            ctx.close();

Но, похоже, он не отключается должным образом, так как я получить эту ошибку:

SimpleUpload.vue?3533:299 Uncaught (in promise) DOMException: Failed to execute 'createMediaElementSource' on 'AudioContext': HTMLMediaElement already connected previously to a different MediaElementSourceNode.

Вот HTML:

        <div id="audiovis">
            <div v-if="loading"
                class="loadspin">
                <img class="spinner" src="./Wedges-3s-207px-trans.gif" width="80" height="80">
            </div>
            <canvas id='canvas' width="800" height="150"></canvas>
            <br>
            <br>
            <audio crossOrigin="anonymous"
                :src = "showVisualizer"
                id = "audio" controls>
                audio element not supported
                <!-- "http://127.0.0.1:5000/api/getfile/new.wav"  -->
            </audio>
        </div>

И python Flask API:

@app.route('/api/getfile/<audiofile>')
def send_file(audiofile):
    try:
        return send_from_directory(os.getcwd(),filename=audiofile, as_attachment=True)
    except FileNotFoundError:
        abort(404)
...