# 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
}
PRONG (usa) - X - No Absolutes (2016)
Label : Steamhammer
Sortie du Scud : 29 janvier 2016
Pays : Etats-Unis
Genre : Metal Industriel
Type : Album
Playtime : 12 Titres - 41 Mins
Il s'en tire bien quand même ce salaud. Trente ans ou pas loin qu'il est dans le biz', et presque pas une ride... L'underground ça conserve visiblement...
Je me souviens d'une foire aux disques, fin des années 80. Alors que je tendais mon exemplaire de SUICIDAL TENDENCIES au charmant vendeur de vinyle, un autre que je connaissais vient m'aborder l'air contrarié... Dans sa main, le Force Fed d'un groupe que je ne connaissais pas, dans sa bouche, un discours convaincu et rodé...
"Non sérieux, tu fais une erreur là en achetant le SUICIDAL. C'est du passé ça... Pff... Fais moi confiance, prends ça, c'est l'avenir!"
Ça, c'était PRONG. Force Fed. Je n'ai jamais revu ce mec, mais souvent je pense à lui, quand j'écoute Primitive Origins, Cleansing ou Beg To Differ. Parce que sans lui, je n'aurais peut être pas connu. Cette vibration de basse, de Mike d'abord, puis de Troy, et de Paul Raven. Et surtout, le beat imparable de Ted "drum machine" Parsons. Et j'aurais vraiment manqué quelque chose. Une sensation, un tremblement new-yorkais, une certaine poignée de main rude, et qui réveille.
Mais depuis, mes yeux sont bien ouverts et mes oreilles aussi. Et celles-ci se sont justement abreuvé des sonorités de X - No Absolutes, titre qui convient parfaitement à ce dixième album de PRONG.
Pourrait-on presque dire dixième album de Tommy Victor ? Oui, je le pense, sans pour autant minimiser le rôle de ses deux comparses actuels Jason Christopher (basse) et Art Cruz (batterie). Ils sont là depuis 2012 pour le premier, et 2014 pour le second, soit depuis au moins Ruining Lives, le précédent LP que la critique et le public avaient apprécié.
Moi aussi d'ailleurs. Comme plus ou moins chaque album.
Alors, nouveau disque, une déclaration d'intention qui refuse les extrêmes en guise d'intitulés, et une musique qui applique depuis très longtemps ce précepte.
Car même si PRONG ne s'est jamais attiré les faveurs du grand public, il a parfois flirté avec une certaine forme d'absolu. Sur les premiers efforts, très NYHC version Indus froid, ou sur les derniers de la période Parsons, qui se rapprochaient des paroxysmes de l'idole Jaz Coleman.
Mais depuis, Tommy se la joue modéré. Après tout, il peut faire ce qu'il veut depuis des années, joue avec DANZIG, enregistre ses propres idées via son groupe de jeunesse, avec lequel il s'amuse même à l'exercice de la cover bien sentie (Songs From The Black Hole, pas vraiment le genre d'hommage qui fait vendre de la rondelle...), il est heureux, somme toute.
Et ça se sent d'ailleurs sur ce LP X, marqué d'une croix noire comme l'emplacement d'un trésor de pirates sur une vieille carte, ce qu'il est peut être finalement. Une récompense pour lui, en forme d'achèvement, d'étape importante, et pour nous évidemment fans.
Et après l'avoir écouté, je trouve qu'il remplit formidablement bien cet office. Pas de grosse surprise, du PRONG actuel, mais qui regarde dans le rétro pour résumer ses meilleures années. C'est à dire...1987/2016. Et ça, sans être un best of c'est plutôt un bon survol.
On y trouve des réminiscences des débuts, ce Hardcore fast & tense de Primitive Origins et Force Fed, en moins clinique ("Sense Of Ease"), quelques allusions à la période élastique et protéiforme des dernières années mais aussi de Rude Awakening ("Ultimate Authority", le single), un peu du rigorisme Indus groovy de Cleansing ("Do Nothing", avec toujours cette sale basse planante qui menace de tout écraser à la moindre contrariété), mais aussi du mid qui tient la route et qui lâche un refrain puissant ("Cut and Dry" presque alternatif dans l'approche).
En gros, tout ce qui fait, a fait et fera toujours le son PRONG, quoiqu'il arrive.
Toujours aussi efficace dans son choix de riffs et de rythmiques ("Worth Pushing"), Tommy se contente de jouer, tire de sa guitare ces parties graves mais cool qui ont fait sa marque de fabrique, et ne cherche pas à se faire passer pour une victime, un héros, un modèle ou une icône.
Il joue, et c'est tout ce qui ressort de ce nouvel album qui joue la carte de l'immédiateté, de la franchise, et de l'authenticité.
Puissant comme les albums les plus soufflants, groovy comme les moments les plus Indus Indie ("In Spite Of Hindrances" qui se veut union entre PAIN et KILLING JOKE), X - No Absolutes pourrait se résumer à sa belle cohésion qui n'offre pas vraiment de moment fort, mais plutôt une continuité logique et smooth.
Une véritable joie de jouer exhale des morceaux de ce dixième effort qui n'a pas du en être un grand tant il respire la simplicité et le bonheur de pouvoir être...soi même.
On a toujours tendance à attendre beaucoup trop des groupes qui ont participé à l'avancée d'un genre, mais après vingt ans de carrière, ils n'ont plus rien à prouver, puisqu'ils l'ont déjà fait, il y a longtemps. Alors Tommy, comme les autres se borne à proposer de nouvelles chansons, de très bonnes chansons, qui roulent le long d'une production tout confort, pas trop aseptisée, mais pas non plus trop rugueuse.
Et puis après tout, tant qu'il sera capable de nous livrer des brûlots comme "Soul Sickness" qui pourrait en remontrer de concert à la scène Néo Thrash scandinave et à celle du Power Metal Japonais, je ne vois pas ce qu'on pourra lui reprocher.
Mais on ne reproche rien à Tommy Victor justement, on le remercie juste d'être toujours là, tout simplement. Ses albums lui ressemblent, il n'a jamais vendu son âme, ni bradé son talent. Et X - No Absolutes est tout ce que son titre décrit.
Pas d'absolu, juste un dixième album, un anniversaire qu'on fête ensemble. Avec beaucoup de bonne humeur, et une énergie qui nous mène à la fin de la nuit.
Ajouté : Jeudi 25 Février 2016 Chroniqueur : Mortne2001 Score : Lien en relation: Prong Website Hits: 5558
|