# 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
}
MAGNUS KARLSSON'S FREE FALL (se) - Magnus Karlsson's Free Fall (2013)
Label : Frontiers Records
Sortie du Scud : 14 Juin 2013
Pays : Suède
Genre : Metal mélodique
Type : Album
Playtime : 12 Titres - 53 Mins
Magnus Karlsson est-il vraiment un guitariste de Heavy Metal pur et dur ? A bien y réfléchir, et surtout après l'écoute de ce Magnus Karlsson's Free Fall, on n'est pas sûr que le six-cordiste suédois affectionne tant que ça le style pratiqué par un PRIMAL FEAR qu'il a définitivement intégré en 2009. A la base, ce multi-instrumentiste et compositeur de 39 ans a fait ses armes en tant que requin de session pour le label italien Frontiers, et a multiplié les projets et autres participations. Entre autres, on lui doit le Immortal de Bob Catley (chanteur de MAGNUM), les trois albums de ALLEN/LANDE (avec le frontman de SYMPHONY X et l'électron libre égocentrique norvégien), les trois albums de STARBREAKER (avec Tony Harnell, ex-TNT), ou encore une active collaboration sur l'opus de Michael Kiske et Amanda Sommerville. Tout ça pour dire que le gusse se sent bien plus à l'aise dans un registre classieux et fortement mélodique.
Et ce premier effort solo ne déroge pas à la règle. Même si "Magnus Karlsson's Free Fall", ça fait un peu "Yngwie Malmsteen's Rising Force", on constate assez vite très peu de similitude avec l'autre gratteux suèdois : pas de néo-classique à outrance, juste du Heavy mélodique. Ne vous méprenez pas, techniquement, Magnus Karlsson n'a rien à envier au Viking qui roule en Ferrari ... Comme beaucoup de sorties labellisées Frontiers, Free Fall ressemble à une orgie de professionnels signés par Serafino Perugino (président de Frontiers). En effet, Karlsson a invité une ribambelle de chanteurs, et bien lui en a pris, le gusse se révélant un vocaliste assez quelconque (loin d'être mauvais, mais loin de sortir du lot) : les titres "Heading Out", "Ready Or Not" et "On Fire" en attestent.
Et les noms des invités réservent très peu de surprise. Citons Russell Allen, Ralf Scheepers (PRIMAL FEAR), Tony Harnell, Mark Boals (ex-MALMSTEEN, ex-ROYAL HUNT, avec qui il a bossé au sein de THE CODEX), Rick Altzi (MASTERPLAN, AT VANCE, ex-THUNDERSTONE), ou encore David Readman (chanteur de PINK CREAM 69 qui s'éclate aussi avec les PRIMAL FEAR Mat Sinner et Alex Beyrodt au sein de VOODOO CIRCLE). Reconnaissons quand même que Karlsson sait aussi s'entourer de mecs un peu moins connus, histoire de les montrer au "grand public" : Mike Andersson (qui chante pour CLOUDSCAPE et le FULL FORCE de Stefan Elmgren), Herman Saming (qui officie dans LOCOMOTIVE BREATH) et Rickard Bengtsson (il tient le micro dans LAST TRIBE) sont de la partie.
Bon, et la musique dans tout ça ? Que vaut vraiment Free Fall ? Et bien, à n'en pas douter, Magnus Karlsson peaufine comme d'habitude ses compositions et confirme ses talents de songwriter. Pas sûr qu'avec une production moins clinquante (Daniel Flores se charge de la batterie mais aussi du mixage) et des arrangements revus à la baisse, les chansons de Free Fall sonnent aussi bien mais nous pouvons mettre ça sur le compte du savoir-faire à la Frontiers. Evidemment, c'est le morceau avec Ralf Scheepers, intitulé "Higher", qui se rapproche le plus de PRIMAL FEAR, avec ses couplets plutôt Heavy et ses ponts à la double pédale. A noter que Scheepers imite de moins en moins Halford ... Dommage, il aurait peut-être fallu garder ce titre pour le quintet de Mat Sinner, d'autant qu'il s'inscrit à merveille dans la nouvelle optique de PRIMAL FEAR. David Readman, lui, s'illustre le temps de mesures tout en arpèges, et donne à "Us Against The World" une couleur bien FM, sûrement désirée par son géniteur, surtout lors de ce refrain qui s'emballe. Le solo de Karlsson sur "Us Against The World" laisse une impression mitigée : en termes de prouesse technique, rien à dire (il déchire notamment sur "Our Time Has Come"), mais finalement ce gars-là manquerait-il un peu de personnalité ? C'est la deuxième grande question qui survient après avoir découvert Free Fall.
D'où l'intérêt, en vérité, de confier les voix à tous ces chanteurs, pour colorer l'album. Les titres sur lesquels Karlsson intervient tout seul comme un grand ne sont pas dégoûtants. Mais comment rester insensible au timbre particulier de Mark Boals pour ce "Our Time Has Come", croisement ultime de ROYAL HUNT (ben oui ...) et THUNDERSTONE (époque The Burning). Justement, on sent bien qu'en embauchant Rick Altzi pour "Not My Saviour", l'idée était de se rapprocher d'AT VANCE et THUNDERSTONE. Prendre l'original, un certain Oliver Hartmann, voire Pasi Rantanen (qui vient de réintégrer THUNDERSTONE), aurait eu plus de charme encore. Et quelle idée de demander à Tony Harnell de chanter sur une ballade ("Stronger") ... Quand on bosse comme un fou chez Frontiers, on confie ses ballades à Joe Lynn Turner et puis c'est marre.
Histoire de sortir des idées préconçues et des habitudes du genre, on attend beaucoup des passages où apparaissent les "guests" à la réputation moins grande. Et là, pour les desservir, les "Last Tribe" (avec Bengtsson), "Fighting" (avec Saming et ces ruptures tout en voix presque insupportables, mais on est où ? Chez les BEE GEES ?) et "Dreamers & Hunters" (avec Andersson) n'apportent rien. En fait, ça sent le remplissage à plein nez. A moins que ce soit ces gars-là eux-mêmes qui ne parviennent pas à tirer leur épingle du jeu. On ne sait plus trop, en fin de compte ...
C'est ça le problème, avec Free Fall : belle pochette, guitariste doué, frontmen à la pelle, mais dans un but pas très clair et à l'utilité toute relative.
Ajouté : Dimanche 15 Septembre 2013 Chroniqueur : NicoTheSpur Score : Lien en relation: Magnus Karlsson's Free Fall Website Hits: 6770
|