1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-03 01:39:28 +02:00

Keep visualization selection and first HTML5 Equalizer implementation

This commit is contained in:
Afterster 2014-04-01 23:50:09 +02:00
parent 24715c9d74
commit 7aba0d2eee
7 changed files with 222 additions and 39 deletions

BIN
images/icon_equalizer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 B

After

Width:  |  Height:  |  Size: 437 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 B

After

Width:  |  Height:  |  Size: 929 B

Before After
Before After

View file

@ -36,6 +36,11 @@ var AudioHandler = function() {
var bpmHeight = debugH - chartH; var bpmHeight = debugH - chartH;
var debugSpacing = 2; var debugSpacing = 2;
var gradient; var gradient;
var gainNode;
var filter1;
var filter2;
var filter3;
var filter4;
var freqByteData; //bars - bar data is from 0 - 256 in 512 bins. no sound is 0; var freqByteData; //bars - bar data is from 0 - 256 in 512 bins. no sound is 0;
var timeByteData; //waveform - waveform data is from 0-256 for 512 bins. no sound is 128. var timeByteData; //waveform - waveform data is from 0-256 for 512 bins. no sound is 128.
@ -79,7 +84,8 @@ var AudioHandler = function() {
analyser.fftSize = 1024; analyser.fftSize = 1024;
analyser.connect(audioContext.destination); analyser.connect(audioContext.destination);
binCount = analyser.frequencyBinCount; // = 512 binCount = analyser.frequencyBinCount; // = 512
initEqualizer();
levelBins = Math.floor(binCount / levelsCount); //number of bins in each level levelBins = Math.floor(binCount / levelsCount); //number of bins in each level
@ -114,6 +120,126 @@ var AudioHandler = function() {
} }
function initEqualizer() {
gainNode = audioContext.createGain();
gainNode.gain.value = 1;
filter1 = audioContext.createBiquadFilter();
filter1.type = 5;
filter1.gain.value = null;
filter1.Q.value = 1; // Change Filter type to test
filter1.frequency.value = 80; // Change frequency to test
filter2 = audioContext.createBiquadFilter();
filter2.type = 5;
filter2.gain.value = 0;
filter2.Q.value = 1; // Change Filter type to test
filter2.frequency.value = 240; // Change frequency to test
filter3 = audioContext.createBiquadFilter();
filter3.type = 5;
filter3.gain.value = 0;
filter3.Q.value = 1; // Change Filter type to test
filter3.frequency.value = 750; // Change frequency to test
filter4 = audioContext.createBiquadFilter();
filter4.type = 5;
filter4.gain.value = 0;
filter4.Q.value = 1; // Change Filter type to test
filter4.frequency.value = 2200; // Change frequency to test
filter5 = audioContext.createBiquadFilter();
filter5.type = 5;
filter5.gain.value = 0;
filter5.Q.value = 1; // Change Filter type to test
filter5.frequency.value = 6000; // Change frequency to test
var sliderParams80Hz = {
'orientation': "vertical",
'range': "min",
'min': -30,
'max': 30,
'animate': true,
'step': 0.01,
'slide': function(event, ui) {
filter1.gain.value = ui.value;
},
'stop': function(event, ui) {
console.log(filter1.gain.value);
}
};
$('#filter80Hz').slider(sliderParams80Hz);
var sliderParams240Hz = {
'orientation': "vertical",
'range': "min",
'min': -30,
'max': 30,
'animate': true,
'step': 0.01,
'slide': function(event, ui) {
filter2.gain.value = ui.value;
},
'stop': function(event, ui) {
console.log(filter2.gain.value);
}
};
$('#filter240Hz').slider(sliderParams240Hz);
var sliderParams750Hz = {
'orientation': "vertical",
'range': "min",
'min': -30,
'max': 30,
'animate': true,
'step': 0.01,
'slide': function(event, ui) {
filter3.gain.value = ui.value;
},
'stop': function(event, ui) {
console.log(filter3.gain.value);
}
};
$('#filter750Hz').slider(sliderParams750Hz);
var sliderParams2200Hz = {
'orientation': "vertical",
'range': "min",
'min': -30,
'max': 30,
'animate': true,
'step': 0.01,
'slide': function(event, ui) {
filter4.gain.value = ui.value;
},
'stop': function(event, ui) {
console.log(filter4.gain.value);
}
};
$('#filter2200Hz').slider(sliderParams2200Hz);
var sliderParams6000Hz = {
'orientation': "vertical",
'range': "min",
'min': -30,
'max': 30,
'animate': true,
'step': 0.01,
'slide': function(event, ui) {
filter5.gain.value = ui.value;
},
'stop': function(event, ui) {
console.log(filter5.gain.value);
}
};
$('#filter6000Hz').slider(sliderParams6000Hz);
}
function initSound(){ function initSound(){
source = audioContext.createBufferSource(); source = audioContext.createBufferSource();
@ -133,6 +259,13 @@ var AudioHandler = function() {
var mediaSource = audioContext.createMediaElementSource(mediaElement); var mediaSource = audioContext.createMediaElementSource(mediaElement);
source = mediaSource; source = mediaSource;
source.connect(analyser); source.connect(analyser);
analyser.connect(gainNode);
gainNode.connect(filter1);
filter1.connect(filter2);
filter2.connect(filter3);
filter3.connect(filter4);
filter4.connect(filter5);
filter5.connect(audioContext.destination);
isPlayingAudio = true; isPlayingAudio = true;
} }
} }

