# 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
}
MARIONETTE (se) - Enemies (2009)

Label : Listenable Records / Pias
Sortie du Scud : 5 octobre 2009
Pays : Suède
Genre : Gothenburg Metal
Type : Album
Playtime : 13 Titres - 49 Mins
Elle sentirait pas un peu la cyprine pas fraiche, la scène Metal de Göteborg ? Enfin, c’est vrai quoi… ils sont plus tout jeunes les DARK TRANQUILLITY et les IN FLAMES. Et force est de constater que leur descendance tarde à venir. Entre fausses couches à répétition et grands prématurés avec toutes les complications qui s’en suivent… la relève tarde à venir. Pourtant, il semblerait que MARIONETTE soit un nourrisson pondu dans les règles de l’art. Actif depuis 2005, ce combo suédois made in Gothenburg n’a pas encore fait parler de lui. A vous de juger si c’est une qualité ou un défaut. Leur premier effort, Spite, sorti il y’a un an, n’a visiblement pas eu l’effet escompté. Alors cette fois-ci, c’est avec une team de choc que le sextet à préparé son Enemies. Entre un mixage et un mastering signé, soit Fredrik Nordström (IN FLAMES, BRING ME THE HORIZON, AT THE GATES), soit Peter In De Betou (DIMMU BORGIR, ZONARIA), le choix n’était pas facile. Du coup, ils ont choisi les deux ! Autrement dit, avant même d’entendre les premières notes du CD, je vous dis déjà « pas de soucis au niveau de la production, c’est propre et carré ».
Inutile de confirmer avec comme témoin, « The Swine ». Sur cette première compo, MARIONETTE a décidé de sortir les griffes et de faire parler la poudre. Au bout de trente secondes, à peine, on s’est déjà pris une bonne tarte dans la gueule, grâce notamment à Axel, vocaliste en chef et impressionnant de vivacité. En alternant growls et screams à une vitesse folle, en y ajoutant une pointe de hargne bien distincte, il part sur de très bonnes bases. Comme ses collègues, pas franchement avares en matière de riffs torpillés ou de blasts furieux. Enemies, à ma grande surprise, s’impose comme un prolongement naturel et rafraîchissant aux élucubrations des pionniers de la scène Death suédoise. Je ne sais pas s’il y’avait le niveau sur Spite. En tout cas, seuls cinq petits titres m’auront permis d’affirmer qu’ici, la marche est franchie avec résolution et fermeté. Leur musique est un équilibre entre la lourdeur machinale du Death et la technicité des guitares virtuoses. On arrive très vite à une équation fermée qui impose la valeur « X » comme étant le moteur de MARIONETTE. Si « X » est de l’art, alors MARIONETTE est un groupe d’artistes. A l’écoute de titres comme « Hatelust » ou « Through Veils », comment ne pas avouer que pareille production fait un bien fou à voir dans un paysage si monotone ? Ils sont jeunes, doués, dynamiques et motivés. La place est vacante. Et les quelques expérimentations comme un chant clair (« Stench Of The Herd », « Through Veils ») ou des nappes de claviers Electro (« The Lie ») ne sont pas pour me déplaire. Des vocaux aux baguettes, en passant même par une basse au torse bombé, tous les éléments semblent s’harmoniser dans une sorte de furie sonore. Leur vision du monde est pessimiste et influe aussi beaucoup sur leur comportement musical, au point de trouver des passages d’une noirceur malsaine.
Si après tous ces compliments, vous n’avez pas encore compris qu’Enemies n’est pas une petite révélation, c’est que la DMLA (dégénérescence maculaire liée à l’âge) vous guette… Car vraiment, ce ne sera que grâce à la pose d’œillères qu’on boudera son plaisir à entendre un Death mélodique aussi bien travaillé qu’exécuté. C’est de plus en plus rare et c’est d’ailleurs pour ça, que MARIONETTE mérite toute notre attention.
Ajouté : Jeudi 01 Octobre 2009 Chroniqueur : Stef. Score :     Lien en relation: Marionnette Website Hits: 11973
|