# 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
}
MURDER CONSTRUCT (usa) - Results (2012)
Label : Relapse Records
Sortie du Scud : 28 aout 2012
Pays : Etats-Unis
Genre : Death / Grind Metal
Type : Album
Playtime : 11 Titres - 29 Mins
Il y a des albums qui sont difficiles à évoquer. Et je parle en connaissance de cause. Le Grind, cette fantastique entité, peut-être celle qu’on est le moins apte à contrôler quand on parle de musique extrême. Des nuances, il y en a assurément dans le répertoire de MURDER CONSTRUCT, même si leur truc à eux, c’est plutôt le Brutal Death. A l’instar des DYING FETUS, BRUTAL TRUTH, ROSE FUNERAL et autres GENERAL SURGERY, on ne sait pas sur quel pied danser. Oh, je vous vois venir de loin. Il n’y a pas mille façons de faire un bon album quand le cœur balance. Figurez-vous que si. Et ces américains explorent avec Results, leur premier bébé après la démo éponyme de 2010, un territoire franchement hostile, sur lequel seuls les plus téméraires se risquent.
L’idée, c’est que ça fasse boom. Vite et bien. Voilà pourquoi on retrouve sur cette galette des morceaux très courts, (seuls deux d’entre eux, « The Next Life » et « Resultados », excèdent les trois minutes) qui évoqueront forcément à un moment ou à un autre la frénésie d’un NAPALM DEATH. Est-ce vraiment étonnant quand on a à son bord Travis Ryan, chanteur de CATTLE DECAPITATION, Leon Del Müerte, proche collaborateur d’EXHUMED et NAUSEA ou encore deux gusses de chez BAD ACID TRIP ? Vous l’aurez peut-être deviné, MURDER CONSTRUCT est un all-star band, un écho très californien aux Suédois de LOCK-UP. Et pourtant, les choses vont un peu plus loin qu’un copycat, qu’une vulgaire copie américanisée. Si le dollar est revisité sur cette pochette apocalyptique, n’y voyez pas le plus petit hommage. MURDER CONSTRUCT, c’est la force de frappe du Grind, le politiquement incorrect, le pavé dans la mare, le fracas de la tôle froissée. Avec ses mauvais airs d’accident de la route, cet album s’empale dans nos oreilles. Des morts, c’est tout ce qu’il reste. S’il y a de la vie, ce sont uniquement les cœurs de bêtes attirées par ce charnier qui battent. Ces garçons talentueux ne nous laissent aucune chance de survie, pas la moindre petite bulle d’air, parce que leurs pamphlets sont concis, destructeurs, précis. Un sniper ne s’y prendrait pas mieux. Les guitares aiguisées, Results part au front. C’est peut-être là leur meilleure arme, eux qui n’ont de cesse de juxtaposer riffs sombres et nerveux. Tout ça est finement écrit, exécuté au millimètre. Ça sent le chaos à plein nez. Il n’y a pas ce fâcheux sentiment d’approximation, même si certaines fois, leur Death / Grind part dans des directions inattendues (« No Question, No Comment »). Mais alors, pourquoi ce disque est-il si « difficile à évoquer » ? La réponse est aussi simple qu’évidente. Il met mal à l’aise. La voix gutturale de Travis est parfois surplombée de hurlements stridents, très dérangeants, comme sur « Gold Digger ». C’est ce malaise violent, convulsif, presque palpable qui gêne. MURDER CONSTRUCT n’est pas cette sortie de conventionnelle qui passe inaperçue, même si c’est là sa triste fatalité. Elle mériterait davantage qu’une reconnaissance éphémère, car le travail réalisé sur le songwriting est juste fabuleux et que la production d’une rare justesse met en avant les plus beaux atouts de ce disque. Mais c’est finalement « Resultados » qui portera le coup fatal. Presque sept minutes d’une musique torturée, aliénée, sans états d’âme mais pas sans vie. Elle est surprenante, à l’image de cet effort aussi expéditif que létal. Quelques sonorités indiennes et des fragrances d’encens viennent parachever ce succès absolu.
Si ce n’est pas un des meilleurs albums de Death / Grind de l’année, ça y ressemble. Ils ont été nombreux en 2012 et sur l’instant on a même cru tenir le grand vainqueur de cette féroce bataille. Mais c’était illusoire, parce qu’après son quart d’heure de gloire, Results va sombrer dans l’anonymat. La faute à d’autres formations qui prétendront elles aussi à leur place au soleil, avant de s’effacer à leur tour. C’est un cercle vicieux dans lequel MURDER CONSTRUCT s’est engagé. Triomphe aujourd’hui, déchéance demain. Ils peuvent néanmoins être fiers des coups portés et des bleus infligés.
Ajouté : Mercredi 07 Novembre 2012 Chroniqueur : Stef. Score : Lien en relation: Murder Construct Website Hits: 8548
|