# 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
}
DIVINEFIRE (se) - Farewell (2008)
Label : Rivel Records
Sortie du Scud : 20 Juin 2008
Pays : Suède
Genre : Power Metal chrétien
Type : Album
Playtime : 9 Titres - 43 Mins
Je n'ai pas mis longtemps à comprendre où DIVINEFIRE voulait en venir. La présence de musiciens aux motivations atypiques dans le milieu Metal m'avait déjà mis la puce à l'oreille. La plupart d'entre eux joue d'ailleurs avec l'excellent frontman Rob Rock qui, on le sait, a des convictions religieuses profondes et n'hésite pas à les chanter. Ainsi on retrouve sur ce quatrième album de DIVINEFIRE le bassiste Andreas Olsson et le guitariste soliste Carl Johan Grimmack, mais Christian Liljegren (chant) et Jani Stefanovic (batterie, guitares, claviers) sont les vrais cerveaux du combo suèdois.
Tout ça pour vous dire qu'on a affaire ici à un album de Metal chrétien, dont le "God Bless You All" dans le livret ne laisse planer aucun doute ...
Avant d'écouter un disque comme celui là, et afin de garder une objectivité totale, on essaye de passer outre le discours d'un groupe dont on ne partage pas forcément les idéaux. On se dit même que si on tolère que neuf groupes de Black Metal sur dix ne parlent que du Malin et de l'anti-christianisme, on peut bien admettre que certains louent le "Seigneur tout puissant" dans leur musique. Malgré toutes ces bonnes intentions, certains éléments de ce Farewell me laissent sceptiques. Entre autres, les growls de Hubertus Liljegren constituant l'alternative agressive au chant plus mélodieux de Christian Liljegren, on se prend à soupçonner une mise en scène stéréotypée du combat entre le Bien et le Mal, les growls incarnant le côté "Evil" ...
Ne m'en veuillez de ne pas avoir creusé plus sérieusement le problème ou le concept de l'album, puisque ce type de cliché facile a le don de me mettre sur les nerfs. J'imagine les membres de DIVINEFIRE tombant nez à nez avec ceux de GORGOROTH, et je ne sais pas pourquoi mais c'est à une boucherie que je pense ...
J'ai même noté que DIVINEFIRE avait tendance à répéter les mêmes prières tous les Dimanche, au point de se retrouver avec des titres de chansons ("Unity") quasi identiques à celles des albums précédents ("United As One" sur Hero). Alors vous me allez me rétorquer, et vous aurez raison, que sur chaque album de DARK FUNERAL, il y a des mots clés tels que "Satan", "Evil" et "Antichrist". Alors soit, intéressons nous à la bande-son et rien d'autre ...
Pour faire court, DIVINEFIRE propose un Power Metal mélodique à la MASTERPLAN, avec des touches progressives (largement empruntées à SYMPHONY X et notamment sur les accalmies) et des passages vraiment extrêmes, tant au niveau du rythme que des parties de guitares acérées. Plusieurs fois d'ailleurs, à travers ces incursions infernales, on pense à CHILDREN OF BODOM, la seule différence résidant dans le chant puisque les growls d'Hubertus se substituent à la voix Black d'Alexi Laiho ... Ces références prouvent dans tous les cas que les gars de DIVINEFIRE sont d'excellents musiciens, le soliste Grimmack en tête, qui en fait la démonstration à plusieurs reprises tout au long de Farewell. A noter aussi quelques envolées vocales de Mats Leven (ex-AT VANCE et ancien chanteur de Malmsteen), pour donner un peu plus de pêche à l'ensemble, ce qui révèle aussi le manque de puissance dans la voix de Christian Liljegren. Eh oui, que voulez-vous, je ne suis pas sûr que les Petits Chanteurs à la Croix de Bois soient la meilleure école pour chanter du Heavy Metal, mais bon ...
Côté chansons, on note des moments intéressants, idéalement représentatifs de la mixité musicale dont je vous parlais, comme "You'll Never Walk Away" ou "My Roots Are Strong In You". DIVINEFIRE retombe pourtant bien vite dans ses travers, car dans l'ensemble Farewell ne casse vraiment pas la baraque. Après plusieurs écoutes, je suis au regret de n'avoir rien retenu de vraiment marquant, malgré un savoir faire et un professionnalisme incontestables.
Et avec "Heal Me" ("guéris moi"), l'insupportable atteint son paroxysme. Visez un peu les paroles : "me voilà, laisse moi te montrer le chemin" ..... Oh bordel, si on traduisait tout on se croirait dans un album de chialeuse française (ou américaine si on pense à Mariah Carey) : dans le désordre, ça donne "ton royaume béni", "le Christ incarne l'amour dans sa totale perfection", "tu seras toujours là pour moi", "le Christ a gagné, il a ressuscité pour l'Humanité" (putain il joue l'Euro 2008 aussi Jesus ?!!!), "cher seigneur, guide moi sur le chemin", ...
Moi je veux bien qu'à travers la musique on délivre des messages d'espoir et d'amour, je n'ai rien contre ça. Au contraire. Mais pour chanter Dieu, il y a les églises, les cours de catéchisme, la messe, le gospel et même Ophélie Winter avec son "Dieu m’a donné la foi" (et une grosse paire de nichons). Alors laissez le Heavy Metal en dehors de ça…
Ajouté : Jeudi 12 Juin 2008 Chroniqueur : NicoTheSpur Score : Lien en relation: Divinefire Website Hits: 10243
|