# 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
}
IRREPRESSIBLE WRATH (FRA) - Plagues For An Empire (2012)
Label : Auto-Production
Sortie du Scud : janvier 2012
Pays : France
Genre : Deathcore
Type : Démo
Playtime : 4 Titres - 21 Mins
Mon boss est un visionnaire. Quand je me suis dévoué pour taper la première démo d’IRREPRESSIBLE WRATH, il m’a instantanément répondu que j’avais porté mon dévolu sur cet enregistrement uniquement à cause d’un seul détail : « mixé et masterisé par Lucas D’Angelo, guitariste de BETRAYING THE MARTYRS ». Le bougre a eu raison. Pourtant, ce nom ne m’était pas inconnu. La faute aux réseaux sociaux. Ceux qui les fréquentent avec assiduité auront peut-être déjà vu le blaze d’IRREPRESSIBLE WRATH ici ou là. Avec ce tout premier coup de folie, les Parisiens m’ont donné l’occasion inestimable d’associer un son à ce nom. Et quand il vaut pareil pesant d’or, inutile d’aller chercher outre-Rhin ou outre-Altantique les futurs diamants. La relève ne trône pas bien loin de notre Dame de Fer. Reste un couac. Ces mecs font du Deathcore. Et je sais que pour beaucoup, ces neuf lettres irritent la cornée.
Alors pour changer un peu, je ne vais pas jouer au prêchi-prêcha. Il faut savoir que ces Parisiens sont relativement jeunes et qu’ils savent à quoi ils s’exposent en pratiquant le Deathcore, surtout de manière aussi ouverte et revendiquée. Une volée de bois vert, ni plus ni moins. Alors ils y sont allés au culot. Et quelque part, ce papier prouve que ça a marché. Cette première démo, répondant au doux nom de Plagues Of An Empire est une décoction corrosive, très âpre, même si divers éléments un peu mielleux viennent briser l’acidité de leur musique. On retrouvera tout d’abord un sens certain de la mélodie. Sans aller jusqu’à parler de Death technique, les deux guitares accordent leurs envies pour proposer tantôt des riffs brutaux en simili-breakdown (avec le final bien crabby du titre éponyme), tantôt des passages brossés qui ne sont pas sans évoquer AS I LAY DYING. On trouvera d’ailleurs quelques ressemblances fortuites entre « One Way To Damnation » et le morceau « Parallels » de ces derniers, notamment l’intro mélodique et le refrain en chant clair. Ah oui, il y a du chant clair dans IRREPRESSIBLE WRATH. Et si les refrains sont majoritairement bien écrits et accrocheurs, les vocaux censés leur donner du corps manquent un peu de panache à mon goût. Quitte à mettre du chant clair, il faut foncer jusqu’au bout et tenter davantage d’envolées. Celui de « One Way To Damnation », sans sonner particulièrement faux, ne permet pas à la compo de vraiment s’envoler. Par contre, l’alternance entre screams broyés à la limite du désagréable et growls est très intéressante. C’est d’ailleurs la première fois que j’entends un chant crié qui me fait penser à ce point au regretté Tobi de WE BUTTER THE BREAD WITH BUTTER. L’alternance dans les lignes vocales ainsi que l’omnipotence des guitares rendent cette première démo explosive et savoureuse. IRREPRESSIBLE WRATH écrit certes un Deathcore / Metalcore classique, pas très éloigné de ce qui se fait actuellement (il ne faut pas se mentir), mais le fait avec générosité, conviction, pétillance. Les sept minutes un peu brodées de « Torn Inside » présentent également un groupe qui manie encore les arrangements avec timidité. Une intro et une outro au piano, un final épique, un refrain aérien, les Parisiens ont cette volonté d’ouvrir leur jeu à des choses plus « composées ». Là encore, si on sent et on comprend l’idée, la mise en application est hésitante et je ne pourrais que conseiller à la formation de se lâcher et de jouer le jeu à fond pour son éventuel premier album. A l’instar de BETRAYING THE MARTYRS qui a commencé peu ou prou avec rien (ou plutôt si, avec une sale réputation) et qui est désormais capable d’écrire des morceaux très arrangés comme « Man Made Disaster », IRREPRESSIBLE WRATH a tout intérêt à se trouver une marque de fabrique et à foncer dans le tas, quitte à se mettre quelques cerveaux étriqués à dos.
C’est tout ce que j’avais à dire sur cet essai. Je suis loin d’avoir atteint l’extase auditive mais il y a un truc. Un truc qui mérite d’être creusé, qui mérite d’être exploité. Je me permets de me dire ça car eux et moi sommes de la même génération et que je suis persuadé que les AUGUST BURNS RED, AS I LAY DYING, BORN OF OSIRIS et BETRAYING THE MARTYRS rythment nos soirées de la même manière. Les IRREPRESSIBLE WRATH ont du talent dans les pattes, même s’ils donnent parfois l’impression d’évoluer à tâtons. Mais dans le contexte actuel, je crois réellement que de sortir une démo de cette qualité, de cette maturité est quelque chose qu’on peut qualifier d’encourageant. Ceci étant, tout reste à faire. Ils ont fait la démarche pour avoir un avis. Le voilà. Et j’espère bien, car je sais qu’ils vont me lire, leur avoir apporté quelques clés.
Ajouté : Mercredi 19 Septembre 2012 Chroniqueur : Stef. Score : Lien en relation: Irrepressible Wrath Website Hits: 8576
|