# 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
}
THE SECRET (it) - Solve Et Coagula (2010)

Label : Southern Lord
Sortie du Scud : 25 octobre 2010
Pays : Italie
Genre : Grind / Black Metal
Type : Album
Playtime : 12 Titres - 35 Mins
« Le secret douloureux des dieux et des rois, c’est que les hommes sont libres ». Moi je vous dis, des Italiens qui citent Jean-Paul Sartre plutôt que Pino Scotto, c’est suspect. Mais peut-être qu’au final, cette phrase d’une grande justesse symbolise la quintessence de THE SECRET. Signé sur l’armada Southern Lord, un label désormais bien connu de ma petite personne pour ses sorties plus ou moins récentes (MASAKARI, NAILS, SAINT VITUS, PELICAN ou ALL PIGS MUST DIE), le combo transalpin est définitivement un groupe libre. Libre de faire ses propres choix ou plutôt de ne pas les faire. Car entre musique et bruit, THE SECRET ne se décide jamais. A l’heure où j’écris ces lignes, un quatrième album est dans les cartons. Il aura la lourde de tâche d’être plus démentiel encore que ce Solve Et Coagula, sorti le 25 octobre de l’année 2010.
Vous devinez un bouc vieillissant en filigrane sur la pochette et vous avez raison. Mais il n’y a rien de satanique à l’affaire. L’or de la connaissance se contente d’un mariage impossible avec le noir du sang et les ombres prennent alors vie. THE SECRET est fait de ça, mais le secret reste bien gardé. Dignes de la descendance des groupes bruitistes hébergés par Southern Lord, les Italiens ont dévoilé un interdit qui pourrait bien chambouler votre perception de la musique, pour peu que vous soyez un minimum néophyte. Et pour les oreilles les plus affinées, une drôle de réalité prendra forme. Non, ANAAL NATHRAKH n’est pas seul à savoir marier Black Metal et Grindcore. THE SECRET le fait aussi très bien, sauf que leur chaos à eux est motivé et poussé à bout par la présence d’éléments qui vont du Crust au Post-Hardcore, en passant par des ambiances atmosphériques et planantes. Je dirais même hallucinogènes si le terme était légal. Autour de vous, les silhouettes se déplacent et dansent dans la lueur de flammes suggérées. Solve Et Coagula, c’est le mal-être du Black Metal qui rencontre la folie du Grind. L’un dans l’autre, c’est un cauchemar. En alternant des morceaux de moins de deux minutes avec d’autres qui en font le triple, THE SECRET propose un album complètement élastique, écrit par des âmes qui filent mauvais coton. Les guitares grincent dans des distorsions abominables. Aucune mélodie ne se perçoit tout au long de cette grosse demi-heure entièrement dédiée à l’art du vacarme. On ne s’entend même plus penser. La voix de Marco est écrasante. Elle semble supporter toute la détresse du monde. De temps en temps, on distingue une phrase dans ce discours cacophonique et je vous laisse deviner la teneur du message : « there’s no escape ». Alors on préfère ne plus tendre l’oreille, parce que le bonhomme a raison. Il n’y a aucune issue. Une fois embarqué, impossible de s’échapper. Solve Et Coagula nous retient dans une pièce où du sang tapisse des murs qu’on devine à peine. Et le malaise est palpable. Grâce à ses tempos intenses, à ses riffs Heavy, à ses airs de champ de bataille fumant, cet opus nous laboure le crâne. Et le mieux dans tout ça, c’est qu’on en devient vite dépendant. Soit parce que le concept est addictif, soit parce que THE SECRET est tout simplement bon. Peu importe au final. Le commun des mortels trouverait inhumain de défendre un tel monceau de merde. C’était sans compter sur nos penchants scatophiles et… secrets.
Un cauchemar oui. Mais un cauchemar libre. Ces Italiens sont les acteurs et les décideurs de leurs songes les plus ténébreux et nous tiennent par la main dans cet univers froid et hostile. Le désarroi se lit dans chaque regard et le monde a soudain l’air d’une coquille vide, plus qu’il ne l’est déjà. Solve Et Coagula réussit ce pari audacieux de concilier Grind et Black Metal. Aucun auditeur ne pourra se sentir délaissé par cette folie qui, au fond, est universelle. C’était là tout le génie de Sartre. C’est là tout le génie de THE SECRET.
Ajouté : Vendredi 19 Octobre 2012 Chroniqueur : Stef. Score :     Lien en relation: The Secret Website Hits: 10352
|