# 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
}
REMIND (FRA) - Le Maître Du Je (2010)

Label : Auto-Production
Sortie du Scud : 15 mai 2010
Pays : France
Genre : Metalcore
Type : Album
Playtime : 11 Titres - 43 Mins
« REMIND propose un métal à la croisée du trash et du hardcore ». Oh pétard, ça ne pouvait pas mieux commencer ! Faute d’orthographe, on oublie volontiers. Le Maître Du Je ? Faute de goût. S’imposer ? C’est pas faute d’avoir essayé. Décidemment, les débuts sont plutôt du style « fautifs » pour ces Lyonnais, qui ont vite renoncé à tout espoir de lendemains qui chantent après la sortie de ce premier album studio qui succède à l’EP L’Enfer Du Décor paru en 2007. Une séparation plus loin, on remercie le ciel de nous avoir épargné les jeux de mots les plus foireux que puisse connaître la langue française, laissant désormais TESS seul maître à bord dans l’art délicat des bouffonneries linguistiques. On pourrait aussi le remercier de nous avoir préservés d’un flop retentissant, mais sur ce point, je n’en ai pas encore une certitude absolue. Parce que Le Maître Du Je souffle tour à tour le chaud et le froid. Il vous faudra quand même vous armer d’une petite laine pour résister à ces vents hurlants, pas forcément des plus agréables pour vos cages à miel.
Soit. Nous sommes donc prévenus que la recette proposée par REMIND sera un mélange de Thrash et de Hardcore, avec également pas mal de « mélodies ». Alors je ne sais pas trop d’où sort cette définition, mais il vous faut savoir que des termes intrus se sont glissés dedans. Pour vous aider, ça commence par « mélo » et ça finit par « dies ». « Thrash » aussi n’est pas vraiment à sa place. Au final, il reste « Hardcore », et encore. Le vrai Hardcore ne ressemble en rien à la musique de REMIND, qui s’organise davantage autour d’un Metalcore haché à deux voix. D’ailleurs, je parlais de TESS plus haut, on en est pas très loin, du moins dans l’esprit. Avec une brève introduction débarque « Jeu d’Enfant ». Et déjà, on ne voit pas très bien où REMIND veut en venir. Ok, ça tabasse. Ok, ça cogne dur sur la batterie. Ok, il y a des riffs groovys. Mais Jésus Marie, quel fourbi ! On se perd très rapidement entre les incessantes variations rythmiques et le côté complètement décousu de cette composition, qui sera bien malgré elle à l’image du disque tout entier. L’aspect purement musical est un peu mis à l’écart au profit des vocaux, qui narrent quand même une histoire assez dure, puisqu’il s’agit de l’œuvre d’un serial-killer sur fond d’inceste. A ce titre, une création comme « Pulsions » montre assez clairement le décalage entre l’application mise dans les vocaux et les parties instrumentales bâclées. La facette Thrash apparaît rapidement en surbrillance dans les riffs de la seconde moitié de l’album (« Jacques A Dit ») mais c’est trop épisodique pour être crédible. Et pourtant, et pourtant, cette œuvre n’est pas foncièrement ratée ou inutile. Elle est juste issue de cerveaux qui ont beaucoup de mal à mettre de l’ordre dans leurs idées et qui, à force de vouloir sans cesse casser les tempos, perdent totalement les commandes de leur Metal. Par contre, on pourra quand même souligner l’effort tout particulier injecté dans la plupart des morceaux, pour rendre les atmosphères réellement pesantes et du coup, totalement adaptées au thème du disque. Le contraste entre chœurs clairs (un tout petit grain à la Victor Guillet des BETRAYING THE MARTYRS) et voix Death est également sympa, même si je ne suis pas franchement fan de cette dernière, qui aurait certainement mieux collé sur des parties instrumentales moins ciselées (« Des Œuvres »).
Alors avant de vouloir devenir « Maître Du Je », il faut d’abord réussir à devenir maître de son jeu. REMIND, en dépit de plaisantes dispositions, a sorti à l’époque un album au potentiel certes prometteur, mais beaucoup trop brouillon et inconstant pour parvenir à forcer son destin. On en retiendra toutefois un digipack soigné et… une désillusion. Nul doute que sur scène, ça doit être une autre paire de manche. Mais le groupe a fait le choix de splitter, nous laissant au final avec un album qui ne nous dit même pas clairement si cette décision était la bonne.
Ajouté : Mardi 04 Septembre 2012 Chroniqueur : Stef. Score :    Lien en relation: Remind Website Hits: 8954
|