# 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
}
OBDURATED (FRA) - The Answers Within (2010)
Label : Pervade Production / Manitou Music
Sortie du Scud : 12 février 2010
Pays : France
Genre : Death Metal Mélodique
Type : Album
Playtime : 9 Titres - 42 Mins
Encore une fois me voici devant un dilemme digne des plus hautes instances grecques !
Car oui le cas d'OBDURATED n'est pas simple et ce visiblement pour personne.
Voici donc quelques éléments de mon analyse personnelle qui vous emmèneront surement à partager mon point de vue. Dans un premier temps je pense que l'on peut affirmer sans trop prendre de risque, que le label ne croit pas beaucoup en son poulain. Sinon comment expliquer le peu d'éléments accessibles sur le site du distributeur que je vous invite fortement à visiter. Trouver des informations sur la formation se révèle être du niveau des 12 travaux de qui vous savez. Ensuite la galette promotionnelle qui nous est parvenue est hilarante dans le sens ou le copieur n'a pas été foutu de recopier le titre de l'album correctement. J'imagine très bien la réaction du combo lors de la réception de leur petite rondelle, colère quand tu nous tiens.
Et pour le reste de l'artwork, je suis surpris de voir autant de similitude entre les pochettes de deux formations signées chez la même concession. Faites le comparatif vous même entre YORBLIND et OBDURATED, vous me direz après si je me trompe ?
Bon reste tout de même que le plus important est à l'intérieur, et là aussi il existe indubitablement des similitudes stylistiques entre les deux formations citées plus haut. Je ne pouvais alors que continuer ma comparaison, et on peut dire que là où le groupe parisien frappe fort avec une production de haute volée, les picards ne sont pas à niveau. En effet, la prise de son est plutôt plate, le mixage étouffe la basse et rend les guitares un peu trop terne, quant au mastering, il est inexistant. De là à dire que la production est mauvaise il y a un pas que je ne franchirais pas, elle n'est simplement pas à la hauteur de ce qui est attendu aujourd'hui, mais reste supérieure à la première réalisation du quintette.
Serait-ce là le résultat d'un manque de soutien financier ?
Serait-ce pour cette raison que j'ai eu tant de mal à digérer cet album dans son ensemble lors de la première écoute ?
Serait-ce la combinaison de tout cela qui fait qu'on entend si peu parler de nos compatriotes ?
Peut être, mais pas seulement comme dirait l'autre !
Car en dehors de toutes considérations rationnelles, il existe la subjectivité de l'amour que l'on peut porter à une musique. Que dame Héra me vienne alors en aide, puisqu'il est bien ici mon problème principal. Car la paire de cordiste déborde de talent et je peux affirmer haut et fort que les compositions sont enlevées, brutales, mélodiques et grandiloquentes. Les arrangements sont sublimes et originaux. Les morceaux passent sans que l'on ressente le moins du monde une redite, et je prends un malin plaisir à me passer l'album en boucle. Mais seulement à partir du moment où j'arrive à passer outre les parties dites de chant. Je n'avais déjà que très peu apprécier la prestation du jeune homme sur les premiers émois discographiques, mais là non ce n'est pas possible. Que les foudres de Zeus s'abattent sur lui car ce type ne sait tout simplement pas chanter. Non je n'ai pas dit qu'il n'avait pas de voix, j'affirme qu'il ne possède aucune technique. Où alors j'en perds mon latin, car jeter le plus vite possible des textes sans effort de prononciation sur de la musique sans tenir compte du débit, du temps, de la mesure et encore moins du nombre de pieds, est-ce bien cela être chanteur ?
Le paroxysme de la cataplexie est atteint lors de « Revulsion », un morceau incroyable d'ingéniosité et d'habileté où chaque riff est développé avec bonheur et délectation, gâché par une espèce de mitraillette verbale sans queue ni tête. Et pourtant, je le redis, ce morceau quelle merveille.
Me permettrais-je alors de prodiguer conseil ?
Non, sachez simplement qu'en continuant avec cet Erato raté vous ne pourrez que finir au royaume d'Hadès.
Ma... après tout, si elle aime ça !
Ajouté : Lundi 24 Mai 2010 Chroniqueur : Oncle Machin Score : Lien en relation: Obdurated Website Hits: 9104
|