# 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
}
JIMI JAMISON (usa) - Crossroads Moment (2008)

Label : Frontiers Records / Nocturne
Sortie du Scud : 7 novembre 2008
Pays : Etats-Unis
Genre : Hard FM
Type : Album
Playtime : 14 Titres - 70 Mins
Sans le savoir, on a forcément tous été marqués par la voix de Jimi Jamison. D’une façon ou d’une autre. Car la voix de « Burning Heart » sur la B.O. de Rocky IV, c’est lui, à l’époque où il venait de succéder à Dave Bickler (la voix sur « Eye Of The Tiger ») au sein de SURVIVOR.
Et puis on le sait moins, mais c’est également Jimi qui interprète le générique de la série Baywatch, « I’m Always There ». Bon Ok j’ai bien compris que cela ne vous disait rien, d’abord parce que vous connaissez tous cette série sous le nom Alerte à Malibu, et puis je peux comprendre que vous vous soyez plus focalisés sur les formes généreuses de Pamela Anderson ou Carmen Electra …
En tous cas cet ancien choriste pour ZZ TOP n’est pas le premier venu et présente un CV déjà bien rempli. Pour Crossroads Moment, Jamison a confié la prod’ et la composition à son vieil ami, Jim Peterik. L’ancien clavier/guitariste de SURVIVOR (et actuel PRIDE OF LIONS) a ainsi écrit 14 chansons pour Jamison, dans le plus pur esprit du Rock FM qu’il affectionne, et dans lequel on le reconnaît immédiatement. Peterik marque Crossroads Moment de son empreinte et sa présence apparaît évidente, à tel point que si l’importance de son rôle avait été sous-estimée, on aurait eu des doutes …
Evidemment le parallèle avec SURVIVOR n’échappera à personne, mais quelque part cela devrait rester un gage de qualité. On y retrouve ici ce son aéré et malgré tout accrocheur, des chœurs idéalement pensés et habilement positionnés (la griffe de Peterik, qui en plus se charge de les chanter avec Jimi et Thom Griffin). En bref, tous les ingrédients d’un excellent album de Hard FM se trouvent ici réunis.
Ma chronique devrait s’arrêter là mais, car il y a un « mais », il subsiste comme une petite frustration à l’écoute de Crossroads Moment. Et plus on l’écoute, plus cette frustration grandit.
D’abord, Jamison et Peterik ont placé la barre à peu haut en ouvrant le bal avec « Battersea », assurément le meilleur titre de l’album. Du coup, la suite se révèle moins passionnante et très inégale, à l’exception peut-être du très bon « Behind The Music ». Côté ballades, toutes ne sont pas du niveau de « As Is » et c’est bien dommage …
Ensuite, on peut regretter la durée du skeud : en effet au bout de 70 minutes on a tendance à saturer, d’autant que comme on le disait plus haut, tout le disque n’est pas à la hauteur du titre d’ouverture. Encore une fois, la quantité a pris le pas sur la qualité. 10 titres aussi bons les uns que les autres auraient eu un bien meilleur impact sur l’auditeur, surtout que le style FM doit faire mouche pour plaire.
A ce titre, le dernier morceau « When Rock Was King » où Jamison invite des potes comme Dave Bickler ou Joe Lynn Turner (un ex-RAINBOW en fin de carrière … enfin ça y ressemble), devrait faire figure d’apothéose. En fait, il n’en est rien, ce final ne décolle pas, mais alors vraiment pas, surtout avec ce break bizarre qui gâche tout en plein milieu …
Un détail aussi qui me chagrine : un mec comme Peterik, qui habituellement nous sert des arrangements de haute volée, déçoit un peu avec certains passages un peu naïfs voire trop gentillets. Peut-être ces 14 titres ont-ils été écrits un peu vite par un gars vraiment occupé …
Et pour finir, un coup de gueule contre Frontiers : « COMMENT VOULEZ-VOUS CHRONIQUER UN ALBUM CORRECTEMENT SI A CHAQUE REFRAIN (qui doit faire prendre son envol au morceau) OU A CHAQUE SOLO, VOUS NOUS BALANCEZ DES VOICE-OVER ?? MMMH ?!!!! »
Ajouté : Lundi 26 Janvier 2009 Chroniqueur : NicoTheSpur Score :     Lien en relation: Jimi Jamison Website Hits: 11177
|