# 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
}
GAMMA RAY (de) - To The Metal (2010)

Label : EarMusic
Sortie du Scud : 29 janvier 2010
Pays : Allemagne
Genre : Power Metal
Type : Album
Playtime : 10 Titres - 48 Mins
Avec plusieurs albums moyens au compteur ces dernières années, sans parler d’occasions manquées ou de tentatives de rabibochage douteuses (avec HELLOWEEN…), GAMMA RAY suscite bien des interrogations, voire même une certaine résignation. Comme si ce dinosaure, car c’est un dinosaure qui a en son temps su pondre des hymnes magnifiques de Heavy Metal (« One With The World », j’en tremble encore) et des galettes mémorables (Land Of The Free, Somewhere Out In Space, PowerPlant), donnait le sentiment d’appartenir définitivement au passé.
Et puis, bien sûr, comment ne pas évoquer cette fâcheuse manie de s’inspirer outrageusement des classiques d’antan, d’autres dinosaures comme JUDAS PRIEST ou IRON MAIDEN. C’était déjà flagrant sur No World Order (un « Solid » calqué sur le « Rapid Fire » de JUDAS PRIEST) ou de Land Of The Free II (« Opportunity » pompé sur « The Clairvoyant de MAIDEN). Pire, le père Hansen se singe lui-même, puisqu’il aime se répéter et maîtrise le copier/coller des « Future World » et autres « I Want Out ». Et alors là, les exemples sont trop nombreux pour être tous cités …
Donc, GAMMA RAY débarque dès le début 2010 avec un To The Metal ! qui a le mérite d’annoncer la couleur. Bien que le titre d’ouverture soit très surprenant : « Empathy » monte en puissance et accouple étrangement LORDI à DEATHSTARS pour un résultat des plus déroutants. La suite peut décourager les plus motivés. Michael Kiske est de la partie sur le traditionnel et sans surprise « All You Need To Know ». Cette collaboration n’a rien d’exceptionnelle puisque l’ancien chanteur d’HELLOWEEN était déjà de la partie sur le « Time To Break Free » de Land Of The Free. C’était il y a 15 ans, alors question évènement, on a fait mieux quand même. Quant à « Time To Live », il démontre que GAMMA RAY retombe vite dans ses travers, dans la mesure où Hansen pourrait chanter « I Want Out » lors du refrain, cela n’aurait rien de choquant …
Il serait trop long, de toutes façons, d’énumérer toutes les similitudes que l’on peut trouver sur To The Metal !. Beaucoup trop long. L’intro de « Rise » lorgne du côté d’IRON MAIDEN, sans état d’âme. « Shine Forever » a des airs de « Painkiller ». Les solos de « Deadlands » portent la mention la mention « copyright Ritchie Blackmore / DEEP PURPLE ». Alors, manque d’inspiration devenu permanent ? Ou hommage appuyé aux gloires du Heavy Metal ? Où veut en venir exactement Kai Hansen ?
Le titre de l’album et le morceau éponyme désignent la première solution. Admettre que « To The Metal » fait légèrement penser au « Metal Gods » de JUDAS PRIEST tient du doux euphémisme. Malgré tout, avec ce riff imparable, ces chœurs puissants, comment résister à tant de facilité ? Parce que franchement, ce « To The Metal », qu’est ce que c’est bon ! Et là est tout le paradoxe. Peut-être préfère-t-on voir GAMMA RAY évoluer en terrain connu. Ce « Rise », symbole d’un Power Metal accéléré, comme on l’aime, avec un bon refrain accrocheur. Ce « Mother Angel », mid-tempo à la « Fire Below » (No World Order), doté d’un refrain magnifique et d’un superbe solo. Et ce « Deadlands » qui arrache tout ...
Après écoute de To The Metal !, la question demeure. GAMMA RAY est-il devenu une parodie ? Un tribute-band ? Est-il rentré dans le moule de ces groupes qui finissent toujours par pondre le même album ? To The Metal ! n’est surtout pas un mauvais disque. Certes, Kai Hansen montre quelques signes de faiblesse au micro (« Time To Live »). L’originalité n’a rien d’une ligne de conduite. Mais To The Metal ! dispose quand même d’arguments convaincants et ses moments de bravoure.
Tracklisting : 1 – Empathy 2 – All You Need To Know 3 – Time To Live 4 – To The Metal 5 – Rise 6 – Mother Angel 7 – Shine Forever 8 – Deadlands 9 – Chasing Shadows 10 – No Need To Cry
Ajouté : Jeudi 15 Avril 2010 Chroniqueur : NicoTheSpur Score :     Lien en relation: Gamma Ray Website Hits: 12183
|