# 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
}
DISMEMBER (se) - Like an Ever Flowing Stream (1991)
Label : Nuclear Blast
Sortie du Scud : 29 mai 1991
Pays : Suède
Genre : Death Metal
Type : Album
Playtime : 10 Titres - 39 Mins
Juin 1991 !
Une douce chaleur emplit l’atmosphère en ce samedi matin. Je regarde à mes côtés cette frêle et jeune conquête de la veille. Elle est d’une magnifique candeur et sa poitrine encore dénudée me donne des envies non avouables. Je n’en puis plus, je dois m’apaiser, me vider les bourses. Sans plus tarder je pars vers la grande surface le plus proche de chez moi afin d’effectuer quelques achats (Me vider les bourses quoi !). En traversant le parc je pense encore à cette jeune fille dont pour une fois je me souviens du prénom, et je ne peux m’empêcher de sourire niaisement aux devants des passants qui me jettent un regard curieux. Je suis amoureux !
Me voici donc arriver dans le rayon Metal de mon distributeur préféré. Que voulez-vous, quand on a la chance d’habiter en Allemagne pas le moindre magasin sans rayon Metallique. Et me voici en train de farfouiller dans le bac des nouveautés SPV en promo à 9.99 D-Marks. Un cd couvert d’un apparat en carton attire mon regard, la pochette est bien visible mais son arrière est recouvert d’une pièce noire où seule la phrase « from dream to dream we have always been like an ever flowing stream » est visible. Intriguant !
Ce simple constat suffit à ma décision d’achat, je complète mon panier de quelques menues denrées, pour le petit déjeuner de ma dulcinée, et me voici rentré.
Une fois dans la cuisine, c’est tout en préparant une collation que j’ouvre l’objet de convoitise. J’arrache le bristol noir et découvre à l’arrière du cristal 5 gamins ensanglantés tous de noir vêtus. Fallait oser tout de même !
Je trouve cette pochette magnifique et je recherche à l’intérieur qui a bien pu dessiner une telle œuvre d’art. « Dan SEAGRAVE qui dise dans le livret, connaît pas mais il a du talent le gars » pensais-je. Deux archanges attirent encore une fois mon attention sur la galette. Ces deux bestioles sont sexuées !
Et puis advienne que pourra, faut que j’écoute ce truc.
Je glisse lentement dans la fente de la façade la rondelle encore vierge d’écoute. Je mets le son au minimum afin de ne pas réveiller celle pour qui je m’affère aux fourneaux. Mais des hurlements montent des enceintes ponctués par un martèlement rappelant la mesure des galériens. Et dans un bruit de cascade le premier accord retentit !
Je suis paralysé, pour la première fois je constate qu’un son peut être à la fois inquiétant et pénétrant. La voix arrive ! Jamais personne n’avait encore chanté comme cela. Je comprends alors la corrélation qui peut exister entre la photo des gamins et cette voix venue des profondeurs. Le rythme s’accélère, les guitares sont de plus en plus tranchantes, les hurlements inhumains de celui que je sais désormais être Matti KÄRKI sont de plus en plus écorchés, et à 03’13’’ l’extase, la jouissance complète. Le solo atteint les magnificences de mon étreinte nocturne. Ré-accélération, fin !
Je n’ai pu bouger de tout le morceau, mon cerveau est en ébullition ; changement de piste, mon derme réagit à chaque nouvelle note de « Soon to be Dead », et je me lève tel un Zombie pour monter le son de cette foutue chaîne qui se doit de rendre hommage à ce qu’elle est en train de lire.
C’est pendant « Bleed for Me » qu’un ange nu se positionne dans l’encadrement de la porte. Ses douces et pulpeuses lèvres s’écartent doucement et laissent échapper un « Tu pourrais pas baisser le son ! ».
« Cornes de Bouc ! » Je vire la Bougresse sur-le-champ sans autre forme de procès, et lui jette par la fenêtre ses vêtements restés aux pieds de mon lit.
J’ai de plus laissé cramer ce qui devait nous sustenter, ce qui rajoute à l’ambiance un côté surréaliste. Je pousse enfin le son et j’entre dans un état second contemplatif. Aucun morceau ne vient baisser l’intensité de la bête. Pis encore, chaque nouvelle offrande amène son lot de brutalité, de bestialité, d’originalité et de coups de poignets. Le paroxysme est atteint lors de « Dismembered » qui allie tout ce que Death Metal signifie. Non seulement l’introduction laisse présager des intromissions de live, mais en plein procès de JUDAS PRIEST, DISMEMBER se permet l’insulte suprême d’enregistrer un verset à l’envers. Grandiose !
Le reste de l’album ne souffrira d’aucune détumescence et je reste sans voix, assis, conquis !
D’après mon très cher « Petit Larousse » :
Définition : Enonciation des caractères essentiels, des qualités propres à un être ou à une chose !
Et c’est tout simplement cela que viennent de faire ces 8 noms qui figurent sur cet album, ils sont parvenus à définir ce qu’est, et ce que sera le Death Metal !
Et c’est pour Matti KÄRKI (chant), David BLOMQVIST (guitare), Robert SENNEBÄCK (guitare), Richard CABEZA (basse) et Fred ESTBY (batterie et production) pour les membres du groupe, mais aussi et sans oublier Nicke ANDERSON d’ENTOMBED (lead guitare), Dan SEAGRAVE (illustrateur) et Thomas SKOGSBERG (producteur) que j’ai viré la femme de ma vie.
Ajouté : Jeudi 12 Juin 2008 Chroniqueur : Oncle Machin Score : Lien en relation: Dismember Website Hits: 10987
|