gpt4 book ai didi

javascript - 如何在

转载 作者:数据小太阳 更新时间:2023-10-29 05:29:24 24 4
gpt4 key购买 nike

根据我的阅读,我希望以下 JavaScript 代码记录“一切都很好”,但它却遇到了错误情况:

var audio = document.createElement('audio');
var ctx = new window.AudioContext();
var source = ctx.createMediaElementSource(audio);
audio.src = 'http://www.mediacollege.com/audio/tone/files/440Hz_44100Hz_16bit_30sec.mp3';
// As @padenot mentioned, this is the number of channels in the source node, not the actual media file
var chans = source.channelCount;
if(chans == 1) {
snippet.log("All is well");
} else {
snippet.log("Expected to see 1 channel, instead saw: " + chans)
}
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

发生了什么事?

这可能是 CORS 问题吗?是否有其他方法可以确定此 mp3 文件实际上是单声道?

编辑:正如@padenot 提到的,这是源节点中的 channel 数,而不是实际的媒体文件

澄清

我希望有一种解决方案可以避免在内存中解码整个音频文件。 decodeAudioData(),根据我的经验,需要一次解码整个 mp3,这可能需要几秒钟。 createMediaElementSource() 允许您在收听时流媒体和解码。

最佳答案

MediaElementAudioSourceNode 确实有一个 channelCount 属性,但它指的是 AudioNode 的 channel 数,而不是底层 HTMLMEdiaElement 的 channel 数。

相反,您可以解码缓冲区,并查询其 channel 数,如下所示:

var xhr = new XMLHttpRequest();
xhr.open('GET', "file.mp3", true);
xhr.responseType = "arraybuffer";
xhr.onload = function() {
var cx = new AudioContext() ;
cx.decodeAudioData(xhr.response, function(decodedBuffer) {
console.log(decodedBuffer.numberOfChannels);
});
}
xhr.send(null);

是的,您需要在响应中包含 CORS header 才能使其正常工作。

关于javascript - 如何在 <audio> 标签中检测 mp3 中的音频 channel 数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32835149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com