# 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
}
EMERGENCY GATE (de) - Nightly Ray (2006)

Label : The Electric Co.
Sortie du Scud : 12 Mai 2006
Pays : Allemagne
Genre : Heavy Power Metal
Type : Album
Playtime : 13 Titres - 44 Mins
EMERGENCY GATE, ce serait étonnant que vous les connaissiez, mais pas improbable. En effet, si le groupe s'est formé, officiellement, en 1996, ce n'est donc qu'en 2006 qu'il sort son premier véritable album professionnel, le précédent faisant davantage office de démo. Qui date pas mal également. Si ces dix années ont été utilisées pour impressionner dès leur entrée en matière, voilà qui fait passer Nightly Ray d'un album qu'on regarde avec une moue flemmarde à un disque plutôt alléchant.
Eh bien ça valait le coup de spéculer pour subir un tel traitement auditif. Les Allemands sont des amateurs, et ils ne semblent pas avoir de problème à ce que leur effort le crie à plein tubes. Enfin, on se contentera de la métaphore car ce disque n'est plutôt qu'un vulgaire étalage déconcertant d'une musique, prétendument fun et remuante, exercée avec la plus attristante des mollesses. Il y a bien cette ouverture, « Nightly Ray », avec son feeling Heavy/Hard Rock assez lourd qui fait taper du pied, emprunté à BLACK SABBATH. Et puis on en reste là pendant la demi-heure qui suit. Il faut effectivement patienter jusqu'aux deux derniers titres pour voir son attention de nouveau attirée. « Rock Me Amadeus », reprise du tube culte de FALCO, sans raviver le génie des Australiens, s'impose comme la plage la plus agréable de ce disque, notamment avec ses synthés et refrains aguicheurs. Et puis, les paroles sont en allemand, assurément plus facile pour Fabian Kießling d'y insuffler son état d'esprit. Car, en anglais, c'est comme s'il s'était transformé en automate. Véritable pilier défectueux du groupe, il n'a absolument aucune prestance dès qu'il ouvre la bouche. Ce n'est pas le tout de vouloir varier son chant pour sonner comme Ryan McCombs ou Jonathan Davis (flagrant sur « The Inside »), de tenter les voix ultra-mélodieuses en compagnie d'une copine pour offrir une ballade popisée insipide (« In My Dreams ») ou d'y aller plus speed (« Soulstreamer », qui a le mérite de bouger un peu), son timbre est ennuyeux, bourré d'effets et hors de propos. Parfaite illustration de ce que ne sait pas faire le groupe, « Hold Me Again » et son inévitable chant nasillard sur les sempiternels mêmes arpèges, avec des explosions qui se dégonflent en plein vol car un certain frontman n'a pas la force de les propulser.
Pourtant, pour une fois qu'un premier disque ne souffre pas vraiment d'une production d'ascenseur, c'était plutôt l'occasion d'en profiter. Sans non plus être clinique, le mix est bien aéré, le son spacieux, la basse grignote derrière les guitares râpeuses, les cymbales tintent sans être esclaves des roulements de toms, et la balance est plutôt correcte, même si le chant a tendance à être en avant, alors qu'il aurait été mieux bien enterré. Cette production manque juste cruellement de puissance, et de dynamisme. Rien n'est vraiment prenant, c'est plat, fade, les tempos oscillent entre low et medium, bringuebalés par un Stefan sur le point de s'endormir d'une seconde à l'autre sur ses peaux (« Discre Pantz »). Même chez la paire de guitariste (Vari et… Fabian), il n'y a aucune fougue. Ils se contentent de faire ramper un riffing monocorde un peu gras, similaire de fond en comble, puisant par moment dans du Neo simpliste, ou bien sur des plans entre GUNS N' ROSES et les RED HOT CHILI PEPPERS, sous perfusions (« No Clown »). Il est vrai, il y a une tentative de solo correcte sur « Another Day ». Mais EMERGENCY GATE se complaît dans ses propres délires, et c'est à se demander s'ils ne le font pas exprès et se la jouent parodique au vu des mélodies extravagantes comme celles de cirque ou de comptine d'enfant (« Breed Evil »). Ce sont pourtant les claviers qui amènent les idées les plus valables. Soyons clairs, ils sont patauds, prédominent inutilement et, là où ils auraient pu apporter une bonne relance Electro, se confondent en boucles de tapisserie. Mais il y a des ambiances sympathiques (« Kill The Dying »), avec des tournures opératiques, voire mystiques (« Guardian Of Time »). Et, surtout, ils composent la dernière plage, melting-pot de Mike Oldfield, Vangelis et Jean-Michel Jarre qui fait de cet « Eternal Echo », le second titre acceptable de la galette.
Nightly Ray ne montre pas d'intérêt. Les titres se déroulent, affligeants, sans être concrétisés, comme si les Allemands n'avaient pas eu la motivation de dépasser le stade de l'ébauche. Enchaînant constamment les même plans primaires jusqu'à saturation, EMERGENCY GATE a plus l'air d'un pâle groupe de reprises (leur passif), usant les ficelles du genre sans même y prendre de plaisir. Si on distingue quelques éléments plus intéressants dans l'utilisation des synthés, le chanteur a vite fait de les détériorer. Si par malheur vous tombez sur ce disque, pensez à bien repérer les issues de secours, elles pourraient vous éviter bien des rictus.
Ajouté : Mercredi 15 Mai 2013 Chroniqueur : CyberIF. Score :   Lien en relation: Emergency Gate Website Hits: 9042
|