gpt4 book ai didi

javascript - 如何使用网络音频 api 获得音轨样本的正确幅度(不播放)

转载 作者:行者123 更新时间:2023-12-03 02:30:45 27 4
gpt4 key购买 nike

我对由网络音频 api 提供给我的样本体积数据进行了一些实验,看起来它们与从其他程序(例如 audasity)获得的数据不同。如果我们将样本数组长度除以采样率(在我的情况下为leftChannel.length/44100),它显示音频的持续时间更长,大约为40秒,并且在大胆显示音频中的样本很大的情况下,我的脚本显示安静(有时几乎无声)。我演奏了我的剧本所报告的作品,它们大胆而安静,而且声音肯定很大。

所以问题是:我找到音频样本幅度的方法是否正确?我的代码有什么问题?

我已阅读有关为音轨创建波形 Create a waveform of the full track with Web Audio API 的线程
并且有我使用的很好的例子,所以这是我的代码:

(function($) {

window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new window.AudioContext(); // Create audio container
var audioData;
var checkPoint = 21; //this is point in seconds just for debugging, remove later!!
function decode(audioData) {
try{
context.decodeAudioData(audioData,
function(decoded){
drawSound(decoded);
playAudio(decoded);
},
function(){ // do nothing here
});
} catch(e) {
console.log('decode exception',e.message);
}
}

function drawSound(buffer) {
var leftChannel = buffer.getChannelData(0);
console.log('audio duration: ' + leftChannel.length/44100 + ' sec');
for (var i = 0; i < leftChannel.length; i++) {
var volume = leftChannel[i];
//draw(volume, i);

//this is just for debugging, remove later!!
if (Math.abs(i - checkPoint * 44100) < 100) {
console.log(leftChannel[i]);
}

}
}

function playAudio(buffer) {
console.log('start playing audio');
var audioTrack = context.createBufferSource();
audioTrack.connect(context.destination);
audioTrack.buffer = buffer;
audioTrack.start();
}

$(document).ready(function() {
$('body').append($('<input type="text" id="checkpoint" />'));
$('#checkpoint').change(function() {
checkPoint = $(this).val();
});
$('body').append($('<input type="file" id="audiofile" />'));
$('input[type="file"]').change(function() {
var reader = new FileReader();
reader.onload = function(e) {
audioData = this.result;
decode(audioData);
};
reader.readAsArrayBuffer(this.files[0]);
});

});
})(jQuery);
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>

</body>
</html>

最佳答案

如果您认为这是 Chrome 中的错误,请在 crbug.com/new 提交错误。并提供一个音轨,该音轨会产生不同的结果和有关不同机器的详细信息。

另请注意,在 chrome 中,ffmpeg 用于解码文件。解码文件的长度可能与大胆不同。

关于javascript - 如何使用网络音频 api 获得音轨样本的正确幅度(不播放),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30001577/

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