# 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
}
KILLER HURTS (uk) - Killer Hurts (2014)

Label : Killer Hurts Records
Sortie du Scud : 25 août 2014
Pays : Angleterre
Genre : Heavy Thrash Metal
Type : Album
Playtime : 13 Titres - 47 Mins
Ce quartette originaire de Norwich joue du Thrash originel, influencé par ANTHRAX, SLAYER, EXODUS et TESTAMENT. Ses quatre membres sont des musiciens accomplis ayant déjà joué et tourné avec d'autres groupes par le passé, ils ne sont ni jeunes, ni beaux, mais ils thrashent sévère ! Possédant son propre matos et moyen de locomotion, ils sont prêts à jouer n'importe où à travers le Royaume Uni.
Bon dès le départ, ça me plaît ça. Une bio honnête, qui ne cherche pas à en mettre plein la vue, mais juste à présenter les choses telles qu'elles sont, c'est notable. Et appréciable. Après tout, y'en a marre de tous ces prétentieux qui se lancent comme "le nouveau machin", "la révolution musicale de l'année", ou qui sont surcotés par des maisons de disques avides de publicité tapageuse. Ici, foin de supercherie, KILLER HURTS n'est que ce qu'il prétend être, un groupe sincère, jouant un Thrash de tradition, et lorsque vous aurez écouté leur premier LP éponyme, vous ne pourrez que le constater.
En reprenant les éléments de cette présentation un à un, leur véracité ne sera que plus claire. Non, les membres de KILLER HURTS ne sont pas jeunes, c'est un fait, quant à leur beauté, cette notion reste trop subjective pour être débattue ici. Et à la rigueur, on s'en fout, ce n'est pas ce qu'on leur demande. Il font du Thrash, c'est un fait, disons pour être pinailleur du Heavy Thrash, pur jus, comme celui que certains groupes pratiquaient dans la seconde moitié des 80's. Leurs influences avouées sont bien sur valables au regard du style défini, et des quatre modèles choisis, celui de SLAYER semble être le plus pertinent. Non pour la violence, la rapidité ou l'intensité, mais par ce choix de riffs saccadés et de lignes vocales qui rappellent le phrasé et les accents d'ARAYA.
Chaque musicien est très capable à son poste respectif, et la machine tourne à plein régime, ne faiblit que très rarement, ce qui donne en fin de compte un disque impeccable, avec de rares bémols concernant la répétitivité de certains tournures un peu trop systématiques.
Heavy Thrash donc. C'est vrai. Et puisque nous parlons d'influences, j'ai plus volontiers reconnu dans la musique de KILLER HURTS d'autres combos, un peu plus obscurs que ceux mentionnés. Car les anglais sonnent la plupart du temps comme quelques ensembles des 80's, pas forcément majeurs, mais qui ont su passer l'épreuve du temps et acquérir un statut assez culte. Et ne voyez rien de péjoratif la dedans, bien au contraire. Car les groupes dont je parle ont sorti des albums que je réécoute avec un grand plaisir trente ans après, c'est donc bien un compliment de ma part. Ainsi, au gré des pistes, les ambiances et structures ont ramené à ma mémoire des noms comme INFERNAL MAJESTY, HORDES OF TORMENT, ou encore INDESTROY, avec une nette distanciation sur le côté malsain qui rendait None Shall Defy ou Senseless Theories si particuliers.
Et dès l'intro passée, nous rentrons dans le vif du sujet. Rythmique en contretemps, solo qui hurle à la mort, puis couplets rapides et refrain fédérateur. Tout est là, ne cherchez pas, et en tendant bien l'oreille, des réminiscences de groupes nordiques comme AGONY (fabuleux The First Defiance soit dit en passant...) paraissent assez flagrantes, néanmoins délicieuses. Le groupe est carré, en place, les guitaristes riffent solide, restent précis et inspirés en solo, les choeurs sont guerriers, et le tout reste intelligible. Il n'est pas question ici de faire du raffut, mais bien de jouer propre, en respectant la modération d'exécution. Pas de pointe de vitesse démesurée, pas d'extrapolations bruitistes ou trop techniques, le quartette reste dans les clous, et mon Dieu que c'est agréable. Car loin d'être ancré dans un passé le confinant à la nostalgie, Killer Hurts exsude l'enthousiasme par tous les pores, la joie de jouer une musique simple, avec ses tripes.
Les hymnes Thrash ne manquent pas, avec leur lot d'emprunts inévitables, à l'instar de "Megalodon" et ses couplets pur SLAYER, époque "Dittohead", le final "Toxic Bloodbath" plus EXODUS qu'un médiator de Gary Holt, "Ready Aim Fire", savant mélange du HEXX de Quest For Sanity et d'un leftover de King/Hanneman, "Beware of the Fog" et ses faux airs d'EXUMER (et au break central plombé comme une mois de septembre), mais on pourrait trouver toutes sortes de réminiscences tant l'album entier pioche dans le répertoire des classiques avec bonheur et inspiration.
Soyons clair, nous ne parlons pas ici de copie carbone ni de plagiat, mais bien d'hommage à un genre noble qui a inspiré des milliers de musiciens à travers le monde et les années. Car le rendu de KILLER HURTS est tout sauf scolaire, et possède ce petit grain de folie inhérent aux meilleurs efforts. La voix d'Errol Watson, claire, vindicative et puissante est aussi un atout non négligeable, et les breaks dont de nombreux morceaux sont truffés font preuve d'un flair indéniable et déstabilisent juste ce qu'il faut pour rendre l'écoute captivante de bout en bout.
Comme je vous le disais, KILLER HURTS est un groupe à l'image de sa bio, honnête, sans artifices. Et écouter ce genre de LP en 2014 fait un bien fou, tant on a besoin de temps à autres de remonter à ses racines sans toujours retomber dans la même playlist de classiques.
Les quatre anglais auraient sans problème eu leur place aux côtés de TESTAMENT ("Unleash The Chemicals"), ou ANNIHILATOR ("Bloodlust") sur scène dans les années 80, et ont en 2014 toutes les cartes en main pour se dessiner un joli destin.
Reste à les voir sur scène pour confirmer ou non cette très bonne première impression.
Ajouté : Jeudi 29 Janvier 2015 Chroniqueur : Mortne2001 Score :     Lien en relation: Killer Hurts Website Hits: 6602
|