Đầu tiên tôi sẽ mô tả vấn đề của mình, tôi đang tạo danh sách phát tự động từ các bài hát ngẫu nhiên, một số bài hát có 10-15 giây im lặng ở cuối bài hát, những gì tôi đang cố gắng đạt được là phát hiện máy phân tích khi bài hát đã im lặng trong 5 giây và hành động.Làm cách nào tôi có thể sử dụng máy phân tích được tạo từ audioContext để phát hiện xem âm thanh phát có thể nghe được không?
Cho đến nay tôi đã nhận điều này:
var context, analyser, source, audio;
context = new (window.AudioContext || window.webkitAudioContext)();
analyser = context.createAnalyser();
audio = new Audio();
source = context.createMediaElementSource(audio)
source.connect(analyser);
analyser.connect(context.destination);
var playNext = function() {
var pickedSong;
// chooses a song from an api with several
// thousands of songs and store it in pickedSong
audio.src = pickedSong;
audio.play();
}
audio.addEventListener('ended', playNext);
playNext();
Tôi biết câu trả lời là ở đâu đó trong phân tích nhưng tôi đã không tìm thấy bất kỳ sự gắn kết trong dữ liệu trả về từ It.
tôi có thể làm một cái gì đó như thế này:
var frequencies = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(frequencies);
và tần số var sẽ chứa 2048 phím đều có một ngẫu nhiên (với tôi) số (-48,11, -55, -67, vv ...) , làm những con số này có nghĩa là bất cứ điều gì liên quan đến âm thanh cảm nhận được chơi ?, làm thế nào tôi có thể phát hiện nếu nó đủ thấp mà mọi người sẽ nghĩ rằng không có gì đang chơi.
Đối với việc phát hiện tôi chủ yếu là muốn một cái gì đó như thế này:
var isInSilence = function(){
return !audible;
}
var tries = 0;
var checker = function() {
tries = isInSilence() ? tries + 1 : 0;
if(tries >= 5) playNext();
setTimeout(checker, 1000);
}
checker();
Phần duy nhất còn thiếu là phát hiện nếu bài hát hiện đang im lặng hay không, bất kỳ trợ giúp sẽ được đánh giá cao.
Edit:
dựa trên câu trả lời william của tôi quản lý để giải quyết nó bằng cách thực hiện nó theo cách này:
var context, compressor, gain, source, audio;
context = new (window.AudioContext || window.webkitAudioContext)();
compressor = context.createDynamicsCompressor();
gain = context.createGain();
audio = new Audio();
source = context.createMediaElementSource(audio)
// Connecting source directly
source.connect(context.destination);
// Connecting source the the compresor -> muted gain
source.connect(compressor);
compressor.connect(gain);
gain.connect(context.destination);
gain.gain.value = 0; // muting the gain
compressor.threshold.value = -100;
var playNext = function() {
var pickedSong;
// chooses a song from an api with several
// thousands of songs and store it in pickedSong
audio.src = pickedSong;
audio.play();
}
audio.addEventListener('ended', playNext);
playNext();
var isInSilence = function(){
return compressor.reduction.value >= -50;
}
var tries = 0;
var checker = function() {
tries = isInSilence() ? tries + 1 : 0;
if(tries >= 5) playNext();
setTimeout(checker, 1000);
}
checker();
Bạn có thể sử dụng ctx.source.stop (0) hoặc một cái gì đó như thế – Akxe
context.source là không xác định –
Bạn có thể thử http://toys.eise.cz/Equaliser, có chức năng dừng, điều đó sẽ dừng nhạc cố gắng tìm nó ở đó nếu bạn thất bại Tôi sẽ cố gắng để có được nó bản thân mình – Akxe