# 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
}
KMFDM (de) - Our Time Will Come (2014)
Label : KMFDM Records
Sortie du Scud : 14 octobre 2014
Pays : Allemagne
Genre : EBM Indus
Type : Album
Playtime : 10 Titres - 48 Mins
Si la densité de la discographie d'un groupe peut témoigner de sa créativité, alors certains artistes méritent de figurer au panthéon des musiciens les plus inventifs. Sans aller jusqu'à parler de Zappa ni de certains ensembles Grind collaborant à droite à gauche, l'exemple de KMFDM serait dans les grandes largeurs assez probant. Jugez vous même, 19 albums studio, 3 lives, 10 compilations, 4 albums de remixes, 32 singles, 14 participations à des BO, sans compter leur propre travail pour d'autres groupes, de production, de remix, et la liste est quasi exhaustive. Nous sommes bien loin du groupe lambda qui relève les compteurs une fois tous les quatre ans... Rien qu'en 2008, KMFDM a sorti quatre produits, dont trois samplers et un LP studio... Et son dernier date de l'année dernière, puisque l'excellent Kunst est sorti le 26 février 2013... Reprenons notre souffle et... Allons-y !
Un an et demi après cette dernière livraison, Sascha Konietzko, Lucia Cifarelli et la bande remettent le couvert avec Our Time Will Come, et on espère en effet que leur tour viendra... Bien qu'il soit certainement déjà venu depuis longtemps, à en juger par le nombre d'artistes que KMFDM a influencé depuis 1984. Cette année là sortait Opium, son premier effort, et depuis, l'affection des fans et le succès critique ne se sont jamais démentis. Il faut dire que KMFDM jouit d'un gros avantage sur bon nombres d'autres combos, car il attire non seulement les fans d'EBM, d'Indus et même de Techno, mais aussi les Hard Rockeurs, les Thrasheurs, les Gothiques, tant son image est versatile et son attitude est crédible en toute circonstance. Même si certains disques privilégiaient le côté "dance" au détriment de la puissance, Sascha a toujours pris soin de glisser dans chaque livraison un ou deux morceaux bien costauds susceptibles de lui attirer les bonnes grâces de la frange de son public la plus violente.
Violent, mais dansant. Tel pourrait être le leitmotiv de ce collectif qui n'a de cesse de s'exprimer, et qui compte sur l'efficacité du Big Beat pour faire passer un message ouvertement social et politique. On peut suer à grosses gouttes sur le dancefloor ou dans le pit tout en étant conscient des réalités de ce monde après tout. Et le message passe d'autant plus facilement que la musique est puissante, groovy, parfois mécanique, rarement froide, mais au tempo toujours martelé, et aux gimmicks efficaces. Et Our Time Will Come, une fois de plus, propose son lot de titres méchamment percutants, et de délicatesses plus subtiles, comme si le SENSER de Kersten Haigh, FRONT 242 et FRONTLINE ASSEMBLY se retrouvaient dans le même club pour une battle de mixes jusqu'au bout de la nuit.
Difficile de dire si la cuvée 2014 de KMFDM fait partie des meilleures récoltes ou pas... Après plusieurs écoutes, le moins qu'on puisse dire est qu'il est solide, varié, mais qu'il n'a pas l'aura technoïde virale d'un Naïve, la violence latente de Angst, la démesure compacte de Nihil ou Xtort, ou le côté faussement ludique de Hau Ruck.
D'aspect classique, il propose néanmoins une belle collection de nouveaux beats contagieux, à l'image de son single/éclaireur "Genau (The German in You)", placé en ouverture, qui développe un joli tapis rythmique mid tempo sur lequel s'affrontent Sascha et Lucia. Et sous sa splendide pochette une fois de plus signée Aidan Hughes (peut être son plus beau travail pour le groupe d'ailleurs), Our Time Will Come reste homogène de bout en bout. Impossible toutefois de passer à côté de certains hymnes évidents, comme ce "Salvation", rampant et sifflant comme un serpent, qui se permet un emprunt personnel en citant les premiers vers de "Naïve" de l'album éponyme dans un clin d'oeil savoureux, ou encore le grondant "Respekt" aux arrangements synthétiques grouillants et son refrain en forme de slogan tronçonné par un riff aiguisé.
Mais globalement, on peut affirmer que cette fois-ci, KMFDM a privilégié les morceaux plus nuancés, spécialement ceux menés de main de velours par Lucia. Ainsi "Shake The Cage", malgré ses guitares chromées assume totalement ses sonorités Club presque Pop, et séduit grâce à cette voix aussi suave qu'agressive. "Get The Tongue Wet" a lui aussi tout pour enflammer les pistes, et sonne la plupart du temps comme une collaboration entre Sascha et le projet Indus/Hip-hop de Tommy Lee, METHODS OF MAYHEM (encore plus lorsque les intonations de Cifarelli se rapprochent des accents lubriques de Lil Kim).
Et au petit jeu du morceau le plus vénéneux, "Brainwashed" remporte aisément la palme, campé des deux pieds sur son beat écrasant et ses samples envahissant l'espace, avec en cadeau un chant particulièrement roublard.
N'oublions pas dans un souci d'exhaustivité de mettre en avant "Playing God", selon moi le meilleur morceau du lot, une fois de plus dominé par les vocaux versatiles de Lady Cifarelli, qui se veut enjôleuse sur les couplets, puis déchaînée sur le refrain, avec en appui les choeurs sournois de Konietzko, remplis d'une ironie savoureuse ("You like playing God", où le message qu'on pourrait adresser à bon nombre d'hommes politiques...).
Rien à dire, c'est une fois de plus du bon boulot. Avec Our Time Will Come, KMFDM prouve qu'il a encore bien des choses à dire, et ce malgré trente ans de carrière derrière lui. Une carrière qu'il faut d'ailleurs louer, tant le bonhomme n'a jamais dérogé de sa ligne de conduite, et se permet même après tout ce temps d'en remontrer aux plus grands ("Make Your Stand", plus FRONTLINE ASSEMBLY que nature, merci Rhys et à bientôt !), en toute simplicité.
Ne reste plus qu'à trouver une vieille friche industrielle, une énorme sono, un DJ joueur, et balancer la sauce. Avec KMFDM pas besoin d'extas ou de poppers, tout est dans la musique.
Feel the power!!!
Ajouté : Mardi 03 Février 2015 Chroniqueur : Mortne2001 Score : Lien en relation: KMFDM Website Hits: 5164
|