# 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
}
PIN-UP WENT DOWN (FRA) - 2 Unlimited (2008)
Label : Ascendance Records / Season of Mist
Sortie du Scud : mars 2008
Pays : France
Genre : Metal Indie Pop
Type : Album
Playtime : 13 Titres - 42 Mins
Même si Alexis Damien n’a été « que » le batteur live de CARNIVAL IN COAL, c’est un nom qui attire l’œil. Leur musique un peu décalée captait l’oreille et, même si je ne connais pas aussi bien leur discographie que je le souhaiterais, quand j’ai su qu’il allait sortir un disque sous le nom de PIN-UP WENT DOWN, il a fallu que je m’y intéresse. Et grand bien m’en a pris. Surtout qu’il s’est acoquiné avec Asphodel (PENUMBRA), une chanteuse talentueuse aux multiples facettes. Talentueuse ? Je suis mille fois en dessous de la vérité. A la première impression, on sent une inventivité terrible et une cohésion dans l’ensemble de ce disque, même si cela part bien dans tous les sens, je rassure ceux qui commençaient à douter. Quand on pense que les deux membres ne se sont rencontrés que deux fois avant l’enregistrement, il y a de quoi se poser des questions…
Donc, PIN-UP WENT DOWN, ça ressemble à quoi ? A un peu tout. Cela commence par une voix de gamine qui se poursuit par une voix lyrique à trembler (« Intrusion »). Puis, ça passe par une voix bien grasse de mâle en rut avec des chœurs féminins pop qui font triper (« Esthete Piggie »). Je crois que le groupe m’a gagné à sa cause à ce refrain… Cela peut aussi se diriger vers quelque chose de très violent qui gicle dans ta gueule (« Be My Idol Then My Fall »), morceau le plus bestial de l’album. Asphodel sait se faire d’une sensibilité à fleur de peau qui fait frissonner sur des mélodies plus apaisées, comme sur les passages au piano de « Get Ready To Sweep ». On retrouve aussi une voix qui peut faire penser à ANASTACIA sur « Yo-Yo Tes Then No » (dont la guitare m’a fait penser à ce qu’avait fait MADONNA sur un de ces albums… American Life, je crois), puis sur le même morceau Asphodel, toujours, s’amuse sur des growls et des grognements porcins. Bref, Asphodel sait tout faire, tout chanter et on déprime à l’idée de voir qu’un tel talent passe trop inaperçu.
Bon, j’ai été plus que subjugué par le talent d’Asphodel, mais il ne faut rien enlever à Alexis. En effet, le monsieur joue tous les instruments sur le disque, même si un groupe a été monté pour les concerts (normal, les hommes orchestre n’ont plus bonne presse de nos jours). On pourrait alors craindre que le niveau soit assez moyen, comme c’est souvent le cas dans ce genre de prestation. Eh bien, il n’en est rien. Alexis ne se contente pas de faire mumuse avec les instruments, il s’en sert avec beaucoup d’inventivité et de créativité. Il se permet même de nous pondre des rythmiques à la guitare qu’on ne peut que saluer (« Get Ready To Sweep »). Et la batterie, son instrument de prédilection, est vraiment d’un bon niveau. Alexis a mis ce talent de touche à touche au service d’une musique hybride, variée et qui saura autant captiver les auditeurs qu’elle saura les perdre dans des méandres subtils. En effet, ce n’est pas donné à tout le monde de passer d’un bon gros riff bien gras qui fait mal à une rythmique disco kitch dansante (« Nearly Dead Bat Make-Up »). Ce n’est pas non plus commun de savoir donner une telle cohérence à un disque qui part autant dans toutes les directions. Pourtant, à la fin de l’écoute, on ne doute pas une seule seconde qu’on ne s’est pas perdu dans une compilation plutôt louche. C’est PIN-UP WENT DOWN. C’est bon. Et on ne peut que remettre le tout pour une nouvelle tournée de sensations délirantes. Tiens, j’ai oublié de parler de l’intro de « Only Some Shitty Chemical Stuff » qui m’a fait penser à ces fondus de la cervelle de LORDS OF ACID… si, si.
Il existe un tas de très bons groupes. Mais les vraies bonnes surprises ne sont pas légions. PIN-UP WENT DOWN en est une. Ne passez pas à côté. Sinon, des baffes !
Ajouté : Vendredi 07 Mars 2008 Chroniqueur : Wong Li Score : Lien en relation: Pin-Up Went Down Website Hits: 18109
|