# 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
}
STÉPHAN FORTÉ (FRA) - The Shadows Compendium (2011)

Label : Listenable Records
Sortie du Scud : 26 Septembre 2011
Pays : France
Genre : Guitar Hero néo-classique
Type : Album
Playtime : 8 Titres - 45 Mins
Avant de s’étendre plus longuement sur ce premier effort solo de Stéphan Forté, une piqûre de rappel s’impose. Car si ce guitariste originaire de Montpellier jouit aujourd’hui d’une belle renommée, en grande partie grâce à son groupe ADAGIO, il ne faut pas oublier d’où il vient et par où il est passé, afin de mieux cerner ce qui l’a conduit à réaliser son album instrumental.
Celui pour qui les albums d’Yngwie Malmsteen furent une révélation, avait déjà mis en boîte une démo instrumentale en 1996, intitulée Visions. Si mes souvenirs sont bons, « Visions » c’était aussi un titre de Patrick Rondat sur l’album Rape Of The Earth (1991), et cette croisée des chemins annonçait déjà le meilleur pour Forté … Il sortait alors de l’école de musique CMCN de Nancy, ce qui vous donne déjà un aperçu du potentiel technique du bonhomme. Largement encouragé et propulsé par Olivier Garnier, alors à la tête du label Nothing To Say, Stéphan Forté a fini par se retrouver leader de l’un des plus prometteurs « super groupes », ADAGIO, comptant dans ses rangs le chanteur David Readman (PINK CREAM 69), le batteur Dirk Bruinenberg (ELEGY) ou encore le clavier Richard Andersson (MAJESTIC).
La suite, on la connaît : ADAGIO a déjà sorti 4 albums, migrant peu à peu vers un style néo-classique à tendances Black bien affirmé, et travaillerait actuellement sur son nouveau disque en compagnie du chanteur Mats Leven (ex-Malmsteen !). Pour autant, Stéphan est loin d’avoir dit adieu à son premier amour, la guitare instrumentale. The Shadows Compendium en est la preuve.
Résultat de 3 ans de travail intense et acharné, cet album instrumental est peut-être le plus intéressant et le plus audacieux depuis le fameux Amphibia de Patrick Rondat. Dans des registres totalement différents, certes, mais avec le même qualificatif : ambitieux. Sans aucun doute, The Shadows Compendium fera le bonheur des détracteurs de shredders et de ceux qui ne supportent pas le tricot à la six-cordes. Pour autant, voilà un opus qui enterre le concept du couplet / pont / refrain à la guitare, avec une batterie métronomique sans âme et une basse ennuyeuse à mourir. Ici, chaque instrument apporte sa pierre à l’édifice, les claviers de Kevin Codfert (dans tous les bons coups en ce moment), la basse de Franck Hermanny, et donc cette batterie intenable qui donne tant de profondeur à chaque titre.
En un mot, Stéphan Forté décrit son univers à lui, comme il le fait si bien avec ADAGIO, mais cette fois sans aucune parole. En dépit de compositions intégralement instrumentales, les fans du bonhomme retrouveront immédiatement sa griffe. Et c’est là que The Shadows Compendium dévoile son secret … Même si l’énorme et baroque « Duat », exécuté en compagnie de Glen Drover (ancien gratteux de MEGADETH avant que Chris Broderick ne prenne sa place), évoque clairement le Jean-Sébastien Bach adulé par Yngwie Malmsteen, dans le plus pur registre du Guitar Hero, le reste de l’album déborde de richesses. Quand chaque morceau raconte une histoire unique, le tout dévoile fidèlement la personnalité musicale de Forté. Qui, rappelons-le, aime le Metal.
Le titre d’ouverture et éponyme met les pendules à l’heure en à peine 5 minutes : un air néo-classique, quelques démonstrations de virtuosité incontestable avec l’aide de Jeff Loomis (ex-NEVERMORE), et des riffs dont l’origine ne fait aucun doute ! A peine le temps de s’en remettre, et « De Praestigiis Daemonum », plus sombre, aux orchestrations et claviers démoniaques, offre l’occasion à Matthias IA Eklundh (FREAK KITCHEN) et Forté de faire danser leurs guitares comme des petits diablotins, sur fond de rythmiques qu’on qualifierait de presque Death.
Un « Spiritual Bliss » rentrerait également dans le moule du déballage technique si Forté n’avait pas eu la bonne idée d’y glisser quelques inspirations bluesy. « Sorrowful Centruroide », avec un nom aussi barré que le morceau lui-même, ses quelques riffs assassins, ses mélodies moins évidentes et son break très « JS Bach » encore une fois, place l’audace de Forté au moins au niveau d’un Steve Vaï … Dans la même idée, « I Think There’s Someone In The Kitchen », en duo avec Daniele Gottardo, donne dans le Jazz-fusion habilement réussi, et la seule question qui subsiste à l’écoute de ce titre alambiqué, c’est de savoir si le mec dans la cuisine s’appelle Bryan ou non.
Et quand les titres cités ci-dessus aèrent quelque peu The Shadows Compendium, « Prophecies Of Loki XXI » nous replonge dans un monde très glauque et Dark Metal, dominé par le piano vampirique de Kevin Codfert (qui se permet même un petit moment de liberté). The Shadows Compendium s’achève par une improvisation, terme bien mal choisi puisque les doigts de Forté respectent à la note près la « Sonate au Clair de Lune » de Beethoven. Mais il reste le feeling et c’est bien là l’essentiel …
Il y avait Satriani, Vaï, Malmsteen, Rondat, Petrucci, Friedman ou encore Romeo.
Il faudra compter sur Stéphan Forté.
Car il vient de rentrer dans la Cour des Grands.
Ajouté : Mercredi 23 Novembre 2011 Chroniqueur : NicoTheSpur Score :     Lien en relation: Stéphan forté Website Hits: 10954
|