# 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
}
AUDREY HORNE (no) - Youngblood (2013)
Label : Napalm Records
Sortie du Scud : 5 février 2013
Pays : Norvège
Genre : Hard Rock
Type : Album
Playtime : 10 Titres - 43 Mins
Les vieux dossiers. Pas assez Grind pour moi, l’album éponyme d’AUDREY HORNE sorti en 2010 n’aura à l’époque fait qu’un tour dans ma platine. Un tour remarqué ceci étant. Et après une chronique flatteuse bien que transie par la souplesse de ce Hard Rock nostalgique, ce sont trois années de vie qui ressurgissent avec ce Youngblood. Entre temps, des hauts et des bas, humainement, musicalement. Mais je suis toujours là pour en parler. A croire que ce job n’a pas encore eu raison de mes nerfs. Les acteurs de la résistance ont plusieurs noms et parmi eux, il y a le trop méconnu Arve Isdal. Guitariste extraordinaire et compositeur non moins fantasque et incohérent, le monsieur s’est principalement fait remarquer au sein d’ENSLAVED qu’il a rejoint en 2002, date à laquelle il forme également AUDREY HORNE. Et si ce projet est largement plus accessible en terme de musicalité qu’ENSLAVED, il révèle également une forme de continuité entre ces deux groupes, jamais réfractaires lorsqu’il s’agit de confondre la musique avec un laboratoire à ciel ouvert. Quatrième album en maintenant treize années d’existence, Youngblood poursuit avec brio le petit numéro d’équilibriste d’AUDREY HORNE.
Et puisque c’est avoué à demi-mots un peu plus haut, je préfère vous confirmer direct que cet album, aussi bon soit-il, ne me prendra pas davantage que le temps de vie qu’il me vole actuellement pour vous parler de lui. C’est pas de l’hostilité ni même de la mauvaise volonté. Juste une envie pieuse de vite passer à autre chose. Parce que cette musique est troublante et qu’il n’est jamais bon de forcer avec un album a priori sans défauts. Oui, c’est dit. Youngblood n’a pas la moindre faiblesse et en soi, ça en fait déjà un grand album, solidement écrit, solidement exécuté. On y trouve à boire comme à manger. Du Heavy Metal bien ficelé (« Redemption Blues ») avec une basse qui tabasse et un refrain couillu à la facilité technique d’un « There Goes A Lady » plus farniente, une fascinante panoplie rythmique et vocale déploie ses ailes tout au long de cette œuvre. Quelques claviers s’infiltrent ça et là, provoquant un plaisir différé et mesuré. C’est le cas sur la sombre et kitsch « The Open Sea » et, plus anecdotique, sur « Straight Into Your Grave » qui, pour le coup, rappelle un bon vieux RAGE du genre « Straight To Hell », album Welcome To The Other Side de 2001. C’est globalement convaincant, principalement parce que c’est entrainant et je parle d’un point de vue totalement néophyte. Et s’il est vrai qu’on se laisse facilement amadouer par ce Hard Rock un peu rétro, un peu guimauve, un peu simplet, je peux aussi comprendre l’agacement de ceux qui voyaient en leur premier album, No Hay Banda (2005) une promesse vite zappée, sur Le Fol (2007) d’abord puis sur Audrey Horne (2010). AUDREY HORNE s’est progressivement liquéfié à cause de sa volonté d’institutionnaliser une vision du Hard Rock qui, à mon sens, avait encore plus de valeur il y a huit ans. Sur la forme, haut la main. Foncez l’acheter parce que c’est réjouissant, pêchu, courageux. La question est maintenant de savoir s’il est cohérent de sortir un disque qui se repose sur un revival de vieux Hard Rock des seventies et d’en faire son fond de commerce alors que potentiellement, sur le fond, AUDREY HORNE a d’autres atouts dans sa manche. Je vous laisse y réfléchir.
C’est aussi la raison pour laquelle j’ai toujours senti une forme de distance entre ce groupe et moi. Je ne suis peut-être pas seul dans ce cas. Sur l’instant, on ne trouve rien d’alarmant à l’intérieur de Youngblood. Tout y est fluide, fleuri, presque idyllique. Avec le recul et le retour du réel, le rose fuchsia devient rose pâle et on se demande si finalement, AUDREY HORNE n’est pas une microscopique entourloupe sous une montagne de qualités. Mais une entourloupe quand même.
Ajouté : Mercredi 06 Mars 2013 Chroniqueur : Stef. Score : Lien en relation: Audrey Horne Website Hits: 8266
|