# 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
}
THE DILLINGER ESCAPE PLAN (usa) - One Of Us Is The Killer (2013)

Label : Party Smasher
Sortie du Scud : 17 mai 2013
Pays : Etats-Unis
Genre : Mathcore
Type : Album
Playtime : 11 Titres - 41 Mins
En seize ans de carrière, THE DILLINGER ESCAPE PLAN s'est permis le luxe d'inventer un style, de l'élargir, le transformer, l'adapter, sans jamais se trahir ni stagner.
Le genre de tour de force assez rare dans un univers musical prompt à la redite, a l'exagération, à l'auto satisfaction… Mais c'est l'apanage des grands, sans aucun doute.
Que les esprits chagrins sortent leur mouchoir, mais le petit monde du Métal aura eu, comme les autres cousins plus éloignés, des meneurs et des suiveurs.
LED ZEP, BLACK SABBATH, MOTORHEAD, VENOM, IRON MAIDEN, METALLICA, RAGE AGAINST THE MACHINE, KORN, et DILLINGER.
Le reste?
Des digressions. Des extrapolations, des adaptations, reprises, j'en passe et des moins subtiles.
Beaucoup, depuis 1997 sont montés au créneau. Ont tenté leur chance, parfois avec brio, parfois d'une façon assez pathétique.
Et c'est tant mieux. Parce qu'une tour d'ivoire n'est jamais aussi sécurisante que lorsqu'elle essuie maints assauts sans trembler.
Et si DEP s'y est retrouvé souvent seul, ça n'est pas pour autant qu'ils ont fini par virer incontrôlables, ou imbus. Non, ils se sont battus, ils s'y battent encore, pour repousser les limites, pour dessiner un nouveau contour, gommer des imperfections, balayer des scories.
A compter que l'on en trouve encore.
Alors, après avoir lancé leur nouveau single « Prancer », sur un net toujours aussi avide de nouveautés, ils nous offrent aujourd'hui le reste, l'album, le cinquième longue durée.
Et ça se fête ce genre d'anniversaire.
Avec beaucoup de bruit, et de malice.
One Of Us Is The Killer, et leur propre label Party Smasher sont plus que des déclarations d'intention. Ce sont des affirmations, de fausses questions aux réponses implicites.
« Nous prenez vous tels que nous sommes ? »
La réponse vous appartient. La mienne est déjà prête depuis très longtemps.
Car les DEP n'ont pas l'intention de changer quoi que ce soit à leur univers. Il fut, est, et sera toujours le même. A quelques variantes près. Ce que démontre ce nouvel album qui n'est qu'une progression logique de plus par rapport à Ire Works ou Option Paralysis.
Depuis ceux-ci, exit Jeff Tuttle, parti vers d'autres horizons musicaux. Et re-bonjour James Love, déjà présent sur la tournée Miss Machine. Billy Rymer est quand à lui toujours là.
Mais je serais tenté de dire que ceci n'est qu'un point de détail tant l'osmose entre Ben, Greg et Liam est compacte, puissante et primordiale. Ils ont trouvé l'angle, et maintenant, ils enfoncent le clou, ils repoussent les murs.
One Of Us Is The Killer est plus concis qu'Ire Works. Il est plus concentré qu'Option Paralysis. Les morceaux sont moins disparates, et offrent plus d'ambiances en leur propre sein que dans l'œuvre globale.
Les influences ont été resserrées et l'ombre de FAITH NO MORE/Patton plane même sur certains segments (le cauchemardesque « Magic That I Held Your Prisoner »).
Pas d'impatience toutefois, car la trame est bien là. Pas de revirement ici, ni de retour aux sources, juste une continuité laissant sa part à l'imprévu d'une façon très sous jacente.
Des arrangements novateurs, parfois étranges, parfois coulant de source, des structures un peu moins systématiques, des passages au chausse pied cohérents, une ligne vocale inhabituelle… Tout se découvre au fur et à mesure des écoutes, et la redondance n'est pas de mise.
Si les titres éthérés ont laissé la place à des morceaux plus ambigus (« Crossburner », sur lequel aucun pied ne sait danser, « Prancer » et son accroche plus complexe qu'il n'y parait, « Nothing's Funny » et sa comptine nauséeuse…), on trouve toujours des pistes douces-amères (« One Of Us Is The Killer » et son intro à la PORTISHEAD, « The Threat Posed By Nuclear Weapons » et ses arpèges tendus soudain déchirés par une rythmique acérée), des fulgurances initiales (« When I Lost My Bet » et sa batterie incroyable, « Understanding Decay » qui pourrait sortir d'Ire Works), le tout dans un emballage moderne, sous un éclairage différent, et osons le mot, adulte.
Bien sur, les réfractaires trouveront toujours matière à la glose stérile sur la déévolution d'un groupe qui selon eux se contente de faire du bruit tout en faisant croire à des structures logiques, mais si la simple écoute de « Paranoia Shields » ne suffit pas à faire taire ces sinistres évêques du bon goût, alors rien ne le pourra.
Pourtant, ce morceau synthétise tout ce que le DEP de 2013 a à nous offrir.
Le respect d'un credo, tout en refusant la stagnation.
Et si, c'est possible.
DILLINGER a son propre dictionnaire, tout comme Christian VANDER avait le sien. Mais si le Kobaïen n'est pas la langue d'usage chez les américains, leur laïus est tout aussi introspectif et magique. Il est difficile d'approche, je le concède, mais il est salvateur pour peu qu'on laisse légèrement tomber le voile du doute.
Ben, je dois te rencontrer dans quelques jours, et aucun doute que ton discours sera aussi cohérent et convaincant que ta musique. Car tu fais partie de cette caste de musiciens à part, qui négligent les modes, les habitudes, et refusent les conventions, et tracent leur route, non comme une ligne continue, mais comme une succession d'étapes.
Mais One Of Us Is The Killer est plus qu'une simple étape. C'est une carte.
La carte du tendre d'un univers unique que l'on prend plaisir à parcourir de nouveau, régulièrement, religieusement.
Sans boussole.
Et tant pis pour ceux qui se perdent en chemin.
Ajouté : Mardi 18 Juin 2013 Chroniqueur : Mortne2001 Score :      Lien en relation: The Dillinger Escape Plan Website Hits: 6984
|