# 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
}
YEAR LONG DISASTER (usa) - Black Magic: All Mysteries Revealed (2010)
Label : Volcom Records
Sortie du Scud : 8 Mars 2010
Pays : Etats-Unis
Genre : Hard Rock Epais
Type : Album
Playtime : 11 Titres - 42 Mins
Pas toujours facile d’être « le fils de ». Surtout dans l’univers bien glauque du business. Après, tout dépend de la situation. Soit on est le fils d’un has been, d’un never been, et là, personne ne vous attend, soit l’héritage familial est lourd à porter en cas de figure paternelle/maternelle mythique et personne ne vous rate au tournant. Alors après, les cas de figure se multiplient. Après tout, rien ne vous oblige à choisir la même voie que papa/maman. Ce qu’a brillamment fait Stella McCartney par exemple. Ou alors choisir la même voie, et garder le même style, en ayant le même talent, tel Jeff Buckley, qui reste un cas sacrément isolé.
Ou alors se rendre compte qu’on ne fera jamais mieux que son père, et ne pas tenter de le faire.
Il semble que Daniel Davies ait fait ce choix.
En même temps, je le comprends. Se lancer sur le créneau de la pop précieuse aux paroles délicieusement sociales/dandy, c’était perdu d’avance. Essayer de surpasser « Sunny Afternoon », « Lola » ou « Waterloo Sunset », c’est le genre de pari débile qui finit par une gamelle mémorable. Alors autant emprunter un chemin différent.
Et finalement, lorsque l’on met la carrière du fils en parallèle de celle du père, il y a plus de points communs que l’on ne croit. Après tout, Ray Davies n’a-t-il pas balancé un jour un gigantesque pavé intitulé « You Really Got Me » à la face incrédule des swinging sixties ? Et ce titre n’a-t-il pas été repris un beau jour de 1978 par une bande de chevelus hirsutes du nom de Van HALEN ?
Alors…la frontière en fin de compte est mince.
Et c’est pour cela que Ray a le droit d’être fier de son fiston. THE KINKS/YEAR LONG DISASTER même combat ?
Pas tout à fait. Car si la musique de YLD est de fort bonne facture, on est quand même à cent lieues du sens du détail des KINKS.
YLD donne dans le Hard Rock bien gras, aux riffs épais comme une purée sans crème fraîche, mais loin d’être simpliste ou passéiste, leur musique ne manque pas une occasion de s’envoler, portée en cela par la voix très versatile de Daniel. En témoigne le titre d’ouverture, très catchy, « Show Me Your Teeth » et son lick de guitare très stonien. Mid tempo impeccable et sans complexes, « Love Like Blood » confirme cette très bonne première impression. « Stranger In My Room » suinte les 70’s par tous les pores. Ce Rock saignant, un peu crad n’cheap comme un mégot oublié dans un verre de bourbon.
On passe parfois par des ponts bizarroïdes et des emprunts à peine déguisés aux aînés de BLACK SABBATH sur « Sparrow Hill », avec en prime un solo bien plombé, pour se jeter à corps perdu sur le morceau suivant, « Seven Of Swords », dans les vagues brûlantes d’un ZEP acoustique. C’est d’ailleurs sur ce titre que la voix de Daniel ressemble le plus à celle de son père, avec de dédain flegmatique si caractéristique.
Le down tempo urbain reprend bien vite ses droits grâce à « She Told Us So », vite suivi d’un « Venus At The Crossroads » bien teigneux.
« Foggy Bottom » est ses arpèges latinos d’intro casse le rythme très intelligemment, sorte de Chris Isaak moderne lorgnant du côté de la West Coast, et on se finit sur le binaire cassé de « Cyclone », qui porte merveilleusement bien son nom et achève l’album d’une touche de violence bienvenue.
Black Magic: All Mysteries Revealed pourrait se ranger aux côtés d’un JET en plus lourd et plus contrôlé. Presque stoner par moment, mais suffisamment brillant pour en éviter les écueils répétitifs et pénibles, l’album fait preuve d’une grande cohésion sans toutefois négliger la diversité. Le réel talent de Daniel à la guitare, son don inné pour trouver des riffs inventifs et accrocheurs lui permet de dérouler tranquillement sur la piste, aidé en cela par une voix attachante et pleine de feeling très personnel.
Rien de surnaturel, mais 40 minutes de vrai Rock.
Après tout, quand Lemmy himself dit de vous « Year Long Disaster joue le Rock comme il doit être joué », c’est qu’on mérite le détour quand même, non ?
Ajouté : Vendredi 02 Juillet 2010 Chroniqueur : Mortne2001 Score : Lien en relation: Year Long Disaster Website Hits: 9810
|