# 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
}
FLOWN (FRA) - Gravity (2011)
Label : Artfly Records
Sortie du Scud : novembre 2011
Pays : France
Genre : Rock Metal Alternatif
Type : Album
Playtime : 11 Titres - 49 Mins
Jeune groupe formé il y a maintenant quatre ans, FLOWN nous propose ici après son effort initial Child In A Box, un second album plutôt sympathique mais inégal, Gravity.
Se réclamant d’une certaine tradition purement 90’s, le quatuor se pose en héritier de ténors tels que les DEFTONES, ALTER BRIDGE, SOUNDGARDEN, ALICE IN CHAINS, et surtout, CREED. C’est d’ailleurs cette dernière filiation qui parait la plus pertinente, tant le mélange de Rock Alternatif et de mélodies tendues présent sur cet album rappelle en bien des occasions la bande à Scott Alan Stapp.
Avec une production très propre ou prédomine une basse très ronflante et qui caresse dans le sens du poil, FLOWN a mis tous les atouts de côté pour nous séduire, et l’opération marche à plusieurs reprises, si ce n’est systématiquement.
Car je ferai le même genre de reproche à nos locaux que j’ai pu faire à CREED et consorts à l’époque, à savoir de se reposer sur des riffs plutôt communs pour les titres les plus énergiques. En effet, même si ces morceaux ne sont pas exempts d’une certaine efficacité, la routine pointe souvent le bout de son nez.
Souvent mid tempo, ces titres semblent après plusieurs écoutes assez uniformes, même si certains riffs syncopés restent accrocheurs (« Phone Game », « My Own TV », « Rescue Me », le plus DEFTONES du lot), la faute à un chant trop monocorde, et à une rythmique trop linéaire et répétitive (le déjà cité « Rescue Me » se permet même un emprunt direct au « Spoonman » de SOUNDGARDEN).
Et comme souvent avec les groupes de cette engeance, c’est dans les titres les plus calmes qu’il faut aller chercher sa dose de plaisir, et FLOWN ne déroge pas à cette règle.
En effet, dès le quatrième morceau, « Circle », on s’aperçoit que le quatuor est bien plus à l’aise dans les ambiances plus feutrées.
Mélodies couleur sépia, atmosphère confinée et cotonneuse, c’est dans ces moments là que la voix un peu râpeuse et hésitante de Flo prend toute son ampleur. La guitare se fait plus douce et mélancolique, et FLOWN arrive enfin à nous embarquer à bord de son voyage. Même constat pour l’alternance Heavy/Acoustique de « Flash Forward », aussitôt suivi du court intermède instrumental « Antigravity », durant lequel de sobres arpèges s’entremêlent avec des samples savamment utilisés pour créer un univers particulier et assez éthéré. Et lorsque le clavier prend le relais sur « As We Are », l’émotion est toujours palpable, et l’on adhère alors à ce concept d’auto cloisonnement auquel le groupe tient. Gravity est en effet basé sur l’incapacité des êtres à s’échapper de la gravitation qui les maintient plombés à une vie qu’ils ne désirent plus.
Et saluons comme il se doit le dernier morceau de l’album, le très beau « Breathe », qui s’écoule le long de notes dispensées avec tendresse, instaurant une fois de plus un climat très contrasté, qu’on se plaît à imaginer planté d’arbres aux feuilles jaunies, et peuplé d’hommes attendant désespérément le soleil après la pluie. Son final plus costaud est pour une fois le bienvenu, et prouve que le combo sait, quand il le souhaite, faire preuve d’une peu plus d’inventivité que sur les autres passages corsés.
Tout n’est donc pas parfait sur ce second album. Il faudra à FLOWN être un peu moins timoré et « classique » oserais je dire sur leurs tentatives les plus énergiques, et sortir des sentiers déjà abondamment arpentés par les influences sont ils se revendiquent pour pouvoir espérer se démarquer. Par contre, il conviendra de garder cette touche spéciale sur les titres les plus intimistes qui sont à mon humble avis leur force. Patience et longueur de temps faisant plus que force et rage, je suis sur que le message passera, et que le troisième album nous laissera entrevoir des lendemains plus emprunts d’inédit.
Ajouté : Mercredi 18 Juillet 2012 Chroniqueur : Mortne2001 Score : Lien en relation: Flown Website Hits: 7244
|