# 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
}
GRIND MADNESS AT THE BBC (uk) - The Earache Peel Sessions (2009)
Label : Earache Records / Pias
Sortie du Scud : 12 Octobre 2009
Pays : Angleterre
Genre : Compil' Historique et Bordélique
Type : Compilation
Playtime : 118 Titres - 84 Mins
En direct du Canal historique du label culte anglais Earache nous arrive un triple sampler qui va faire rugir de plaisir tous ceux qui ont connu la scène extrême UK de la fin des années 80 au début des années 90. Ne cherchez pas, ils sont tous là, ou presque, et seules les absences de SORE THROAT et CONCRETE SOX sont à déplorer. Toutes les sessions BBC de NAPALM DEATH, CARCASS, INTENSE DEGREE, EXTREME NOISE TERROR, HERESY, GODFLESH et l'UNSEEN TERROR de Shane Embury figurent sur ce triple CD, bourré ras la gueule de 118 titres tous plus hargneux les uns que les autres. Alors bien sur, les grincheux grincheront, et les râleurs râleront, mais pour les autres, les esthètes de la débauche sonore et les terroristes du bon goût musical, tout ici n'est que furie et bonheur.
Bonheur de retrouver tous ces groupes cultes à l'orée de leur carrière (ou à l'aube, déjà pour certains), bonheur de se manger 1h24 de chaos foncièrement brutal, bonheur de se replonger dans un pan entier du paysage musical d'outre manche qui une fois de plus, à soufflé le chaud et le froid sur la scène internationale.
Passons rapidement sur les titres de NAPALM, qui sont très connus de presque tout le monde, et concentrons nous plutôt sur le plus obscur, qui prend souvent pour les néophytes un caractère inédit.
Les graves de chez grave d'EXTREME NOISE TERROR, toujours aussi Crust/Hardcore comme à la grande époque de leur split Lp avec les Punks de FILTHKICK, ont l'honneur de voir leur efforts se développer sur 22 titres soit l'équivalent d'un album presque entier selon les canons du style. Il est impossible de passer à côté de leur bordel festif, pour ses rythmiques débridées et son chant incroyablement profond. L'agressivité à l'état pur, un condensé de tout ce qui faisait le charme du Grind/Punk à son origine.
CARCASS nous offre un bon résumé de sa période médecin légiste obsédé par le Gore, avec son chant à la limite du surnaturel, et ses constructions improbables, basées sur une multitude de riffs posés sur une batterie qui navigue un peu à l'aveuglette. C'est virtuellement infâme, insupportable pour le commun des mortels, mais ces morceaux dégagent un je ne sais quoi de charisme morbide qui me fait les préférer à leur orientation Heavy de fin de carrière. Attendons de les voir au Hellfest pour réévaluer l'ensemble.
Grindmadness permet de comprendre aussi pourquoi BOLT THROWER à un jour été assimilé à la même scène que les ELECTRO HIPPIES et DOOM, malgré une discographie presque entièrement vouée au Death lourd et barbare. Un peu à l'image d'un PARADISE LOST dont les démos et le premier album, Lost Paradise n'avaient que très peu de rapport avec le reste de leur production, BOLT THROWER se jetait corps et âme en ces temps troubles dans un Thrash mâtiné de Grind/Hardcore, avant de changer complètement de route et de tomber dans l'Heroïc Fantasy sur fond de puissance écrasante. L'amateurisme des compositions accentué par un son sourd et compact à cependant de quoi conquérir un bon following.
La première grosse rupture de l'album vient des déserteurs éhontés de NAPALM DEATH, Justin et Nik. Avec GODFLESH, ils se démarquent de leurs anciennes racines en proposant un Death/Indus pesant et claustrophobique, à cent lieues des cavalcades effrénées de Scum. Relativement hors sujet ici, il reste néanmoins un des groupes phares de cette compilation, et permet à l'auditeur de reprendre son souffle avant la suite de la course. On retrouve l'ambiance trouble de leur premier album, Streetcleaner, une pierre angulaire d'un style qu'ils ont dépoussiéré, et dans lequel une horde de suiveurs n'allaient pas tarder à s'engouffrer. La version de « Like Rats » arrive même à dépasser son pendant studio, étant beaucoup plus organique et malsaine.
UNSEEN TERROR m'a toujours fait marrer. Rien que d'entendre la voix du chanteur sur certains morceaux suffit à provoquer chez moi une hilarité incontrôlable. Leur obsession de Garfield (écoutez pour ça leur premier album Human Error, et si vous êtes feignants, le titre « Odie's Revenge » présent ici) reste un must du gimmick décalé. UNSEEN TERROR c'est un peu le pendant humoristique du courant Grind, et il serait impensable de s'en dispenser.
HERESY est plus porté sur le punk et le Speedcore à la CRYPTIC SLAUGHTER/WEHRMACHT. Très légers au niveau du chant et des guitares, plus aériens et calmes que leurs confrères, ils offrent une variante de l'ultra brutalité musicale assez rafraîchissante. Sans pour autant négliger les passages ouvertement Grind, on les rapprochera plus d'un IMPULSE MANSLAUGHTER ou d'un CHRONICAL DIAOHRRHEA de début de carrière.
On finit comme on a commencé, avec INTENSE DEGREE, sans doute le groupe le plus méconnu de cette compilation, qui reste aussi dans le registre Speedcore débridé, volant bien au dessus de toute considération de bienséance musicale. Une batterie hystérique, un chant et des constructions rythmique à la DRI de Dirty Rotten Imbeciles, sans aucun doute le combo le plus Hardcore du lot, mais aussi un des meilleurs.
Maintenant que vous êtes familiers avec le contenu de ce Grindmaness, je ne perdrai pas mon temps à essayer de vous convaincre de l'intérêt d'acheter ce CD. Sachez simplement qu'il mérite de figurer dans la discothèque idéale de tout fan de l'underground anglais, et que sa valeur de témoignage n'est pas négligeable. L'insouciance manifeste qui s'en dégage apporte un vent frais sur une scène actuelle inondée de groupes toujours plus méchants et se prenant toujours plus au sérieux.
Et oui, c'est souvent quand on fout le bordel sans raison qu'on se marre le plus !
Ajouté : Vendredi 02 Juillet 2010 Chroniqueur : Mortne2001 Score : Lien en relation: Grind Madness At The BBC Website Hits: 15440
|