# 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
}
APPOLLONIA (FRA) - Dull Parade (2014)
Label : Appollonian Industries
Sortie du Scud : 20 octobre 2014
Pays : France
Genre : Metal / Rock indé
Type : Album
Playtime : 7 Titres - 43 Mins
608. C'est le nombre de "likes" patiemment récoltés par APPOLLONIA sur Facebook au moment où j'écris ces lignes, soit 2400 fois moins que CHRISTOPHE MAE, 10 000 fois moins que SEPT FIONS D'ASSAUT, 100 000 fois moins que LADY CACA. Alors les gens, faites-moi plaisir : dans un monde où talent et célébrité sont devenus étrangers l'un pour l'autre, où musique et laxatifs se confondent, prouvez-moi que les réseaux sociaux peuvent servir à quelque chose, sortez-vous les pouces !
4. C'est le nombre d'albums à l'actif de ce trio bordelais encore largement et injustement méconnu. D'un substrat Post-Core tendance Sludge, a progressivement germé au fil des opus une bien belle plante, mariant à la perfection la puissance sonore d'un STONE SOUR, le psychédélisme d'un MASTODON, la géniale simplicité d'un QUEENS OF THE STONE AGE et la sensibilité mélodique d'un DEFTONES. Ce Dull Parade, moins braillard, plus concis et encore plus efficace est donc l'aboutissement d'une maturation totalement maîtrisée, la dernière borne sur le chemin de la perfection.
10. C'est le nombre de perles que recèle ce nouveau trésor, impeccable de sa première extrémité bien Metal et in-your-face, à la dernière, franchement Rock-indé. La transition de l'une à l'autre, savamment amenée, ne devrait pas choquer les fans de la première heure, tant le groupe a toujours cultivé l'éclectisme. Au demeurant, on ne peut que constater ce net adoucissement, déjà perceptible sur le remarquable Crimson Skies et encore accentué ici. Les structures se sont quelque peu simplifiées, délaissant toute tentation progressive ; le chant clair devient omniprésent et les mélodies plus franches. On ne s'en plaindra pas. L'efficacité s'en trouve renforcée, avec des morceaux taillés pour envoyer un maximum de bois : "On A Bed Of Sulfur" construit sur un énorme riff peu original mais diablement efficace provoque un headbanging immédiat alors que "Ammunitions Please", qui contient les couplets les plus rapides enregistrés par le trio à ce jour, se chargera d'assurer un pogo monstre en concert. Mais c'est avec le doublé gagnant "Everest" / "Elisaberri" que le génie d'APPOLLONIA explose au grand jour. Le premier invoque les forces divines d'un mariage rêvé entre MASTODON, PEARL JAM, TOOL et les SMASHING PUMPKINS et vous balance le tout sous la forme d'un mur sonore qui ferait passer RAMMSTEIN pour de la musique de chambre. C'est alors qu'intervient "Elisaberri", magnifique power-ballad au refrain merveilleusement ciselé, pour vous achever au sol. Rarement puissance et mélodie n'auront été aussi intimement et indissociablement liées.
Ecouter APPOLLONIA, c'est un peu vivre une belle histoire d'amour avec un rouleau compresseur de 30 tonnes. Et contre toute attente, ça fait un bien fou ! Bien sûr, le mixage surpuissant de Franck Hueso, déjà aux manettes sur Crimson Shades n'y est pas étranger. Toujours à a limite de la saturation, allant chercher bien profond dans les basses fréquences, il fait la part belle à une batterie qui cogne toujours là où ça fait mal, sans négliger les autres instruments. C'est tout bonnement jouissif mais pas caricatural pour autant. Cependant, c'est surtout le chanteur-guitariste Vincent Méry qui donne à cet album toute sa saveur. Lachant désormais totalement la bride à ses penchants mélodiques, quelque peu réfrénés sur le précédent, il nous gratifie de refrains à vous faire dresser les poils, chantés dans un anglais parfait et avec un timbre très personnel où l'émotion s'accompagne toujours d'une pointe de cynisme. Ses incursions dans le Rock indé en fin d'album parleront peut-être moins au public Metal mais pour quelqu'un comme votre serviteur, qui a tâté du PLACEBO avant de se convertir à FEAR FACTORY, elles ont la saveur d'une franche réussite et témoignent d'une réelle capacité à élargir son public. Le duo avec la chanteuse de LE A, autre talent bordelais à découvrir, est un régal.
3. C'est le nombre d'exemplaires de Dull Parade que j'ai commandés au Père Noël pour faire plaisir aux plus mélomanes de mes proches. En le réécoutant pour écrire cette chronique, je me dis que ce n'était sans doute pas assez.
Ajouté : Lundi 02 Février 2015 Chroniqueur : Cyco_Nico Score : Lien en relation: Appollonia Website Hits: 6364
|