# 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
}
OBSZÖN GESCHÖPF (FRA) - Highway Of Horrors (2013)
Label : Cemetery Records
Sortie du Scud : 22 mars 2013
Pays : France
Genre : Metal industriel
Type : Album
Playtime : 12 Titres - 64 Mins
Voilà plus de 10 ans et 5 albums qu’OBSZÖN GESCHÖPF essaie de se faire un nom sur la scène Indus. Mais freiné par diverses galères de labels, le projet emmené par Remzi Kelleci n’a jamais pu sortir de l’underground même si quelques dates aux USA et en Europe de l’est lui ont permis de se faire quelque peu remarquer à l’international. Partant du principe qu’on n’est jamais mieux servi que par soi-même, l’homme-orchestre caché derrière ce vrai-faux groupe décide d’ajouter une corde à son arc en créant son propre label. Et c’est ainsi que nous arrive Highway of Horrors, une sixième livraison aux allures d’album de la dernière chance. Car cette fois, Kelleci a vraiment mis le paquet pour se faire remarquer : outre la création du label, il n’a pas hésité à s’offrir les services de nombreux invités qui ont probablement monnayé leur prestation. Car associer son nom à celui de DAGOBA, ETHS, TREPONEM PAL, CARNIVAL IN COAL, PSYKUP, L’ESPRIT DU CLAN et ULTRA VOMIT (pour ne citer que les plus connus) a forcément un coût. A la mise en danger artistique que représente toujours la sortie d’un nouvel album, OBSZÖN GESCHÖPF ajoute donc le risque financier. Cette fois ça passe ou ça casse !
Mais ces invités prestigieux n’auraient sans doute pas accepté de compromettre leur crédibilité dans un projet amateur ou douteux. Sur ce point, une rapide écoute des précédents efforts d’OBSZÖN GESCHÖPF aura suffi à les rassurer : quand il s’agit de balancer un Metal Indus teigneux et délicieusement pervers, Kelleci n’a de leçons à recevoir de personne. Ce nouvel album ne fera pas exception à la règle, appliquant une formule redoutable d’efficacité : autour un riff surpuissant, Kelleci vous assène ses aboiements de psychopathe enragé sur fond de dialogues samplés de films d’horreur US, habillés de quelques synthés nineties évoquant parfois FEAR FACTORY, le tout renforcé par une section rythmique en béton et relativement élaborée pour de l’Indus. La mélodie n’est clairement pas la priorité mais on reste loin d’un Indus bruitiste et hermétique. Ici, tout est question de puissance et de violence mais dans un esprit avant tout ludique, à l’image d’un bon gros slasher américain à regarder entre potes avec une tonne de popcorn et au moins autant de bière. D’ailleurs, tout est fait pour maintenir l’auditeur dans cet univers gore et fun, de la pochette montrant un clown psychopathe roulant à tombeau ouvert et écrasant tous les piétons sur son passage aux titres évocateurs des chansons (« Slasher’s night », « How I eat your mother »…), en passant par une esthétique sonore qui nous ramène 20 ans en arrière, à l’époque où l’on parlait encore de Metal Industriel et non de Cyber Metal. Les mauvaises langues diront peut-être qu’OBSZÖN GESCHÖPF n’a pas su évoluer avec son époque, restant bloqué dans la décennie qui l’a enfanté. Mais tout ceci est voulu et contribue parfaitement à créer cette sensation jouissive de se payer un tour de train-fantôme.
Serait-ce donc le parfait album pour trentenaire accroc aux films d’horreurs et rêvant de retrouver son adolescence ? Oui et non. Car aussi attachant soit-il, Highway of Horrors est bourré de petits défauts. D’abord, où sont passés les wagons d’invités annoncés ? Si l’on compare cet album avec les précédents efforts du groupe, l’apport de cette armée mexicaine n’est pas si flagrant en dehors d’un son globalement plus organique et un poil plus varié dû aux nombreux guitaristes, bassistes et batteurs employés sur la plupart des titres. Mais 5 guitaristes différents étaient-ils nécessaires pour accoucher d’un morceau comme « Easy Ride Corpse » ? Il faut en tout cas une bonne dose d’imagination pour deviner un tel embouteillage derrière la six-cordes. Et tous ceux qui espèrent reconnaître leur groupe fétiche derrière la musique d’OBSZÖN GESCHÖPF risquent d’être déçus. D’abord, il faut préciser qu’aucun vocaliste n’a été invité. Du coup les featurings sont moins évidents que chez APOCALYPTICA par exemple. Mais au-delà de ce constat, Kelleci imprime tellement sa marque sur chaque titre que ses invités s’en trouvent relégués au rang de simples exécutants, excepté peut-être sur les soli de guitare. Par ailleurs, le leader souffre de Killingjokite aigüe. En d’autres termes, il fait trop long pour de l’Indus: la plupart des titres dépassent les 5 minutes et auraient aisément pu être dégraissés de quelques répétitions inutiles pour gagner en efficacité. Ce n’est d’ailleurs pas un hasard si l’un des meilleurs morceaux (« Insane impulse ») est aussi le plus court. Autre mal récurrent, l’emploi un peu trop systématique et prolongé de dialogues samplés qui ont tendance à polluer certaines compos à la longue. Jusqu’ici, rien de bien méchant. Le véritable point noir de Highway of Horrors réside plutôt dans le phrasé rap limite grotesque adopté sur « Slasher’s Night », « Bloody Black Skin » et « Easy Ride Corpse ». Excellent dans son personnage de psychopathe hurleur, Kelleci perd toute sa superbe lorsqu’il enfile le survet’ et la casquette. L’idée d’injecter un peu de rap old school dans cette mixture Indus avait pourtant de quoi séduire mais le résultat ne convainc pas, au moins vocalement.
Alors, cette galette, on l’achète ou pas ? Oui, oui et encore oui ! Parce qu’il n’y a plus grand monde pour se risquer dans un créneau musical trop daté pour être hype mais pas assez vieux pour être vintage ; et surtout parce que malgré ses défauts, cet album direct, référencé et bourré d’énergie fait un bien fou, tout simplement.
Ajouté : Mardi 27 Août 2013 Chroniqueur : Cyco_Nico Score : Lien en relation: Obszön Geschöpf Website Hits: 8788
|