# 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
}
INFERNO SCI-FI GRIND'N'ROLL (it) - The Fall And Rise And Fall Of Inferno Sci-Fi Grind'n'Roll (2012)
Label : Subsound Records
Sortie du Scud : 19 mars 2012
Pays : Italie
Genre : Cyber Electronic Metal
Type : Album
Playtime : 14 Titres - 32 Mins
Généralement, les déflagrations les plus assourdissantes et/ou expérimentales nous venaient toujours du réservoir inépuisable de l’Europe de l’Est, du Japon (probablement les pires d’ailleurs), des USA, et même de notre beau pays, qui recèle en son sein toute une armada de flingués prêts à repousser sans cesse les limites de la bienséance musicale.
Saluons donc l’intrusion de quelques amis transalpins dans l’aventure haute en couleur du tout-ou-rien bruitiste mais compréhensible, j’ai nommé INFERNO SCI-FI GRIND’N’ROLL.
Avec un blaze pareil, c’est sur, il ne fallait pas s’attendre à un concept album bluette sur fond de claviers dégoulinants. Mais de concept album il est bien question ici, plutôt axé science fiction barge et exotique.
Quatorze titres pour trente deux minutes, nos compères gentiment défaits jouent la sobriété, et il faut reconnaître que c’est plutôt à leur avantage.
Décomposé en trois parties, simplement intitulées « L’avènement », « La Chute » et « L’avènement », The Fall And Rise And Fall Of Inferno Sci-Fi Grind’n’Roll (C’est Bowie et son Ziggy qui vont être contents…) est en fait, malgré le nom du combo, tout sauf du Grind. Les Italiens peuvent à l’occasion emprunter quelques structures d’arrangements à TOTAL FUCKING DESTRUCTION, surtout dans cette façon unique de cumuler les riffs teigneux sur fond de bruitages divers, mais la globalité de leur musique reste cohérente, et leurs chansons pertinentes.
Les réelles influences sont à chercher ailleurs. A l’école Göteborg bien sur, pour les vocaux écorchés sur tapis de guitares mélodiques, vers le Hard-Core le plus velu pour l’énergie, et même un peu de Thrash/Death à l’occasion de passages bien nerveux.
On pense souvent à une hybridation entre un AT THE GATES vraiment furieux, un 6:33 moins dangereux, et même pourquoi pas, un IMPALED NAZARENE sans les tics hystériques. Le tout, sur une structure globale directement inspiré du ENTOMBED Death’n’Roll de fin de carrière.
Comme son titre l’indique, The Fall And Rise And Fall Of Inferno Sci-Fi Grind’n’Roll est à prendre comme un voyage dans une galaxie lointaine, voyage assez rapide au demeurant, mais qui reste envoûtant et inédit. Car malgré ces trois parties bien distinctes, l’ensemble s’avale goulûment d’un trait, sans chercher à pousser l’analyse trop loin.
Certains reprocheront sans doute le côté répétitif de certaines compositions, mais il est à croire que les Italiens ont privilégié l’homogénéité à la trop grande diversité, ce qui évite l’aspect fourre tout qu’on retrouve parfois dans ce genre de productions.
Et s’il est bien sur vain de chercher à décomposer l’œuvre titre par titre, je dois avouer que l’enchaînement « Halls Apocalyptus »/ « Dead Man Walkman » est relativement goûtu, et symptomatique de la démarche de INFERNO SCI-FI GRIND’N’ROLL. Riffs groovy, tempo qui virevolte, arrangements électroniques ludiques, tout est résumé en quelques minutes et valide de fait l’expérience.
Et là est la force de ce groupe hors norme. Ils n’ont en effet pas juste cherché à être originaux et inclassables, ils se sont aussi décarcassés pour proposer des morceaux qui tiennent la route, avec des riffs intelligents et entraînants, en gros, le meilleur du professionnalisme couplé à une volonté de démarquage manifeste.
Sans éviter l’écueil de petites erreurs de jeunesse, INFERNO SCI-FI GRIND’N’ROLL réussit à nous offrir un album très personnel, qui je pense, pourra séduire les plus ouverts d’entre vous. A compter que vous ne vous laissiez pas rebuter par un nom de groupe aussi peu descriptif !
Ajouté : Lundi 09 Juillet 2012 Chroniqueur : Mortne2001 Score : Lien en relation: Inferno Sci-Fi Grind'n'roll Website Hits: 7402
|