# 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
}
MOON RA (FRA) - L2 (2015)

Label : Auto-Production
Sortie du Scud : 27 mai 2015
Pays : France
Genre : Space Psychedelic Rock
Type : Album
Playtime : 5 Titres - 35 Mins
Les MOON RA nous viennent de Marseille, et pourtant ne chantent pas les louanges de la "belle" cité Phocéenne. Ils ne parlent ni de bouillabaisse, ni de pétanque, et ne versent pas non plus dans le rap à l'accent chantant. Pas sur qu'ils adulent Pagnol, non leurs références se situeraient plus en aval, et plus en hauteur... dans l'espace.
Voyez les plutôt comme les dignes héritiers de HAWKWIND, D'ARZACHEL, de GONG, d'un GRATEFUL DEAD moins assommé par le lysergide, ou même du FLOYD de More ou A Saucerful of Secret, avec un brin de Hard Rock typiquement estampillé 70's, et de longues digressions planantes déchirées par des interventions en solo rugueuses et pragmatiques. On pourrait même voir en eux la pérennisation de l'héritage français de la même époque, sans aller jusqu'à parler de petits fils d'Alice, d'Etron Fou Leloublan et de toute la vague art Rock, mais plutôt en se focalisant sur un genre de mélange entre les Variations, Alpes, Booz, Magma... En gros, la phase expérimentale du Rock bien de chez nous, lorsque les musiciens n'hésitaient plus à briser les carcans établis pour prêter allégeance à la mouvance anglo-saxonne.
D'une façon plus concrète, posons quelques faits. Les MOON RA sont "cinq marseillais dont un irlandais et un normand expatriés, qui mêlent le groove rugueux du Stone Rock aux envolées interstellaires de la space music estampillée 70's." Comme vous le constatez, mes références n'étaient pas anecdotiques, mais là ou la musique du quintette se distingue de ses illustres homologues du passé, c'est qu'elle sait rester concentrée sur son propos sans trop perdre la tête dans les limbes interstellaires. En outre, cette première sortie bénéficie d'un son fantastique, profond, ample, mais avec cette patine 70's évidente, et l'écoute en ressort grandie, amplifiée, et laisse une impression forte et persistante. Délirer oui, s'évader certes, mais pas au détriment d'un public qui ne demande qu'à suivre le voyage dans de bonnes conditions.
Le premier écueil à passer pour vous cher lecteur, sera l'absence de chant. Les morceaux étant assez longs, il est parfois difficile lorsqu'on a pas l'habitude de perdre le réflexe de s'accrocher à des lignes vocales, spécialement lorsqu'un titre reste rivé sur une ambiance et n'en démord pas. Mais rassurez vous, cette crainte n'est pas justifiée, tant la musique de MOON RA est riche, solide, et reste malgré les apparences les pieds bien campés sur le sol.
Nonobstant ces quelques indications/précautions, L2 est une affaire sérieuse, loin de tout amateurisme. Les cinq musiciens sont capables, inspirés, et leur évasion spatiale est assez fascinante dans son approche, même lorsqu'elle dure au delà du raisonnable, comme sur l'épique et étiré "Episode VI", qui se colle au creux d'un thème mélodique sans le lâcher d'un pouce. Si la structure est établie, elle est épurée au maximum pour laisser le champ libre à l'improvisation, qui devient possible puisqu'elle peut se reposer sur une basse tournoyante qui reste focalisée sur une ligne imperturbable mais terriblement groovy. Les soli semblent venir d'un écho lointain provenant d'une autre galaxie, et les parties de Rhodes/Moog sont collantes et planantes, le tout créant un genre de dimension parallèle dont il est difficile de s'extirper.
Mais en a on vraiment envie ? J'avoue que non, puisque le tout prend aux tripes, enveloppe le cerveau dans une brume irréelle, et on se sent comme dans un état second, tout en gardant une certaine lucidité. Etrange, mais agréable, et loin des dédales 70's dont on se demandait si on allait sortir indemne.
Mais MOON RA ne se contente pas d'une certaine contemplation d'usage, et en version courte se montre tout aussi intéressant. L'ouverture "Blast" laisse traîner une intro digne d'une BO pendant quelques minutes, avant que l'orgue ne s'impose en contrant une basse en circonvolution parcimonieuse, le tout chapeauté par une guitare à la distorsion délicieusement vintage. Loin du Stoner Rock auquel on serait tenté de les rattacher, les marseillais lui préfèrent un space rock beaucoup moins figé, mais tout aussi puissant.
La preuve définitive en est donné par le sismique "Badstar", qui ondule au gré d'un groove que Marc Bolan aurait pu divaguer, et même si l'énergie globale reste intense, on ne peut s'empêcher d'y voir une certaine forme de grandiloquence. Et pourquoi ne pas parler d'un savant mélange entre le DEEP PURPLE le plus libre et une approche ZEP moins Bluesy ? Rien ne nous l'interdit, en effet.
L'émotion n'est pas pour autant sacrifiée, et la clôture "Panzer I and II" se permet dans sa première partie un intimisme délicat, avant bien sur que le Rock ne s'introduise par le fenêtre, par l'entremise d'une rythmique hypnotique qui percute plus qu'à l'accoutumée. MOON RA termine le voyage avec des allusions à peine marquées à la vague Kraut allemande via la référence CAN, et se rapproche même encore plus d'un partage de cabine entre HAWKWIND et MAGMA, avec sons tournoyants, et apaisement final qui provoque un atterrissage en douceur.
Pour une première sortie, MOON RA n'a pas eu peur d'explorer les confins de la galaxie, et en revient serein. Loin de se laisser déborder par des libertés un peu trop complaisantes, les marseillais ont ciblé leur propos, et tout en respectant certaines règles 70's bien établies, ont su y laisser une emprunte personnelle.
Il y a de la créativité la dedans, beaucoup de bonheur musical, pas d'esbroufe, ni de poudre aux yeux, juste le plaisir de jouer une musique pleine et riche, libre à l'interprétation.
On peut tutoyer les étoiles mais respecter son public. On peut laisser le contrôle au coeur du soleil, mais garder la mainmise sur les opérations.
On peut planer les pieds sur terre. Et la tête dans les nuages...
Ajouté : Samedi 04 Juin 2016 Chroniqueur : Mortne2001 Score :     Lien en relation: Moon Ra Website Hits: 7260
|