# Copyright (C) 2002-2004 gregoire HUBERT.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author : gregoire HUBERT
#
# XML_node.objet
#
# This object is an XML node representation
#
# /- name (string)
# xml_node --- attributes (array)
# \- children (array) or value (string)
class xml_node {
var $name;
var $attributes = array();
var $children = array();
var $value = "";
function xml_node($name,$attributes,$children=array(),$value="") {
$this->name = $name;
if (is_array($attributes)) {
$this->attributes = $attributes;
}
$this->children = $children;
$this->value = $value;
}
}
# Copyright (C) 2003-2004 gregoire HUBERT.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author : gregoire HUBERT
#
# xml_tree class
#
# This object parses an XML stream and offers a tree composed by xml_nodes
#
class xml_tree {
var $xml_stream;
var $current_node;
var $root_node;
var $index;
var $value;
function xml_tree() {
$this->root_node = new xml_node("__ROOT_NODE",array());
$this->current_node = $this->root_node;
}
function add_tree($xml_stream) {
# Managing the parser
$this->xml_stream = $xml_stream;
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);
if (!xml_parse_into_struct($xml_parser,$this->xml_stream,$this->value,$this->index)) {
xml_parser_free($xml_parser);
die("XML Parse error");
}
xml_parser_free($xml_parser);
# Now, $this->value and $this->index are informed, we can use the get_node methode.
$tab_result = $this->get_node(0,count($this->value) - 1);
$this->root_node->children[] = $tab_result[0];
$this->current_node = $this->root_node;
}
function get_node($index_start,$index_stop) {
#echo " \n";
#echo "GET-NODE($index_start,$index_stop) \n";
# What we are going to return is an array of xml_nodes
$return_tab = array();
# depth is only here to check if everything is all right
$tab_node = $this->value[$index_start];
$depth = $tab_node["level"]-1;
# Now we have to be sure we do not forget a single node
for ($index = $index_start;$index <= $index_stop;$index++) {
#echo "\$index = $index ";
# get the current node
$tab_node = $this->value[$index];
# what type of node is it ?
switch($tab_node["type"]) {
case "complete" :
# Depth integrity check
if ($tab_node["level"] != $depth+1) {
die("ERREUR # contrainte d'intégrité au noeud complet $index, niveau $depth + 1 au lieu de ".$tab_node["level"]);
}
#echo "Noeud complet trouvé position $index TAG ".$tab_node["tag"]." \n";
# Easy one, no children to manage, only a value...
$return_tab[] = new xml_node($tab_node["tag"],$tab_node["attributes"],"",$tab_node["value"]);
break;
case "open" :
# Depth integrity check
if ($tab_node["level"] != $depth +1 ) {
die("ERREUR # contrainte d'intégrité au noeud ouvert $index, niveau $depth au lieu de ".$tab_node["level"]);
}
# Open tag, we re-use this methode to return its children
# Where is the correspondong close tag ?
$node_index = $this->index[$tab_node["tag"]];
$flipped_node_index = array_flip($node_index);
#echo "This ".$tab_node["tag"]." is at coords ".$flipped_node_index[$index]." ";
$i=1;
do {
$next_index = $node_index[$flipped_node_index[$index] + $i++];
$next_tag=$this->value[$next_index];
}
while ($next_tag["level"]!=$tab_node["level"]);
#echo "Ouverture de noeud détectée pos $index TAG ".$tab_node["tag"]." \n Parcours jusqu au $next_index \n";
# good, we can now instanciate our node
$return_tab[] = new xml_node($tab_node["tag"],$tab_node["attributes"],$this->get_node($index+1,$next_index),"");
# As we called the get_node methode, we are sure that nodes have been parsed to the corresponding close tag
$index = $next_index;
break;
case "close" :
# Depth integrity check
if ($tab_node["level"] != $depth ){
die("ERREUR # contrainte d'intégrité au noeud fermé $index, niveau $depth au lieu de ".$tab_node["level"]);
}
#echo "Fermeture de noeud detectée pos $index TAG ".$tab_node["tag"]."
\n";
# This ugly thing is useless because reaching a close tag means that $index==$index_stop but who knows ? =)
# it will be skipped soon
$index = $index_stop;
break;
default:
die("Erreur de type de TAG non déterminé :'".$tab_node["type"]."'");
}
}
# We are out ... returns the array with collected children...
return ($return_tab);
}
# this function browse the xml tree and set the current node to the selected node
function give_node($path) {
if ($path[0]=="/") {
$current_node=$this->root_node;
$path=substr($path,1);
#echo "ABSOLUTE PATH GIVEN=$path ";
}
else {
$current_node = $this->current_node;
}
#echo "PATH GIVEN=$path ";
$tab_path = split("/",$path);
foreach ($tab_path as $node_expr) {
#echo "STUDYING EXPR='$node_expr' ";
$node = $current_node;
$expr_tab = split("\?",$node_expr);
$node_name = $expr_tab[0];
$attr_tab = 0;
if (count($expr_tab)>1) {
##echo "TROUVE AU MOINS UNE CONDITION SUR LES ATTRIBUTS... ";
$attr_expr_tab=split(",",$expr_tab[1]);
$attr_tab=array();
foreach($attr_expr_tab as $attr_expr) {
$attr_split_expr=split("=",$attr_expr);
$attr_tab[$attr_split_expr[0]]=$attr_split_expr[1];
}
}
$last=0;
foreach ($node->children as $children) {
#echo "COMPARING WITH '$children->name' ";
if ($children->name == $node_name) {
##echo "TROUVE NOEUD CORRESPONDANT $node_name ";
if (is_array($attr_tab)) {
$node_attributes = $children->attributes;
foreach ($attr_tab as $key=>$value) {
if ($node_attributes[$key] == $value) {
#echo "ATTRIBUTE & CHANGE CURRENT NODE TO ".$children->name." ";
$current_node = $children;
$last = 1;
}
}
}
else {
##echo "CHILD=".$children->name." ";
#echo "CHANGE CURRENT NODE TO ".$children->name." ";
$current_node = $children;
$last=1;
}
}
if ($last) {
break;
}
}
if (!$last) {
#echo "PATH ERROR $node_name ";
#die("MMmmmh It seems that this file is not a DIA XML format...sorry...");
return 0;
}
}
return $current_node;
}
function browse_tree($path) {
$node = $this->give_node($path);
if (is_object($node)) {
$this->current_node = $node;
return 1;
}
return 0;
}
# this method dumps an html representation of the xml tree
function xml_show($node = "",$level=0,$last=0) {
if ($node=="") {
$node=$this->root_node;
}
if (!is_object($node)) {
die("ERROR : node is not an object");
}
$line="";
for($i=1;$i<=$level;$i++) {
if ((i==$level-1) and ($last)) {
$line.=" ";
}
else {
$line.=" |";
}
if ($i==$level) {
$line.="`-";
}
}
$line.=$node->name;
#echo $line;
$line.="".count($node->children)."";
if (count($node->children)==1) {
$line.=" (".$node->value.") \n";
echo "$line";
}
else {
$line.=" \n";
echo "$line";
$i=1;
foreach($node->children as $children) {
if ($i==count($node->children)) {
$this->xml_show($children,$level+1,1);
}
else {
$this->xml_show($children,$level+1);
}
$i++;
}
}
}
#END_CLASS
}
SERPENTINE (uk) - Living And Dying In High Definition (2010)
Label : AOR Heaven
Sortie du Scud : 26 mars 2010
Pays : Angleterre
Genre : AOR
Type : Album
Playtime : 10 Titres - 54 Mins
L’AOR et moi, comme vous le savez, c’est une grande et longue histoire d’amour. Ces mélodies enchanteresses, ces harmonies vocales divines, ces guitares puissantes mais légères, j’en suis friand, et ce, depuis de très longues années.
« Amanda » de BOSTON, « Lights », « Higher Ground » de JOURNEY, « Streets Of Pain » ou « Should Have Known Better » de Richard Marx… Je pourrais en citer des dizaines, mais ça n’aurait aucun intérêt.
Et souvent, ça me fait regretter d’être né du mauvais côté de l’Atlantique.
Car au lieu de me sevrer avec les hits français les plus pitoyables, j’aurais pu être éduqué à grands coups de REO SPEEDWAGON, BOSTON, JOURNEY, via les nombreuses stations de radio locales US.
Pas de bol.
Mais aujourd’hui, nous n’irons pas en Californie, dans l’Illinois ou le Massachusetts, mais outre Manche, du côté de Cardiff, Birmingham et Barnsley. C’est certes moins exotique, mais plus pertinent puisque les musiciens de SERPENTINE en sont originaires.
Bon, OK, on a plutôt une vision assez « cliché » de l’Angleterre… Landes, marais, pluie, flegme, humour unique, football, pluie, chauvinisme, Beatles, pluie…
Mais ce Living And Dying In High Definition risque de vous faire changer d’opinion, et surtout, de vision. Car la musique des Anglais est tout sauf froide, humide et élitiste.
Elle est au contraire ensoleillée et généreuse.
Mais à contrario de sa version américaine, l’AOR anglais serait plutôt du genre teigneux, agressif, riffu (oui, j’aime les néologismes…), et conserverait donc ses racines européennes, bien ancrées dans sa culture musicale. Et oui, le pays de Shakespeare ne s’est pas approprié le Hard-Rock (Led Zep, Deep Purple), le Heavy (BLACK SABBATH), et le Punk (SEX PISTOLS, CLASH) pour rien…
Alors ici, rien de larmoyant. De l’énergie, de l’envie, mais aussi des mélodies, des harmonies, et tout pour passer un bon après midi.
Produit par Sheena Sear (MAGNUM, STAMPEDE), Living And Dying In High Definition bénéficie d’un son clair, puissant, mettant en valeur des compositions solides, aux refrains fédérateurs et aux couplets galvanisants. Et si le clavier de Gareth David Noon est assez prédominant, les guitares de Chris Gould ne manquent toutefois pas le rendez vous, et savent se faire tranchantes.
Riffs acérés, chant ample et dynamique (qui rappelle parfois le JOURNEY dernière mouture…), rythmique solide qui n’en fait pas trop mais assure les arrières, tout est en place pour un défilé de hits potentiels, qu’on se prend à réécouter pendant quelques heures.
Et dès le premier morceau, vous êtes dans le bain.
Car « Deep Down (There's a Price for Love) » a la flamboyance des grands morceaux des années 80, à la sauce contemporaine. Sérieux up tempo au riff qui tronçonne, sublimé par le chant velouté de Tony Mills (SHY, TNT, excusez du peu…), dont le timbre rappelle parfois dans les moments les plus profonds Joe Lynn Turner, c’est une intro qui tonne pour un Heavy AOR qui détonne.
Bien sur, on pense aux anciens combos du sieur Mills, spécialement SHY, qui avait le don de mixer rugosité européenne et musicalité américaine, mais point besoin de référence avec de tels gabarits, la musique seule suffit.
Et même lorsque le quintette tombe en pamoison, on est bien loin de la sucrerie maison, mais plutôt proche d’un bouquet de saison, car la première blue song de rigueur, « Love Is Blue » reste dans des sentiers chenus, et sait amadouer sans laisser trop repu. Guitare bluesy/Heavy, clavier romantique, solo épique, ça laisse les yeux qui piquent sans trop tirer sur l’élastique.
Mais si SERPENTINE assume ses racines, il sait aussi lorgner du côté des maîtres et pondre un « Where Do We Go From Here ? » plus américain que les bottes de John Wayne. Et surtout, pondre un final explosif, avec six minutes dédiées aux héros oubliés, le temps d’un long et progressif (quel break et quel solo !!!) « Forgotten Heroes », plus beau qu’une épitaphe sous une pluie d’été…
C’est donc la confirmation que le talent et la qualité n’ont pas de frontières… Qu’il soit US, Anglais, Européen ou bien Australien, l’AOR bien pratiqué, avec ce qu’il faut d’inventivité et de qualité est donc la musique qui me sied…
Et tous les espoirs placés en SERPENTINE lors de la sortie de leur premier album, le recommandable « A Touche Of Heaven » se trouvent confirmés.
Un nom à retenir, une musique dont on doit se souvenir, et une voie royale tracée pour l’avenir.
Ajouté : Mardi 18 Décembre 2012 Chroniqueur : Mortne2001 Score : Lien en relation: Serpentine Website Hits: 8310
|