# 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
}
MORSE (FRA) - Beliefs Destroyer (2013)
Label : Head Records
Sortie du Scud : 22 septembre 2013
Pays : France
Genre : Noisy Hardcore
Type : Album
Playtime : 9 Titres - 18 Mins
Lorsqu'on fait de la musique et qu'on préfère la colère, il vaut mieux voir le jour du côté de Detroit (quoique maintenant les naissances doivent s'y faire rares...), Brooklyn, du Brésil, de certaines banlieues anglaises, ou, si l'on reste dans notre beau pays, de la région parisienne ou du Nord... Mais on peut aussi répéter à Montpellier et avoir la haine...
Ca vous parait difficile ? Trop de soleil, de possibilité de détente ? Le sud de la France ne serait donc pas région idoine pour répandre des effluves de souffre et de sueur ?
J'ai pourtant un contre exemple flagrant sous la main. Et très probant qui plus est.
Quartette montpelliérain, MORSE à rudement bien choisi son patronyme. On connaît bien ce mammifère marin débonnaire, gras et à la moustache sympathique. Mais on connaît aussi ses attaques soudaines et violentes, ses défenses pointues, et sa lourdeur pachydermique. Animal ambivalent, aussi lourd que dangereux, il symbolise à merveille ce que Beliefs Destroyer cherche à exprimer. Car MORSE, le groupe, bouffe à tous les râteliers Core, mais avec justesse. Et du coup, se glisse dans la peau du nageur gras avec un mimétisme flagrant.
Hard Core Noise. Je ne suis pas contre, c'est plutôt un de mes créneaux de prédilection. Et ça définit assez bien les contours de l'affaire. Car MORSE fait du boucan, beaucoup. Ni Crust, ni D-Beat, et encore moins Grind, assez éloignés des considérations Post Hardcore, les quatre de Montpellier ont opté pour l'option pas vraiment franche du Hard Core moderne et touffu, un peu dans la veine de COILGUNS ou UFOMAMMUTH. Alors ça oscille, ça virevolte, et ça passe d'une rythmique étouffante de lourdeur à des envolées speedcore du meilleur cru, sans jamais s'éparpiller. Ca réveille les morts, c'est mi figue mi raisin, c'est puissant et bordélique, mais sans jamais abuser du n'importe quoi artistique. C'est en tout cas une grosse mandale dans la tronche, compacte, concise et qui laisse de sacrées traces.
Avec seulement trois titres sur neuf qui passent la barre des deux minutes, MORSE joue la carte de l'attaque surprise et rapide, et choisit la bonne option. Evitant ainsi la redite, leurs morceaux gagnent en "surprise", et vous prennent à la gorge sans relâcher l'étreinte. Et pour une fois, l'accroche promo du groupe ne tombe pas dans l'hagiographie déplacée, et trouve les mots justes. "Un Hard Core Noise avec des riffs aussi lourds que l'animal qui a donné le nom au groupe. Des parties rapides, incisives et saccadées comme le code qui a donné le nom au groupe". C'est ainsi. Une description fidèle de ce qui vous attend. Pour vous en persuader, écoutez avant tout autre le titre "Guided By Evil". On démarre avec un Stoner tirant légèrement sur le Sludge, lorsque tout part soudain en vrille sur un tempo instable, avant une reprise finale plus lourde qu'une chape de plomb. Trois minutes de savoir faire, et c'est plié. Mais MORSE, ce sont aussi ces courts morceaux acrobatiques, durant lesquels le batteur se permet à peu près tout, avec l'aide précieuses de guitares acides et abrasives.
Ne manquons pas d'évoquer bien sur le chant si particulier de Jean Marc Garcia, qui vitupère comme un beau diable au milieu de ce maelström, et qui reste un monstre de violence gestuelle on stage. La prod ad hoc respecte la ligne de conduite du groupe, avec un son étouffé, une basse caverneuse et un chant mixé en retrait. Et l'artwork superbe signé View From The Coffin offre au projet la note finale qui le rend difficilement perfectible.
Alors OK, à Montpellier, y'a du soleil. Mais dans les caves, certains soirs, on entend rugir de drôles d'animaux qui préfèrent la pénombre, pour mieux hurler leur opinions, et se montrer tels qu'ils sont. Je ne pensais pas y croiser un MORSE un jour, mais la nature est facétieuse.
Et violente.
Ajouté : Mardi 01 Juillet 2014 Chroniqueur : Mortne2001 Score : Lien en relation: Morse Website Hits: 11282
|