# 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
}
EATING SHIT (FRA) - Supersonic Black Metal (2013)
Label : Auto-Production
Sortie du Scud : 17 juin 2013
Pays : France
Genre : Black Metal / Grind / Electro
Type : Album
Playtime : 13 Titres - 38 Mins
Avec des pincettes et des gants. Il ne faut jamais se moquer trop violement du Black Metal. Cette institution a les moyens de vous faire parler. Ceci étant, ce n'est pas comme si c'était la première fois que quelqu'un osait dire que le blackeux de base, après une bonne séance de corpsepainting mentalement revivifiante (mais terriblement nocive pour l'épiderme), ressemble davantage à un panda grimaçant qu'à un macchabée terrifiant. Alors quitte à être extrême, autant l'être jusqu'au bout. Les pandas d'EATING SHIT sont roses et mignons. Ils consomment certainement plus de bambou que de cervelle de Dead et c'est tant mieux. Passer du Grind au Black, le virage pourrait paraître étonnant, mais c'est mal connaître ce trio d'Annecy qui est toujours allé au fond de sa démarche, quitte à se baser sur une boîte à rythmes bien dégueulasse au moment de composer Bon Appétit, un premier album sorti il y a maintenant deux ans. Alors oui, c'est avec une certaine perplexité qu'on pourra accueillir ce second effort dont le nom, Supersonic Black Metal, trahit déjà un peu la personnalité versatile.
Pour l'occasion, les mecs ont joué le jeu jusqu'au bout. Maquillage, police d'écriture gothique, mise en scène entre glauque et bisounours, tout est finalement très en phase avec l'univers du Black Metal, y compris la musique. Seuls de souriants pandas fuchsias viennent jeter un froid et nous en dévoilent davantage sur l'état d'esprit du groupe. Je n'en ai pas la confirmation officielle, mais vraisemblablement, ce second effort est un bouillon de second degré. Très éloigné musicalement de Bon Appétit qui nous cuisinait un Grind / Crust primaire et instinctif, Supersonic Black Metal tombe comme prévu dans une mixture mêlant Black Metal et Grind. Quelque part entre la force de frappe d'ANAAL NATHRAKH, le style de vie FADADES et le minimalisme de THE PROCESSUS, cet album est un pamphlet déjanté sur l'Art Noir. Et le pire dans l'histoire, c'est qu'en plus d'être parfaitement caricatural (avec par exemple "From Black Til Grind", cette intro mélo-angoissante typique ou "Carte Noir", ce déchainement caféiné de médiocrité bruitiste qu'un RAGNAROK n'aurait osé assumer), EATING SHIT est copieusement doué. Mis à part certains vocaux Grind, certaines nappes électroniques ou cette BAR qui tient un peu mieux son rôle, l'illusion est parfaite. Le trio enfile les références comme des perles, de MARDUK pour le côté brutal à DIMMU BORGIR pour les pseudo-orchestrations sur "Respect" et quand on connaît l'atmosphère barrée qui régnait sur Bon Appétit, on ne peut que sourire devant une telle mascarade. La grande force de cet opus, c'est également de dérouler beaucoup plus vite que n'importe quel album de Black brutal, et ce grâce à une boîte à rythmes qui, je le soulignais plus haut, à trouvé un terrain de jeu plus à même de mettre en valeur sa superficialité. Là où le Grind est un style humain, qui vient des tripes et qui ne tolère aucun arrangement, le Black peut se permettre ce genre d'artifice puisqu'il est ici ouvertement caricaturé. Supersonic Black Metal se savoure de cette manière. Pas tant pour son originalité artistique quasi-inexistante (quoique la satire est peut-être une forme d'art ?) mais plutôt pour ce franc moment d'expérimentations nimbé d'un mauvais goût assez savoureux.
Supersonic Black Metal n'est pas un disque stigmatisant. L'idée n'est pas d'avancer que n'importe quel blanc-bec peut pratiquer du Black Metal. Je pense qu'il est plutôt un disque ouvert d'esprit qui offre une tribune décalée et novatrice (à cause des nombreux arrangements) à ce style musical contestataire. Chacun pourra en faire sa propre interprétation. C'est ce qui le rend si intéressant à défaut d'être un chef d'œuvre ultime de création musicale. Encore faut-il accepter de rentrer dans le trip. Ca, Desproges l'avait bien compris et nous a laissé en héritage une citation intemporelle.
On peut rire de tout mais pas avec tout le monde.
Ajouté : Samedi 08 Mars 2014 Chroniqueur : Stef. Score : Lien en relation: http://eatingshit.bandcamp.com Hits: 5966
|