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 debugSpacing = 2;
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 timeByteData; //waveform - waveform data is from 0-256 for 512 bins. no sound is 128.
@ -80,6 +85,7 @@ var AudioHandler = function() {
analyser.connect(audioContext.destination);
binCount = analyser.frequencyBinCount; // = 512
initEqualizer();
levelBins = Math.floor(binCount / levelsCount); //number of bins in each level
@ -115,6 +121,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(){
source = audioContext.createBufferSource();
source.connect(analyser);
@ -133,6 +259,13 @@ var AudioHandler = function() {
var mediaSource = audioContext.createMediaElementSource(mediaElement);
source = mediaSource;
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;
}
}

View file

@ -75,4 +75,25 @@
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();
}
function isVisualizerEnabled() {
function isVisualizerEnabled()
{
return ($('#uberviz').css('visibility') == 'visible');
}
@ -61,8 +62,10 @@ function ShowVisualizer()
{
if (isVisualizerEnabled()) {
$('#uberviz').css('visibility', 'hidden');
$('#equalizer').css('visibility', 'hidden');
$('.jp-interface').css('background-color', 'rgb(25, 25, 25)');
$('.player_actions').css('background-color', 'transparent');
$.removeCookie('jp_visualizer', { path: '/' });
} else {
// Resource not yet initialized? Do it.
if (!vizInitialized) {
@ -73,7 +76,8 @@ function ShowVisualizer()
$('#uberviz').css('visibility', 'visible');
$('.jp-interface').css('background-color', 'transparent');
$('.player_actions').css('background-color', 'rgb(25, 25, 25)');
$.cookie('jp_visualizer', true, { expires: 7, path: '/'});
}
}
@ -86,14 +90,25 @@ function ShowVisualizerFullScreen()
var element = document.getElementById("viz");
if (element.requestFullScreen) {
element.requestFullScreen();
} else if(element.webkitRequestFullScreen) {
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
} else if(element.mozRequestFullScreen){
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else {
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>
<?php
}
@ -332,6 +347,10 @@ if ($isVideo) {
});
<?php echo WebPlayer::add_media_js($playlist); ?>
if ($.cookie('jp_visualizer') == "true") {
ShowVisualizer();
}
});
<?php if (AmpConfig::get('waveform') && !$is_share) { ?>
var wavclicktimer = null;
@ -653,6 +672,9 @@ if ($isVideo) {
<div id="slideshow" class="slideshow action_button">
<a href="javascript:SwapSlideshow();"><?php echo UI::get_icon('image', T_('Slideshow')); ?></a>
</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">
<a href="javascript:ShowVisualizer();"><?php echo UI::get_icon('visualizer', T_('Visualizer')); ?></a>
</div>

File diff suppressed because one or more lines are too long