# 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
}
AFTERMATH (usa) - Killing The Future (2015)

Label : Divebomb Records
Sortie du Scud : 30 octobre 2015
Pays : Etats-Unis
Genre : Thrash Metal Crossover
Type : Album
Playtime : 9 Titres - 31 Mins
Décidemment, Divebomb Records est en passe de devenir mon label fétiche du moment... En découvrant leur catalogue de rééditions et leur "bootcamp series", je suis passé de surprise en surprise tant leurs choix sont pertinents et symptomatiques de groupes que j'écoutais dans ma jeunesse.
Mettons tout de suite les choses au point, pas de copinage en filigrane de cette déclaration, juste de la sincérité, et une fois encore ce soir, je me suis régalé.
Je reviendrai souvent dans leur giron soyez en sur, mais abordons pour l'instant le cas qui nous intéresse. Pour cela, comme d'habitude, un petit voyage dans le temps s'impose.
Retour donc dans les mid 80's, Chicago, Illinois. AFTERMATH (attention, il existe au moins trois autres groupes de la même époque et du même nom, dont deux officiant dans un registre similaire) sort sa première démo en 1986, animé d'un Thrash furieux et débridé, avant un an plus tard de mettre au point un produit beaucoup plus travaillé et fignolé.
En ce temps là, le crossover Thrash/Hardcore ne faisait pas l'unanimité dans la presse. On reprochait à ces groupes de se vautrer dans la fange la plus bruitiste de la musique extrême, au détriment de la cohérence et autres considérations de solfège superflues. Lorsque Killing The Future fut envoyée aux médias, Don Kaye la trouva "beaucoup trop rapide" et expédia son jugement d'un mépris lapidaire. Il est vrai qu'à l'instar de certains de leurs contemporains, tels CORROSION OF CONFORMITY, CRYPTIC SLAUGHTER et autres WEHRMACHT, les AFTERMATH n'hésitaient pas à pousser le bouchon trop loin, aux plus grand bonheur des quelques fans de Thrashcore qui traînaient par là.
Soyez donc heureux, puisque Divebomb Records vous permet aujourd'hui de mettre la main sur les deux premières démos du groupe en un seul album. Il est vrai que le parcours des américains est assez heurté, puisqu'ils ont déjà splitté deux fois (en 1996, puis en 1999), mais qu'ils sont bel et bien de retour depuis l'année dernière, ce qui fait de cette sortie un objet promotionnel de premier choix.
Neuf morceaux, les cinq de la fameuse et historique démo Killing The Future (à l'époque enregistrés sur les deux faces) et quatre supplémentaires tirées de la première maquette du quintette, c'est un carton plein, et surtout une épiphanie de violence. Enrobés cette fois ci dans une production qui leur rend l'hommage qu'ils méritent, ces titres n'ont pourtant rien perdu de leur agressivité d'origine, grâce à une remasterisation de Paul Logus qui a su effacer les grésillements des aigus tout en donnant de la profondeur aux graves de la rythmique. Pour tout dire, on perçoit mêmes les lignes de basse, chose inconcevable il y a trente ans. Quant à la pochette, c'est une retranscription fidèle de celle de la cassette de 1987, ce qui fait de cet album un collector à posséder de toute urgence.
Musicalement, pas trop de question à se poser. Si vous étiez en ce temps là des accros du Thrashcore qui suinte, un bonheur sans limite vous attend. Et au contraire de leurs nombreux frères d'armes, les AFTERMATH possédaient un solide bagage technique qui leur permettait de jouer carré, même à une vitesse déraisonnable. Vous ne retrouverez donc pas forcément les breaks qui tombent pile poil à côté des CRYPTIC SLAUGHTER, ni les blagues douteuses de WEHRMACHT, mais accrochez vous à votre siège, puisque ça dépote sévère.
La section rythmique Adam/Ray Schmidt assure large sur les deux démos, mais c'est bien sur Killing The Future qui se taille la part du lion, bénéficiant alors de plus de moyens et de pratique.
La Démo #1 perd en dynamique, notamment sur les soli, et l'absence d'une seconde guitare se fait ressentir, puisque la basse était encore un peu maigre pour combler les trous.
Ce qui n'empêche nullement le groupe de nous balancer un instrumental diabolique aux soli hystériques, qui font comme si Trey Azagthoth était passé étriller une gamme en avant première ("The Aftermath", l'hymne absolu du combo), et de revisiter les couloirs du Thrashcore sans mettre les patins ("Sentenced To Death", qui joue même avec une ambiance bien sombre sur sa première moitié avant de tout envoyer valser).
Les cinq pamphlets d'ultra violence de Killing The Future retrouvent une seconde jeunesse, et bénéficient d'un son sec et claquant, qui accentue encore plus leur vélocité d'origine. Pas de soucis à se faire, ça cartonne sous tous les angles, mais ça joue net et sans bavures. Nous sommes bien loin des interventions supersoniques et lapidaires des CS ou de COC, et les minutes défilent plus facilement, toujours agrémentés de breaks Heavy ou bien Core. Le niveau des musiciens était largement acceptable surtout dans ce style de musique, et il n'est pas incongru de voir en ces pistes une tentative d'ouverture vers un Crossover à la LUDICHRIST ou même quelques senteurs à la LUNATICS WITHOUT SKATEBOARDS.
Riffs qui tailladent le Heavy jusqu'aux veines, passages Thrash bien vilains qui jouent des tours pendables, mais surtout, des accélérations suffocantes en veux tu en voilà, qui donnaient à cette démo des airs de fête de la brutalité sachant garder une bonne dose de fun.
Certes ça partait parfois comme une fusée ("Going No Place", et un chant de Charlie Tsiolis au phrasé complètement possédé), mais c'est justement ce qu'on venait chercher.
Quelques temps plus tard, AFTERMATH réussira même à sortir un album avant de dire au revoir, Eyes Of Tomorrow, plus posé et technique, logique vu le délai... Ils sont aujourd'hui réactivés, et qui sait ce qu'ils sont encore capables de nous offrir ?
En tout cas, en attendant un hypothétique nouvel LP, vous pouvez déjà ramasser les morceaux offerts par la compilation 25 Years Of Chaos, sortie il y a quatre ans, ou si vous préférez l'authentique, vous jeter de suite sur cette sortie qui vous proposera le meilleur des jeunes années du groupe, et peut être sa musique la plus instinctive et immédiate.
En tout cas, merci Divebomb Records pour cette nouvelle tranche vintage qu'on croque à pleines dents, et à bientôt pour des nouvelles de ce label très actif qui n'en finit pas de nous enthousiasmer !
Ajouté : Mardi 01 Novembre 2016 Chroniqueur : Mortne2001 Score :     Lien en relation: Aftermath Website Hits: 10018
|