# 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
}
SAMAEL (CH) - Blood Ritual (1992)
Label : Century Media Records
Sortie du Scud : Décembre 1992
Pays : Suisse
Genre : Black Thrash minimaliste
Type : Album
Playtime : 11 Titres - 41 Mins
Nous sommes en l’anno dominis 1992 et le trio NIRVANA vient de passer un sérieux cap dans sa carrière en devenant une machine «bankable» pour sa major Geffen qui se frottera les mimines. Un énorme succès commercial non démenti jusqu’à ce jour pour les américains et largement mérité avec ce Nevermind. On ne pourra pas en dire autant de l’excellent groupe Helvète de SAMAEL.
Le succès, ils le connurent bien que plus tard lorsqu’ils amorcèrent un virage musical à 360° en adoptant un style résolument plus Atmosphérique et plus Dark. Mais à cette période, le trio suisse comprenant les frères Vorph (guitares, chant) et Xy (batterie, claviers) accompagné par Masmiseîm (basse) officiaient dans un tout autre genre, plus underground dirons nous. Ayant vu le jour cinq ans auparavant, le trio en est déjà à sa seconde réalisation de Black Metal lourd, surtout en pariant sur la continuité de son premier opus Worship Him, qui sans démériter et sans prétention, certes, ne cassait pas trois pattes à un canard. Ce n’est donc qu’avec Blood Ritual, leur second opus et leur meilleure livraison studio de leur époque Black Metal lancinante que le combo se fera un nom sur la scène européenne et internationale.
Bénéficiant d’une musique bien plus raffinée et travaillée que son prédécesseur, SAMAEL gagna en maturité tout en exploitant à juste titre l’apport des nappes de synthés et des nouvelles textures de guitares que la fratrie découvrait au gré des expérimentations. Deux transmutations typiques et distinctives qui deviendront par la suite une des marques de fabrique du groupe. En premier lieu, des atouts, SAMAEL en regorge. La triade suisse peut ainsi s’appuyer sur plusieurs points. Déjà, le chant sépulcral de Vorph fait son petit effet. Les grognements et feulements y sont légions et plutôt glaçants. Ensuite, les compositions de Blood Ritual sonnent incontestablement de manière accablées, mélancoliques, pesantes, venimeuses, ténébreuses, inquiétantes. Leurs riffs aux résonances Thrash ne sont pas sans rappeler les influences à la CELTIC FROST qui ne sont pas bien loin. L’atmosphère est pesante et parfois carrément morbide sur certains morceaux de l’album. Après un «Epilogue» de quelques secondes qui pose les fondations qui craquelles la bâtisse SAMAEL, le démon helvétique enchaîne avec un «Beyond The Nothingness» diabolique et caverneux, à l’ambiance sépulcrale. Et on ne fait pas les fiers à l’écoute de «Poison Infiltration» où les vocaux de Vorph sont abruptement possédés.
D’ailleurs, la piste suivante, «After The Sepulture», aux contours insalubres et contagieux, nous contaminent de cette maladie qu’est le Black épuisé et décrépi du trio de SAMAEL. Accablant, ce morceau illustre parfaitement l’ambiance générale de ce Blood Ritual. Sinueuses et fielleuses, les compositions flirtent sensiblement avec le Doom de l’infect «Macabre Operetta». Macabres et malsaines tant sur le fond que sur la forme, Vorph, Xy et Masmiseim ne s’emploient guère à proposer des pistes agressives et véloces sauf sur le titre éponyme qui ne reflète pas le contenu global de l’opus. Black puissant, incantatoire et possédé, aux riffs justes et calibrés, les compositions et les inspirations sont de qualité. Par la suite, avec l’interlude «Since the Creation» SAMAEL offre l’impression de rentrer dans une nouvelle ère, où les riffs se font plus durs comme sur l’excellente «With The Gleam of The Torches».
Suivie d’un morceau au piano «Total Consecration» et son atmosphère néfaste et froide, SAMAEL s’amuse à jouer avec les sensibilités les plus éloignées. Une impression que l’on note facilement avec «Bestial Devotion» que nous propose la triade helvète.
Enregistré et produit en octobre 1992 au studio TNT par une figure symbolique du milieu, Waldemar Sorychta (TIAMAT, MOONSPELL, THERION, UNLEASHED), le groupe y déploie un rendu sonore caverneux de plomb. Blood Ritual est certainement l’opus qui mis le pied à l’étrier au groupe Suisse et le propulsa sur le devant de la scène. Un grand album de Black Thrash minimaliste aux compositions léchées et soignées.
Ajouté : Vendredi 24 Avril 2009 Chroniqueur : Loki Score : Lien en relation: Samael Website Hits: 12251
|