# 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
}
AGE FACTORY (jp) - Nohara (2015)

Label : Space Shower Music
Sortie du Scud : 16 septembre 2015
Pays : Japon
Genre : Experimental Mathcore mélodique
Type : EP
Playtime : 5 Titres - 21 Mins
Par un beau matin de quasi automne, on ressent le besoin de se réchauffer à la lumière du soleil bien sur, mais aussi à celui d'une musique capable d'inonder le coeur de lumière. C'est ce que j'ai fait ce matin en me rapprochant d'un EP sorti un peu plus tôt ce mois-ci, qui de ses qualités intrinsèques et son originalité a illuminé mon dimanche.
Peu de choses à savoir sur AGE FACTORY. Rencontrés sur VK, je ne savais rien d'eux, et je ne sais toujours pas grand chose. C'est un trio, ils ont déjà sorti un EP deux ans plus tôt, mais sinon, peu d'informations, et peu de followers Facebook.
Et vous savez quoi ? C'est dommage, vraiment dommage. Car leur musique est d'une richesse folle, et aiguille sur de nombreuses fausses pistes avant de révéler sa vraie nature, plus complexe qu'elle n'en a l'air.
Trois jeunes relativement doués musicalement, qui en a peine cinq morceaux prouvent leur valeur (quatre même si l'on exclue l'intro), et laissent augurer d'un avenir brillant sur un plus long format. C'est d'ailleurs ce qu'on regrette à l'écoute de Nohara, qui avec ses vingt minutes est décidemment trop court. Alors que le voyage prend une tournure magique et devient de plus en plus enchanteur, tout s'arrête, et on se voit obligé de repartir au début pour retrouver les émotions ressenties.
Il faut dire que le trio a dessiné les contours d'un parcours complètement atypique et multi dimensionnel qui décrit un univers très personnel et reconnaissons le, unique.
Il est assez rare de tomber sur un album qui vous emmène dans une direction pour vous attirer à l'opposé sans réelle transition, avec une démarche instrumentale paraissant la plus naturelle du monde.
Tout commence avec "Ginger", qui en moins de deux minutes nous laisse à penser que nous avons encore affaire à un labyrinthe d'idées Mathcore. Guitares tranchantes et précises, rythmique libre, chant distordu, et changements de plans rapides, tout est là pour souligner l'évidence.
"Nohara" ne change en rien l'impression, et les idées se télescopent, la tension est palpable, le chant scande, puis hurle, et le volume sonore est conséquent. Même si le déroulé est plus volontiers stable et presque Punk, faisant même penser à un groupe de Metalcore nippon, on sent que le propos évolue et ne consent pas à une forme de stabilité rassurante.
Puis tout à coup, "さらば街よ" rend la vision floue et balaie les pièces du puzzle pour les arranger de manière tout à fait différente. Mélodie prononcée, guitares douces, chant apaisé, comme si le J-Rock rencontrait la scène alternative US des années 90, pour accoucher d'un tube presque Pop Punk aux harmonies délicates et enchanteresses. Efficacité, concision, mais surtout virage à 90 degrés, et à ce moment là, tout devient possible et on ne sait plus à quoi s'attendre.
Ce changement de cap est confirmé d'une bien belle façon par le très efficace "Autumn Beach" qui de ses harmonies de fin d'été confirme l'impression dégagée par le morceau précédent, enfonçant même un peu plus le clou, en citant U2, ou toute la vague Post Rock Us des années 2000, pour imposer un refrain grandement mémorisable, signature d'un Pop Rock aux doux accents alternatifs, à la lisière du Metal dont le EP s'éloigne de plus en plus.
Et lorsque "海を見たいと思う" déroule ses premières notes, il n'en est absolument plus question, AGE FACTORY s'engouffrant de plus en plus dans une introspection mélodique de plus en plus poussée. Les guitares agressives du début d'album sont oubliées, enterrées, et presque quasiment absentes, à la manière d'un Johnny Marr qui distillerait quelques arpèges, tandis que la basse reprend enfin sa liberté. La batterie se veut plus support que moteur, et les leaders deviennent la voix et la basse, jusqu'à ce qu'un break inopiné mais maîtrisé ne vienne interrompre le cours de choses. On retrouve les accalmies harmoniques et rythmiques de titres précédents, qui sont ici portés à leur paroxysme, avant que le morceau ne retrouve un regain d'énergie juste avant son terme, qui s'échoue dans les vagues qui anticipent un silence qui tombe abruptement...
Encore une fois, la musique prouve qu'elle peut nous emmener très loin, lorsqu'elle est jouée par des musiciens sincères qui se laissent guider par leurs émotions, et non par un désir d'efficacité à tout prix. En évitant l'écueil du classement trop évident, et en brouillant les pistes avec un talent incroyable, AGE FACTORY prouve avec Nohara qu'on peut dérouter, charmer, séduire tout en refusant les conventions, en s'appuyant sur une progression pas forcément logique, mais qui à du sens, émotionnellement parlant. Débutant son EP comme un énième délire chaotique et abrupt, puis le guidant vers des rivages clairs et isolés, le trio trompe admirablement son monde et construit le sien, à grands coups de mélodies et de développements zen, évoquant autant le Post Rock alternatif des mid 90's que CYNIC, TENGIL, et autres chantres de la liberté de création.
C'est un EP qui aurait mérité d'être prolongé sur la durée, et je dois dire que j'attends avec impatience le jour ou AGE FACTORY nous racontera une histoire un peu plus longue, pour peu que leurs aspirations soient toujours aussi libres et créatives.
J'ai eu raison finalement, d'affronter le froid matinal auprès de vous messieurs. Je m'en retrouve réchauffé et plus détendu, près à affronter la journée le sourire aux lèvres. Et je vous dis à bientôt, à très bientôt j'espère.
Ajouté : Vendredi 19 Février 2016 Chroniqueur : Mortne2001 Score :      Lien en relation: Age Factory Website Hits: 7152
|