# 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
}
THE ACACIA STRAIN (usa) - Death Is The Only Mortal (2012)
![](modules/Reviews/images/theacaciastrain_deathistheonlymortal.jpg)
Label : Rise Records
Sortie du Scud : 9 octobre 2012
Pays : Etats-Unis
Genre : Deathcore
Type : Album
Playtime : 10 Titres - 46 Mins
Le truc cool avec THE ACACIA STRAIN, c’est que leurs pochettes sont tellement colorées et moches qu’on en profite illico pour régler la couleur sur nos écrans. C’était déjà le cas sur le Continent de 2008 et sur le Wormwood de 2010, ça l’est toujours autant sur le Death Is The Only Mortal de 2012. Pour ceux qui ne connaissent pas le phénomène dont je parle, THE ACACIA STRAIN ce sont quatre furieux ricains qui font dans le Deathcore. Jusque là, ça ressemble de près à un pléonasme. Sauf que ces mecs sont au sommet de la chaine, que leur réputation dans le milieu n’est plus à faire et que, il faut bien le reconnaître, leur succès est construit de patience et de minutie. Six albums soit une sortie bisannuelle depuis 2002, ce rythme mécanique a suffi pour propulser leur nom tout en haut des flyers les plus « hype » du moment, bien aidé il est vrai par un Deathcore loin d’être dégueulasse.
D’ailleurs, THE ACACIA STRAIN, c’est le Deathcore comme on ne se l’imagine pas forcément. Pas de claviers pompeux, pas de chant clair, pas de structures binaires à la EMMURE mais de la précision, des ambiances, de la pesanteur. Wormwood était déjà dans cette optique d’efficacité, à défaut de pouvoir faire marrer les foules, comme savait le faire DR. ACULA. Death Is The Only Mortal, le premier sous l’écurie Rise Records après trois sorties sous Prosthetic, appuie exactement sur ce fait de jeu. Ce n’est d’ailleurs pas un hasard si Kirk Windstein du groupe de Sludge CROWBAR vient pousser la chansonnette sur « Go To Sleep ». Pas forcément dans la même veine musicale mais en tout cas dans le même état d’esprit, THE ACACIA STRAIN effectue des corrélations astucieuses à l’heure où les seuls breakdowns frénétiques sont passés de mode. Les guitares de Daniel Laskiewicz sont lancinantes, charnues et enveloppées dans une production soyeuse, gonflée à bloc, qu’il a lui-même imaginé. Elles reflètent l’état d’esprit global de cette passionnante sortie. Nos Américains sont des musiciens posés, aguerris, adeptes de la réflexion, toujours partants pour une bonne bagarre dans le pit, ce qui tranche terriblement d’avec d’autres formations du style qui foncent tête baissée (BENEATH THE SURFACE, KING CONQUER, OCEANO pour ne pas les citer). Death Is The Only Mortal dégage beaucoup de noirceur, beaucoup de gravité, comme si le moment était solennel alors qu’après tout, ce n’est que de la musique. Quelques atmosphères macabres et glauques viennent se glisser ça et là (« Victims Of The Cave »), quelques reflets Heavy également, comme dans les derniers instants de « Brain Death ». Forcément, ça a le mérite de donner un peu de diversité au bousin. Mais jamais ça ne nous retire du crâne l’idée que THE ACACIA STRAIN a voulu mettre l’accent sur les nuances chaotiques et belliqueuses de son Deathcore. C’est d’ailleurs tout sauf un hasard si on a l’impression que cet opus évolue sur un faux-rythme, avec des tempos très lents, très robotiques. C’est le cas et c’est voulu. De facto, ces derniers rendent Death Is The Only Mortal impressionnant d’audace dans le songwriting, sans compter une maturité technique qui n’est plus à prouver après une décennie de bons et loyaux services.
THE ACACIA STRAIN, c’est le groupe le plus à même de vous prouver que le Deathcore, c’est pas forcément tout pourri. Il leur suffit pour ça d’hausser un peu le ton, de muscler leur discours, de vous prendre à la gorge d’entrée. Tout ça, ce sont des trucs qu’ils savent faire. Et ce sixième et brillant album, s’il n’est pas leur meilleur à ce jour, a le mérite d’asseoir un peu plus leur flagrante domination. Respect à vous, pour la ligne de conduite fixée et suivie. Respect pour la régularité dans l’efficacité. Respect pour la longévité dans cette jungle hostile. Respect pour cette capacité à faire la pluie et le beau temps, vous, les Chuck Norris du Deathcore.
Ajouté : Mercredi 14 Novembre 2012 Chroniqueur : Stef. Score : ![](modules/Reviews/images/blue.gif) ![](modules/Reviews/images/blue.gif) ![](modules/Reviews/images/blue.gif) ![](modules/Reviews/images/bluehalf.gif) Lien en relation: The Acacia Strain Website Hits: 10092
|