# 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
}
UNIDA (usa) - Coping With The Urban Coyote (1999)

Label : Man's Ruin Records
Sortie du Scud : 16 novembre 1999
Pays : Etats-Unis
Genre : Stoner / Desert Rock
Type : Album
Playtime : 8 Titres - 41 Mins
Coping With The Urban Coyote est l'album orphelin d'un groupe qui ne se réunit plus que pour quelques concerts sporadiques. C'est le rejeton de coeur de John Garcia, le frontman miraculeux de KYUSS qui n'a eu de cesse depuis l'explosion du groupe de prolonger la transe avec des formations aussi remarquables qu'éphémères. Il y a d'abord eu SLO BURN qui splite en 1997 après la sortie de son unique EP, Amusing the Amazing. Il y a ensuite UNIDA dont Coping With The Urban Coyote est le debut album. Un second projet, For the Working Man/El Coyote aurait dû être publié mais à cause d'un différend avec le label, le disque n'a jamais été officiellement distribué. Après ce coup du sort, John Garcia consacre plusieurs années à divers projets. HERMANO, JOHN GARCIA PLAYS KYUSS, KYUSS LIVES, VISTA CHINO et enfin un projet solo sobrement intitulé JOHN GARCIA dont l'éponyme est sorti à l'automne 2014. A ce jour, le chanteur déclare qu'il n'a pas l'intention de sortir de nouveaux disques avec ses autres projets. HERMANO, VISTA CHINO et UNIDA sont en sommeil, pas vraiment séparés mais plus vraiment actifs. Le chanteur les réactive parfois le temps d'un concert ou d'une tournée. Grâce à cette profusion musicale, la mystique voix du Desert Rock ne reste jamais bien longtemps éloigné d'un pied de micro, pour le plus grand bonheur de ses fans.
A l'instar de Ronnie James Dio et de Glenn Hugues, John Garcia est un singer songwriter qui incarne un genre, celui auquel il a donné naissance à l'aube des années 90 quand il organisait des generator parties dans le désert californien. Cette musique poussiéreuse, sèche et planante qu'on a plus tard baptisée le Desert Rock tire sa force vive de la terre aride du grand nulle part californien et des caractères qui s'y sont forgés. Et tout aride que soit le désert, la musique de John Garcia est tout sauf sèche et coupante. Il y a bien sûr une influence et une couleur propre à chacune des formations. Au mysticisme enfumé et nerveux de KYUSS répond le groove langoureux et sexuel de UNIDA. Ecouter cette galette, c'est vivre une expérience de pur groove érotique en diable. Une musique lancinante et entêtante qui donne envie d'onduler le bassin en se frottant langoureusement contre un postérieur tendu.
"Thorn" vous cueille au creux des reins avec un méchant riff bien gras sur lequel viennent se poser une batterie sèche et vrombissante, un chant nerveux et une guitare lead qui joue les solistes rebelles en arrière plan. En trois petites minutes l'ambiance générale du disque est posée. Pas le temps de souffler, la tracklist enchaîne sans temps morts sur le furieux "Black Woman" qui reprend les mêmes ingrédients mais les distribue différemment. Le riff est plus rapide et plus sec. Inversement, le chant est plus traînant. La batterie est toujours aussi dynamique et la guitare lead continue sa route à elle et vient clôturer le morceau avec un solo bien fouetté. Vous aviez commencé à secouer gentiment la tête sur "Thorn", là c'est parti, vous êtes lancé et vous battez furieusement le rythme en remuant le bassin. N'essayez pas de résister, c'est inutile. C'est l'effet imparable de cette musique démoniaque. La troisième chanson, "You Wish" va vous permettre de faire souffler la monture dans le padoc. C'est l'un de ces morceaux contemplatifs et atmosphériques très kyussiens, reposant sur des ambiances qui se mettent longuement en place, des plages langoureuses et un chant posé presque chuchoté. Mais même dans ce registre de confidences sur l'oreiller, John Garcia envoie des vibrations de malade mental. On passe 9'36 comme dans une bulle, isolé du reste de la création.
On pourrait presque s'arrêter là tant la musique nous a sonnés, envoyé voyager loin, loin, loin... Mais la tracklist continue à dérouler ses morceaux d'anthologie. Le climat général de la galette est assez stable, mais chaque piste renouvelle l'expérience et le plaisir. C'est sans aucun doute du Desert Rock mais le disque n'a pas grand chose à voir avec du KYUSS. C'est ce qui fait sa force. Coping With The Urban Coyote se déguste comme l'unique et formidable rejeton d'un groupe de Desert Rock qui s'appelle UNIDA et qui propose une expérience qui restera malheureusement isolée.
Ajouté : Vendredi 18 Mars 2016 Chroniqueur : Rivax Score :      Lien en relation: Unida Website Hits: 7712
|