# 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
}
HEARTLAY (FRA) - Remedy (2015)

Label : Auto-Production
Sortie du Scud : 20 novembre 2015
Pays : France
Genre : Metal Industriel
Type : EP
Playtime : 5 Titres - 20 Mins
"Inspiré par des genres comme l'Indus, le Metal Moderne ou le Rock Alternatif, leur musique se distingue par un son lourd, émotionnel et viscéral". Voila la présentation officielle d'HEARTLAY, jeune combo parisien réuni fin 2014 autour du multi-instrumentiste Aaron Sadrin, l'âme du projet. Remedy est déjà le deuxième EP du groupe qui sort un an exactement après Injection, lui-même publié quelques mois à peine après la formation du groupe. Ce qui laisse supposer que l'ami Aaron avait déjà bien construit le projet dans son coin et qu'il a réuni un groupe autour de lui pour donner à sa musique une sonorité collective plutôt que de tout faire tout seul. Louable intention, qui permet aussi au groupe d'exister sur scène.
"I always write everything alone in my home studio. It's not that i'm obsessed to be a one man show but i feel more in harmony with myself and my visions rather than with other people to make music. I can do whatever i want with no compromise and that's great". (Aaron Sadrin - 2016). Et en effet, on peut dire que la musique de HEARTLAY est plutôt écrite, et bien écrite, comme on a bien vite fait de s'en rendre compte à l'écoute de la musique du combo. On ne laisse pas grand chose au hasard, chez HEARTLAY.
Si Injection donnait déjà une idée du potentiel du concept et du talent de son créateur, le debut EP pêchait un peu par son éclectisme. De belles promesses étaient faites, les bases du son de HEARTLAY étaient déjà réunies mais ça partait dans plusieurs directions et on avait du mal à deviner laquelle le groupe allait privilégier. Après un an d'existence, HEARTLAY semble se recentrer sur son coeur noir de Metal à haute teneur en sonorité synthétiques. Les compos de Remedy sont plus affirmées dans un genre de Metal Moderne et Industriel, une sonorité dense en couches multiples où le power trio basse, batterie guitare est souvent l'élément central, mais s'efface parfois au profit des machines. La tracklist est un crescendo, construit comme une mutation progressive d'un Metal alternatif très organique à une musique purement Electro en passant par l'étape transitoire d'une musique Indus décomplexée. On passe du très Rock "Bring You Down" à "Consequence" et "The Battle" où les sons samplés s'invitent par petites couches, on passe à "Through The Window" au son Indus marqué avant de finir en apothéose sur "Black Walls". Le power trio est totalement absent de cette piste, laissant la place à des nappes de son Electro qui se superposent, noyées dans un reverb rythmé par un beat lent et synthétique. Le chant s'invite sur le dernier mouvement, un murmure langoureux comme un songe. Si l'influence de Trent Reznor est palpable dans tout le projet du groupe, "Black Walls" est la piste de l'EP qui évoque le plus la musique de NIN. Pas un plagiat, mais plutôt un vibrant hommage.
L'ami Aaron a aussi jalonné son EP de petites surprises. Un artwork énigmatique où le logo du groupe dissimule une gravure moyenâgeuse et inquiétante, une tracklist qui fait pendant à celle d'Injection, sinon dans la musique, au moins dans les titres des chansons : "See You Under" / "Bring You Down", ou "Withe Walls" / "Black Walls"... On remarque ces petits détails qui ne sont pas des coïncidences et on se met en chasse d'autres indices. Ah ça, HEARTLAY n'est pas un projet comme les autres !
Alors bien sûr, la formation est toujours en définition de projet, et même si les cinq chansons de la galette sont plus cohérentes que sur le premier méfait, le groupe n'est pas aussi à son aise dans tous les genres. Les deux premiers morceaux de Remedy ne brillent pas par leur originalité. En fait, plus HEARTLAY s'enfonce dans le Metal Indus, plus les chansons s'enrichissent et plus le projet prend du sens. La mutation est engagée. Voyons Remedy comme un projet transitoire. Si la mue du gang se poursuit comme la progression de la tracklist semble l'indiquer, voila un groupe émergeant de Metal Indus à suivre de très près.
Ajouté : Jeudi 03 Mars 2016 Chroniqueur : Rivax Score :     Lien en relation: Heartley Website Hits: 7432
|