# 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
}
MIKE TRAMP (dk) - Nomad (2015)
Label : Target Records
Sortie du Scud : 28 août 2015
Pays : Danemark
Genre : Rock
Type : Album
Playtime : 10 Titres - 45 Mins
Difficile de ne pas éprouver de tendresse pour un mec comme Mike Tramp. Musicien capable, homme simple et honnête, il a animé notre jeunesse aux côtés de Vito Bratta dans WHITE LION, alignant quatre albums superbes, avant de s'agiter la crinière sur le proto Hard Rock Grungy de FREAK OF NATURE, et puis soudain, saturé d'électricité, il a tout lâché.
Il a bien essayer de faire revivre la magie via Mike Tramp's White Lion, mais finalement, il a préféré laisser le passé où il était, bien enterré dans nos mémoires, et est allé de l'avant. Loin, très loin.
Personnellement, je le range dans la même catégorie que Kip Winger, Tom Kiefer, et tous ces héros des 80's qui n'ont jamais lâché l'affaire, mais qui ont grandi, mûri, changé, mais sans se renier. En plus, ils ont la bonté de nous faire partager leurs périples musicaux, qui ne nous ont jamais perdu en route, mais procuré des heures de bonheur.
Alors, à l'heure de parler du dernier album en solo de Tramp, je suis pris d'une bouffée de nostalgie... On sait que le bonhomme a rangé son Hard Rock depuis belle lurette, mais est ce vraiment grave ? La réponse est évidente lorsqu'on pose ses deux oreilles apaisées sur Nomad. Non. Définitivement non.
De Hard Rock il n'est point question ici. Mais eut égard aux accents fortement Folk et acoustiques de ses deux précédents efforts, Cobblestone Street. et Museum, je dirai qu'il y a eu regain d'énergie, sans toutefois franchir les barrières du Rock Folk très légèrement électrisé.
Mais Mike le dit lui même, et résume très bien l'affaire:
"Avec cet album, j'ai tout dit, tout fait. Je n'irai pas plus loin".
Oui, Nomad est un cliché 2015 très fidèle de son concepteur. Simple, direct, bluesy, Pop, Rock, Folk, en gros, tout ce qui a fait la richesse de l'Amérique depuis des décennies. Sauf que le monsieur est Danois, mais qu'il a tout compris depuis des lustres.
Alors certes, les guitares mordillent, la rythmique est tranquille, les arrangements paisibles, et le chant posé, mais les chansons sont bonnes, directes, et disons le, souvent émouvantes, du moins touchantes. C'est la fin d'une trilogie sur le voyage et peut être le signal d'un nouveau départ.
Et puis, il y a toujours cette voix. Tranquillement voilée, elle gagne en maturité, mais ne perd rien en émotion, et transmet toujours tout un tas de choses. Elle séduit, donne envie d'enfourcher sa moto, de tailler la route, sans regarder dans le rétro. De s'arrêter dans un vieux resto, manger un bout, et repartir. Seul. Ou pas. Puisque avec Tramp, on est jamais seul...
Lui non plus d'ailleurs. Il a provisoirement lâché le partenariat exclusif avec son comparse Søren Andersen, et s'est entouré de Morten Buchholz (orgue Hammond), Jesper Haugaard (basse), et Morten Hellborn (batterie). L'osmose entre les musiciens est parfaite, et sert à merveille des compositions touchantes, mélodiques, humaines, oui, c'est le bon mot.
Vous pouvez ne pas aimer, c'est votre droit fondamental, tant Nomad est une fois de plus à cent lieues du Hard Rock que Mike a autrefois apprécié. Mais critiquer ce troisième volet pour cette raison serait aussi futile et déplacée que d'admettre qu'on nie le temps qui passe.
Et si certaines pistes laissent quand même un tant soit peu parler la poudre, celle ci ne fait exploser que quelques feux d'artifices, sans rien endommager. Mais soyons clair, même si l'adrénaline est aux abonnés absents, les morceaux sont loin d'être dénués d'intensité, un peu différente des décharges auxquelles vous êtes habitués.
"Chaque album précédent m'a laissé la possibilité de suivre les chansons où elles voulaient aller, et avec Nomad, cette vision est devenue très claire, une fois de plus, il me suffisait d'être celui que je suis."
Qui est Mike Tramp ? Un rockeur tranquille, qui aligne les chansons comme avant, avec humilité. Qui propose quelques mid tempo hargneux, comme ce "Who Can You Believe" à l'orgue vintage et au refrain US estampillé "liberté et grands espaces", du Rock teinté de Country contemporaine, sur un "High Like a Mountain" à la wah-wah bubble gum qui colle au palais, du middle of the road parfait, peinard comme une halte après avoir avalé des kilomètres de poussière ("Give It All You Got"), ou de sincères ballades percussives, presque native americans dans l'esprit ("Live To Tell", magnifique), et même de petites gemmes, presque Pop douce amère, qui rappellent autant les COUNTING CROWS que SOUL ASYLUM ("Stay").
"I've been searching for something, that I don't understand", chante le beau Mike sur "Counting The Hours", mais ce morceau tranquille prouve qu'il a arrêté de chercher, et qu'il a trouvé sa voie, peut être depuis le début en fait...
Rythmique qui traîne un peu des pieds, comme un homme fatigué, refrain taillé dans le Rock US des ténors, on pense à une version lourde de Marc Cohn, mais ça évoque tant de paysages qu'on ne verra peut être jamais qu'on ne réfléchit pas, et qu'on se contente de ressentir...
Nomad, c'est ça, un road trip concret qui se transforme en voyage intérieur, et ça n'est pas rien si l'album se termine par une blue song qui transpose le LYNYRD dans notre époque de fuite en avant, comme pour ralentir les choses...
Mike chante avec ses tripes, un peu résigné, calme, comme un aventurier arrivé au bout de la route. Mais quelle est belle cette route sous le soleil...
Et cette fameuse trilogie est maintenant achevée, Mike peut rentrer chez lui, en paix avec lui même. Il n'a pas trop vieilli, il n'a pas trop changé, il a gardé cette voix cassée, et ce talent pour composer de belles chansons qui lui ressemblent.
Allez, on déballe notre sac ? On range nos affaires ?
Home is where the heart is...
Ajouté : Samedi 09 Janvier 2016 Chroniqueur : Mortne2001 Score : Lien en relation: Mike Tramp Website Hits: 5000
|