# 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
}
MEKIGAH (au) - Litost (2014)
Label : Aesthetic Death
Sortie du Scud : 24 Novembre 2014
Pays : Australie
Genre : Dark Doom Ambient
Type : Album
Playtime : 10 Titres - 52 Mins
L'Australie, île dominée par un climat chaud, ensoleillé, et dont la majorité des terres sont constituées de déserts ou de terres semi arides, est un pays à part à bien des points de vue. Refuge préféré des anglais fuyant la justice dans les années 60/70, il constitue une portion du monde qui cache autant de paysages de carte postale que de longues étendues sèches et stériles... Y vivre, du moins dans ses recoins les plus isolés, est un défi en soi, et même si les rais traversent le ciel pour l'inonder de chaleur, l'impression de solitude et d'isolement peut être si forte et douloureuse, que seul l'art permet de s'en échapper.
C'est certainement ce qu'à du se dire il y a quelques années Vis Ortis, l'homme qui se cache derrière le projet MEKIGAH. Lui qui n'a de cesse d'expérimenter, de suivre des voies inhabituelles pour exprimer sa propre vision de la tristesse, avait jusqu'ici empilé les strates et les couches de sonorités pour créer des textures superposées d'une grande richesse, toutes vouées à un seul leitmotiv: la concrétisation musicale de la solitude et du désespoir.
Avec la régularité d'un métronome, et un album tous les deux ans, l'homme avait réussi à fédérer de nombreux fans adhérant à sa vision pessimiste des choses, et se posait comme arrangeur et compositeur de luxe pour un style musical prônant à la base le minimalisme et la répétition comme mantras.
The Serpent's Kiss avait fait grand bruit dans le petit monde du Doom macabre, et The Necessary Evil avait confirmé ce talent que beaucoup décrivaient comme unique.
En fin d'année dernière, Vis livrait son troisième chapitre, Litost, et prenait un risque énorme. En écoutant cet opus, vous en comprendrez de suite la raison. Exit les structures complexes et luxuriantes, et bonjour aux thématiques amples mais minimales, aux morceaux concis reposant sur une idée et quelques changements de ton, et exit les accointances avec le milieu Metal pour mieux s'intégrer au Dark Ambient le plus sombre et opaque.
Outre ce changement d'optique musicale, on notait aussi sur ce nouvel effort un quasi abandon du chant, pour laisser place à de longues plages instrumentales développées ou à l'état embryonnaire, selon leur durée. Seules quelques pistes gardent trace d'interventions vocales (le plus souvent sous la forme de murmures, de cris, ou de plaintes féminines hantées), la plupart se contentant de laisser la musique exprimer les sentiments si chers à leur auteur.
Car même si Vis a une fois de plus multiplié les collaborations (c'est ainsi qu'il conçoit son projet), notamment en travaillant avec Axiam Ziltch, son ex complice au sein d'OMAJINAAKOOS et quelques guests au chant et agréments synthétiques (TK Bollinger, Ken Clinger ou Leith Carnie), c'est bien son emprunte que l'on retrouve sur Litost, même si le Doom riche à fait place à un Dark Ambient aux délicates touches Indus. Parfois, les réminiscences du passé se font plus présentes, comme sur le funèbre "Wurrmbu", longue procession macabre agitée par les cris de Justine. Avançant lentement sur plus de sa moitié, ce morceau s'achève dans un magma chaotique total, évoquant même les passages les moins contrôlés d'ABRUPTUM. Ce schéma se poursuit même d'une façon inversée sur la piste suivante, "Circuitous Revenge", qui débute sous des auspices acoustiques avant de laisser tomber une chape de plomb rythmique qui s'affale d'un coup sec.
Mais l'emblématique "Mokuy" traduit à merveille la nouvelle ligne de conduite de l'artiste, et se rapproche de plus en plus du Dark Ambient avec ses drones et ses infrabasses, aux modulations absentes, occultant sur sa majeure partie le rythme, uniquement guidé par des explosions de fréquences et des hurlements en arrière plan.
Mais l'atout maître de Vis Ortis, c'est cette art consommé de la versatilité cohérente. Si tous les morceaux ont leur couleur propre, ou plutôt leur propres tonalités de gris et de noir, si certains s'adonnent aux plaisir Indus dominés par les suggestions mécaniques et autres invocations de bruit blanc, d'autres se veulent plus volontiers organiques et acoustiques, et certains en oublient même toute musicalité, à l'instar de "An Overbearing Insanity", qui n'est que déchirements, stridences et autres couches de ténèbres.
"Bir'yun" achève avec une solennité dramatique l'ensemble, restant à mi chemin lui aussi, tout en s'accordant au milieu des interférences sonores une tentative de mélodie maigrelette et spectrale.
Litost a eu de quoi effrayer les fans de MEKIGAH. Avec une telle volonté de rupture d'avec ses efforts passés, Vis Ortis a pris un gros risque artistique, qui au final s'avère aussi payant que ses deux premiers albums, évitant de plus une redite qui aurait pu lui être fatale.
Alors qu'il prône un minimalisme parfois outrancier, il a le paradoxe de se présenter comme l'oeuvre la plus riche et ambitieuse de son auteur, se rattachant à ses racines qu'il laisse pousser jusqu'à atteindre des jardins jusqu'à lors trop lointains.
Certains ont évoqué le son que pourrait produire des "machines qui pleurent" pour décrire la musique contenue dans cet album. Si parfois je trouve que les formules sont trop réductrices, je ne peux qu'adhérer à celle-ci. Car Litost vous emmène effectivement dans un univers mécanique désolé, dessinant un complexe industriel dévasté, au milieu duquel subsistent quelques vestiges de Metal du passé, rongées par la rouille, qui se lamentent de leur solitude.
Effrayant, triste, solitaire, mais emprunt d'une beauté indéniable.
Ajouté : Mardi 22 Septembre 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Mekigah Website Hits: 5100
|