# 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
}
BLOOD STAIN CHILD (jp) - Epsilon (2011)
Label : Coroner Records
Sortie du Scud : 15 juin 2011
Pays : Japon
Genre : Death Metal Mélodique / Trance
Type : Album
Playtime : 12 Titres - 45 Mins
Le Japon et sa culture en font rêver et dépaysent plus d’un. Réputé pour son avance technologique sans précédent et ses groupes de Visual Kei tout aussi intrigants qu’absurdes, ce pays a également enfanté BLOOD STAIN CHILD en 1999. Qui, au travers de son dernier disque, Mozaíq, a dévoilé une identité sonore forte mais contestable du fait de ce mélange entre Trance et Death Metal Mélodique, du "Cyber IN FLAMES", en gros. L’album a quand même touché un large public mais l’attente qui s’est ensuivie vis-à-vis de nouvelles sur l’actualité du combo s’est avérée interminable. L’annonce, juin 2010, du départ de deux membres - Sadew, le Anders Fridén japonais, et Violator, ayant déchiré maints orifices auditifs - annonçait un groupe sur le déclin. L’arrivée de Gami aux baguettes, ainsi que d’une femme (Sophia) en remplacement de l’ancien frontman, fut tout aussi surprenante qu’inquiétante pour cette formation qui risquait de se tirer une balle dans le pied en empruntant la voie trop classique des groupes à chanteuse.
Bien entendu, la dernière venue, originaire de Grèce, ne compte pas jouer sa Gossow pour succéder au mieux à son prédécesseur, mais préfère marquer sa présence en créant une scission avec les précédents opus, plaçant donc une voix tout ce qu’il y a de plus féminine. Néanmoins, la jeune femme évite généralement la banalité des traditionnels timbres du Goth ou du Sympho, adressant plutôt un chant influencé des artistes J-Pop ; ce qui donne parfois lieu à des compositions dignes de génériques d’animes, comme la ballade « Sai-Ka-No », s’avérant finalement assez niaise. De prime abord, les apparitions de Sophia surprennent, en comparaison du son que s’était bâti la formation, puisqu’elle délivre la majorité des lignes vocales, mais, le temps d’adaptation écoulé, l’on note que sa présence apporte une tonalité plus chaleureuse aux compositions (« S.O.P.H.I.A. »), loin d’être en désaccord avec l’enrobage Electro, à l’instar du titre « Stargazer » qui combine tout le potentiel des nouvelles capacités des Japonais, offrant tempo aguicheur et refrain entraînant, sur fond de riffs imparables enrobés de claviers maintenant la cohésion du morceau. Malgré le charme apparent de son chant, de nombreux emplois de vocoder, parfois dispensables, subsistent et renforce le côté futuriste de la musique. Malheureusement, toutes les pistes ne profitent pas pleinement de cette compagnie féminine ; la preuve en est avec sa voix trop disparate sur « La+ ». S’il s’agit d’un des titres où Ryo se fait le plus entendre, sur les autres il se contente de soutenir la belle Grecque avec toute l’instrumentation agressive à ses côtés et un growl toujours aussi efficace et davantage maîtrisé (« Forever Free »). En dépit de la bonne prestation de Sophia, et de contrastes réussis entre les deux voix (« Merry-Go-Round »), le manque de vocaux extrêmes se fait malgré tout ressentir. Et le hurleur d’Idolator semble également à la peine avec sa basse, auparavant si claquante sur des rythmiques explosives, et qui, désormais, ne se détache guère des autres instruments.
Une différence d’agencement des lignes instrumentales que l’on doit au changement de producteur pour Ettore Rigotti, toujours dans l’optique de signer une évolution. Par ailleurs, l’Italien ne se contente pas d’encadrer ses amis orientaux ; avec son collègue, Claudio Ravinale, de DISARMONIA MUNDI, ils posent quelques vocaux supplémentaires, à l’impact mineur et anecdotique. Quoiqu’il en soit, ce nouveau rendu du son des Japonais laisse la touche suédoise de côté mais ne montre qu’un fouillis de cordes et claviers, tantôt grondant, ou davantage mélodique, sans réelle netteté des divers éléments. Pourtant, les riffs incisifs de G.S.R et Ryu sont reconnaissables dès les premiers accords, à tel point qu’on les croirait issus d’anciens titres, comme celui d’intro de « Eternal ». Leur jeu n’en reste pas moins énergique (« Electricity »), même s’il est laissé en retrait par rapport aux claviers. Quelques solos de bonne facture parcourent également ce disque (« Merry-Go-Round »).
A l’image des guitares, les samples utilisés lors des ponts rappellent, dans leur construction et leur sonorité, de précédentes compositions du groupe (« Unlimited Alchemist »). Aki n’en montre pas moins une présence marquée, participant à l’apparat du côté Trance futuriste, comme sur l’intro de « Moon Light Wave ». Néanmoins, ses lignes sont moins directes et pertinentes que sur Mozaíq mais davantage intégrées aux compositions. L’usage de beats Electro est également de la partie, employés de concert avec le jeu de Gami ; à l’exemple de « Dedicated To Violator », dont la trame de percussions monotones lasse et se pose bien en-dessous d’un « Nuclear Trance » ou « C.E. 0079 » - d’autres essais très poussé sur l’électronique. Contrairement aux autres instruments, la batterie est, quant à elle, mieux mise en évidence, gagnant ainsi en profondeur et offrant un jeu moins sec, sans pour autant perdre en puissance. Gami a beau être un nouveau venu dans la bande, il n’a pas l’intention de passer inaperçu au travers de déferlantes de blasts à n’en plus pouvoir raisonner nos tympans (« Sirius VI »). Seulement, chaque moment d’énervement se voit garni du sempiternel même jeu de percussions, qui finit par ne plus procurer la violence escomptée sur ces passages mitraillés, manquant aussi des cymbales claquantes d’autrefois. Par ailleurs, bien que l’on soit dans les thèmes du groupe, l’instrument est bien trop triggé, ne laissant ressentir que peu d’humanité.
Quatre ans que l’on attendait un nouvel album de BLOOD STAIN CHILD, avec l’espoir que cette mixture entre Trance et Death Mélodique soit perfectionnée. epsilon marque clairement une évolution et offre au groupe un son bien plus personnel, qui s’éloigne grandement des classiques de Göteborg pour proposer des compositions aux sonorités variées, entre Metal Extrême, mélodies Pop, synthés futuristes, et arrangements chaleureux, tout en conservant une harmonie avec l’image recherchée par la formation nippone. Toutefois, l’album n’est pas une réussite tout du long. L’on est souvent confronté à des passages encore bancals, maladroitement menés, que ce soit par le chant ou dans la rythmique, et témoignant d’un besoin, pour le groupe, d’affirmer davantage cette nouvelle orientation dans leur identité sonore. Choisir Sophia était audacieux pour le quintette japonais, qui s’en sort décemment, mais son intégration demande à être mieux travaillée par endroits, tout comme le rapport entre les éléments Electro et les autres instruments. Ce nouveau disque n’est donc pas réellement une déception mais apparaît, pour le moment, plus comme une démonstration qu’un produit totalement abouti.
Ajouté : Mercredi 10 Août 2011 Chroniqueur : CyberIF. Score : Lien en relation: Blood Stain Child Website Hits: 11308
|