# 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
}
MARTY FRIEDMAN (usa) - Tokyo Jukebox (2010)

Label : Mascot Records / Socadisc
Sortie du Scud : 2010
Pays : Etats-Unis
Genre : Fantaisie J-Pop Instrumentale Indispensable
Type : Album
Playtime : 12 Titres - 58 Mins
Encore un album pris au pif et sans en attendre grand-chose… Peu féru de guitare instrumentale, et donc de productions intimement liées au genre, j’estime que très peu de disques méritent une attention particulière. Mais attention, je parle de CD complètement instrumentaux, j’exclus donc d’office des chefs d’œuvre comme Truth de Jeff Beck, ou Flying In A Blue Dream de l’ami Joe. Sans parler du monumental Sex & Religion de son ancien disciple, l’extra-terrestre Vaï.
Selon moi, et si je restreins ma liste au champ étroit du Metal pur, seuls Passion & Warfare, Surfing With The Alien et Marching Out flirtent où atteignent la perfection.
Et bien sur, toujours très subjectivement, le gars FRIEDMAN n’avait pas sa place dans cette liste (non exhaustive, que je vous laisse compléter à votre guise).
Et puis j’ai écouté Tokyo Jukebox. Et j’ai bien fait.
Concept intéressant de reprises métalliques de standards de J-Pop, cette entreprise aurait pu (du ?) se révéler un désastre total, eu égard au caractère éminemment kitsch de la Pop Japonaise, aussi chargée en sonorités chamarrées que le jeu des acteurs nationaux en grimaces à la Jerry Lewis même en plein drame.
Mais c’était sans compter sur l’immense talent de Marty qui fait passer ce projet comme une lettre à la poste, et dire que j’ai été enthousiasmé est un euphémisme.
Et en glissant ce CD dans votre tiroir, je peux supputer d’avance que votre faciès recouvrira une expression de surprise non feinte à l’écoute du premier morceau. En effet « Tsume, Tsume, Tsume » est plus proche du chaos absolu parfois que de la Pop la plus sucrée, au point qu’on a parfois l’impression, en exagérant un peu, que Marty tâte du Merzbow. Un des points forts de l’album qui n’en manque pas, assurément !
Mais dès le second titre, ambiance boite de nuit, mélodie imparable, et « Gift » nous plonge au cœur des débats. Ca peut irriter parfois, mais il faut être familier avec l’univers pour pouvoir en apprécier le décalage proposé.
Très up tempo, « Amagigoe » (ben il est cuit ton gigot…blague lamentable offerte en cadeau) nous entraîne dans une folle farandole au milieu de laquelle Friedman s’éclate comme un fou en balançant des soli hystériques (au fait, c’est vraiment un bonus track ce titre ? On place les bonus en 3ème position maintenant ?), tirant parfois vers l’ambiance West Coast de The Extremist de Satriani.
« Story » est très rigolote. On dirait une pompe quasi intégrale de « Nothing’s Gonna Change My Love For You » de Glenn Medeiros, adaptée comme générique d’un soap. Mais la mélodie est géniale ! Quant au petit je ne sais quoi de disque rayé de « PolyRhythm », il est simplement envoûtant.
« Kaeritakunattayo » renvoie directement à « Story », avec une mélodie encore plus accrocheuse. Gageons que les compositeurs de J-Pop ont du plus d’une fois laisser traîner leurs oreilles du côté des indicatifs de séries US !
Les arrangements de « Tsunami », assez burlesques, tantôt jazzy, tantôt flânerie, restent au service d’harmonies à tomber, transcendées par la guitare de l’artiste qui a rarement côtoyé les cimes d’aussi près.
Ca déroule sur le même schéma jusqu’à « Sekai Ni Hitotsu Dake No Hana » (que l’on trouvait déjà sur son album Loudspeaker), sans faux pas, et en durcissant le ton, avant de laisser place à l’émotion et la tendresse sur les deux derniers titres de l’album, « Romance No Kamisama », subtil mélange de piano romantique et de guitare acoustique magnifique, et « Ashita He No Sanka », qui évoque parfois le « Good Night » qui servait de conclusion au double blanc des Beatles. Arrangements luxurieux sur fond de guitare volubile, une façon de dire au revoir pleine de classe…
Tokyo Jukebox est une friandise pétillante, au goût profond, qui laisse une agréable sensation de fraîcheur, et une terrible envie d’y revenir une fois fondue complètement dans la bouche. J’irai même plus loin, cet album érige l’anecdotique au rang d’incontournable.
Il faut parfois être futile pour garder son sérieux, et les petits plaisirs sont souvent les plus attachants.<br<
Merci Marty pour ce « petit » cadeau.
Ajouté : Mardi 13 Juillet 2010 Chroniqueur : Mortne2001 Score :      Lien en relation: Marty Friedman Website Hits: 9376
|