# 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
}
DAN DEAGH WEALCAN (ru/ua) - Two Straight Horizontal Lines And The Organized Chaos In Between: Director's Cut (2015)
Label : Metal Scrap Records
Sortie du Scud : 5 février 2015
Pays : Russie / Ukraine
Genre : Mathcore Experimental Metal
Type : Album
Playtime : 12 Titres - 38 Mins
Dans un désir constant d'explorer le monde, je me retrouve ce soir en Russie et en Ukraine. Hasard du destin, ironie de l'histoire, puisque l'album dont je vais vous parler est né de la fusion de deux âmes contraires, nées de deux pays en plein conflit. Qu'il en soit ainsi, cela ne fait que prouver que la musique ne tolère aucune frontière, et que l'art en général n'a que faire des conflits d'intérêt.
Moscou, Zaporizhzhya. Ce sont de ces deux villes que nous viennent Mikhail A. Repp et Eugene "Iowa" Zoidze-Mishchenko. L'un s'amuse à empiler des strates de sons, l'autre à poser ses voix dessus. Ils se sont rencontré en 2012, et n'ont eu de cesse depuis de peaufiner leur musique pour qu'elle remplisse des critères bien définis. Qu'elle soit inattendue, expressive, illimitée dans la création, tout sauf répétitive, et qu'elle expérimente constamment. Certes, le titre de ce premier album est plutôt étrange et à rallonge, mais est ce pour autant que le duo a atteint son but ?
Oui et non. Certes, leurs chansons ont un doux parfum étrange, mais déjà capté sur vinyle, Cd et autres formats par d'illustres artistes (Patton bien sur, DILLINGER, CONVERGE, et la liste serait trop longue). Ok, leurs arrangements sont "exotiques" et provoquent parfois des sursauts, leur créativité est indéniable, puisqu'en sus de leur caractère frondeur, leurs compositions tiennent debout, mais tout ceci n'est pas vraiment aussi novateur qu'ils l'auraient souhaité, et n'en déplaise à ces deux messieurs, les répétitions qu'ils voulaient tant éviter sont quand même bien là. Si l'on reste dans ce style décalé et iconoclaste, les français de 6h33 et la clique des CARNIVAL IN COAL ont déjà fait bien plus dans le genre, plus osé, plus dansant, plus bruyant, plus imbriqué et improbable. Mais ne jetons pas la pierre à Mikhail et Eugene, car leur album recèle quand même pas mal de bons moments.
Le principal reproche que je formulerai envers Two Straight Horizontal Lines And The Organized Chaos In Between: Director's Cut est son paradoxe. Car les DAN DEAGH WEALCAN, à force de vouloir être trop cohérent dans leur démarche originale, ont fini par signer un album trop répétitif. Les pistes défilent, jonglent, tiennent en équilibre, mais finissent par former un ensemble duquel il est presque impossible d'extraire telle ou telle piste. Certes, l'écoute n'est pas désagréable, mais les rythmiques trop similaires, les astuces d'arrangements trop systématiques, les vocaux trop monocordes, et finalement... On s'ennuie un peu.
Niveau son, la production voulue Lo-fi l'est vraiment. Le CD manque cruellement de puissance, et lorsqu'on jour une musique pareille, ça ne pardonne pas. Et puis soyons franc, et sans méchanceté aucune, n'est pas Mike Patton ou Ben Weinman qui veut. Là ou les deux flingués atteignaient des sommets sur le monstrueux Irony Is A Dead Scenes, DAN DEAGH WEALCAN peine à décoller, et sans doute parce qu'ils sont encore un peu timorés. Lorsque Mike et Ben envoient la sauce, ils plongent les deux pieds dans la mouise bruitiste et irrespectueuse, balancent des breaks hallucinant et presque schizophrènes, n'hésitent pas à se vautrer dans le Jazz avant de foncer tête baissée dans un mur Core, alors que Mikhail et Eugene tergiversent, restent le cul entre deux chaises, et peinent à convaincre.
Non Two Straight Horizontal Lines And The Organized Chaos In Between: Director's Cut n'est pas un mauvais disque, et parfois, c'est même franchement bon, bizarrement sur le morceau le plus long du lot. Car "Mediterranean Sky" une fois n'est pas coutume n'hésite pas, et se pare de Pop, d'électronique, d'alternatif, de Metal en fusion, et parvient à remporter l'adhésion, sans hésitation. Arrangements finauds, chant qui module, tronçonnage du thème qui ne se perd pourtant pas en route, tout est là, et prouve que les deux musiciens sont capables du meilleur lorsqu'ils le veulent vraiment. Malheureusement, ce morceau surnage dans un océan de redite, et même "Pointlessness" (le suivant direct), qui atteint presque les cinq minutes, retombe dans les travers du reste, et aligne les mêmes plans.
Rythmique cassées et élastiques, succession de segments planants et d'autres explosifs, mais las, la sauce ne prend pas, car l'ensemble n'est pas assez solide.
Les deux acolytes sont en train de travailler leur second longue durée. Espérons qu'ils aient entre temps été contaminés par le sens de l'aventure et de la "vraie" expérimentation, car il ne suffit malheureusement pas de privilégier l'originalité pour être original. Il faut la ressentir, pour pouvoir l'exprimer, et pour le moment, on a plutôt le sentiment qu'ils tentent de retranscrire en musique une sensation qu'ils n'ont pas encore éprouvée. Il n'en reste pas moins que ce premier effort présente un groupe en gestation, qui une fois les premières hésitations bravées pourra en dire plus. Bon courage en tout cas, et il fallait bien tenter quelque chose...
Ajouté : Jeudi 16 Avril 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Dan Deagh Wealcan Website Hits: 5020
|