# 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
}
TANTARA (no) - Based On Evil (2012)
Label : Indie Recordings
Sortie du Scud : 24 Août 2012
Pays : Norvège
Genre : Néo Thrash Metal
Type : Album
Playtime : 8 Titres - 58 Mins
Première constatation en cette fin de mois d’août : Il fait chaud. Très chaud même. Certes, nous n’atteignons pas les températures caniculaires du bel été 2003, mais quand même. Elles sont suffisantes pour qu’on se réveille le matin dans le même état qu’après un marathon nocturne. Pas cool. Frigo, boissons fraîches, climatisation, ça ne suffit pas. Et pas de piscine à portée de main.
Massive fail.
Et si en plus, je vous propose de monter la température de quelques degrés, vous allez forcément tirer la tronche. Vos grimaces de rejet seraient pourtant assez mal venues. Car il n’est point question ici de vous enfermer dans votre chambre le radiateur à fond, ou de vous attacher à une chaise en aluminium pile sous les rayons du soleil, mais de réchauffer vos oreilles, certainement mises à mal par une musique de camping horripilante, ou la dernière danse de l’été à la mode.
Car pour danser sur Based On Evil, ça va être chaud. Et ça prendra des airs de danse de Saint Guy.
Je ne sais pas si leur premier EP, Human Mutation avait trouvé son chemin jusqu’à vos chaumières. Toujours est il qu’il faisait étalage d’un certain savoir faire dans l’art de la composition made in 80’s et pur Thrash.
Alors ce que je vous propose, c’est de découvrir leur premier long, qui risque à lui seul de faire tourner l’ambiance générale torride à la fournaise intégrale.
Tympans à poil, lobes tremblant et suant, allons y gaiement.
TANTARA vient de Norvège, et c’est bien son seul rapport avec le froid. Mais foin de Black Metal et autres joyeusetés nordiques, ici, il est question de classicisme Thrash et rien d’autre. Un Thrash contemporain fleurant bon les années 80 pourtant, dans la veine d’un WARBRINGER en mode light, ou d’une réunion d’ONSLAUGHT sur Killing Peace. Barre placée haute, mais perche solide. Cool.
Les quatre musiciens connaissent leurs classiques, c’est un fait. Ils ont beaucoup écouté TESTAMENT, et maîtrisent l’art de la syncope avec flair. Leur riffs sont épais, mais jamais collants. Leurs chansons sont longues, mais propices aux breaks les plus savoureux. Fredrik Bjerkø sait chanter comme tout bon possédé démoniaque qui se respecte, sans jamais franchir le pas du grognement bestial inintelligible. Ici, tout est carré, mesuré, étalonné pour nous rappeler au bon souvenir des scènes US et Européennes d’il y a deux, trois décennies.
Et rien que la cinquième piste, justement intitulée « Human Mutation » justifie l’achat de ce CD à elle toute seule. C’est une démonstration de cohérence violente, pertinente, et calibrée. Empruntant autant à la bande à Chuck Billy sa science des guitares qui mordent, qu’à la clique à Scott Ian son art du martèlement groovy, le quartette norvégien s’approprie un héritage sans le piller, mais uniquement pour bien le rappeler à notre mémoire.
« Trapped In Bodies », c’est un peu la rencontre inopinée entre NASTY SAVAGE et EXUMER. C’est furieux, ça cartonne sec, et c’est pourtant parfait.
Mais TANTARA n’en oublie pas pour autant ses racines européennes, et tend même parfois à se rapprocher d’un AGONY, dont le Deadly Legacy hante encore bien des mémoires. Même alternance de passages furieux et de breaks Heavy et mélodiques, même envie de détruire tout en finesse. C’est propre.
Car nous sommes ici à cent lieues de la bourrinade gratuite et paillarde.
Il suffit pour vous en convaincre d’écouter l’épique « Prejudice Of Violence », car tout est là ! Les vocaux écorchés, les chœurs convaincus et convaincants, les soli justes et précis, et les références se bousculent…Les arrangements vocaux d’HOLY MOSES, l’art de la multiplication des rythmes d’EXODUS, la fluidité d’un TESTAMENT, le long break développé à la PANTERA, voire la franchise d’un EVIL DEAD…C’est…Magique et parfait !
Car TANTARA est à l’aise dans tous les compartiments du jeu, du brûlot incendiaire (l’ouverture épileptique et éponyme « Based On Evil »), au pamphlet revanchard à la DESTRUCTION (« The Debate »), en passant par le mélodico-agressif up tempo (le presque datable au carbone 14 « The Killing Of Mother Earth »), tout ici est parfait, à sa place, et enthousiasmant au dernier degré.
Jeu, set et match. br>
Bah voilà, c’est fait, j’ai encore plus chaud…Pourtant les rideaux sont fermés, mais j’ai quand même les cheveux en pétard et la tête qui remue toute seule. C’est ça l’effet TANTARA. Faire exploser le thermomètre sans pour autant nous faire risquer la suffocation. Rendre hommage aux maîtres sans pour autant décalquer la copie.
En quelque sorte, des braises qui tombent du soleil. Et puis, Based On Evil, se posera presque en conclusion indéniable, une douce et chaude évidence…
L’été 2012 aura été chaud ou n’aura pas été !!!
Ajouté : Mercredi 22 Août 2012 Chroniqueur : Mortne2001 Score : Lien en relation: Tantara Website Hits: 7160
|