# 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
}
TANNED CHRIST (se) - Antipodean Sickness (2015)

Label : Grindhead Records
Sortie du Scud : 25 mai 2015
Pays : Suède
Genre : Math Crust
Type : Album
Playtime : 10 Titres - 18 Mins
"Not your typical Hardcore Metal Band"
Ainsi sont présentés les australiens de TANNED CHRIST sur le site Noisey Vice. Ce qui représente ma foi une description honorable et fidèle de leur musique.
En fait, ils SONT Hardcore Metal, mais option Math, Indie, Crust et tout ce qui peut leur permettre d'exprimer leur colère et leurs idées.
Ils sont paraît il fans de T-shirts longs, et ont à priori le look de l'anti-emploi. Des anti-héros par excellence ? Oui, on trouve au micro un barbu hirsute qui n'a pas du voir un peigne depuis sa naissance, un pseudo nerd, un fan d'Indie Folk, et un intello a lunettes, cheveux ras et mine concentrée. Ceci n'aurait aucune espèce d'importance si leur musique n'était pas en totale adéquation avec leur look hétéroclite.
Après un premier essai en forme de EP en février 2014, Edifice, le quatuor offre depuis quelques mois son premier longue durée, qui n'en est pas vraiment un, à moins que l'on considère que vingt petites minutes soient suffisantes.
Elles le sont d'une certaine façon, puisqu'elles laissent exsangue, à bout de souffle, épuisé.
Pourquoi ?
Parce que la musique de TANNED CHRIST l'est. Elle combine des éléments épars de Mathcore, de Crust, de Hardcore gras et profond, un peu d'Indie par dessous et la casserole est pleine, et bouillante. Morceaux très court, pas forcément concis, mais qui ne dérivent pas au hasard pour autant. C'est une espèce de puissance absolue déconstruite et décortiquée, juste pour le plaisir de la voir les entrailles à l'air. Sadique ? Oui, comme une infirmière qui sied à vos côtés pour vous piquer de son aiguille au moment le plus inopportun.
Alors une basse qui vrille et part en cercles piqués, une batterie qui s'adapte ou qui dicte, et lance des plans à la volée, une guitare qui parfois se noie dans des dissonances Post Rock, et par dessus tout ça, un hurleur de profession qui ne renâcle pas à lâcher un énième cri alors qu'il est au bord de l'apoplexie.
Bruyant, mat, en montagnes russes, bienvenue dans le monde sacrément chaotique d'Antipodean Sickness.
"Cet album parle du fait de faire du Hardcore Métal en Australie"
Au vu du rendu, la chose doit être ardue, et il faut donc faire un maximum de bruit pour se faire remarquer, même avec un T-shirt long sleeve. Sans gloser, le choc est frontal, sans prendre de gants ou de moufles, et les parties s'amoncèlent sous nos oreilles hagardes, qui n'ont pas subi une telle agression en puzzle depuis longtemps. Tout y passe, larsens, écho, franchise, pesanteur, groove maladif, brutales impulsions, et ça braille, ça braille sur une basse gironde mais peu décidée à dévoiler son plan de route.
Sans parler de Jazzcore, les structures sont quand même suffisamment réfléchies et libres de toute entrave pour que l'allusion ne soit pas déplacée.
Mais en ce cas, évoquons aussi l'Indus, le Post Indie, et tout ce qu'on veut en fait. Et caser tout ça dans des morceaux qui se contentent de la minute réglementaire est un tour de force austral de première qualité.
Bon certes, il y a des exceptions à cette règle. Comme ce bizarre "No Love Ever", qui si il sonne le glas de toute relation amoureuse fout plutôt les jetons avec sa basse épaisse et un peu roublarde sur les bords. SONIC YOUTH ? Oui un peu, mais aussi Hardcore tendu comme une algarade pré rupture, et le pire, c'est que contrairement à d'habitude, les gus ne changent jamais d'optique. C'est lourd, gras, dissonant, et ça casse le moral encore plus rapidement qu'une pluie qui vous tombe sur la gueule.
Le diptyque final "Prowler" I et II n'est pas mal non plus dans le genre bancal et concassant. Math comme un riff de Ben, Crust comme des suédois en touristes, rythmique bombée et qui monte et retombe comme un vieux ressort cassé...
Et là, c'est assez paradoxal, puisque c'est linéaire sans l'être, comme une équation complexe inscrite à la craie sur un tableau qui se répète et que personne n'arrive à résoudre.
Et ça fonctionne aussi sur d'autres morceaux, comme "Antipodean Sickness", moins d'une minute, et ça part dans tous les sens, avec cette basse de plus en plus hypnotique, et même ce chant qui se met d'avantage en retrait pour laisser de la place à une guitare mi Core, mi Post.
"Abscond" mérite son titre mieux que n'importe quelle analyse de Bernard-Henri Levy, et se décomplexe le long d'une polyvalence Grind/Ultra Math/Post Hardcore. Avec même en guise d'inconnue donnée par pitié, une double grosse caisse qui martèle grave, avant que son propriétaire ne lui préfère une caisse claire mate et percutante, sur des affolements Grind. Une minute et vingt quatre secondes, les RAMONES du Math Crust. Quel manque de diplomatie...
Bon, c'est cool, inutile de tourner autour du pot, entre les T-shirts, la basse, les bordel des fondations qui menacent de s'ébranler alors qu'elles ont été construites par des experts, vous avez compris où je ne voulais PAS en venir.
Alors écoutez, prenez quand même une aspirine avant, et comprenez qu'encore en 2015, le Mathcore peut offrir des choses nouvelles, pour peu qu'il soit suffisamment débridé.
J'ai dit débridé, pas débraillé. Alors rentrez moi cette chemise dans le pantalon.
Ajouté : Vendredi 08 Avril 2016 Chroniqueur : Mortne2001 Score :     Lien en relation: Tanned Christ Website Hits: 6528
|