# 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
}
HOLYCIDE (sp) - Toxic Mutation (2015)

Label : Xtreem Music
Sortie du Scud : 10 février 2015
Pays : Espagne
Genre : Thrash Metal
Type : EP
Playtime : 6 Titres - 25 Mins
Décidemment, le gaspacho et les tacos seront mon plat du jour ou ne seront pas. Après une première visite en Espagne ce matin, m'y revoici dès cet après midi pour un plat tout aussi relevé... Si SOLDIER revisitait de façon moderne les standards du Heavy Thrash des années 80, les musiciens d'HOLYCIDE préfèrent voir les choses d'une façon plus concrète et nostalgique et nous livrent LEUR version du pur Thrash de la même époque, sans essayer de l'altérer ou de lui conférer des sonorités modernes. On appelle ça l'amour, le respect, enfin ce que vous voulez, mais il faut avouer que les gus ont sacrément bien réussi leur coup... On s'y croirait, et même la production sonne casher !
HOLYCIDE est un projet qui mûrit depuis 2004 dans le cerveau fécond de Dave Rotten (AVULSED). Celui ci désirait depuis longtemps rendre hommage aux maîtres es riffs acérés de la période 85/89, mais l'affaire commençait à traîner, du à un manque de motivation des musiciens devant l'épauler dans son aventure. Finalement, après un laps de temps certain, Dave réussit à réunir le line-up idoine, et lança sur le marché une première démo cinq titres, sortie en 2009.
Celle-ci était conforme à ses desideratas, pas de compromis, pas de potentiel commercial, mais une bonne dose de violence, d'agression, et surtout, une éthique fidèle au Thrash boom d'il y a trente ans. Il n'est donc pas étonnant à l'écoute de ce premier EP de retrouver des tics inhérents à ce courant, une démarche similaire, et des arrangements qui semblent exhumés d'un passé pas si lointain...C'est simple, si la production n'était pas si puissante et moderne, on pourrait penser être tombé sur un album inédit à l'époque, qu'une maison de disque aventureuse se serait amusée à sortir après des décennies d'oubli. Et comme c'est assez fréquent ces temps-ci, c'eut été parfaitement plausible.
Toxic Mutation est une petite bombe, c'est dit. Petite par sa durée, mais énorme par l'impact probable qu'il risque d'avoir sur tous les nostalgiques dont je fais partie. C'est un exercice de style qui sent bon la sincérité, le respect et la passion. Tout ici sonne d'époque, les riffs tranchants, le chant mordant et roublard, la rythmique qui passe d'un mid tempo à un abattage purement Thrash, les soli hystériques mais précis, les breaks efficaces et qui tombent pile... C'en est presque troublant tellement c'est crédible !
En tant que leader vocaliste Dave Rotten assure dans les grandes largeurs. Son chant évoque délicieusement les étouffements narquois de Ron Royce de CORONER, possède la harangue de Chris Bailey d'INFERNAL MAJESTY, et survole des débats réglés d'avance.
Mais ses petits copains ne sont pas en reste pour autant. Miguel Bárez et Salva Esteban triturent leur guitare pour en extraire des riffs percutants et catchy, tandis que Dani Fernández et Jorge Utrera le duo basse/batterie soutient le tout d'une poigne de fer, aussi à l'aise sur les broncas que sur les passes de deux. Double grosse caisse/doubles croches, mid tempo d'acier, up tempo virevoltant, tout leur sied. Et cette équipée ne s'arrête devant aucun obstacle, même lorsqu'il s'agit de prêter allégeance à une des figures de proue du genre, comme le démontre la fantastique reprise du culte "Merciless Death" de DARK ANGEL. Dieu sait pourtant à quel point il est difficile de s'attaquer au répertoire premier des américains, et de passer après Don Doty ou Gene Hoglan... Et bien le défi est relevé haut la main, et cette cover personnelle fait même la nique à l'originale en terme de puissance de feu.
Mais avant d'en arriver là, il faudra d'abord passer par les cinq titres de la démo de 2013, réenregistrés et remixés, qui gagnent en clarté et en assise. Difficile de faire un choix, puisque celui-ci est déjà limité par le nombre de pistes, qui sont d'ailleurs toutes de très bonne facture. Je dois concéder avoir bougé la tête un peu plus violemment sur "Life Turned To Dust", qui à ce grain de folie qu'on retrouvait sur les meilleurs LP's de la grande époque. Succession de plans tous aussi parfaits les uns que les autres, hymne de la trempe de l'école Européenne de 86/88 (AGONY en tête), choeurs vindicatifs et en place, mais ceci n'est qu'une option perso.
Si les mid tempo vous séduisent plus volontiers, le rouleau compresseur "Radiation Endgame" fera l'affaire sans problème, tant il dégage une énergie énorme, qui s'achève pourtant dans une boucherie sanglante nettoyée par des soli majeurs et inspirés.
Mais je pourrais citer toutes les chansons de cet EP, puisqu'il ne souffre d'aucun défaut. Par bien des aspects, Toxic Mutation tire beaucoup de son essence des deux premiers albums des suisses de CORONER, ce qui en dit long sur son potentiel.
Mais comme le cite volontiers le label, beaucoup de références sont applicables ici. CORONER donc évidemment, DARK ANGEL sans hésiter, mais aussi INFERNAL MAJESTY, SLAUGHTER, INDESTROY, et tant d'autres dont les albums résonnent encore dans notre pauvre cerveau déjà bien endommagé.
En tout cas, si on se posait la question de savoir si l'entêtement paie, les années séparant la genèse de ce projet et sa concrétisation en apportent une preuve indéniable. Oui Dave Rotten a bien fait de s'obstiner, de passer outre les obstacles, et d'attendre de trouver les bons musiciens pour mener à terme son idée.
Il eut été franchement dommage que HOLYCIDE n'en reste qu'à l'état d'idée en gestation, tant celles qu'il étale sont pertinentes et enthousiasmantes.
La nostalgie, ça a du bon parfois, et décidemment l'Espagne regorge de talents insoupçonnés. Ca promet encore pas mal de chroniques à venir !
Ajouté : Mardi 11 Août 2015 Chroniqueur : Mortne2001 Score :      Lien en relation: Holycide Website Hits: 5764
|