# 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
}
EDEN CIRCUS (de) - Marula (2014)
Label : Lifeforce Records
Sortie du Scud : 6 octobre 2014
Pays : Allemagne
Genre : Post Rock Progressif
Type : Album
Playtime : 9 Titres - 63 Mins
Sous cette pochette sobre et colorée se cache sans doute un des groupes allemands les plus intéressant de ces dix dernières années. Un de ces groupes qui émergent de temps à autre et dont il est relativement ardu de définir la musique autrement qu'en l'appelant... Musique.
Certes, le style défini dans les critères n'est pas faux, car ils sont résolument progressifs, mais pas dans le sens d'une construction alambiquée comme peuvent l'être DREAM THEATER ou YES. Plus dans une approche à la MARILLION, en laissant les ambiances se porter elles mêmes, en développant des thématiques longues qui vous projettent dans votre propre inconscient, et vous emmènent au fond de votre être, confronté à vos propres émotions.
Oui le nom est lâché. MARILLION. A l'instar de la bande à Steve Rothery, EDEN CIRCUS est précieux, mélodique, et travaille avec amour une musique pleine et riche, ciselée, mais qui ne cache pas un désir de puissance qu'on a jamais vraiment trouvé chez les Anglais. Et pour un premier album, c'est presque un coup de maître ne le cachons pas.
De Hambourg nous viennent donc Scheewe, Micha, Andy, Kalle et Nils. Et le moins qu'on puisse dire, c'est qu'ils sont exigeants. Ils ont répété leur grand soir jusqu'à ce que le résultat soit à la hauteur de leurs ambitions, ne cachent pas avoir perfectionné les détails techniques de leur approche, tout en admettant que les morceaux pourraient très bien exister sans, mais cette technique justement utilisée avec pertinence, les rapproche d'un TOTO ou d'un MARILLION qui truffent leurs créations de trouvailles complexes, de tours de passe-passe pratiquement invisibles, mais qui enrichissent leurs structures. Sans oublier ces signatures rythmiques troublantes, ces arrangements luxuriants qui servent les harmonies et ne cachent pas un manque d'inspiration sous un habillage de luxe...En gros, et si je devais utiliser un raccourci pratique, EDEN CIRCUS propose sur ce Marula un savant mélange du Rock progressif anglais des années 80, une patte alternative des années 90, avec les coups de boutoirs soudain d'un ALICE IN CHAINS, et des guitares cristallines soudainement assombries dans l'esprit de cette nouvelle génération de groupes à la THE OLD DEAD TREE par exemple.
Mais ne soyez pas dupe. Tout ce que souhaitent ces jeunes allemands, c'est encore une fois de vous offrir de la musique, et rien d'autre. Et celle jouée sur cet album est magique, hypnotique et profonde.
Avec neuf morceaux dont seuls deux sont sous la barre des cinq minutes, l'attitude est franche. Quatre d'entre eux oscillent entre huit et neuf minutes, mais jamais, au grand jamais, ces longues pièces ne sont redondantes ou roboratives. Les cinq musiciens ont simplement des choses à exprimer, et il se trouve que le format long est celui qui leur convient le mieux. Les schémas sont similaires, avec des thèmes déliés qui se confondent, semblent se perdre, qui changent de couleur et de voie avant de retrouver leur forme d'origine, ou bien au contraire de s'oublier dans le processus créatif au point d'être transfigurés. Difficile d'en extraire un quelconque extrait pour être pertinent dans la description...
Mais peut être qu'au petit jeu du démarquage, le monumental "101" se distingue il plus que les autres. Il est probablement le plus tortueux et paradoxalement le plus franc du lot, le plus puissant, celui où l'équilibre entre l'harmonie et la force trouve son juste milieu, et sans doute le plus proche de ce que Petrucci et les siens pouvaient proposer régulièrement il y a une décennie ou deux. On pourrait même penser à CYNIC dans sa dualité la plus totale, tant cette juxtaposition de mélodies en demi teinte et ces poussées de chant caverneux rappellent les digressions les plus absolues de la créature de Paul Masvidal.
En version courte, "Control" s'amuse à empiler les cocottes de David Gilmour sur un tissu sonore à la RUSH/MARILLION, et privilégie les instants presque silencieux pour mieux les déchirer l'instant suivant d'un riff lourd et tendu.
"Arg" et son titre hermétique est le dernier souffle avant la longue apnée finale, immersion totale dans l'univers du groupe avec son quatuor de longues pièces atmosphériques. Et de ce "lot", peut sans contexte être isolé le splendide "A Shore Uncertainty" et sa longue progression allant crescendo, empilant les riffs, variant les nuances, avec toujours ce chant en arrière plan, parfois presque complètement recouvert par la partie instrumentale s'achevant en apothéose, avant de s'arrêter net dans un dernier effort.
Mais "Her Lovely Hands Upon The Black Earth" et ses soudaines inflexions, et " Playing You" en forme d'aveu à l'auditeur ferment ce premier chapitre avec un brio extraordinaire. Dix sept minutes à eux deux, de l'inspiration à ne plus savoir qu'en faire, même si certains y verront beaucoup de redite et de répétitions malheureuses.
Mais chacun sa sensibilité et son envie de se laisser happer par des instants de magie pure ou pas.
Bien sur, Marula, aussi brillant soit il, n'évite pas les erreurs inhérentes à un premier effort. Certains thèmes sont en effet assez similaires, et même si chaque titre à sa raison d'être, des analogies indéniables unissent le tout, pouvant provoquer chez les moins sensibles à ce genre de musique un sentiment de lassitude.
Mais s'il est évident que certaines chansons gagnent à être isolées pour en apprécier toute la richesse, Marula s'appréhende comme un tout, un voyage dans le psyché de musiciens qui ont beaucoup à offrir et qui le prouvent sans ambages, et pourtant en toute discrétion.
Si comme moi, MARILLION représente pour vous un nom associé à la beauté, laissez vous séduire par EDEN CIRCUS. Car même si leurs recherches n'ont pas encore la profondeur et l'humanité - osons le - de leurs aînés, ils sauront vous emporter loin, ce qui est, n'est ce pas, la raison d'être de toute musique qui se respecte non?
Ajouté : Jeudi 29 Janvier 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Eden Circus Website Hits: 5270
|