# 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
}
FRIDAY NIGHT SPECIALS (se) - I Have Become (2015)

Label : Auto-Production
Sortie du Scud : 19 octobre 2015
Pays : Suède
Genre : Hard Rock alternatif
Type : Album
Playtime : 10 Titres - 33 Mins
Ô Suède, nouveau jardin d'Eden du Hard Rock sans chichis qui dépote comme un turbo sur le parking d'une vieille boîte de nuit un samedi... Tu nous prends aux tripes avec tes riffs musclés, tes rythmiques bien rockées, et ton chant énervé, et même si tu ne craches pas sur quelques mélodies bien troussées, parfois, tu laisses la virilité s'exprimer...
Testostérone, muscles, regards noirs et rencontres d'un soir, tu es la nouvelle scène qu'il faut voir et écouter avant de trépasser. Mais d'où tires-tu ton énergie endiablée ? De ces samedis soir passés à faire la fête dans des bars bondés ?
Cette réponse pourrait être la bonne, sauf qu'aujourd'hui, nous sommes vendredi soir...
Les FRIDAY NIGHT SPECIALS proposent une soirée de fête Rock N'Roll justement. Le programme est simple, des accords saignants, de l'allant, et une grosse dose de musique haute en couleur et bien en phase avec les vagues du moment.
On se dit qu'après tout, des frères d'armes des HELLACOPTERS, BACKYARD BABIES, et autres HARDCORE SUPERSTAR savent mettre l'ambiance, et on a tout à fait raison de le penser.
Eux mêmes se plaisent à citer une comparaison pas vraiment osée, qui les assimile à un enfant bâtard d'une liaison d'un soir entre les FOO FIGHTERS et AC/DC.
On visualise très bien le moment d'intimité, mais on ne peut s'empêcher de modérer l'enthousiasme débridé. Certes, les FNS sont Rock, certes ils manient le délié de guitare avec facilité, mais on les rapprocherait plus volontiers de quelques combos isolés dans le grand Nord comme eux, pour cette facilité à pondre des hymnes instantanés, qui résonnent dans la tête une fois la nuit terminée.
Qui sont-ils d'ailleurs ? Des fous furieux Punk aux harmonies cachées ? Des Hard Rockeurs acharnés qui n'ont de cesse de cogner comme des brutes affamées ? Un peu des deux il est vrai, mais surtout des sales gosses qui aiment le tapage nocturne et la sieste diurne. Des oiseaux de nuit qui s'amusent à déguiser leurs morceaux en hymnes Rock hérités des poils hérissés de LED ZEP, des FOO, des HELLACOPTERS, tout en leur insufflant une gentille folie douce Punky, en gros, jouer une musique qui vit, respire, et sniffe le gasoil avant de le recracher enflammé par les amplis. Formé en 2011, le quintette a déjà explosé d'un EP bien troussé, et lâche aujourd'hui cette petite bombe prête à éclater sur les scènes du monde entier. Alors ça ne cherche pas la complication, ça reste béton mais pas grognon, et leurs directs dans l'estomac s'abreuvent des plaies causés par les BABIES, mais aussi KIX, AIRBOURNE, et autres NASTY IDOLS ou SHOTGUN MESSIAH. Des trucs carrés, construits autour du schéma chéri couplet/refrain/pont/solo, trois minutes et des poussières dans le rétro, et ça cavale comme au rodéo. "What I Say", c'est teigneux comme un cadre qui a raté le métro, ça racle, ça gueule, et ça déroule comme à la parade sur riff syncopé et rythmique nitroglycérinée. "A Specials Night", ça promet du salé, ça envoie du mélodique corsé, et salue du doigt tendu un Nicke Andersson trop affairé avec son projet chéri IMPERIAL STATE ELECTRIC. Pas vraiment vintage car pas daté, non, juste Hard Rock pas léché, mais pas mal dégrossi pour autant, qui montre les dents mais mord gentiment.
N'allez pas croire pour autant que le Rock des suédois soit bon enfant, il pulse d'une belle envie, et parfois se laisse aller à un déhanchement groovy, presque SABBATH dans le noir du tapis, un peu T-REX sans les groupies, et "Come On" de vivement conseiller de lâcher son verre pour aller danser.
Et d'ailleurs, dans leurs harangues, ils peuvent parfois être greasy et grossiers. "Motherfucker" en est l'exemple parfait, un peu TATTOO, un peu frères Young en virée, l'Australie en vue adaptée aux côtes suédoises pointues, ça ronronne comme un moteur de V12 et ça riffe cossu.
Et lorsque les guiboles démangent on invite les RAMONES et les DOLLS pour un ballet sous picole qui ramone le gosier, comme sur ce bluesy et pas encore dégrisé "Fall Back Down", qui adapte le ternaire des anciens bluesman pour en faire une clôture Punk N'Rock qui remue.
Speed, Heavy, mais surtout Hard Rock jusqu'au bout des ongles vernis, avec toutefois quelques nuances un peu Grungy pour une allusion aux 90's au rayonnement pas encore terni. Dix morceaux et autant d'invitations à l'éclate pour bien ruiner son foie et sa rate, et parfois, des trucs un peu Poppy qui collent au cul des BABIES, "I Have Become" en tête de liste qui piste, renifle l'air 2015 en expirant quelques mélodies bien senties, soutenues par des guitares et une rythmique piquées de l'énergie d'une douce fin d'après-midi teen, juste avant la party.
Party all night long, ça pourrait être la devise de ces suédois qui continuent le travail de sape entrepris par leurs grands frères, transformant ce petit pays en robinet qui coule non stop d'un débit Rock depuis quelques années, sans se soucier de la facture qu'il faudra bien payer.
On assiste médusé à un défilé de combos de premier plan, qui puisent dans les 70's, les 80's, les 90's sans vergogne pour trouver le riff qui cogne, la rythmique qui bastonne, et le chant qui jamais ne tâtonne. C'est du classique, du trapu, mais c'est tellement bien ficelé qu'on est à chaque fois repu.
J'imagine bien une soirée made in Sweden, par un bel été en plein air. Un gros revival auquel participeraient bien sur les FRIDAY NIGHT SPECIALS, pour un vendredi très spécial justement, car leur I Have Become leur accorderait une place de choix sur la scène.
Mais avant d'écoutez, relisez. FOO, AC/DC, BABIES, HELLACOPTERS, TATTOO, RAMONES, DOLLS, ça vous met sur la voie ?
Laquelle ?
Celle qui se termine au bar, les coudes sur le zinc et la tête dézinguée par un Rock de teigne.
Ajouté : Samedi 22 Octobre 2016 Chroniqueur : Mortne2001 Score :     Lien en relation: Friday Night Specials Website Hits: 9062
|