# 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
}
OMEGA LITHIUM (hr) - Dreams In Formaline (2009)

Label : Drakkar Records
Sortie du Scud : 18 Septembre 2009
Pays : Croatie
Genre : Metal Gothique Industriel
Type : Album
Playtime : 11 Titres - 39 Mins
Il existe encore des groupes, comme ça, qui arrivent à déjouer la saisie semi-automatique de toute ma base de données d’archives musicales Metal sur un seul et unique champ de renseignement : celui du pays. C’est le cas d’OMEGA LITHIUM, fraîchement fondé en 2007, et débarquant, sous la houlette de Drakkar Records, directement de Croatie. Vous avez bien lu, la Croatie, un pays qui ne compte même pas deux cents formations actives au moment où je vous parle, dont seulement une soixantaine ayant passé le stade du premier opus, et aucune de reconnue mondialement. Autant dire que le jeune quartette que je m’apprête à chroniquer semble consacré d’avance à dominer la scène de son pays.
Avec une pochette dérangeante signée du talentueux, mais non pas moins torturé, Seth Siro Anton et un univers visuel et conceptuel déjà bien prononcé, autant dans les clips vidéos que sur les photos promotionnelles, OMEGA LITHIUM laisse pressentir une personnalité propre et engagée, bien différente d’autres groupes récents peinant à trouver leur voie, même après deux albums. Un univers noir, résolument gothique, qui correspond à leur musique mais agrémenté d’une once de teintes bleues électriques pour dépeindre le côté industriel accrocheur qui se démarque du fond sonore. Jamais un groupe n’a été aussi bien en harmonie avec son image.
Et les Croates se doivent de se démarquer dès leur premier album s’ils ne veulent pas être catalogués comme un énième groupe à chanteuse de plus. En effet, c’est Mya Mortenssen, tout juste âgée de 19 ans, qui prend place derrière le micro. Elle pose principalement, sur les compositions, un chant mélodieux calme et envoûtant parfaitement maîtrisé pour transmettre les émotions ou qui, au contraire, peut se vouloir plus froid et déshumanisé, accentuant la dimension cybernétique. Toutefois, quand il s’agit d’assurer des passages plus énervés, la jeune femme manque d’énergie et se contente de rester dans les mêmes tonalités phoniques. Peut-être est-ce une des raisons pour laquelle de nombreux lyrismes, ainsi que quelques chœurs, ont été rajoutés dans le fond sonore des morceaux. On note également plusieurs utilisations de voix trafiquées et passées sous effets qui renforcent l’aspect industriel des compositions, à l’instar du titre éponyme de l’album. Puis, sur quelques morceaux, la jeune femme est accompagnée par le guitariste Malice qui alterne entre une voix claire (« Nebula »), un chant rocailleux (« Angel’s Holocaust »), de simples overdubs sur les refrains (« Point Blank »), et des vocaux plus proches du growl lors de l’échange classique avec le chant féminin délicat, prenant ici place sur l’antienne de « My Haunted Self » qui crée une atmosphère séduisante, accentuée par les nappes mélancoliques du synthé.
Des claviers qui se montrent omniprésents. Beats et boucles Electro entraînants, samples industriels, nappes ambiantes, bidouillages électroniques, orchestrations et notes pianotées sont répandus sur l’ensemble des onze titres de l’album. Car les morceaux sont courts et réalisés pour plaire directement, et non se perdre en des structures complexes et savantes. Et pour cela, les claviers jouent parfaitement leur rôle, toujours gardant un soupçon de mélodie et grandement prononcés lors des passages calmes, pour permettre à la section rythmique de gagner en efficacité, ou au chant d’accrocher davantage et donner des refrains extrêmement réussis, dans la veine de « Hollow March ». Ainsi, les breaks sont quasiment tous composés de beats et effets électroniques, comme sur « Infest », ou de nappes de synthé, à l’exemple de « Stigmata ».
Malheureusement, les intros Electro des morceaux ont beau être intéressantes, il n’y a pas réellement de parties marquantes au sein des compositions, à cause du manque de variation vocale et de l’instrumentation qui finit par se répéter. Il faut dire que le chant est trop en avant dans le mix et réduit, de ce fait, l’intérêt de la section rythmique qui se contente d’apporter la puissance commune à ce type de groupes, mais possède tout de même une bonne part d’agressivité lorsqu’elle est seule, malgré le son brouillon dont dispose la guitare. On peut, d’ailleurs, établir une analogie avec la basse qui se retrouve souvent éclipsée à cause des différentes lignes musicales. En outre, dû au mid-tempo, plusieurs compositions paraissent longues et fades (« Andromeda », « Nebula ») et d’autres montent en intensité pour ensuite revenir au calme plat (« Factor: Misery »). C’est pourquoi l’album accuse quelques longueurs sur une bonne moitié d’album.
Au final, OMEGA LITHIUM dispose d’idées attrayantes, mais qui peinent souvent à se concrétiser. Le mélange des influences gothiques et d’apports industriels résulte, néanmoins, en de savoureuses atmosphères toujours bordées d’une fraîcheur moderne distillant de vives couleurs dans la mélancolie des compositions. Il est sûr qu’avec un album comme Dreams In Formaline, même s’il est loin de marquer tous les esprits, le groupe n’aura aucune peine à se faire remarquer et s’émanciper du public croate. Maintenant, pour parvenir à accomplir un tour de force parmi la scène internationale, les membres devront sans doute proposer davantage de compositions réfléchies et repenser l’agencement et l’intensité des instruments et du chant.
Ajouté : Lundi 26 Juillet 2010 Chroniqueur : CyberIF. Score :    Lien en relation: Omega Lithium Website Hits: 10664
|