# 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
}
MORTIFILIA (cz) - Embrace (2008)
Label : Mondongo Cannibale Records
Sortie du Scud : Août 2008
Pays : République Tchèque
Genre : Death Metal Mélodique
Type : Album
Playtime : 11 Titres - 35 Mins
"C’est quoi cette pochette horrible ? Sûrement un nouveau groupe underground, avec une production horrible, qui vaut pas trois clous…" fut ma première réaction lorsque j’ai eu le nouvel album de MORTIFILIA entre les mains. C’est certain qu’avec un tel artwork, difficile de ne pas rafler la tête du podium dans la catégorie des illustrations les plus moches de l’année. Ce sera au moins cela de pris. Mine de rien, ce groupe tchèque en est déjà à sa dixième année d’existence et signe avec Embrace son second album, suite à plusieurs longues démos antérieures, et surtout à Redemption, sorti en 2002, qui leur permit de se faire remarquer puisque le groupe exécute un Death Metal Mélodique à la Suédoise, un genre qui ne court pas les rues dans leur pays, habituellement orienté vers le Black et le Grind.
Toutefois, quand on parle de MORTIFILIA, il y a un quiproquo à éviter. Les Tchèques ne nous servent pas un Death Mélo typé moderne, à la MORS PRINCIPIUM EST, SOILWORK, ou encore IN FLAMES nouvelle école, avec claviers, chant clair édulcoré sur les refrains et tout le toutim. Non, le groupe préfère revenir à la création du genre, s’inspirer des souches fondatrices telles que DISMEMBER, ENTOMBED et AT THE GATES, et consommer leurs racines sans modération.
Pourtant, un des défauts majeurs de cet album, et constatable rapidement, est qu’il ne propose pas de passages réellement mémorables. Les morceaux ont beau être bien exécutés, un ou deux seulement (« You Are My Death » par exemple) parviennent à se démarquer grâce à quelques secondes de nuances dans la mélodie, mais dans l’ensemble, il se dégage, sur Embrace, une monotonie vraiment dérangeante. Et cela est, en particulier, dû à des compositions bien trop courtes, avoisinant généralement les trois minutes, qui n’ont, par conséquent, pas le temps d’être développées pour le mieux et se montrent ainsi très répétitives, malgré quelques efforts comme les riffs clairs d’intro sur « Like A Beast ». D’ailleurs, on remarque que les deux morceaux dépassant les quatre minutes, « …And Mother Said » et « Storm, Slaying, Misery, Fear » (quel nom kitsch !), sont plus réfléchis et se composent de changements de rythmes, solos corrects et riffs variés.
Pour ce qui est du reste, on suit donc un schéma commun, ponctué de quelques breaks. Pave Vrba, à la batterie, parvient à tirer son épingle du jeu, alternant blast beats, accélérations (sur un tempo déjà rapide), et un jeu de caisse claire énergique. Les guitaristes délivrent d’honnêtes riffs mélodiques qui ne manquent pas d’une certaine technique et, à leur opposé, la basse reste peu audible et fait de la figuration. Il faut dire que la production aurait mérité d’être un peu plus claire car, avec son côté brut, elle sonne plutôt comme celles de cette ancienne époque, jouant davantage sur l’agressivité des compositions. Sans doute est-ce volontaire, au vu de leurs influences. Le chanteur, quant à lui, se contente d’un chant growlé dans la plus pure tradition, même si le sien est plus clair et compréhensible. En outre, à l’image du dernier titre, « Behind The Glassdoor », quelques morceaux voient leurs refrains dotés d’un doublage vocal, assuré bien évidemment par le bassiste ; ce qui permet également d’apporter de la diversité dans cet océan d’homogénéité.
A contrario de la place que lui octroie d’office sa pochette, Embrace n’a aucune chance de finir dans le top des meilleurs albums de l’année. MORTIFILIA signe, certes, une bonne prestation qui ravive les anciennes valeurs du genre, mais qui, par conséquent, n’est destinée qu’aux plus fervents adorateurs de ce style et ne transpirera qu’une uniformité lassante et inintéressante aux oreilles des amateurs occasionnels.
Ajouté : Jeudi 22 Juillet 2010 Chroniqueur : CyberIF. Score : Lien en relation: Mortifilia Website Hits: 9090
|