# 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
}
SECTORIAL (ua) - We Are The Titan's Rising Ashes (2015)
Label : Noizr Productions
Sortie du Scud : 10 août 2015
Pays : Ukraine
Genre : Death Grind
Type : Album
Playtime : 10 Titres - 39 Mins
Après le Japon et ses exactions exotiques, direction l'Ukraine et son Death Grind typique et diabolique. Diabolique, SECTORIAL l'est musicalement, ça ne fait aucun doute. Avec We Are The Titan's Rising Ashes, le quatuor donne une suite à son premier effort sorti il y a trois ans, Erase And Reborn Humanity, frappe fort, vite, mais malgré une violence persistante et insistante... surprend.
Car loin de se contenter de taper là où ça fait mal, le quartette utilise des armes inhabituelles, et saupoudre son Death Thrash Grind de quelques accents locaux de forts bon ton.
SECTORIAL, c'est tout d'abord un trio de base, traditionnel, avec guitare, chant, basse et batterie. C'est lui qui abat la plus grosse partie du boulot, que Trit (Guitare, Choeurs), Cliff (Basse, Choeurs) et Reich (batterie) portent sur leurs solides épaules.
Mais c'est aussi Burz, qui manie dans son coin la cornemuse, la flûte, et autres instruments plus surprenants, et qui donne à la musique cette couleur unique.
Bien sur, l'essentiel des morceaux se focalise sur un Death Grind de première bourre, à la production claire, profonde et ample. Pas de quartier, ça ramone de tous les côtés, et ça fonce tête baissée. Le trio de base alterne les broncas Grind avec blasts de rigueur, les passages plus volontiers Doom/Heavy, et ne crache pas sur une bonne séquence Mosh qui balance la sauce.
Mais là ou les choses deviennent intéressantes, c'est lorsque Burz s'amuse à intercaler de courtes interventions incongrues, à la harpe de bouche (sorte de petit plug qui produit plus ou moins le même son qu'une guimbarde). Et lorsque ces mêmes segments précèdent de quelques secondes des bourrasques étourdissantes de violence, sur lesquelles la batterie se prend pour un AK-47 ("Abysmal"), le décalage produit devient assez fascinant.
Mais loin de se contenter de leurs costumes de bourrins atypiques, les membres de SECTORIAL savent aussi endosser la panoplie du musicien sensible et proposent alors des digressions plus mélodiques et fragiles, qui s'intègrent parfaitement à la globalité de l'album.
Ainsi, "The Embers" et ses six minutes se développe le long d'une douce harmonie de guitare acoustique, bientôt rejointe par une flûte virevoltant sur quelques notes nostalgiques. Mariage riche, auquel s'ajoute une discrète guitare électrique qui n'emballe pas le propos... Et n'attendez pas une brusque cassure pour reprendre le schéma usuel, elle ne viendra jamais, c'est un vrai moment de quiétude.
Dès lors, SECTORIAL change son fusil d'épaule, et abandonne les formats courts pour développer ses idées. Le fantastique et envoûtant "With Own Tacit Agreement" accommode les options, et pose des jalons progressifs sur le Death Grind radical de la première moitié du disque. Ce titre est une sorte de pont entre les furies bruitistes des premiers instants et les mélodies apaisées du morceau précédent, et juxtapose les grondements avec le chant clair, qui s'impose et pose des moments de clarté avec une jolie précision dans la voix. Les tempêtes violentes succèdent aux caresses douces, et la musique défile comme les saisons sur une année, soufflant le chaud et le froid, en laissant se succéder les blasts soulignés de riffs féroces et les parties acoustiques relevées de cette fameuse flûte champêtre.
Et il est vrai que la fin de We Are The Titan's Rising Ashes n'a alors plus grand chose en commun avec son entame... De monstre aux intentions véhémentes, SECTORIAL se métamorphose en synthèse entre CREMATORY et PARADISE LOST, avec un peu de FINTROLL en couverture, et se montre plus volontiers ouvert et disert.
"Summer Night- Breath of the Boundless Steppes" arbore même des traits communs avec NILE ou MESHUGGAH, et aligne les plans, laisse son batteur s'inspirer de sa violence interne pour empiler les couches de breaks. La guitare reste sur le même plan de riffs assurés mais modérés, tandis que parfois, les respirations haletantes inhérentes au Grind bousculent le tout.
Même principe pour "Autumn Silence Is Covered With Ice", alors que le final "Predator's Intents" se masque des préceptes de MORBID ANGEL adaptés à SOILWORK et à la vague Néo Thrash/Death nordique. Toujours ce mélange entre parties ultra rapides et pesanteurs Heavy, mais sans se départir de ces harmonies sobres découvertes à mi chemin.
SECTORIAL évolue au final dans des eaux troubles, brouille sa piste, et laisse quelques peu dubitatif sur son style propre qui finalement... est sien !
Sans trop expérimenter, SECTORIAL affirme clairement ses intentions avec ce second longue durée, qui reprend les recettes énoncées sur son prédécesseur, tout en allant un peu plus loin dans le mélange Metal/Folk. C'est bien évidemment la première option qui prime nettement, et la violence dégagée par la première moitié de l'album est là pour le prouver.
Mais les quatre derniers morceaux cassent le système qu'on pensait bien huilé, et apportent une bouffée d'air frais bienvenue et variée.
Bel effort que ce We Are The Titan's Rising Ashes, qui ne se complait pas dans l'attaque ras du sol d'usage, et sait exploiter ses origines pour innover un tant soit peu, tout en restant diaboliquement efficace.
Je vous l'avais bien dit qu'ils étaient diaboliques...
Ajouté : Lundi 16 Novembre 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Sectorial Website Hits: 6762
|