# 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
}
BLUES PILLS (FRA-se-usa) - Blues Pills Live (2015)

Label : Nuclear Blast Records
Sortie du Scud : mars 2015
Pays : France / Suède / Etats-Unis
Genre : Rock Psychédélique
Type : Album
Playtime : 10 Titres - 58 Mins
Blues Pills Live restitue le set du groupe au Freak Valley Festival en mai 2014. Il reprend, à deux morceaux près, la setlist de l'album studio sorti il y a moins d'un an. L'opus n'est pas disponible en streaming, il n'est pas non plus vendu en format digital. Le seul moyen de se le procurer, c'est d'acheter le CD ou le vinyle. Et le label insiste bien sur le fait qu'il n'y a eu qu'un seul pressage et qu'une fois tous les exemplaires vendus, il n'y en aura pas d'autres.
Blues Pills Live se présente dans un coffret au format livre de poche cartonné est revêtu à l'extérieur d'un artwork original psychédélique et coloré. L'intérieur est habillé de photos prises pendant le set et maquillées d'un ton sépia enfumé. Un emballage psychédélique revival années 70 un peu excessif et artificiel, à l'image du groupe.
Si vous êtes membre du fan club du gang ou si vous n'avez jamais écouté le groupe, pour peu que vous aimiez le genre, il y a fort à parier que vous apprécierez. Mais si vous êtes entre ces deux extrêmes, vous risquez de trouver qu'il ressemble surtout à une belle opération marketing. Un disque collector en édition limitée, çà a du sens pour une formation un peu blanchie sous les harnais, mais avec un combo si récent, c'est un peu excessif.
La galette restitue l'intégralité du set, soit 57 minutes pour 10 chansons. C'est 15 minutes de plus que Blues Pills pour le même nombre de titres ! La différence de durée est à porter au crédit exclusif du lead guitar (Dorian Sorriaux) qui enrichit la plupart des chansons d'un solo certes, merveilleusement bien exécuté, mais assez répétitif et en définitif un peu lassant. Car la performance du groupe ne consiste bien souvent qu'à annoncer ou soutenir ces fameux soli. Et quand la guitare devrait se faire discrète pour porter le chant d'Elyn Larsen, comme sur "Dig In", Dorian ne peut pas s'empêcher de balancer quelques petites trilles dissonantes.
C'est à se demander si la formation ne devrait pas se rebaptiser DORIAN ET SES BLUES PILLS !
Attention, n'allez pas croire que c'est mal joué. Si le groupe laisse tant de place à son guitariste, c'est bien parce qu'il a du talent. Ses échappées solitaires sont inspirées. Le jeune breton arrache à sa Les Paul des mélodies psychédéliques, des accélérations furieuses, des ralentissements salutaires, des breaks de fou, des disto et du jeu de pédale envoûtants. Mais à chaque fois que la six cordes démarre son ballet, on sait qu'on part pour une longue démonstration. On en oublierait presque les autres atouts de BLUES PILLS. Sa section rythmique groovy, et le chant rauque et rentre dedans de la frontwoman Elin Larsson. La setlist est composée de chansons justes et entraînantes qu'on prend plaisir à découvrir dans un arrangement différent de la version studio.
Alors non, la rondelle n'est pas mauvaise. Si vous aimez les solo de guitare, vous serez aux anges. Si vous avez aimé Blues Pills, vous serez également conquis. Le problème n'est pas dans le fond, il est dans le calendrier. Qu'un groupe qui tourne 300 soirs par an et remplit les salles de concert sorte un live est après tout très légitime et répond à une attente du public. Mais si peu de temps après l'album studio, c'est beaucoup trop tôt.
Cette tendance à surexploiter le filon en rééditant toujours le même contenu sous des formes différentes révèle une certaine vacuité, un manque inquiétant de créativité. Le groupe est-il capable de prendre du recul avec le succès fracassant de ses débuts ? Pourra-t-il sortir un deuxième album au moins aussi bon que le premier ? Ou bien se contentera-t-il à nouveau de décliner sur de l'existant, en sortant un album de remix ? Un tribute ? On espère de tout coeur que non. Car on aimerait continuer à voyager avec les BLUES PILLS !
Ajouté : Lundi 11 Mai 2015 Chroniqueur : Rivax Score :    Lien en relation: Blues Pills Website Hits: 7114
|