# 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
}
FANGS OF THE MOLOSSUS (it) - Fangs Of The Molossus (2015)
Label : Italian Doom Metal Records
Sortie du Scud : 2015
Pays : Italie
Genre : Doom Metal
Type : Album
Playtime : 5 Titres - 40 Mins
Fangs of the Molossus nous fait voyager dans l'Italie de l'antiquité. Cette époque ou Rome était le centre du monde. Notre périple commence dans les marais Pontins, marécages visqueux du Latium. A l'époque, cette région n'était que terres humides, nuées de moustiques, grippes malignes, eaux saumâtres. C'était le lieu de prédilection pour les messes noires, les rites démoniaques. Nous serons les spectateurs privilégiés du sabbat des sorcières. Nous irons ensuite errer dans les catacombes romaines, dans les méandres de ces couloirs creusés dans la roche, entourés des ossements de nos contemporains, dans cette obscurité que rien ne chasse, nous nous repaîtrons des échos mauvais de chants païens et de musiques néfastes, tortueuses et fangeuses, comme si nos semelles avaient traîné jusqu'ici cette boue goudronneuse attrapée dans les marais. Nous finirons notre périple dans les salles immenses des palais des empereurs romains où nous nous roulerons dans la luxure et le stupre. Une sombre litanie accompagnera notre déambulation. Un son de plomb, lent, gras, ponctué d'explosions de distorsion, de riffs Psych, de discrètes nappes de claviers, noyées dans la masse. Le chant sera rare, non systématique. Un élément narratif parmi d'autres. Un moyen et non une fin. Prisonnier des mélodies, comme pris dans les mâchoires d'un molosse, vous êtes condamnés à écouter ces sombres notes: "Caligula", "Cult Of The Witch Goddess", "I Drink Your Blood", "O Fera Flagella", "Dead King Rise"... la messe noire est dite.
Bienvenue dans l'univers de FANGS OF THE MOLOSSUS, groupe de Doom Metal italien originaire de Florence. Au commencement, en 2011, ils sont cinq : Acid King Kanija (chant), Comte Vendetta (guitare rythmique), Amp Zila (lead guitare), Iako (batterie), Daemon Nox (basse). Une démo sort en juillet 2013, puis le line-up bouge (départ de Acid King Kanija, chant repris par Amp Zila, remplacement de Iako par Black Wizard au kit). Lorsqu'ils rejoignent le jeune label Italian Doom Metal Records, le premier opus commercialisé est une réédition vinyle de la démo de 2013. Éditée à 500 exemplaires, la galette n'est disponible ni en streaming, ni en cd. Fangs of the Molossus pose les fondations, une expérience où le Doom Metal et le Heavy Psych fusionnent. L'album offre plusieurs nuances de Doom bien gras à la sauce fuzz. Pendant les 40 minutes de voyage, sur cinq morceaux, FANGS OF THE MOLOSSUS varie les plaisirs. Il y a toujours cette rythmique pesante aux accents de BLACK SABBATH tardif. Ainsi, "Cult of the Witch Goddess" et surtout "I drink your Blood" dont le riff et la rythmique rappellent la musique développée par Tommy Iommi et Geezer Buttler sur 13. Des inserts d'extraits de films donnent à la tracklist une couleur particulière et remplacent avantageusement le chant. Ce dernier, clair, est plutôt rare. Seuls deux morceaux contiennent une véritable portion chantée ("Cult Of The Witch God" et "I Drink Your Blood"). La voix apparaît également sur d'autres morceaux, mais plus comme un soutien à la musique, "Caligula" par exemple, où le nom de l'empereur romain est répété ab nauseam, comme une litanie pour ponctuer la mélodie des guitares. Le groupe sait distribuer ces effets avec parcimonie. C'est aussi ce qui fait le charme de l'album. Il ne tombe pas dans cette répétitivité contemplative qui peut-être le talon d'Achille du Doom et du Heavy Psych. Les italiens prennent certes leur temps pour installer leurs ambiances délétères, avec des morceaux qui tournent autour de sept minutes, mais ils savent éviter le piège de la durée excessive.
Dommage que la qualité de la musique soit desservie par une prod crade qui a tendance à noyer les sonorités subtiles et les élucubrations psychédéliques. Il faut tendre l'oreille pour apprécier un petit effet fuzz, ou une discrète nappe de clavier. Ce défaut mis à part, le disque a tout pour ravir les amateurs de Doom et de Heavy Psych. Mêlant les deux univers musicaux dans un cocktail bien mixé, comme si l'un n'attendait que l'autre, les italiens donnent avec ce premier effort un avant goût persistant de leur musique. Émanations de hasch et relents de souffre. Si les florentins arrivent à maintenir la qualité, la technicité et le groove tout en améliorant la prod et le mixage, l'expérience méritera sûrement une oreille plus que distraite.
Ajouté : Mercredi 01 Juillet 2015 Chroniqueur : Rivax Score : Lien en relation: Fangs Of The Molossus Website Hits: 5658
|