# 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
}
BORIS & IAN ASTBURY (jp/uk) - BXI (2010)

Label : Southern Lord Records
Sortie du Scud : 2014
Pays : Japon / Royaume-Uni
Genre : Rock expérimental
Type : EP
Playtime : 4 Titres - 20 Mins
Que se passe t-il quand un groupe de Rock expérimental japonais rencontre l'un des plus éminents chanteur de Rock que porte la Terre ? A l'image de la pochette de ce disque ou de l'origine de son nom, la réponse est floue. Elle n'en est pas moins enrichissante, et peu importe la bizarrerie de cette collaboration. Ici, la première inconnue s'appelle BORIS (non, ce n'est pas un shemale), création minimaliste nippone à chanteuse, tablant ses atouts sur un Drone psychédélique nuancé de Noise Rock, de Sludge, de Stoner et de Pop (délicieux pour glacer son space-cake). La seconde, beaucoup plus réputée, s'appelle Ian Astbury, et pour ceux qui l'ignorent, le monsieur, chanteur pour THE CULT, a également été vocaliste pour THE DOORS OF 21th CENTURY, un projet musical fondé par Ray Manzarek et Robby Krieger, deux des membres fondateurs de THE DOORS. Oui, rien que ça. Autant dire que la rencontre entre les deux relève du domaine de l'improbable, contrairement au label qui hébergera cette sortie. Personne d'autre que Southern Lord, écurie possédant dans son catalogue les SUNN O))) et autres SAINT VITUS, ne pouvait mieux accompagner une telle fantaisie. Et comme de coutume, l'illustrateur Stephen O'Malley est impliqué dans l'embrouille.
J'ai toujours un peu de mal pour mettre des mots précis sur des sorties aux contours imprécis. Différents univers se percutent, le tout dans une finesse et une musicalité très abstraite. C'est le premier constat que je fais pour BXI. Après seulement vingt minutes, l'EP s'arrête, ce qui nous pousse involontairement, avec cette une forme de frénésie inexpliquée, à le refaire tourner encore et encore. Peut-être pour s'imbiber en profondeur des vapeurs toxiques qui émanent de "We Are Witches" ou peut-être tout simplement pour comprendre comment ces deux protagonistes pouvaient en arriver à une telle osmose. "Teeth & Claws" remplit parfaitement son rôle introductif, avec ces vagues successives de guitares planantes et étouffées, illuminées par la voix magique et magnétique d'un Ian Astbury en très grande forme. Il y a comme de la sérénité sur ce premier titre, un morceau de soleil dans vos oreilles, une bonhommie à la fois proche de la planète Pop et très éloignée de la terre ferme. Le contraste avec "We Are Witches" est tout trouvé. Plus martiale, plus Metal même avec son riffing nerveux nimbé de vocaux endurcis (du Nick Cave dans la théâtralité d'Ian ?), cette composition se distingue par une soudaine rugosité, heureusement brisée par un solo brossé. Quant à "Rain", elle inverse les rôles. Astbury s'éclipse momentanément et dans un coin du studio, observera attentivement la prestation de Wata (chanteuse et guitariste de BORIS) sur une reprise d'un des standards de THE CULT. C'est précisément à ce moment qu'une sorte d'intimité égoïste semble s'installer entre les deux corps, une masturbation partagée qui exclut de facto l'auditeur, le laisse dans ses travers, en dépit de la qualité indiscutable de ce titre. BXI n'en finit plus de prendre différentes tournures, et la finale et tranquille "Magickal Child" prendra logiquement le relais du haut de ses tonalités méditatives, brusquées par des guitares flirtant avec le Drone au milieu du morceau. Une réelle expérience spirituelle vient de s'achever, non sans laisser flotter une pointe d'incompréhension.
Incompréhension car cette musique est belle, même si on peut difficilement la qualifier ou l'analyser. Bien que lente, bien qu'un peu intellectuelle, elle noiera violemment son public sous des flots artistiques qui ne brillent pas par leur rationalité. Cette partie de touche-pipi entre BORIS et Ian Astbury débouche sur une œuvre complexe, planante, alternative, avant-gardiste mais inexplicablement addictive. Quelque part, on rêve tous de comprendre les choses qui nous font peur, et c'est un peu ce qu'on vivra en découvrant BXI.
Ajouté : Mardi 15 Avril 2014 Chroniqueur : Stef. Score :     Lien en relation: Boris & Ian Astbury Website Hits: 8422
|