# 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
}
OHMPHREY (usa) - Ohmphrey (2009)
Label : Magna Carta
Sortie du Scud : 19 mai 2009
Pays : Etats-Unis
Genre : Jazz Rock Fusion
Type : Album
Playtime : 8 Titres - 64 Mins
Oui, là, je dois le dire, j’ai un peu traîné les pieds pour celui là… Faire une chronique en 2012 d’un album sorti en 2009, on ne peut pas dire que ça soit vraiment d’actualité.
Mais que voulez vous, dès que j’ai vu que le disque en question était sorti sur Magna Carta, j’ai eu comme un à priori.
Délit de label ? C’est possible, mais cette maison de disques spécialisée dans les démonstrations instrumentales en tout genre nous a souvent habitués à des productions redondantes et roboratives, basées sur les capacités techniques de musiciens sortant des albums comme ils dégainent leur porte monnaie au supermarché. Alors…
Manque d’objectivité sans doute. C’est pour cela que j’ai fait l’effort ce matin de me pencher sur le cas de OHMPHREY, mais uniquement parce qu’on retrouve en ses rangs un certain Chris Poland, qui officiait il y a vingt six ans sur un de mes albums cultes, le fameux Peace Sells de MEGADETH.
Evidemment, depuis l’eau à coulé sous les ponts, et Chris a multiplié les projets, en solo, en collaboration, jusqu’à sa participation au collectif OHM en 2003. Il s’est affiné en tant que guitariste, et ses aspirations sont de nos jours à cent lieues du Métal débridé et incontrôlable de son ancien leader.
Et là, je dois avouer que je le regrette un peu.
Je n’ai rien contre l’impro Jazz Rock. Cette fusion contre nature à l’origine a accouché de pièces musicales extraordinaires, de l’effort séminal de Miles Davis Bitches Brew, en passant par le Mahavishnu Orchestra, Tribal Tech, certains efforts de Steve Lukather, j’en passe et des meilleurs sans doute.
Lorsque l’inspiration est là, cette association de courants colle des frissons dans l’échine, pour peu que vous pratiquiez un instrument vous aussi et que vous soyez sensible à la performance de groupe.
Mais quand c’est pénible, je crois que rien n’est aussi insupportable…
Oh, bien sur, j’ai l’habitude des délires de l’équipe de mercenaires qui bossent plus ou moins pour Magna Carta, leurs divagations égocentriques boursouflées, et leurs LP sortis à la hâte et constitués de chutes de studio qui mériteraient de rester dans un tiroir.
Parfois, un projet initial peut même aboutir à deux, voire trois albums sortis à la suite.
Alors quid de OHMPHREY ? Doit on les ranger dans la catégorie susnommée ou bien les en extraire pour les montrer en exemple ?
Et bien…Oui et non.
Car le quintette, constitué au trois cinquième de l’alliance impro UMPHREY’S MCGEE et au deux cinquièmes du combo de Chris Poland, OHM (d’où le nom de la fusion…), ne déroge pas vraiment à la règle et reste souvent dans des terrains très balisés et sécuritaires.
Rien de neuf sous le soleil, car cet album éponyme se contente d’aligner les plans usuels du Jazz Rock à tendance agressive, sans jamais vraiment chercher à y introduire du neuf ou de l’inédit. Les chromatismes sont légion, les notes fantômes à la caisse claire aussi, les mesures impaires, les digressions en solo à n’en plus finir sont bien là (spécialement sur les deux derniers morceaux, qui sont bien sur les plus longs), mais rien ne vient jamais casser la dynamique déjà éprouvée, et on attend inexorablement le petit grain de sable qui va enrayer la machine et emballer un peu le tout.
Certes, les musiciens sont bien sur très capables, mais c’est le minimum pour ce genre de production. La section rythmique est élastique, les guitaristes enchaînent les interventions, et c’est sans doute le CD parfait pour animer une soirée cool entre potes et gloser sur les capacités instrumentales de tout un chacun. Mais de grand frisson, point.
Et c’est dommage… Parce qu’on aimerait bien que les protagonistes osent parfois traverser en dehors des clous…
Il n’en reste pas moins que pour les fans du style, OHMPHREY a produit un album sympathique, digne d’enrichir leur discothèque déjà bien fournie. Mais pour les autres, pas grand-chose à espérer, sinon quelques éclairs de ci de là, qui ne suffisent pas à maintenir l’attention.
Bien jouer c’est une chose, composer intelligemment en est une autre.
A prendre comme une récréation, rien de plus.
Ajouté : Mercredi 18 Juillet 2012 Chroniqueur : Mortne2001 Score : Lien en relation: Ohmphrey Website Hits: 6898
|