# 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
}
WHISPERING TALES (FRA) - Ad Abolendam - Ashes, Blood And Stars (2012)

Label : Auto-Production
Sortie du Scud : novembre 2012
Pays : France
Genre : Metal symphonique mélodique
Type : EP
Playtime : 3 Titres - 30 Mins
Heureux, comme Ulysse, nous fîmes fin 2011 un long voyage avec l’album Echoes Of Perversion de WHISPERING TALES. Voyage dans le temps et l’espace. Téléportés du 17éme siècle à nos jours, de l’Islande à Paris, en passant par Istanbul. Je vous invite à retrouver notre chronique de février 2012. Depuis, Rémi, guitare, a répondu à l’appel du magret de canard et du foie gras de son sud-ouest natal, il voulait du lourd, il va en avoir…
Aujourd’hui, nous ouvrons le livre de l’Inquisition. Vecteur utilisé par WHISPERING TALES pour lutter contre l’intolérance. Le livre amène à la connaissance, clé pour déjouer l’ignorance du sectarisme confessionnel. Les textes vont être mis en musique par ce mini concept album qui se décline en 3 chapitres.
C’est avec « Ashes In The Field », que nous sommes entraînés en pays cathare, pour assister à la lutte contre l’hérésie. Le chant aérien de Lucie, tente comme un souffle de faire disparaître dans les airs, tels des bulles de savon, la bulle Vergentis In Senium, qui édictait au 12éme siècle la répression impitoyable contre les Albigeois. Le vent léger, le calme de l’introduction va vite laisser la place à un rythme plus enlevé préfigurant le siège de Montségur.
Jérémie, à la guitare traduit les parties guerrières, ses soli traduisent la douleur, les souffrances nées des batailles et de la torture légitimée. Scènes également parfaitement restituées par l’illustration de la pochette, exécutée par le peintre russe contemporain Ilyas Phaizulline, qui ne peut nier l’influence de Vélasquez. Avec le chant masculin, grave, résonne à nos oreilles l’écho d’une oraison.
Les claviers se posent, s’infiltrent entre les différentes parties du 1er chapitre pour donner du relief aux soli de Jérémie.
Les différents volets de « Ashes in The Field » s’empilent méthodiquement comme les rondins de bois qui vont alimenter le grand bûcher.
Avec « Limpieza De Sangre », WHISPERING TALES nous entraîne dans une nouvelle page sombre de notre Histoire, fin XVe siècle avec le concept de la pureté de sang. En deux mots, ceux qui ne pouvaient se prévaloir d’un statut de Limpieza De Sangre, garantissant une qualité de chrétien dénué de toute ascendance juive ou maure, étaient écartés de toutes institutions civiles ou ecclésiastiques.
Le titre est introduit par une atmosphère hispanisante aidée par quelques notes de guitare acoustique, amenant le chant léger de Lucie émaillé de quelques notes de piano, le tout étant très esthétique. Les chœurs, et la rythmique martiale qui suivent, traduisent le côté sombre de la période. Le solo de guitare, quant à lui, exprime l’émoi, en phase avec un chant légèrement vibrato laissant deviner pleurs et douleurs.
Sous la nef d’une cathédrale au gothique flamboyant nous est renvoyé l’écho d’un orgue introduisant le 3éme chapitre, « Sidereus Nuncius », le messager des étoiles. Notre devenir est il dans la galaxie ? En a-t-on la même vision ? Ce qui nous amène à une nouvelle confrontation entre deux écoles, celle de Galilée et celle d’Aristote. WHISPERING TALES use de la musique, et de cet EP en particulier, pour revenir sur des épisodes déterminants tant au niveau de la théologie, que de la cosmologie. De la confrontation d’idées, de concepts ne doit pas naître l’intolérance. Que la croyance de chacun induise l’acceptation de la différence !
Jérémie avec un solo bien senti cherche à cajoler les étoiles. L’arrangement de ce titre est soigné, et sans donner de relief au morceau il sait nous apporter la délectation, celle que l’on éprouve en feuilletant un livre au rythme de notre lecture. L’atmosphère éthérée est le fait d’une présence féminine marquée, par le chant de Lucie et l’omniprésence de Stephy aux claviers.
Bref, un EP conceptuel qui, par des textes forts, déroule des préceptes, des concepts philosophiques et théologiques, mis en musique, pour gagner aujourd’hui ses Lettres de noblesse.
Ad Abolendam a été présenté au public le 10 novembre 2012 lors d’un concert à Marseille. L’écho de cet EP passera les Alpes pour faire des ricochets le 26 janvier 2013, sur les eaux du lac Léman, à Lausanne, chez nos voisins helvètes. A vos agendas.
Ajouté : Vendredi 07 Décembre 2012 Chroniqueur : Le Patriarche Score :     Lien en relation: Whispering Tales Website Hits: 11726
|