# 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) - You (2013)
Label : ZYX Music
Sortie du Scud : 25 janvier 2013
Pays : Allemagne
Genre : Death Heavy Metal Mélodique
Type : Album
Playtime : 12 Titres - 46 Mins
Quel plaisir de retrouver les Allemands en offensive. Il faut dire que leur précédent EP, même s'il s'agissait d'un petit projet mené à bien pour le fun, avait de quoi inquiéter quant à la teneur de leur prochaine mouture. Il n'en est rien. EMERGENCY GATE demeure bel et bien cadré dans ce style plus personnel qu'ils étaient parvenus à construire sur The Nemesis Construct.
Pas de grande surprise, donc, si ce n'est une production qui continue de s'affiner pour permettre au son des Teutons d'exploser de toute sa verve. Quoi de mieux qu'un membre pilier du groupe pour savoir précisément ce dont leur musique a besoin ? C'est, en effet, Mario qui s'est chargé de tout le mix. La tonalité Metalcore s'est estompée par rapport à l'album précédent, laissant ainsi davantage d'ouverture aux phrases mélodiques. Car, même si le groupe s'avère toujours aussi peu inspiré pour titrer ses morceaux, il connaît par contre la recette pour les rendre accrocheurs, et la met judicieusement à profit sur la dynamite qu'est « You ». Et puis, rappelez-vous qu'il pense être à l'origine d'une nouvelle mouvance. Celle de combiner Death Mélodique et musique électronique. Sur You, les apports du genre gagnent sensiblement en intérêt, se voyant bien mieux intégrés aux structures des compositions, jusqu'à les façonner pour certaines (« Mindfuck »). Évidemment, la composante Electro demeure sujet de discorde et peut autant irriter que se révéler un apport indispensable au caractère du morceau. La réussite principale étant d'avoir intégré, à chacune des plages, des saveurs synthétiques bien différentes et recherchées, des simples plages ambiantes aux tournures Synthpop un peu kitsch. Ainsi, d'un côté on peut avoir le Metalcore boosté de boucles électroniques de « Moshpit », très immédiat. Et de l'autre, « Feeling Inside », qui s'aventure sur un Dance-core à la XE-NONE un tantinet faiblard. Également, « Back From The Grave », malgré des leads convaincants, a bien du mal à se montrer intéressante, et ce, en étant piste la moins ornée de ces bruitages ; à l'inverse du dernier album où celle de ce type était la plus réussie. Ce qui témoigne, tout de même, de la progression du groupe dans l'agencement de son identité sonore.
Quand il s'agit de délivrer des tempos relevés et d'associer notes catchy et rythmique énergique, EMERGENCY GATE assure la partie du boulot et procure un divertissement sympathique quelques minutes durant. En dépit d'une composante mélodique plus présente, les titres n'ont aucun mal à se montrer des plus bagarreurs, avec des refrains clairs qui restent en tête. « Force United » en est un excellent exemple, estampillant ses couplets impartiaux de lignes vocales claires très "Soilworkiennes" et quelques breaks Dance, qui ne sont pas sans rappeler le « An End To The Age Of Man » de The Nemesis Construct. Sous l'enrobage synthétisé, notons le grain rugueux très appréciable de la basse qui rappelle constamment que la part d'agressivité Metal n'est pas oubliée. Le groupe se contente pourtant de jouer un Death Mélodique moderne des plus convenus, que ce soit dans l'articulation des titres (« Liar's Truth ») ou même, tout simplement dans la qualité du jeu, avec des riffs gras simplistes, comme sur « Regret » qui parvient tout au plus à se démarquer avec ses alternances de breaks pianotés et déferlantes puissantes. Mais quand les Allemands s'essaient à la douceur, ils chancellent et luttent pour valoriser les morceaux. Si Matthias s'est amélioré, tant dans les vociférations qu'en chant clair (« rEvolution », réelle bourrasque ténue et entraînante), il n'accroche pas l'oreille à chaque occasion. Surtout sur le registre de la ballade comme peuvent l'être « Breathless » - et ses orchestrations samplées téléphonées - ou « Lean On Words ». Dommage pour cette dernière car, à l'instar de « Say Goodbye », sa durée supérieure permettait à l'instrumentation de varier les ambiances, et d'offrir quelques solos de bonne facture - difficile de généraliser au disque entier.
EMERGENCY GATE endosse les facettes à chaque nouvelle production. Si ce disque-ci présente un visage davantage élaboré vis-à-vis des perspectives musicales du combo, notamment pour ce qui est des influences électroniques qui sont nettement plus peaufinées qu'il y a trois ans, sa volonté d'en incorporer, justement, toujours plus et d'horizons variés peut parfois l'handicaper sur la teneur de certains beats entre deux guitares saturées. Par ailleurs, l'aspect compact de The Nemesis Construct lui octroyait une dynamique mieux gérée que ce You qui s'essouffle souvent en plein envol, à cause de titres ennuyeux.
Ajouté : Mercredi 15 Mai 2013 Chroniqueur : CyberIF. Score : Lien en relation: Emergency Gate Website Hits: 7380
|