# 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
}
CLOSET WITCH (usa) - Black Salt (2015)
Label : Auto-Production
Sortie du Scud : 16 octobre 2015
Pays : Etats-Unis
Genre : Chaotic Mathcore Grind
Type : EP
Playtime : 6 Titres - 14 Mins
"Ne laissez pas le manque de moyens et de connaissances gâcher vos rêves d'enregistrement."
CLOSET WITCH, 2015. Encore une preuve s'il en fallait une que le DIY est LA solution. Vous n'avez pas de fric, pas de relations, pas de matos, aucune importance, si vous avez la foi, tout finira par se faire. C'est un peu le credo de ce quatuor de l'Iowa, qui n'a pas grand chose à envier à quiconque en termes de puissance et de nuisance sonore.
Je disais récemment que le Mathcore, intelligemment appliqué, avait encore des choses à dire. J'étais proche de la vérité, à vrai dire il a encore des choses à hurler. Et lorsque la responsable de ces hurlements s'appelle Mollie Piatetsky, ça arrache le coeur et vrille les tympans.
Une démo, un EP, puis un second, telle est l'histoire de ce groupe atypique et foncièrement Noisy. Six morceaux, dont une reprise de NIRVANA (ils nous avaient déjà fait le coup sur Ergot, avec BLACK FLAG cette fois-ci), le terrible et radical "Territorial Pissing", Black Salt est bien nommé. Il procure la même sensation de douleur insupportable qu'un paquet de gros sel plaqué sur une plaie béante. Et étrangement, c'est cathartique et ça soulage. Paradoxe ? Non, la douleur la plus intense est souvent très proche du plaisir immense. Et cet EP en procure, beaucoup. Si bien sur vous avez une inclinaison naturelle au bordel le plus compact.
Black Salt est l'archétype du EP intelligent. Hautement chaotique, il ménage pourtant de petits instants de douceur qui peuvent être envisagés comme des tortures supplémentaires, ou comme des moments de tendresse incongrue. Et caser entre les radicaux "Secane" et "Territorial Pissing" un moment de tendresse noire comme "Love From...", c'est soit du sadisme ultime, soit une empathie aussi imprévue que délicate. Comme une lettre passionnée posée sur une flaque de sang.
Cette reprise de NIRVANA est d'ailleurs bien sentie. Décharnée, transformée en glaviot Punk Rock que Kurt lui même aurait pu cracher, c'est une éthique, une volonté de tout réduire à sa forme primale. Peu importe que le chant de Mollie s'amalgame comme un yaourt nature, la rage dédaigneuse qu'elle insuffle à ses lignes vocales fait du bien, et rappelle que le Rock et ses dérivés sont nés d'un cri initial qui ne se voulait pas compréhensible.
Les originaux n'ont rien à envier à cette cover. Intenses, lapidaires, expédiés comme un faux prince charmant aux manières grossières et éculées, ils accumulent les tâches sur la toile cirée de la politesse musicale. Et une fois vos oreilles posées sur le monstrueux "Ode To Queen Doris", le mal est fait, c'est trop tard. Une basse plus lourde que le poids total des trois MELVINS, une guitare si abrasive qu'on l'entend à peine (ses fréquences sont tellement collées à celle de la basse...), et puis ce chant, hurlé au delà de toute raison, comme une saine colère qui s'échappe des conduits Grind et Math par tous les orifices. Tout ça va très vite, et lorsque "Once Upon A Time" lâche ses premières salves, on comprend que le conte de fées c'est pour les petites filles qui n'ont pas grandi. Du Chaotic Mathgrind dans toute sa splendeur et sa rage, qui détruit toutes les belles histoires que l'on a entendu étant enfant, mais c'est cru, comme un néon blafard qui éclaire à peine le visage d'un junkie.
"Secane" et son "This, is Pennsylvania" introductif, appuie encore plus sur la cicatrice. On renonce à toute forme de musicalité, et on s'enfonce dans le chaos le plus brut. Et puis comme si on regrettait un peu le monde cotonneux qui nous protégeait, on se laisse aller à une sale mélodie presque nostalgique qui coupe le morceau en deux. Ca se termine comme un Sludge Indie et noir comme de la poix, même si Mollie tire encore sur ses cordes vocales alors qu'une double grosse caisse nous appuie méchamment sur le thorax.
Vous aurez sans doute remarqué que je n'ai usé d'aucune comparaison pour décrire la musique de CLOSET WITCH. Il n'y en a aucune de pertinente, c'est pour ça. Black Salt c'est une déchirure Punk, une fracture MathGrind, et la preuve que le bruit le plus sourd peut accompagner la technique la plus pointue.
Savoir jouer, mais le faire le plus bruyamment possible.
Pas d'issue de secours. Rien. Juste des illusions plaquées sur un mur aux plaies encore saignantes. Mais un peu d'espoir aussi.
Un peu.
Ajouté : Dimanche 05 Juin 2016 Chroniqueur : Mortne2001 Score : Lien en relation: Closet Witch Website Hits: 5084
|