# 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
}
HEMWICK (usa) - Involuntary Unearthing (2015)

Label : Auto-Production
Sortie du Scud : 2 août 2015
Pays : Etats-Unis
Genre : Expérimental Mathcore Instrumental
Type : EP
Playtime : 6 Titres - 27 Mins
Oui, sur le net, il n'y a pas que les Bandcamp, les pages Facebook, les blogs, ni les mails de groupes ou de labels. On peut aussi s'arranger pour passer par Vk, plateforme sociale européenne où se retrouvent tous les amateurs de musique underground qui souhaitent propager leur goûts/oeuvres, ou faire passer le message de trouvailles valables.
La plupart du temps, les interlocuteurs sont russes, ou ukrainiens, ce qui rend les infos illisibles... C'est ce qui m'est arrivé ce matin lorsqu'un anonyme m'a fait découvrir le premier album des américains de HEMWICK, qui comme Johnny nous viennent de l'Utah (private joke, réservée aux Point Break addicts). Un pauvre bandcamp sans infos, un premier album, pas de bio, pas de site ni de page Facebook et rien sur la toile. Merci, et rentre chez toi...
Pourtant, à l'écoute de ce Involuntary Unearthing, j'aurais bien aimé en savoir plus... Tout ce que j'ai appris, je vous le donne, cadeau.
HEMWICK est un duo formé de Riachle Child (batterie, basse, chant), et Jaxon Harrop (guitare, basse, chant), ce qui semble étrange vu que leur musique est presque exclusivement instrumentale. Mais tout ça sent le pseudo à plein nez, et renforce l'hermétisme de ce groupe opaque par sa musique, et obscur par sa démarche.
Niveau musique par contre, le contenu est riche. Dense. Compact. On parle d'Artcore, de Mathcore, de Noise Rock, et ce premier album est en effet tout ça à la fois. HEMWICK a adopté le son abrasif du Hardcore version lourde et pleine d'aspérités, y a injecté une bonne dose de folie free Noise Rock, et aligne les plans sans discontinuer, mais sans lasser non plus.
Il faut dire que les deux acolytes s'y entendent à merveille pour tisser une étoffe bruitiste au son grave et mat, et chaque piste à sa raison d'être, en plus d'être la partie d'un tout relativement touffu.
On pense au niveau accointances à une version totalement libre des instants les plus furieux de DEP, accommodés à la sauce Jazzcore, avec toute fois quelques libertés Arty de bon ton, qui ne tombent jamais dans l'élitisme ou l'abstraction incompréhensible.
Les titres sont bâtis autour d'une idée porteuse, la plupart du temps concentrée et lourde, et à partir de cette trame, Riachle et Jaxon brodent des interventions puissantes, qui ne laissent aucune place aux soli interminables et peu inspirés. Les deux hommes se connaissent bien, ça se sent, et les passages les plus furieusement rythmiques font preuve d'une belle énergie sombre, sur lesquels la basse à souvent sa place au tableau d'honneur.
C'est ce qui frappe justement tout au long de ce premier effort. Cette section rythmique soudée et qui claque fort et juste, avec un groove sourd et oppressant, qui semble parfois vouloir s'envoler pour accélérer les débats. Débats qui commencent d'ailleurs avec des intentions très claires dès "Witchcraft", qui évoque l'esprit occulte des 70's en l'adaptant aux standards de production des années 2000. Thème qui fleure bon les messes noires et autres boucs maléfiques, le tout interprété avec conviction, le long de tissages rythmiques souvent interrompus par des breaks assez flous et bruitistes au possible.
La base Hardcore est indéniable, pour ce traitement très sec et sans concession, mais les mélodies tendues ne sont jamais très loin, même si elles sont bien cachées par de récurrentes fulgurances rythmiques qui noient le Jazz dans le Grind.
Le morceau éponyme est encore plus abrasif, et se permet des libertés de signatures qui perdent l'auditeur dans de longs couloirs sinueux, comme pour mieux le forcer à se baser sur son sens émotionnel primal. Basse, guitare, batterie à l'unisson pour infliger de gigantesques claques rythmiques, accélérations, pesanteurs, rares instants d'accalmie, c'est éprouvant comme une confession, et ça fonctionne à plusieurs niveau.
L'absence de chant ne rend pas les choses plus difficiles, même si parfois, une intervention rauque et hurlée semble pouvoir se faire sa place.
On en retrouve d'ailleurs une trace sur le final "mpty", et il s'avère très Blackcore dans le ton. Ce morceau est en contrepoint total du reste de l'album, puisque seule la lourdeur semble avoir droit de cité, et nous tombons alors dans un cloaque Doomcore sombre et déprimant, qui contraste lourdement avec les pulsations épidermiques globales.
Mais il faut dire que juste avant, et à l'opposé total, HEMWICK avait balancé sans prévenir une petite perle apaisée, "Immersion", qui ressemble effectivement à s'y méprendre à une aventure dans les grands fonds, avec des arrangements qui noient le silence dans un bruit de vagues virtuelles et de respirations difficiles. Harmonies subtiles et enterrées dans le mix, batterie toute en approches distantes, c'est un OVNI qui atterrit, puis repart comme il est venu...
Evoquons pour la précision le court "Grimace", le morceau le plus court et concis du lot, qui est aussi un des plus explicites, et qui concentre en a peine plus de deux minutes un maximum d'idées, avec emballements Fastcore, avant que les dissonances ne ramènent les musiciens sur des terres Noisecore techniques, double grosse caisse en appui.
Avec cette première signature, HEMWICK s'impose comme un duo "à idées", qui sait ce qu'il veut, et l'exprime sans détour. Il est possible de trouver ça redondant, surtout si pour vous le chant reste une composante majeure de toute chanson, mais ici elles sont abordées d'un point de vue rythmique, un peu comme si le groove paillard de NOMEANSNO heurtait de plein fouet les riffs de Ben Weinman.
C'est bouillant, parfois irritant, dans le sens premier du terme, mais ça reste créatif, et joué par des musiciens calés.
A voir sur le long terme si les idées continuent d'affluer ou si tout ça n'était qu'un feu de paille.
Ajouté : Jeudi 29 Octobre 2015 Chroniqueur : Mortne2001 Score :     Lien en relation: Hemwick Website Hits: 7656
|