# 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
}
TUSKO (usa) - Tusko (2015)

Label : Auto-Production
Sortie du Scud : 19 septembre 2015
Pays : Etats-Unis
Genre : Post Progressif
Type : EP
Playtime : 6 Titres - 32 Mins
Restons donc aux Etats-Unis, mais migrons de Denver à Pottsville, Pennsylvanie, pour traquer d'autres furieux qui n'ont pas grand chose à envier à leurs aînés.
Si les TUSKO se réclament du progressif, admettons en principe de base qu'ils sont avant tout fondamentalement Mathcore et Post Hardcore, avec certes une bonne emphase sur l'évolution de leurs thématiques.
Mais ce sont eux qui se décrivent le mieux, en une formule grivoise, ironique et lapidaire :
"THE DILLINGER ESCAPE PLAN et SOUNDGARDEN qui se fistent mutuellement pour savoir qui aura le dernier bout d'acide".
C'est péremptoire, pas très élégant, mais ça décrit assez bien l'univers du quintette. Ce quintette, c'est Jim Thomas, Shane Flail, Brandon Foti, Samule Grim et Erin Linderman, qui s'égosille au chant de sa voix criarde et stridente.
Le reste ? Le B-A.BA du Mathcore bruitiste et implacable, des rythmiques échevelées, des riffs déconstruits, et des bases vocales abrasives, écorchés et déchaînées. Six morceaux, dont trois qui prennent leur temps, sans s'embarrasser de politesses inutiles.
Et à la manière d'un DILLINGER qui débutait son Miss Machine par un "Panasonic Youth" direct et apocalyptique, TUSKO entame les hostilités avec "Checks And Balances" à peine moins véhément, à l'impact légèrement atténué par une production plus sourde que celle de l'album de Ben & Co. On tombe direct dans les sables mouvants, avec gestes amples et inutiles pour s'en sortir, mais le quintette s'amuse beaucoup de nous voir bouger comme un beau diable, et nous fait même croire qu'on peut encore s'en sortir. Plage calme avec guitare toute en aigus subtils, riff franc en arrière plan, avant de nous enfoncer la tête encore plus en reprenant ses ardeurs Math.
Ca calme ? Oui. Parce que c'est classique mais pas vraiment, parce que c'est puissant mais sournois, et surtout parce que cette voix complètement hystérique empêche toute réflexion.
"Skook" reste sur la même trame, sauf que le morceau la tend sur plus de sept minutes. Les idées se télescopent à vitesse grand V, et effectivement, l'emprunte de SOUDGARDEN devient plus perceptible, mais celui des débuts, d'Ultramega OK, pour ces mélodies maladives et cette tension palpable. D'ailleurs, dans ces moments là, la voix d'Erin prend les intonations de Chris lorsqu'il se prenait pour un Jésus en pleine crucifixion. Puis retour à la case DILLINGER, version Calculating Infinity, avec guitares élimées et rythmique instable MAIS précise. Ca ralentit, ça s'écroule, et pourtant ça repart de plus belle, avec une ligne de guitare presque digne de l'héritage College Rock des années 80. Surprenant, mais diablement séduisant...
"Answers" reprend les débats de plus belle et débute en fanfare sur une belle syncope générale, avec un chant qui se calque sur une rythmique en échauffourée. La voix atteint une fois de plus les limites de la stridence, évoquant les miaulements d'un chat à qui on piétine la queue, et la structure du morceau ne se stabilise pas plus que sur les deux efforts précédents.
"Stripper Tits" et son titre finaud n'arrange rien au problème et semble même accumuler encore plus de pistes différentes. Cette voix ci, le filet d'Erin se veut plus doux et sensuel, comme pour épouser la thématique, et nous avons même droit à un intermède presque Néo, avant qu'elle ne se rappelle de temps à autres qu'elle est là pour nous vriller les tympans.
"R.E.M.ember" et son savoureux jeu de mot n'invoque pas vraiment l'esprit de Michael Stipe, et ne fait pas de détour par Athens. Encore une fois, même principe, valse hésitation entre Mathcore dru et Néocore alternatif, alors que les guitares se permettent même quelques inflexions Néo Thrash, voire Death. Mais on constate quand même qu'Erin à un très joli filet de voix quand elle chante...
En guise d'adieux, "Sun As A Weapon" décoche un riff cinglant et redondant, qui cette fois tombe complètement dans le Néo Thrash, alors que le chant suscite quelques interrogations Rrriot Girl très légitimes, un peu comme si GOJIRA trempait son biscuit dans la tasse des BIKINI KILL, en, toute indiscrétion. Quel groupe étrange décidemment, mais il émane de ces chansons somme toute assez similaires un charme indéfinissable, qui fait qu'on reste collé à son casque.
Pour savoir si madame Linderman va oser aller encore plus loin par exemple... Mais ce dernier morceau n'en oublie pas pour autant les plans de funambule, et le break central complètement halluciné, avec incantations cauchemardesques d'une Kate Bush sous acide nous renverse encore un peu plus...Est on vraiment sur de ce que l'on vient d'entendre.
Oui c'est un foutoir, un ballet sous acides, plus proche en effet du Mathcore dézingué des DEP que des errances psychotiques de SOUNDGARDEN, mais l'effet est assuré, et l'originalité pointe souvent le bout de son nez. Pour une synthèse rapide, ingurgitez "Sun As A Weapon", le morceau le plus foutraque du lot, mais sinon, l'intégralité du EP est aussi une option, viable, ou pas...
De la fureur, de la rage, du bruit, des éructations à la limite de la souffrance morale et physique, voici ce qui vous attend avec TUSKO.
Essayez de fumer le CD, peut être que son impact sera encore plus grand...
Ajouté : Jeudi 03 Mars 2016 Chroniqueur : Mortne2001 Score :     Lien en relation: Tusko Website Hits: 9730
|