# 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
}
GLOE (usa) - Vestige (2015)
Label : Auto-Production
Sortie du Scud : 25 septembre 2015
Pays : Etats-Unis
Genre : Post-Everything Mathgaze
Type : Album
Playtime : 6 Titres - 32 Mins
GLOE=Mathgaze
Mathgaze=Mathrock/Shoegaze/Progressive
Vu comme ça, ça à l'air simple comme équation, puisqu'il n'y a aucune inconnue, et que le résultat est établi d'avance.
C'est franc, honnête, mais ça ne rend pas la musique plus simple à appréhender pour autant.
Si vous n'avez pas tout suivi et êtes resté cantonné à un bon vieux Heavy Metal des familles, le Shoegaze est en gros une sorte de Rock contemplatif, assez éthéré mais non dénué de puissance. Il tire son nom de l'attitude de ses créateurs sur scène, qui passaient leur temps à contempler leurs chaussures, trop timides ou introvertis pour observer la foule. Des notes qui se répandent, de longues séquences instrumentales, à la limite de la rêverie, mélodies oniriques, attitude out of time & space...
Je ne vais pas m'échiner à vous expliquer le Mathcore, et l'élément progressif n'est là que pour expliquer le cheminement entre deux genres qui n'ont à priori rien à voir l'un avec l'autre.
Un pont entre deux rives parallèles qui ne se font pas face, c'est le pari osé des américains de GLOE. Nés en 2014, ils semblent émerger de nulle part, et lancent comme ça, sans prévenir un premier EP.
EP, qui est une réussite en soi, et qui navigue en eaux troubles, mais pourtant limpides. Paradoxe incongru ? Peut être, mais c'est pourtant ce que l'on ressent lorsqu'on regarde à la surface de Vestige.
Alors une fois immergé dans le lac, prenez une bonne respiration, et bon courage.
Citant MINUS THE BEAR, CHON, CIRCA TO SURVIVE, les GLOE auraient mieux fait de se citer eux-mêmes comme influence majeure.
Rythmique évolutive et complexe qui se mord la queue, chant à la Chino des DEFTONES après une cure de Prozac et qui du coup trouve la nature magnifique, guitare planantes qui flottent à deux mètres du sol, c'est en quelque sorte une rencontre entre la scène Indie des années 90, MY BLOODY VALENTINE en tête, et le Mathcore des années 2000.
Mais attention, si la basse et la batterie semblent aller où bon leur semble, ne vous leurrez pas, elles restent bridées par les harmonies qui elles savent exactement où elles veulent aller.
La question est : est ce que tout cela vous concerne ? N'est ce pas un peu trop Gaze pour un public Metal ? Oui, et... non. Si les mélodies étirées ne font clairement pas partie de votre univers, il n'est pas interdit parfois de les rapprocher d'un registre Indie/Emo, légèrement Metalcore, et l'aspect contemplatif de l'ensemble ne doit pas vous rebuter. L'énergie est indéniablement Core, Math ou pas, et les chansons qui restent collées à des principes harmoniques directs sont portées par une rythmique qui ne ménage pas ses efforts.
Le chant, lorsqu'il se décide à exprimer autre chose que de la béatitude le confinant parfois à la poésie fainéante des Indie adorateurs de lacets, est captivant et pour le moins troublant. Tellement que j'ai au départ cru que le vocaliste en était une, ce qui n'est évidemment pas le cas, puisque nous retrouvons un certain Ian Cooper derrière le micro et accessoirement à la guitare.
Certes, ces mises au point sont bien jolies, mais comment décrire ?
Je crois que les arguments ont été validés, alors revenons au principe de l'équation. DEFTONES+VALENTINE+THE WORLD IS A BEAUTIFUL PLACE AND I'M NO LONGER AFRAID TO DIE+DILLINGER égal GLOE, à peu de choses près.
Et autant vous jeter tout de suite sur le bref et plutôt abordable "Vestigial/Ascension", qui entretient quelques rapports ténus avec la puissance dont nous sommes habituellement coutumiers, parce que le reste fait la part belle aux longues présentations mélodiques, assez alambiquées, qui risquent de vous perdre en route.
Simplement mis en page, "Visiting Corpse" par exemple vous paraîtra à des années lumière de vos préoccupations usuelles.
Sept minutes et des poussières d'un Néogaze vaporeux et éthéré, des arpèges brillants, une basse qui tourne en rond pour trouver la bonne note, et un chant qui se prend soudain d'un lyrisme cotonneux. Evidemment, le résumé va vous faire partir en courant, mais ça n'est pas si éloigné que ça d'un DEFTONES des dernières années, batterie acrobatique mis à part.
Et sur cette piste là, Brian Fell mérite amplement son nom, et semble à chaque instant à deux doigts de chuter. Breaks permanents, crash qui marque le métronome au col, puzzle caisse claire/grosse caisse qui donne mal à la tête (du genre un ciel bleu en deux cent cinquante pièces à reconstituer), l'homme se calme par intermittences, mais modérément, sans pour autant taper dans le Jazz ou les plans à l'emporte pièce qui ruinent le puzzle justement, et c'est un fait assez rare pour être souligné.
Mais je pourrais en parler des heures, ça m'a fait voyager. Loin, haut, dans la lumière ou la pénombre. Et je me dis en fin de compte qu'une transcription littérale est vaine. Même si parfois, c'est vraiment bizarre (exemple : "Vestigial/Declination", basse énorme et Jazz en spirale distordues, batterie pour une fois semblant marquer le pas, et chant plus posé et presque narquois, qui soudain hurle, sans savoir pourquoi.), c'est un truc qui s'écoute, se ressent, et peu importe si la marque CYNIC est très prononcée par moments, puisqu'elle est apposée sur un tissu fabriqué maison.
Le Mathgaze, ou comment admirer ses chaussures tout en décryptant une partition. Peut être l'ont ils imprimée sur leurs souliers. Je ne sais pas, moi je marche pieds nus.
Ajouté : Samedi 16 Avril 2016 Chroniqueur : Mortne2001 Score : Lien en relation: Gloe Website Hits: 5062
|