# 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
}
ROT MONGER (usa) - Never Gets Better (2015)
Label : Auto-Production
Sortie du Scud : 5 juin 2015
Pays : Etats-Unis
Genre : Crust Grind
Type : Album
Playtime : 8 Titres - 27 Mins
"On veut juste faire de la musique qui nous fasse oublier à quel point nous détestons le monde qui nous entoure".
Ce sont les membres de ROT MONGER eux mêmes qui l'affirment. En même temps, quelques lignes plus bas, ils précisent leur rôle individuel dans le groupe.
"Matt dort. Ben déteste. Zach boit. Jason pense."
Mais dans tout ça, lequel joue ? On se le demande, même si le boucan s'échappant des huit pistes de cet EP me permet de soupçonner que chacun de ces branleurs apporte sa pierre à l'édifice bruitiste.
Formé en 2014, ROT MONGER n'aura pas traîné avant de nous larguer sa première déflagration. Selon "leur" légende, ce premier LP/EP aurait été composé en six mois et enregistré en cinq heures. En gros, un mélange entre les méthodes des BEATLES et des RAMONES, sauf que les Fab Four n'auraient pas pu imaginer tel bordel dans leurs pires cauchemars, et que les faux frères, même sous amphés n'auraient jamais joué à cette vitesse sur des morceaux aussi bordéliques.
Pour faire simple, le quatuor de Spokane, Washington n'envisage le bruit que sous sa facette la plus chaotique. Guitares si épaisses et gluantes qu'elles collent au palais des heures après avoir goûté le beurre de cacahuète, rythmique en free lance qui décide elle même de la direction à suivre, la sienne bien évidemment, et chant en schizophrénie, alternant les grondements de plantigrade et les couinements de souris en rut.
Crust/Grind, l'appellation n'est pas exagérée. Si depuis quelques temps la dénomination "Chaotic Hardcore" semble rencontrer un joli succès sur les blogs, on pourrait l'adapter aux américains, tant leur bordel ambiant ne semble supporter aucune limite ni contrainte. Chaotic Grind ? Ca me plaît, je l'avoue, et c'est assez fidèle. Parsemé de samples cocasses vantant par exemple les bienfaits de l'herbe qui fait rire, Never Gets Better semble justifier son titre à chaque minute qui passe, appuyant sans cesse sur le champignon tout en montant les potards de quelques crans.
En tout cas, il est indéniable que les gus s'amusent beaucoup. "I Am a King" s'écrient-ils sur la farce parlée "22122" ? Des rois, je veux bien, des empereurs dirais je même, régnant sur un monde fait de stridences, de riffs graves et rouillés, à la distorsion si grasse qu'elle semble sortir d'une vieille friteuse. Vous pensez que je délire, que je vais trop loin ? Alors écoutez le court instrumental final "C-Arson" qui sonne comme le moteur d'une vieille Torino grippé par les années... Kapish ?
Pour faire simple, ce premier effort se décompose en trois parties bien distinctes. La première, et la plus longue, étale les arguments du quatuor sous vos yeux hébétés et vos oreilles endommagées.
Du Crust, du Grind, du Core, une batterie ad lib qui se fout complètement de savoir si on la suit ou pas, et qui se prend pour un défouloir de jazzman en pleine descente de weed. "Do you like alcohol?". A mon avis oui, mais pas que...
"Summer Cums" et son allusion à peine grivoise n'est rien de moins qu'une partouze bordélique durant laquelle tout le monde prend tout le monde, peu importe le genre. Les parties Grind sont à la limite de l'incompréhensible, et le chant atteint les limites du non sens dans le genre "conversation en plein milieu d'une rave aux raviolis", "Toad Temper" accentue encore plus cette sensation de folie ambiante et envoie tout valser sous prétexte d'expérimentation ultime. La basse ridiculise les tentatives les plus risibles de Shane EMBURY période 88/90, et en deux minutes, tout est plié.
"Wound Pisser" laisse presque s'échapper par erreur un riff intelligible et groovy, et se pose presque comme le seul morceau un tant soit peut construit du lot. Même si les débordements Jazz/Grind affolent quand même la ménagère égarée...
"Ewe People" se la joue un peu Indus, avec ses boucles de narrations et ses larsens obsédants, lorsque soudain Baloo vient rompre le silence après avoir découvert son pot de miel vide. Lourde, puis hystérique, puis lourde, puis... Et merde.
"Phantasm", collaboration avec SLUG CHRIST est l'ovni de cette livraison. Si tout semble démarrer normalement, la machine s'arrête soudain, et se laisse aller à l'Ambient, calme, apaisé, aux confins du silence absolu. Quelques notes éparses, des arrangements discrets, un peu Post, un peu bizarre, ça fait du bien, sans pour autant excuser les impolitesses précédentes...
Never Gets Better sent la blague de potache à plein naseaux, mais en même temps, dépasse le simple stade anal grâce à une véritable folie, une puissance à décorner les boeufs qui broutent l'anneau au nez, et une décomplexion bruitiste qui force l'admiration.
Si certains tombent dans le Crust Grind par erreur, les ROT MONGER savent au contraire très bien pourquoi ils sont là, et signent un LP vantant les mérites de l'herbe, du vomi, des pets, du bordel, sans aucune arrière pensée ni envie de s'excuser.
Et moi, j'aime bien les trous du cul qui se permettent tout, sans penser à ce que pensent les autres qui pensent que ce genre de musique n'est pas pensée, et pratiquée par des abrutis qui ne pensent à rien.
Vous en pensez quoi ?
Ajouté : Vendredi 02 Octobre 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Rot Monger Website Hits: 5086
|