# 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
}
BRAIN DRILL (usa) - Quantum Catastrophe (2010)

Label : Metal Blade Records
Sortie du Scud : 11 mai 2010
Pays : Etats-Unis
Genre : Brutal Death Metal technique
Type : Album
Playtime : 8 Titres - 42 Mins
Faut-il être technique pour exister ? Cette question mérite bien quelques secondes de réflexion. On le sait, le Brutal Death Metal technique n’est pas un genre musical qui mérite d’être profondément rénové, ceux qui s’y lancent étant généralement suffisamment doués ou imaginatifs pour faire les choses bien. Aux quatre coins du globe, on trouve un monument, à l’image d’ORIGIN qui plane sur la scène américaine ou de NECROPHAGIST qui donne du fil à retordre aux matheux européens. Et puis il y a BRAIN DRILL, qui prétend depuis 2008 et Apocalyptic Feasting à sa part du magot. Loin de moi l’idée de vouloir désavouer publiquement mon ancien confrère Warloghe. Cependant, il convient de nuancer un peu son propos. Ce premier jet était-il véritablement un exploit surhumain ? Deux ans plus tard, Quantum Catastrophe apporte quelques réponses. Tardives, mais riches en enseignements.
D’un point de vue strictement personnel, BRAIN DRILL représente l’antithèse d’un Brutal Death technique de qualité. Ce n’est pas vraiment de la branlette de manche, mais les absences conjuguées de cohésion, de ligne directrice, de fil rouge, font que ça y ressemble. Et ça a toujours été une tare pour cette formation, peut-être un peu surestimée. Quantum Catastrophe met en évidence ces quelques carences gravissimes pour un groupe prétendant évoluer dans cette direction artistique. Où est le travail de composition ? Où est le feeling ? Où sont les émotions procurées par un Antithesis ? A ce que je sache, mais corrigez-moi si je me trompe, ORIGIN et BRAIN DRILL jouent dans la même cour. Et c’est à cet instant précis qu’on réalise le fossé qui sépare ces deux meutes. Sur l’instant, on pourra trouver beaucoup de qualités à cet album. Bourrin au possible, complètement décousu, méchamment technique, d’une intensité exceptionnelle. Et cætera. Le problème, c’est qu’on dirait bien que ces messieurs ont besoin de nous en mettre plein les oreilles pour exister et que malgré tous leurs efforts, ils peinent à faire autre chose qu’un étalage tapageur de capacités techniques très m’as-tu-vu. Pour ne pas arranger leur affaire, ils sont aiguillés dans de mauvaises directions par un Ron Casey au jeu franchement platonique et linéaire qui finalement, est à la batterie ce que Dylan Ruskin est à la guitare : un performeur sans aucune pédagogie. Cet enchevêtrement maladroit et supersonique d’arpèges sans aucune limite ni retenue est simplement chiant à mourir. Quantum Catastrophe en est, de ce fait, réduit à un bête désagrément sonore, à une sortie qui virevolte dans tous les sens, comme un cheval fou dont on a envie d’abréger la maladie. Le surdosage de parties en sweeping, de riffs syncopés, de schémas totalement hystériques achève cet opus à petit feu, à tel point qu’à la fin de l’interminable éponyme (10 minutes de cavalcade barbare non-stop), on se demande à quel moment BRAIN DRILL a bien pu faire la transition entre ses huit morceaux. Le silence deviendrait presque quelque chose de plaisant après cette saignée de Brutal Death technique complètement agglutinée et impersonnelle.
Je reconnais être le dernier à être capable de jouer comme eux, à une telle vitesse. Je reconnais aussi être le premier à me régaler d’un bon album du genre. Mais trop c’est trop. BRAIN DRILL est dans le déni le plus total de la musique. On ne leur demande pas d’être des poètes, si pareille boucherie peut faire leur bonheur. Juste d’avoir un peu de lucidité. Le monde ne tourne pas autour de vous les mecs, pas plus qu’il ne tourne autour de Zakk Wylde durant ses solos d’un quart d’heure. La sensation d’être sur un petit nuage doit être bien agréable, mais pensez à ceux qui pendant ce temps, vivent un enfer.
Ajouté : Lundi 19 Novembre 2012 Chroniqueur : Stef. Score :   Lien en relation: Brain Drill Website Hits: 14468
|