# 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
}
RIPMENTALITY (ru) - Nervous Selfdestruction (2015)
Label : Auto-Production
Sortie du Scud : 2015
Pays : Russie
Genre : Grind
Type : Demo
Playtime : 10 Titres - 15 Mins
De mieux en mieux, j'arrive maintenant à chroniquer des groupes qui n'ont même pas de site... Nib, no Bandcamp, pas de page Facebook, juste des entrées sur Last.fm et Vk. La misère. Je sais bien qu'en Russie, ça chie un peu et que le climat économique n'est pas terrible, mais quand même les gars, un effort...
Alors par extension, je ne sais que dalle. A part que RIPMENTALITY vient de Russie, et qu'ils ont sorti cette année une démo, pas la peine de me demander grand chose.
En même temps, vu la démo en question, ça n'est peut être pas si mal que je ne sache rien, ça ajoute un petit parfum de mystère...
Ce que je sais en revanche, c'est que nos camarades Russes font énormément de boucan. Je vous avouais tout de go il n'y a pas longtemps que j'en avais marre du Porno Grind, du Gore Grind, du Techno Grind et de tout le tintouin rigolo mais un peu lassant, je confirme donc ce soir cet avis, et j'ai été fort ravi de tomber sur la démo de nos amis.
Ici, c'est du brut de chez brut. Enregistré dans la cave d'oncle Igor, avec un quatre pistes prêté par des amis ou volé dans un squat Grind, pas mixé, pris live, pas produit, faut pas déconner, et livré tel quel. Un minimum de dix morceaux pour un quart d'heure, un son abominable et aigrelet, des dissonances et des larsens, et là, vous commencez à vous demander la raison de cette chronique...
Justement, c'est à cause de tout ça. Parce que cette démo retrouve les sensations éprouvées lors du boom Grind des années 80, parce qu'elle est hyper bordélique, parce que tout est analogique dessus, parce que les voix sont absolument infectes dont parfaites (comme d'hab, les growls règlementaires, et les égorgements porcins qui vrillent les tympans, mais vraiment pour le coup), parce que le batteur a du mal à tenir le rythme mais qu'il en met partout quand même, et qu'il me rappelle les débuts de Mick Harris/Dave Grave, que ses cymbales sont tellement aigues que même Céline Dion veut prendre sa retraite de Vegas, parce que les accélérations sont super mal gérées, et parce qu'il est impossible de retenir un titre en particulier...
Ca vous va comme démonstration ?
Plus sérieusement, RIPMENTALITY, c'est du Grind à l'ancienne, avec les moyens du bord, une pratique musicale qui suffit juste à aligner trois riffs (qu'on discerne à peine d'ailleurs), une "production" infecte qui colle la batterie loin en avant, qui sature le chant, et qui dans les passages en blasts abandonne tout le monde en route. En gros, tout ce qui a fait l'essence de ce style il y a plus de vingt ans, et qu'on a un peu perdu aujourd'hui. Alors, parfois, c'est vrai que ça déconne grave. Ce passage lourd et glauque sur "Annihilation By The Power", c'est tellement foiré mais sincère que j'ai craqué. "Inhuman" et ses trois secondes bramées comme un cerf en rut, ça m'a ramené au bon souvenir de "Dead" ou "You Suffer". L'intro binaire digne d'une boîte à rythme made in 1984 de "Mortal Phobias", qui laisse soudain le vacarme tomber avec fracas sans prévenir, je suis fan. Surtout qu'après, c'est du n'importe quoi, genre jeu de rôles de démons bourrés qui découvrent l'invention de l'instrument de musique.
Et puis j'aime bien aussi ce final long et glauque dans la grande tradition, "First Volume Of The Bible Of Putrefaction". C'est tout moisi, genre ABRUPTUM qui s'accorde avant d'enregistrer son premier LP, ça ne rime à rien, mais ça finit le tout sur une note bizarre, genre une vieille ruelle de Moscou qui ne mène nulle part.
D'ailleurs, toute cette démo ne mène nulle part. On ne se demande même pas ce que vont devenir les RIPMENTALITY, parce qu'avec un truc pareil, s'ils arrivent à trouver des clubs, ça va pas sentir la rose...Mais que voulez vous, ce côté vintage et "je m'en bats les couilles de faire un truc carré et propre", c'était ce qu'il me fallait ce soir.
Tiens, je suis sur que même Poutine qui se fritte ça fait moins de bruit. Même avec un ours.
Le Grind, quand c'est joué avec les burnes, sans thunes ni matos, et sans réfléchir, c'est jouissif.
Bah oui, c'est comme ça.
Ajouté : Samedi 19 Décembre 2015 Chroniqueur : Mortne2001 Score : Hits: 5280
|