# 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
}
DISINTEREST (usa) - Repair (2015)
Label : Never Back Down Records
Sortie du Scud : Mai 2015
Pays : Etats-Unis
Genre : Raw Punk Hardcore
Type : EP
Playtime : 7 Titres - 13 Mins
Hier après midi, j'étais en Pennsylvanie, et j'y retourne ce matin, c'est vous dire s'il se passe des choses là bas... Cet état serait-il en train de devenir la mère patrie du Hardcore/Fastcore moderne ? Une nouvelle scène de Boston, de Los Angeles ? La question reste en suspens, toujours est il que les groupes qu'on y trouve sont nombreux, de qualité, et bien décidés à se faire entendre.
Le style est cette fois-ci un poil différent. Parlons un peu du groupe en lui même, bien qu'il n'y ai pas grand chose à en dire.
DISINTEREST a vu le jour en 2014, à Philadelphie (oui, celle dont les rues ont été chantées mollement par le Boss...), et ils n'ont pas chômé depuis leur assemblage. Une démo, un split avec SKIN GRAFT, et aujourd'hui, enfin presque, ce 7'' qui s'avère dans la continuité de leur travail, et surtout, sacrément prometteur.
Si vous aimez CULT RITUAL, RAW NERVE, ou PUNCH, vous avez des chances d'être séduit par ce single qui contient des éléments qu'on retrouve chez ces trois groupes. Mais la force de DISINTEREST, qui est plus que patente sur Repair, c'est cette volonté de mélanger des courants Hardcore, Punk, à une structure générale assez Noisy, sans tomber dans les excès de leurs aînés. On trouve de tout au long de ces sept morceaux travaillés, et qui pourtant font preuve d'une rage instinctive, ce qui créé une dualité fort créative.
Alors, ce single longue durée présente une cohérence indéniable. Et s'il commence sous des auspices clairement Punk, avec une guitare aigrelette et une basse sèche et tendue ("Vision", qui part quand même assez vite vers des horizons Hardcore), la multiplicité des genres cède vite le pas à l'envie d'en créer un "nouveau", et on se retrouve piégé dans un torrent d'idées qui doivent autant payer leur tribut au Punk donc, qu'au Hardcore bien sur, mais aussi au Noisy Rock, ou même au Grind.
Les morceaux, à de rares exceptions près, sont courts, bien évidemment. Mais même au sein de cette configuration restreinte, le groupe nous balade au gré de ses humeurs, et tombe parfois même dans une haine si viscérale qu'elle en devient indéfinissable ("Reasons" qui pioche à droite et à gauche, qui cavale avant de s'adonner à un break Post Punk terriblement Heavy et dissonant). Les arrangements sont parfois assourdissants ("Rationalities" qui valse près d'une falaise Indus, en empilant des strates de guitare assourdissantes), et même les morceaux qui paraissent un peu plus francs du collier ne peuvent pas rester figés ("Impersonal" faussement linéaire qui fait montre de subtilités appréciables).
Mais il arrive aussi que DISINTEREST lâche prise avec le concret, et verse dans le bruit blanc, mat, expérimental et assommant, comme le démontrent les itérations de l'hypnotique "Stethoscope", construit sur une répétition de percussions minimalistes qui ne dévient jamais, des boucles discrètes mais circonvolutives, et un spoken word hurlé. Atypique, il se poursuit sur un intermède purement Speedcore avant de s'achever sur une longue litanie lourde et oppressante, amorcée par un feedback discret. "Repair", le morceau éponyme, semble faire cas de tous les arguments présentés en amont pour en proposer une synthèse, et se veut volontiers Hardcore, Noisy, Punk, en gros, versatile et pourtant complètement compact et cohérent. La voix se fait plus rauque, plus arrachée, les guitares encore plus stridentes, et la rythmique versatile au possible sans pour autant brouiller les pistes ou partir à vau l'eau. Impeccable.
Avec ce second 7'', prouve au même titre que les NERVOUS HABIT que la scène PA est décidemment très active, et permet à des groupes d'horizons divers de s'exprimer pleinement, tout en proposant leur propre interprétation de courants déjà existant.
Tout ça donne clairement envie d'en savoir plus sur ce coin d'Amérique qui ne nous avait pas habitué à tant de créativité.
Ajouté : Lundi 20 Avril 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Disinterest Website Hits: 5450
|