# 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
}
ORIGIN (usa) - Entity (2011)
Label : Nuclear Blast Records
Sortie du Scud : 13 juin 2011
Pays : Etats-Unis
Genre : Death Metal
Type : Album
Playtime : 12 Titres - 39 Mins
Au premier rang du bataillon des bourrins métalliques se trouve ORIGIN. Groupe de Death / Grind Metal texan qui n’en est pas à son coup d’essai en termes de folies furieuses. L’album que nous allons traverser s’intitule Entity. Il est à la fois neuvième et dernier d’une discographie qui commence à être lourde. Le trio américain se caractérise par un style particulièrement technique, rapide, agressif et endurant. Entity mérite notre plus grande attention parce qu’il représente une certaine rupture dans la continuité originienne tout en gardant les traits brutaux qui fondent l’identité du groupe.
Les traits brutaux, les voilà. Le premier morceau (« Expulsion of fury ») impose la couleur. Tempo très élevé (entre 210 et 240), riffs à la double croche qui ne sont que des déluges de notes venant nous agresser l’audition, chants gutturaux sans répit : que demande le peuple ? ORIGIN conserve donc son côté technique avec des rythmiques se trouvant aux portes de l’inhumanité par leur rapidité (« Saliega » ; 0,43’) ponctuées par des envolées de swepping comme on en avait déjà entendu sur l’album Antithesis (par exemple le titre : «The Afthermath »). Le son utilisé présente, lui aussi, certaines similitudes avec les galettes précédentes. On trouve une grosse saturation ainsi qu’une batterie très sèche notamment par des doubles pédales et une caisse claire très aiguisées et claquantes. La guitare basse a la même importance que dans les précédents opus : il faut tendre l’oreille pour discerner ce qu’elle veut nous dire. Bien sûr, comme tous les groupes de Metal qui s’imposent sur la scène internationale et qui signent avec de bons labels : les enregistrements et mixages sont meilleurs à chaque nouvelle sortie. Le son est clairement audible et discernable pour tous les amateurs du genre. Rockeur s’abstenir. Ce n’est que du bonheur de ce point de vue là. De même, on remarquera que les couleurs harmoniques n’ont pas foncièrement changé. On reste dans du mineur bien tassé, mineur harmonique parfois. Ils ne font pas du jazz et heureusement ; on n’est pas là pour ça. On voit bien qu’il y a une certaine continuité. Cet album n’est pas sui generis et il peut couronner, avec légitimité, une belle discographie.
Cependant, l’analyse devant être objective, une certaine rupture est à observer. Rupture, pourquoi ? Parce que les texans ont perdu certaines habitudes. D’abord par le style général. ORIGIN est réputé être un groupe "qui ne s’arrête jamais". Rapide et endurant, du début à la fin. Or, on remarque ici une certaine accalmie notamment avec des passages clairement aérés et aériens (« Consequence of solution » ; 4,15’). Ceci n’est pas pour nous déplaire mais ce n’est pas dans le style habituel du groupe. On notera aussi la présence de passages rythmiques à la croche, qui donnent un petit côté Hardcore à un style qui se voulait tourné vers le Death / Brutal Death. Par exemple : le riff final d’« évolution of extinction ». On remarquera des aspects Grind Core qui n’étaient pas présents dans Anthithesis. Le titre « Committed » qui ne dure que 1,56’. Le chant guttural est certes violent mais parfois, c’est vrai, l’ancien chanteur qui avait signé Anthithesis manque par son aspect encore plus rauque et lourd ainsi que par son charisme.
Globalement le niveau est très élevé et on peut dire, sans peine, que c’est du ORIGIN bien dense et bien violent comme on l’aime. Le respect s’impose devant autant de maîtrise. Le style ne négocie pas, ça rentre, c’est lourd et c’est bon. Mais il est vrai que par rapport à Anthithesis, qui représentait, pour certains, l’apogée de la signature d’ORIGIN, il y a une certaine « régression ». Régression car le style étouffant provoqué par les tempos élevés, les blastbeats à n’en plus finir, les full doubles déraisonnés et la durée des chansons qui était normale voire longue, tous ces éléments ne se retrouvent pas systématiquement dans cet album. Mais ne serait-il pas possible d’y voir un progrès, une saine diversification ? En tous les cas, cet opus reste un viol et comme tel, il se laisse apprécier.
Ajouté : Mardi 15 Mai 2012 Chroniqueur : SergueïOwmorov Score : Lien en relation: Origin Website Hits: 7344
|