要在 JavaScript 中对来自麦克风的音频进行采样,您可以使用 Web Audio API。此 API 允许您使用 JavaScript 在 Web 浏览器中创建和操作音频。以下是如何使用 Web Audio API 从麦克风采样音频的示例:
// Create a new audio context
const audioContext = new AudioContext();
// Create an audio input
const mic = audioContext.createMediaStreamSource(audioStream);
// Connect the audio input to a filter node
const filter = audioContext.createBiquadFilter();
mic.connect(filter);
// Connect the filter node to the destination (i.e. the speakers)
filter.connect(audioContext.destination);
此代码创建一个新的音频上下文,它是在 Web Audio API 中管理音频的对象。然后它从麦克风创建音频输入并将其连接到过滤器节点。最后,它将过滤器节点连接到目的地,在本例中为扬声器。
要为麦克风设置动画,您可以使用音频输入来创建正在采样的音频的可视化表示。您可以使用来自音频输入的数据来实时更新动画。
要在 JavaScript 中创建采样音频的可视化表示,您可以使用 Web Audio API 来分析音频数据。此 API 提供了许多可用于访问音频数据的方法和属性,包括 AnalyserNode 对象。该对象允许您对音频数据执行频域分析,然后您可以使用它来创建音频的可视化表示。
下面是一个示例,说明如何使用 AnalyserNode 对象在 JavaScript 中创建采样音频的可视化表示:
// Create a new audio context
const audioContext = new AudioContext();
// Create an audio input
const mic = audioContext.createMediaStreamSource(audioStream);
// Create an analyser node
const analyser = audioContext.createAnalyser();
// Connect the audio input to the analyser node
mic.connect(analyser);
// Create a frequency data array
const frequencyData = new Uint8Array(analyser.frequencyBinCount);
// Update the frequency data array with the current audio data
analyser.getByteFrequencyData(frequencyData);
// Use the frequency data to create a visual representation of the audio
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
// Clear the canvas
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Loop through the frequency data and draw a bar for each value
for (let i = 0; i < frequencyData.length; i++) {
// Calculate the bar height
const barHeight = frequencyData[i] / 256 * canvas.height;
// Draw the bar
ctx.fillRect(i * 2, canvas.height - barHeight, 2, barHeight);
}
此代码创建一个 AnalyserNode 对象并使用它来分析来自麦克风的音频数据。然后它创建一个频率数据数组,并使用 getByteFrequencyData 方法用当前音频数据更新它。最后,它使用此数据在画布元素上绘制条形图,其中每个条形图的高度对应于该时间点的音频频率。
您可以使用这种方法为采样音频创建各种不同的可视化效果。您还可以通过调用 getByteFrequencyData 方法并循环重绘可视化来实时更新可视化。