View file

@ -75,4 +75,25 @@
border-bottom:thin dotted #999; border-bottom:thin dotted #999;
} }
#equalizer {
position: absolute;
z-index: 9999;
bottom: 1px;
right: 25%;
visibility: hidden;
margin-right: 5px;
}
#equalizer .eq {
display: inline-block;
height: 45px;
width: 8px;
border: 2px solid orange;
background: none;
background-color: #000;
}
#equalizer .ui-slider-handle {
width: 10px;
height: 10px;
}

View file

@ -52,7 +52,8 @@ function SwapSlideshow()
window.parent.document.getElementById('frame_main').contentWindow.swap_slideshow(); window.parent.document.getElementById('frame_main').contentWindow.swap_slideshow();
} }
function isVisualizerEnabled() { function isVisualizerEnabled()
{
return ($('#uberviz').css('visibility') == 'visible'); return ($('#uberviz').css('visibility') == 'visible');
} }
@ -61,8 +62,10 @@ function ShowVisualizer()
{ {
if (isVisualizerEnabled()) { if (isVisualizerEnabled()) {
$('#uberviz').css('visibility', 'hidden'); $('#uberviz').css('visibility', 'hidden');
$('#equalizer').css('visibility', 'hidden');
$('.jp-interface').css('background-color', 'rgb(25, 25, 25)'); $('.jp-interface').css('background-color', 'rgb(25, 25, 25)');
$('.player_actions').css('background-color', 'transparent');
$.removeCookie('jp_visualizer', { path: '/' });
} else { } else {
// Resource not yet initialized? Do it. // Resource not yet initialized? Do it.
if (!vizInitialized) { if (!vizInitialized) {
@ -70,10 +73,11 @@ function ShowVisualizer()
vizInitialized = true; vizInitialized = true;
AudioHandler.loadMediaSource(document.getElementById("jp_audio_0")); AudioHandler.loadMediaSource(document.getElementById("jp_audio_0"));
} }
$('#uberviz').css('visibility', 'visible'); $('#uberviz').css('visibility', 'visible');
$('.jp-interface').css('background-color', 'transparent'); $('.jp-interface').css('background-color', 'transparent');
$('.player_actions').css('background-color', 'rgb(25, 25, 25)');
$.cookie('jp_visualizer', true, { expires: 7, path: '/'});
} }
} }
@ -82,18 +86,29 @@ function ShowVisualizerFullScreen()
if (!isVisualizerEnabled()) { if (!isVisualizerEnabled()) {
ShowVisualizer(); ShowVisualizer();
} }
var element = document.getElementById("viz"); var element = document.getElementById("viz");
if (element.requestFullScreen) { if (element.requestFullScreen) {
element.requestFullScreen(); element.requestFullScreen();
} else if(element.webkitRequestFullScreen) { } else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
} else if(element.mozRequestFullScreen){ } else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen(); element.mozRequestFullScreen();
} else { } else {
alert('Full-Screen not supported by your browser.'); alert('Full-Screen not supported by your browser.');
} }
} }
function ShowEqualizer()
{
if (isVisualizerEnabled()) {
if ($('#equalizer').css('visibility') == 'visible') {
$('#equalizer').css('visibility', 'hidden');
} else {
$('#equalizer').css('visibility', 'visible');
}
}
}
</script> </script>
<?php <?php
} }
@ -332,6 +347,10 @@ if ($isVideo) {
}); });
<?php echo WebPlayer::add_media_js($playlist); ?> <?php echo WebPlayer::add_media_js($playlist); ?>
if ($.cookie('jp_visualizer') == "true") {
ShowVisualizer();
}
}); });
<?php if (AmpConfig::get('waveform') && !$is_share) { ?> <?php if (AmpConfig::get('waveform') && !$is_share) { ?>
var wavclicktimer = null; var wavclicktimer = null;
@ -653,6 +672,9 @@ if ($isVideo) {
<div id="slideshow" class="slideshow action_button"> <div id="slideshow" class="slideshow action_button">
<a href="javascript:SwapSlideshow();"><?php echo UI::get_icon('image', T_('Slideshow')); ?></a> <a href="javascript:SwapSlideshow();"><?php echo UI::get_icon('image', T_('Slideshow')); ?></a>
</div> </div>
<div id="equalizerbtn" class="action_button">
<a href="javascript:ShowEqualizer();"><?php echo UI::get_icon('equalizer', T_('Equalizer')); ?></a>
</div>
<div class="action_button"> <div class="action_button">
<a href="javascript:ShowVisualizer();"><?php echo UI::get_icon('visualizer', T_('Visualizer')); ?></a> <a href="javascript:ShowVisualizer();"><?php echo UI::get_icon('visualizer', T_('Visualizer')); ?></a>
</div> </div>

File diff suppressed because one or more lines are too long