在HTML页面中显示音频数据
Displaying audio data in HTML page
所以我有下面的javascript代码,它制作了一个声音可视化器,可以在chrome上使用麦克风输入。尽管实际的可视化器工作得很好,但我想知道我是否真的可以从名为array的uint8array中获取音频数据,并将其显示在id="arrayIndex"的段落中。然而,当我尝试显示array[I]时,它总是显示为零,并且不会随着可视化工具而改变。有人知道我如何获取数组中的值吗?谢谢
addEventListener('load', init);
function init() {
window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
window.AudioContext = window.ctx = document.getElementById('c').getContext('2d');
gradient = ctx.createLinearGradient(0, 0, 0, 200);
gradient.addColorStop(1, '#ADD8E6');
gradient.addColorStop(0.65, '#576D74');
gradient.addColorStop(0.45, '#FFAA00');
gradient.addColorStop(0, '#FF0000');
ctx.fillStyle = gradient;
window.AudioContext = window.webkitAudioContext || window.AudioContext;
context = new AudioContext();
analyser = context.createAnalyser();
analyser.fftsize = 512;
analyser.smoothingTimeConstant = 0.9;
navigator.getMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);
navigator.getMedia({
audio: true,
video: false
}, function (localMediaStream) {
source = context.createMediaStreamSource(localMediaStream);
console.log(source);
source.connect(analyser);
draw();
}, function (err) {
console.log(err);
});
}
function draw() {
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
ctx.clearRect(0, 0, 512, 256);
var barHeight;
for (var i = 0; i < array.length; i++) {
barHeight = 256-array[i];
ctx.fillRect(i * 2, barHeight, 1, 256);
document.getElementById("arrayIndex").innerHTML = barHeight;
}
requestAnimationFrame(draw);
}
你说得对!
Chrome和Firefox都有一些怪癖。如果你把频率指数固定为50,它就起作用了。以如此高的速率(即在这种情况下超过15kHz)更新html是个坏主意。这种怪癖可能是由于荒谬的更新率。此外,如果您将更新从循环中删除,它也会起作用。
这是一个作品fiddle:注意声谱图下面的文本更新正确。
这是小提琴上的代码:
var canvasCtx = document.getElementById('canvas').getContext('2d');
var bufferSize = 4096;
var audioContext;
try {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
audioContext = new AudioContext();
} catch (e) {
alert('Web Audio API is not supported in this browser');
}
// Check if there is microphone input.
try {
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
var hasMicrophoneInput = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);
} catch (e) {
alert("getUserMedia() is not supported in your browser");
}
// Create analyser node.
var analyser = audioContext.createAnalyser();
analyser.fftsize = 512;
analyser.smoothingTimeConstant = 0.9;
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);
var errorCallback = function (e) {
alert("Error in getUserMedia: " + e);
};
// Get access to the microphone and start pumping data through the graph.
navigator.getUserMedia({
audio: true
}, function (stream) {
// microphone -> myPCMProcessingNode -> destination.
var microphone = audioContext.createMediaStreamSource(stream);
microphone.connect(analyser);
analyser.connect(audioContext.destination);
//microphone.start(0);
}, errorCallback);
// draw an oscilloscope of the current audio source
function draw() {
drawVisual = requestAnimationFrame(draw);
analyser.getByteFrequencyData(dataArray);
canvasCtx.fillStyle = 'rgb(200, 200, 200)';
var WIDTH = 500;
var HEIGHT = 256;
canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);
for (var i = 0; i < dataArray.length; i++) {
barHeight = HEIGHT - dataArray[i];
canvasCtx.fillRect(i * 2, barHeight, 1, dataArray[i]);
// It is a bad idea to update an element in this loop:
// However, if you do, the following line always gives 0, which seems like a bug.
document.getElementById("arrayIndex").innerHTML = dataArray[i];
// This line works though.
document.getElementById("arrayIndex").innerHTML = dataArray[50];
}
};
draw();
以下是用于实时音频处理的WebAPI的更多背景信息:。
相关文章:
- 如何播放部分音频文件
- 从桌面读取python文件时高亮显示代码
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 音频控件在mouseover上显示,在mouseout上淡出
- 如何将 HTML 文本同步并突出显示到音频
- 使用 javascript 解析和显示 HTML 音频当前时间
- 在 Html5 音频中显示总计时
- 当用户在播放音频时关闭窗口时显示警报
- 在HTML页面中显示音频数据
- 如何在向用户显示内容之前以html预加载音频
- 如何在停止音频并显示按钮后继续播放音频
- 我怎么能在一个页面上有两个这样的音频播放器,而不点击其中一个,另一个播放或显示隐藏播放列表
- 播放音频时显示图形
- 当我显示/隐藏视频时,IE中的音频重叠
- Phonegap:在锁屏和下拉状态栏中显示音频控制和我的音频流的元信息
- 如何在网页上播放.mp3或.m4a音频,同时显示嵌入的专辑艺术?(使用Javascript、HTML5或Flash)
- 在html中选择和显示音频和视频
- 显示“另存为”;对话框,而不是用JavaScript播放音频文件
- Phonegap 1.0的声音完整显示(音频文件nil)
- 音频显示'无效源'当使用FileOpenPicker链接到本地机器上的文件时