微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Javascript 数组中存储实时数据?

如何解决如何在 Javascript 数组中存储实时数据?

image describe the situation

我想在电脑上听麦克风并显示波形以查看数据。 data一个包含麦克风输入的数组。所以我需要获取麦克风输入并将主题实时存储在数据数组中。当我尝试将麦克风输入数据存储在 *一个简单的数组中时,我发现我的音频和可视化之间存在差距。我想我存储的麦克风输入不正确。

也许我需要使用缓冲区,但在这种情况下如何实现它?

当我点击播放按钮时触发

startStreaming() 函数

import React,{ useState } from 'react';

let audioContext = null;
let meter = null;
let mediastreamsource = null;
let rafID = null;

function Dashboard(props) {

const [data,setData] = useState({[])

function startStreaming() {
    SpeechRecognition.startListening({ continuous: true });
        
    // monkeypatch Web Audio
    window.AudioContext = window.AudioContext || window.webkitaudiocontext;
            
    // grab an audio context
    audioContext = new AudioContext();
    
    navigator.mediaDevices.getUserMedia({
            audio: true,video: true
        }).then(function (stream) {
            onMicrophoneGranted(stream);
            .............
            .............
          },function (err) {
            alert('Could not acquire media: ' + err);
        });
}

function onMicrophoneGranted(stream) {
        audioContext.resume();
        // Create an AudioNode from the stream.
        mediastreamsource = audioContext.createmediastreamsource(stream);

        // Create a new volume meter and connect it.
        meter = createAudioMeter(audioContext);
        mediastreamsource.connect(meter);

        // kick off the visual updating
        onLevelChange();
    }
    function onLevelChange( ) {

        setData( [...data,meter.volume] )
        // set up the next visual callback
        rafID = window.requestAnimationFrame( onLevelChange );
    }

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

返回的组件

    return(
        <div className="waves-wrapper">
        {
          data.map( (val,i) => <div key={`div-${i}`} ></div> )
        }
        </div>
    )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。