# 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
}
DUST IN MIND (FRA) - Never Look Back (2015)

Label : Dark Tunes Music Group
Sortie du Scud : 17 septembre 2015
Pays : France
Genre : Cyber Indus Core
Type : Album
Playtime : 11 Titres - 43 Mins
Strasbourg, la ville qui bouge. En plus d'attirer de plus en plus d'étudiants, et de tourisme grâce à ses traditions et à son architecture splendide, elle est aussi en passe de devenir un véritable creuset d'influences tant les groupes du cru font preuve d'une belle créativité.
Un exemple ? J'en ai un sous les oreilles.
Pour fouiller un peu plus niveau info, sachez que :
- DUST IN MIND est né en 2013
- Ils ont déjà sorti un EP cette même année
- Ils ont stabilisé leur line up autour de Jen (chant), Dam (chant, guitares), Arnaud (batterie), Jack (guitare) et Matt (basse)
- Ils se lancent en 2015 dans l'exercice périlleux mais au combien exutoire du premier album, dont je vais vous parler aujourd'hui.
Signé sur le label spécialisé dans le Gothique/Indus/Cyber Dark Tunes Music Group, le quintette propose donc ses vues sur ce même univers d'une façon très personnelle, évoquant tour à tour plusieurs scènes aussi extrêmes que disparates, et pourtant, même si leur album ne manque pas de défauts, je ne peux m'empêcher de lui trouver un charme indéniable.
Ce charme ne doit rien à la plastique de la jolie Jen, mais bien à cette façon foutraque d'assembler des parties à priori pas forcément complémentaires, à cette naïveté teintée d'une brutalité outrancière, et surtout à cette valse hésitation à rester/sortir des sentiers battus.
En parlant de défauts, abordons la production de l'album. Je ne sais pas si c'est du au mastering ou à l'enregistrement, mais elle est tellement saturée qu'il est parfois impossible de savoir qui joue quoi. Sur les morceaux plus "abordables" le problème est moindre, mais sur les envolées les plus violentes, ça casse un peu les oreilles. Ceci étant dit, j'ai entendu bien pire, et de groupes plus reconnus.
Musicalement, l'affaire est étrange. Selon les titres, on a envie de ranger les DUST IN MIND au rayon Cyber Induscore, sur d'autres ils semblent plutôt Gothiques et Néocore, tandis que certains flottent entre plusieurs eaux. Est-ce du à une réelle volonté du groupe de s'affranchir d'une étiquette unique et restrictive ? C'est possible, mais même si ça paraît péjoratif, c'est assez surprenant et plaisant. Ce louvoiement rend l'écoute plus intéressante, ne sachant jamais à quelle sauce on va être mangé, et j'aime assez.
Parfois par contre, on perd un peu leur trace. Ce qui passe la plupart du temps pour un bouillonnement créatif libre semble de temps à autre s'égarer dans une multiplication de plans qui ne s'imbriquent pas forcément.
Mais cela est peut être du à ce son si massif qu'il en devient trop compact, alors attendons d'en savoir plus sur scène.
Abordons les points plus précisément, en notant tout d'abord que les voix de Jen et Dam s'accordent à merveille, même si cette dernière à tendance à rester dans la même tonalité quelle que soit la mélodie. J'avoue une nette préférence pour les interventions masculines, à la gravité graineuse très Death, et aux growls très efficaces. Ainsi, le terriblement précis "Real Nightmare" laisse sur ses couplets au millimètre toute liberté à Dam, qui du coup déséquilibre les refrains pris en charge par Jen, aux mélodies trop convenues et classiques. Ce morceau est d'ailleurs agrémenté d'un break sympathique, quoique beaucoup trop court sur lequel la basse peut enfin s'exprimer.
Niveau rythmique, pas grand chose à reprocher à Arnaud et Matt qui font ce qu'ils peuvent pour tirer les morceaux vers le haut, et qui font parfois preuve d'une belle audace, notamment dans l'emploi des cymbales.
Hormis l'attaque franche de "How Can You", très Néo Death, et qui cavale à bonne vitesse, le reste du LP est assez homogène. Alternance de gros son aux riffs touffus et coupés au scalpel, typique du Deathcore, et mis à part ce morceau qui a de faux airs de tube qui pourrait s'imposer (à la couleur légèrement décalée/violente à la STOLEN BABIES), je ne vois que "Frozen Smiles" et son atmosphère très RAMMSTEIN/OOMPH!/CREMATORY saturée au Metalcore pour rivaliser en efficacité. Tempo martial martelé avec puissance, refrain assez catchy, voix qui se marient à merveille, tous les ingrédients sont réunis pour expulser des riffs porteurs mémorisables qui s'incrustent. La recette se retrouve employée sur "Toxic", à un degré moindre, mais l'alchimie tourne encore à un bon régime.
Notons aussi un bon final assez envoûtant et progressif, "My Departure", qui calme un peu les ardeurs et ressemble au RAMMSTEIN le plus pesant, sans toutefois tomber dans la même grandiloquence.
Le reste est loin d'être désagréable, mais bon nombre de pistes sont gâchés par ce son "fourre tout" qui occulte les possibles finesses de composition, et fait la part trop belle à des arrangements synthétiques qui voilent le son global.
Laissons aussi pour la bonne bouche "The Slave Of Man" et ses bourrasques soudaines, très sauvage, mais une fois de plus gangrené par un refrain trop prévisible aux harmonies téléphonées.
A la lecture de ma chronique, vous comprendrez que le bilan reste mitigé. Beaucoup de bonnes idées étalées, mais d'autres moins inspirées et un peu trop systématiques, et surtout, une production qui s'est voulue un peu trop larger than life et qui étouffe des morceaux qui airaient exigé un peu plus d'air pour respirer. Gageons que le groupe corrigera ces défauts à l'occasion de son second LP, et attendons de les voir live pour juger de la portée réelle de Never Look Back.
Mais il vaut mieux tenter et échouer en partie que de rester entre les balises. Ce qui n'est que mon humble avis, bien sur.
Ajouté : Vendredi 19 Février 2016 Chroniqueur : Mortne2001 Score :     Lien en relation: Dust In Mind Website Hits: 6872
|