# 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
}
QUALM (nl) - Qualm (2015)
Label : Auto-Production
Sortie du Scud : 22 avril 2015
Pays : Pays-Bas
Genre : Raw Punk Hardcore
Type : EP
Playtime : 7 Titres - 8 Mins
"Dans le port d'Amsterdam, y'a des marins qui chantent"...
Je ne sais pas s'il en reste encore beaucoup depuis la mort du grand Jacques... Il y avait aussi des filles vendant leurs charmes à l'époque, de l'alcool, enfin en gros, un tableau assez cru et qui ne donnait pas vraiment envie d'y larguer ses amarres...
Les tulipes, les vélos, les moulins...
Tout ça, tous ces clichés de carte postale à peine dignes de se retrouver honorés dans une compile de Dave... Parce qu'Amsterdam, c'est aussi la dope, la violence, comme toutes les grandes villes d'Europe et du monde.
Mais quand même, elles devaient être déjà bien fatiguées ces dames qui vendaient leurs charmes, même il y a quarante ans...
Et en écoutant la version locale des QUALM, elles ont même tourné en mégères usées par la vie et les coups de boutoir donnés à l'arrière d'un vieux camping car pourri... La preuve, ils en parlent, et de façon directe, sans ambages, et ce, même sans attendre quelques titres de leur dernier 7''. Car Qualm, le single commence avec une insulte, un crachat dans la face du féminisme, de la politesse et de la galanterie.
"Whores" ? Le titre, le son, la démarche sont à l'image d'un simple qui ne fait pas dans la dentelle, et qui pousse tous les mauvais côtés du Hardcore le plus gras à leur paroxysme.
En écoutant les sept pistes de cette dernière livraison, j'en suis venu à me demander quel animosité pouvait pousser des individus à enregistrer une musique aussi crade... Au niveau sonore, peu peuvent rivaliser avec eux. La "production" de ce 7'' est tellement abrasive et sourde qu'elle ressemble à un album de DISCHARGE passé à travers une cabine Leslie, et recaptée par un vieux quatre pistes très fatigué. C'est grave mais suraigu en même temps, tous les instruments se retrouvent noyés dans un brouhaha chaotique, et ça prend des airs de groupe Punk Hardcore traité par un producteur indépendant fan de Post Grunge sans délicatesse aucune...
Une fois passé l'écueil de ce son si particulier, les chansons ne font rien pour en atténuer l'impact dérangeant. Elles sont courtes, parfois très, puisque les deux tiers ne dépassent pas la minute, et font montre d'une attirance indéniable pour le bruit, la fureur, et disons le, une certaine forme d'inconfort. C'est Core à n'en point douter, mais une sorte de Hardcore poisseux joué par des Punks qui ne rechignent pas à sonner Black de temps à autres. C'est extrêmement sauvage, comme si des hommes de Néandertal avaient découvert avant leurs congénères comment utiliser des instruments de musique sans vraiment savoir comment les faire sonner.
On ne sait trop d'ailleurs tellement la production est confuse si les morceaux en question sont rapides ou pas, tellement la sauvagerie dont il font étalage annihile toute possibilité de discernement. On sait par contre que le dernier d'entre eux, et aussi le plus long, "Loose Faith", est d'une lourdeur dérangeante, que les guitares sont encore plus passé au papier de verre gros grain, et que son ambiance générale est encore plus déliquescente que le reste du simple...
Qualm reste dans la lignée de leur dernière démo, Passive qui ne faisait déjà pas plus preuve d'empathie. Mais les néerlandais arrivent pourtant à pousser le bouchon encore plus loin dans la brutalité sommaire, tout en sonnant presque Rock, comme le démontre le diabolique et abscons "...", qui étale un riff gras comme du saindoux sur un mid tempo appuyé et convaincant. Sale MAIS efficace, serait ce donc la recette magique de ce groupe bizarre ?
"Obsession/Regression" tient quant à lui d'un Black raw et bourru, joué par des coreux faisant fi de toute cordialité. Ca va vite, c'est bourré de larsens, mais allez savoir comment, c'est captivant et catchy. D'ailleurs, les musiciens ne s'emmerdent même pas à chercher une fin propre à leurs chansons, qui pour la plupart s'arrêtent net, dans un dernier bruit assourdissant.
J'avoue que dans ma vie, j'ai déjà entendu des trucs un peu décalés et foncièrement brutaux. Mais dans le cas de QUALM, tout est si excessif que ça frise le grotesque, sans pour autant être d'une vacuité confondante bien au contraire.
Un peu comme une bande de mecs qui rentreraient dans un bar, après une journée de pêche, en hurlant comme des beaux diables, en regardant les gens de travers, et en buvant à grande lampées tout en bavant partout sur la table, le tablier de la serveuse, et même par terre. Basse primaire et suintante, chant lointain et caverneux, guitares sombres et pas propres pour deux sous, pour une musique primale et primaire qui fait du bien à la colère des oreilles.
Oui, dans le port d'Amsterdam, y'a des musiciens qui beuglent. Et qui beuglent pour oublier qu'ils beuglent. Et qui crachent sur les femmes infidèles.
Mais genre, un gros glaviot, bien noir et vert.
Ajouté : Jeudi 10 Septembre 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Qualm Website Hits: 4970
|