# 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
}
THE GUARDOGS (FRA) - Beware Of The Dog (2015)
Label : Black Desert Records
Sortie du Scud : 15 janvier 2015
Pays : France
Genre : Stoner
Type : Album
Playtime : 8 Titres - 32 Mins
THE GUARDOGS, un groupe qui a du chien. Et de l'humour : une photo de couverture où la niche du molosse est occupée par un chiot. Un EP gravé sur une clé USB en forme d'os. Des races de canidés pour noms de scène... Voila ce qui s'appelle aller au fonds des choses. Ce gang de Stoner Rock nantais rassemble donc cinq beaux spécimen à poils: German Sheperd (chant), Pinscher (guitare), Caniche Abricot (guitare), Bobtail (basse), Dob-(r)-man (batterie). Conclusion : Ces gars là aiment les clébards et ce sont des rigolos. La question qu'on se pose avec tout ça c'est : est-ce que THE GUARDOGS est un délire entre potes ou un groupe sérieux qui préfère ne pas se prendre trop au sérieux ?
En parcourant leur site web, j'apprends que le combo a partagé l'affiche de THE TEXAS CHAINSAW DUST LOVERS à deux reprises. Et ça ne peut être un fait du hasard car à l'écoute de Beware Of The Dogs, le premier méfait des chiens de garde, on pense à The Wolf Is Rising que les amateurs de la poussière de la tronçonneuse du Texas ont sorti en septembre 2014. A n'en pas douter, si vous aimez les uns, vous aimerez les autres. On est dans le même genre. C'est un Heavy Rock décomplexé qui se dit Stoner pour faire simple mais propose une expérience musicale un peu éclectique.
Car chez les nantais comme chez les parisiens, quand on parle de Desert Rock, c'est certes pour renvoyer à cet univers musical à base de basse bien grasse, de batterie sobre et smooth, de riff fuzzés et de soli saturés. Mais c'est aussi, pour évoquer le désert au sens géographique. THE GUARDOGS comme THE TEXAS CHAINSAW DUST LOVERS sont à la croisée du Stoner, du Southern Rock et du Heavy Rock.
Les disques ont leur personnalité propres mais on retrouve des arrangements communs. Un petit battement de mains par ci, un ouh-ouh en backvoice par là, un peu de cowbell. Une façon d'utiliser des accessoires pour rompre la routine de l'opus. J'ai aussi trouvé une similarité dans les intonations des vocalistes, Clem Colt et German Sheperd... Ce chant grave qui évoque parfois Dave Gahan, notamment sur "Car Crash" (TCDL) et "Let's Take The Other Way" (THE GUARDOGS). Ces deux chansons sont un peu des soeurs jumelles. Chacune à sa façon rappelle l'autre. C'est la vraie passerelle entre les deux disques, car pour le reste chacun suit sa route.
Mais arrêtons là les comparaisons, car si les deux formations partagent une même idée de la musique, Beware of The dog dispose de tous les atouts pour être apprécié en soi.
J'évoquais Dave Gahan pour le chant, mais dans toute la prestation du groupe, il y a un petit quelque chose de DEPECHE MODE, période "Route 66" et "Personal Jesus". La batterie mid tempo, les deux guitares rentre-dedans, la basse suivant la ligne des guitares, en alourdissant le son. Cela donne des morceaux très entrainants comme "Let's Take the Other Way" ou "Doggistyle" avec leur riff autoroute, le bon groove de la rythmique et le chant chaud de German Shepard. Le genre qu'on a envie d'écouter en boucle.
Sur la durée, malgré une certaine variété, notamment due aux accessoires évoqués plus haut, les morceaux se ressemblent un peu tous. Un riff unique sur toute la chanson, quasi aucun solo digne de ce nom, pas vraiment de folies non plus du côté de la rythmique ni du chant. Du travail efficace mais qui tourne en rond. Défaut de jeunesse, dirons-nous. Car n'oublions pas que Beware of the Dogs est un premier effort d'un jeune groupe. Le gang aurait pu se contenter d'une énième resucée de KYUSS, ils ont choisi de proposer une musique qui sorte (un peu) des sentiers battus et rebattus du Stoner actuel. Certes ils y a quelques facilités, mais rien d'impardonnable. Le disque s'écoute et se réécoute avec plaisir.
Ajouté : Dimanche 16 Août 2015 Chroniqueur : Rivax Score : Lien en relation: The Guardogs Website Hits: 6588
|