# 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
}
ARTESIA (FRA) - Wanderings (2011)
Label : Prikosnovenie
Sortie du Scud : novembre 2011
Pays : France
Genre : Mélancolie atmosphérique
Type : Album
Playtime : 9 Titres - 42 Mins
On éprouve parfois ce sentiment de venir d’un autre monde, d’être né sur d’autres Terres. Cette désagréable impression de s’être trompé de vie, et de s’être entouré d’éléments dispensables ou superficiels. Comme si l’on passait à côté des vraies valeurs de la vie, comme si nos yeux ne regardaient pas dans la bonne direction. Alors on ferme les paupières, et l’on se prend à imaginer un retour aux sources, un voyage vers la dense Forêt qui nous a donné naissance. Et c’est là que la musique d’ARTESIA entre en scène. Car il n’y a pas musique plus appropriée pour entreprendre un périple qui mènera jusqu’au pays des peuples celtes …
Le voyage débute avec « A l’ombre des Grandes Forêts », sur fond de clavier planant, lorsque la voix hypnotisante d’Agathe annonce qu’il va se produire quelque chose de grand. D’entrée, et en quelques secondes, on touche du doigt l’essence même de la beauté musicale, et la montée en puissance qui s’en suit ouvre grand le chemin vers des thèmes magnifiques. « Wanderings » est de ceux-là. Ce morceau phare de huit minutes, qui donne son titre à l’album, prend aux tripes et ne peut laisser insensible. A l’image de Wanderings dans son intégralité, il se dégage de « Wanderings » comme une mélancolie poignante, où le violon de Gaëlle, qu’on croirait habitée par les doigts de Hilary Hahn, se veut tour à tour facétieux et dramatique. Et si la voix d’Agathe prononce ces quelques mots singuliers où votre serviteur y perçoit comme une allusion à sa propre quête (« I travel through the sinuous path of my memory, and I wander, prisoner of my own dreams »), la plupart du temps elle n’apparaît que sous la forme de murmures et de chants sans parole, la musique d’ARTESIA se suffisant à elle-même.
Car Wanderings, bien loin des clichés du genre en termes de musique atmosphérique (il serait bien réducteur de tenter une vulgaire comparaison avec ENYA …), illustre à merveille les légendes celtiques et gaéliques, tout en ambiance, sans production envahissante ni soporifique. Rien qu’en écoutant « The Summit Of The Tree », on peut sentir les gouttelettes de pluie tomber des feuilles de ces arbres gigantesques, ruisseler sur les rochers et se fondre dans la terre, tandis qu’Agathe apporte cette poésie indéfinissable …
Grâce aux orchestrations apportées par Jean-Charles Wintrebert, un morceau comme « Lying On The Grey Foam » prend une autre dimension, gagnant chaque seconde en intensité, au rythme de percussions presque tribales. Avec un peu d’imagination, et c’est une sensation qui revient régulièrement tout au long de Wanderings, on se prend à écouter le vent souffler entre les branches de chênes gigantesques, à entendre au loin ces guerriers sur la colline qui s’apprêtent à livrer bataille, à se laisser charmer par ces voix magiques échappées de la Nuit des Fées. Cette musique vient du cœur, et peu importe que la Forêt de Brocéliande existe ou pas, elle vit en chaque être qui y croit.
Mention spéciale à « The Gaels », mené de main de maître par Gaëlle et son violon, reprise d’un air traditionnel celtique, popularisé en 1990 par Dougie MacLean sur son album The Search, puis utilisé à bon escient par Trevor Jones pour la musique du film « Le Dernier des Mohicans » de Michael Mann (avec, soit dit en passant, un Daniel Day-Lewis mémorable). A peine le temps de se remettre de ces émotions, et on retrouve à nouveau violon survolté, mélodie enchanteresse et percussions pour un « In My Dream Thoughts », véritable condensé du talent d’ARTESIA. Quand le funéraire et désespéré « Tristesse » arrive, telle une bande originale prédisant le départ d’un héros vers d’autres cieux, il faut se rendre à l’évidence : déjà, il semble que le voyage soit sur le point de s’achever …
Wanderings, en dépit de quelques défauts (la langue de Molière sur « Aerial » et « Quiet They Are Now » lui convient moins que celle de Rob Roy et William Wallace), permettra à quiconque de s’évader de sa morne existence. Après les albums Hilvern (2005), Chants d’Automne (2007) et Llydaw (2009), il donne à ARTESIA un nouveau statut, profitant pleinement du savoir-faire de Jean-Charles Wintrebert et du retour de Gaëlle au violon. Et il constitue une parenthèse bienvenue dans le monde du Metal, une véritable ode à la nature, avec cette improbable capacité à rassembler les fans de PRIMORDIAL ou ELUVEITIE. Ceux là devineront bien, au-delà de simples mots, de quoi je veux leur parler …
Ajouté : Mardi 10 Avril 2012 Chroniqueur : NicoTheSpur Score : Lien en relation: Artesia Website Hits: 9758
|