Categories
Uncategorized

Sans titre

Le XSPF , c’est une liste de documents multimedia, ici MP3, au format XML.

Cette contribution ne fournit que cette liste à destination d’un player comme Musicplayer pour la jouer, ou tout autre utilitaire.
La liste est constituée de tous les documents mp3 joints à un article.
Cela produit un .xspf , l’url est utilisable à la place d’un fichier .xspf comme dans :


<embed src="[(#URL_SITE_SPIP)]/XSPF/xspf_player.swf?
playlist_url=[(#URL_SITE_SPIP|urlencode)]%2Fxspf.php3%3Fid_article%3D[(#ENV{id_article})]"
name="xspf_player" allowscriptaccess="sameDomain" type="application/x-shockwave-flash"
quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer"
align="center" width="<?php echo [(#ENV{largeur})] - 20; ?>" height="153" />

(lignes volontairement coupées pour faciliter la lecture)

Voilà donc la constitution d’un xspf simple de tous les documents mp3 associés à un article.
Il référence la version 0 de XSPF pour un maximum de compatibilité.
C’est du LGPL pour 1.8.x.

Créez un xspf.php3 à la racine comme :

<?php
$fond = “xspf”;
$delais = 24 * 3600;
$flag_preserver = true;

function ascii($texte) {
return translitteration($texte);
}

include (“inc-public.php3”);
?>

Notes :
- $fond précise que nous appelons le fond du même nom “xspf” , soit xspf.html
- $delai 1 jour
- $flag_preserver à true pour ne pas avoir le menu admin
- la fonction ascii() est un filtre pour les titres , que tous les caractères soient 7-bit 🙁
- elle utilise translitteration() qui est dans le noyau de spip.

Il référence donc dans le dossier squelette, un xspf.html :

<BOUCLE_article_principal(ARTICLES) {id_article}>
<?php
header(‘Content-type: application/xspf+xml’);
echo ‘<?xml version=”1.0″ encoding=”#CHARSET”?>’ . “\n”; 

$def = ‘[(#LOGO_ARTICLE_RUBRIQUE||extraire_attribut{src})]’;
if (!$def) {
$def = ‘IMG/jpg/jukebox.jpg’;
}
?>

<playlist version=”0″ xmlns = “http://xspf.org/ns/0/”>
<title>[(#NOM_SITE_SPIP|ascii)]: [(#TITRE|ascii)]</title>

<B_morceaux>
<trackList>
<BOUCLE_morceaux(DOCUMENTS){id_article}{mode=document}{extension==mp3$}{par num titre}{par id_document}>
<?php
$img = ‘[(#LOGO_DOCUMENT||extraire_attribut{src})]’;
if ($img == ‘IMG/icones/mp3-dist.png’) {
$img = $def;
}
?>
<track>
<location>[(#URL_DOCUMENT|url_absolue)]</location>
<image>[(#URL_SITE_SPIP)]/<?php echo $img; ?></image>
<annotation>[(#TITRE|supprimer_numero|texte_backend)]</annotation>
</track>
</BOUCLE_morceaux>
</trackList>
</B_morceaux>
</playlist>

Les 2 premières lignes fixent le format produit. Le header est important pour les navigateurs sensibles.

Ensuite, $def essaye de récupérer une image défaut , oui , une image est associée à chaque morceau , donc ce sera $def si un document mp3 n’a pas de vignette.
Le défaut est le logo de l’article , s’il n’y en a pas , c’est bétonné ’IMG/jpg/jukebox.jpg’

C’est assez court , beaucoup d’intrusion de php , ça ne sert à rient sans un player comme Musicplayer
Il y a des exemples d’utilisation chez Léon Larchet
J’ai entendu dire que boOz préparait des choses du même genre , et peut-être une même liste préparée “on the fly” en javascript

2Pistes2
- Il serait possible de constituer un XSPF beaucoup plus complet, avec les durées , auteurs , titres … mais ça serait beucoup plus lourd puisqu’il faudrait accéder à chaque document pour récupérer ces données dans les ID3 tags ou même les frames. Contactez-moi si besoin.
Voyez aussi getid3
- je pense étendre cette contrib pour éventuellement balayer une rubrique aussi , c’est à dire fabriquer la même liste avec tous les mp3 joints aux articles d’une rubrique.

Categories
Uncategorized

Musicplayer

Machine à musique

Mes clients sont des artistes utilisant spip. Ils voulaient un moyen simple de présenter leurs extraits sonores.
Le format des extraits est .mp3 , joints comme documents à un article ou indépendants.
Le jukebox peut jouer un .mp3 unique ou un liste .xspf comme celle produite par XSPF à partir du chapeau , du post-scriptum et des documents mp3 qui sont joints à un article

Objectifs

2Simple2 Bien sûr, spip permet de joindre des mp3, leur lecture n’est alors pas compliquée … si vous avez ce qu’il faut. Nous le voulions en un seul click. 2Universel2 Ceci doit marcher pour tout un chacun. Les navigateurs n’ayant pas tous tout, c’est pourquoi nous avons finalement aimé cette solution Flash © Macromedia 2Facile à implémenter2 La contribution initiale fournissait un popup avec le format extended . Je m’oriente maintenant , suite notamment à des discussions avec boOz vers quelque chose de plus intégré et facile à implémenter.

XSPF Web Music Player (Flash)

Music Player – Plays MP3 on your website
Vraiement très bien fait.
Le truc n’a besoin que de la liste des mp3 en xspf cf. XSPF ou en mode single, seulement la référence du mp3.
3 formats sont disponibles pour le player :
- button (bouton),
- slim (mince, avec des controles),
- extended (avec une liste et tout)
Cerise pour le gateau, on peut associer une image à chaque mp3 dans ce mode étendu. Notez qu’elles doivent être des jpg, et qu’elles seront réduites à 130*130 par le player, autant le faire d’abord.

Important ça n’accepte que du mp3 échantilonnés au standard 44,1 kHz / 128kbps . (au cas où ça ne joue pas à la bonne vitesse) 2Nécessaire en dehors de Spip2 Pour pouvoir utiliser un de ces flash-player , attention il y a couramment une erreur dans la page principale [1], vous devez télécharger le .swf correspondant et le rendre disponible sur le site.
Le mieux étant dans un répertoire propre , mettons spip/player/
Selon le(s) modes désiré(s) , vous aurez donc un ou plusieurs parmi :
- spip/player/musicplayer.swf (button)
- spip/player/xspf_player_slim.swf (slim)
- spip/player/xspf_player.swf (extended) 2L’appel brutal

<object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″
codebase=”http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0″
width=”420″ height=”153″>
<param name=”allowScriptAccess” value=”sameDomain” />
<param name=”movie”
value=”[(#URL_SITE_SPIP)]/player/xspf_player.swf?autoload=true&playlist_url=the/playlist.xml” />
<param name=”quality” value=”high” />
<embed src=”[(#URL_SITE_SPIP)]/player/xspf_player.swf?autoload=true&playlist_url=the/playlist.xml”
name=”xspf_player” allowscriptaccess=”sameDomain” type=”application/x-shockwave-flash”
quality=”high” pluginspage=”http://www.macromedia.com/go/getflashplayer”
align=”center” width=”420″ height=”153″ />
</object>

Si si , il y a besoin de tout ça … doublement embed + object pour plaire à tous les navigateurs. Ici, #URL_SITE_SPIP et les parenthèses droites et courbes autour représentent le réperioire de base de spip , et xspf_player.swf signifie qu’on utilise la version extended , celle de base d’ailleurs. 2Les paramètres du Flash2

Nom Signification Rem.
playlist_url L’url de la liste xspf à jouer, ce peut être un fichier statique ou l’url d’un script la produisant .
autoplay Valeur booléenne indiquant si la diffusion doit démarrer toute seule au chargement (sans que l’utilisateur ne clique) (bool)
autoload Valeur booléenne indiquant si le media doit être préchargé (évite un temps d’attente lorsque l’utilisateur démarre l’écoute) (bool)
repeat_playlist Valeur booléenne indiquant si la liste doit jouer en boucle (bool)
playlist_size Limite du nombre de morceaux
player_title Texte en remplacement du défaut Player
info_button_text Message d’information associé au bouton
radio_mode Valeur booléenne indiquant que le dernier morceau est en fait une playliste (xspf) qui sera chargée en place de l’actuelle (bool)
song_url L’url du morceau (mp3)
song_title Le titre du morceau (mp3)

- (bool) : sera vraie si présent dans les paramètres, quelque soit la valeur : bidule=false est vrai ! Faux s’obtient simplement en ne fournissant pas le paramètre.
- (mp3) : dans le cas d’une utilisation en mode simple , un seul mp3 au lieu d’une liste xspf

Dans spip

EN COURS DE REDACTION , c’est plus un cahier des charges pour l’instant.

Il y a plusieurs possibilités pour intégrer un “player”.

C’est possible au niveau squelette , pour faire des rubriques ou articles spécialisés , un peu comme ça existe pour des galeries photo. Ca pourrait être une balise #PLAY avec une référence doc , comme dans une boucle DOCUMENTS pour produire un player sur des documents, ou une référence article ou document.
Une autre idée est un filtre , qui appliqué sur du texte , transformerait les & ou <EMBxx> en player. <DOCxx> devrait être réqervé au téléchargement de l’oeuvre.

On peut aussi prévoir un tag <PLAY…> intégrable par le rédacteur … ou le squeleteur. C’est normalement le boulot de <EMBxxx> mais pas de mélange dans un premier temps. D’ailleurs, <EMB> ne s’applique qu’au niveau document.

<PLAY…> devrait être possible au niveau document joint mais aussi , pour produire des listes jouables au niveau article voire rubrique. Soit :
- <PLAY_DOC…> c’est l’<EMB…> actuel,
- <PLAY_ART…> qui intégrerait un player avec la liste des documents joints à l’article,
- <PLAY_RUB…> qui colationerait sur tous les articles de la rubrique.

En tout cas , de nombreux paramêtres sont envisageables , comme largeur/hauteur pour l’objet ou autoload , autoplay pour le player.

Techniquement, on peut produire du code HTML direct , ou passer par un javascript onload , comme le fait Le Radiphone

Evidemment , le but du jeu serait finalement :

  1. de permettre le même fonctionnement pour tout type de document joint , par exemple jouer de même des videos ou d’autres formats audio comme .ogg
  2. pour un type donné , permettre différents players selon la configuration voire le client.

à plus tard 🙂 …

Categories
Uncategorized

jukebox

sauvegarde d’une première version de contrib

Machine à musique

Mes clients sont des artistes utilisant spip. Ils voulaient un moyen simple de présenter leurs extraits sonores. Dans cette contribution “nous” représente eux et moi.
Le format des extraits est .mp3 , ils sont joints comme documents à un article.
Cet article produit le jukebox est un article “normal” le jukebox n’en utilise que le chapeau , le post-scriptum et les documents mp3 qui lui sont liés.

Objectifs

La simplicité. Bien sûr, spip permet de joindre des mp3, leur lecture n’est alors pas compliquée … si vous avez ce qu’il faut. Nous le voulons en un seul click.
La duplicité Ce click ne doit pas interrompre la “lecture” du site mais bien l’accompagner, donc oui, honte sur nous, nous voulons l’ouvrir dans une autre (unique, petite) fenêtre
La triplicité Ceci doit marcher pour tout un chacun. Les navigateurs n’ayant pas tous tout, c’est pourquoi nous avons finalement aimé cette solution Flash © Macromedia

XSPF Web Music Player (Flash) – Plays MP3 on your website

Music Player
Vraiement très bien fait.
Le truc n’a besoin que de la liste des mp3 en xspf cf. XSPF ou en mode single, seulement la référence du mp3.
3 formats sont disponibles pour le player : button (bouton), slim (mince, avec des controles) et extended (avec une liste et tout)
Cerise pour le gateau, on peut associer une image à chaque mp3 dans ce mode étendu

Dans spip

C’est du 1.8.3 Nous avons utilisé du javascript pour ouvrir le “popup’ , mais ça n’est pas nécessaire, on peut faire dans la page pareil sans script :

function popup(url, titre, hauteur, largeur) {
var fenetre = open(url, titre,
“top=” + Math.round((screen.availHeight-hauteur)/2) +
“,left=” + Math.round((screen.availWidth-largeur)/2) +
“,width=” + largeur + “,height=” + hauteur +
“,toolbar=0,location=0,directories=0,status=0,\
scrollbars=0,copyhistory=0,menuBar=0”);
if (fenetre.innerWidth) {
fenetre.innerWidth=largeur;
fenetre.innerHeight=hauteur;
} else {
fenetre.resizeTo(largeur,hauteur);
}
fenetre.focus();
return fenetre;
}
function jukebox(id, hauteur, largeur) {
if (!id) {
id = window.location.search.match(/id_article=(\d+)/);
if (!id) {
return;
}
id = parseInt(id[1]);
}
if (!largeur) {
largeur = 360;
}
if (!hauteur) {
hauteur = 240;
}
var fenjuk = popup(‘jukebox.php3?id_article=’ + id + ‘&largeur=’ + largeur,
“jukebox”, hauteur, largeur);
}

Nous référons Jukebox.html :

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>

<BOUCLE_article_principal(ARTICLES) {id_article}>

<BOUCLE_morceaux(DOCUMENTS){id_article}{mode=document}{extension==mp3$}{0,1}>

<html lang=”#LANG”>

<head>

<title>[#NOM_SITE_SPIP] [(#_article_principal:TITRE|textebrut)]</title>

<meta http-equiv=”Content-Type” content=”text/html; charset=#CHARSET”>

<link rel=”shortcut icon” href=”squelette-sarka-spip/rblack.ico”>

<style type=”text/css”>
.chapo {
color: #000000;
margin: 0px 10px 0px 10px;
font-weight: bold;
}
.post-scriptum {
color: #000000;
margin: 0px 10px 0px 10px;
padding-top: 10px;
font-size: 100%;
border-top: none;
}
.corps {
margin: auto;
}
.player object {
display: block;
margin: 0 auto;
}
body {
background: silver;
}
</style>
<script type=”text/javascript” src=”squelette-sarka-spip/toggg.js”></script>
</head>

<body dir=”#LANG_DIR”>

<div>

[<div>(#CHAPO|liens_retours|liens_ouvrants)</div>]
<div>
<object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″
codebase=”http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0″
width=”<?php echo [(#ENV{largeur})] – 20; ?>” height=”153″>
<param name=”allowScriptAccess” value=”sameDomain” />
<param name=”movie”
value=”[(#URL_SITE_SPIP)]/XSPF/xspf_player.swf?autoload=true&playlist_url=[(#URL_SITE_SPIP|urlencode)]%2Fxspf.php3%3Fid_article%3D[(#ENV{id_article})]” />
<param name=”quality” value=”high” />
<embed src=”[(#URL_SITE_SPIP)]/XSPF/xspf_player.swf?autoload=true&playlist_url=[(#URL_SITE_SPIP|urlencode)]%2Fxspf.php3%3Fid_article%3D[(#ENV{id_article})]”
name=”xspf_player” allowscriptaccess=”sameDomain” type=”application/x-shockwave-flash”
quality=”high” pluginspage=”http://www.macromedia.com/go/getflashplayer”
align=”center” width=”<?php echo [(#ENV{largeur})] – 20; ?>” height=”153″ />
</object>
</div>

[<div>(#PS|liens_retours|liens_ouvrants)</div>]
</div>

</body>

</html>

</BOUCLE_morceaux>
Aucun extrait sonore !
<//B_morceaux>
</BOUCLE_article_principal>

<:aucun_article:>

<//B_article_principal>

qui appelle XSPF

Pas sur que ça soit optimum tout ça.

Entre autres nous avons utilisé le chapeau et le post-scriptum pour le jukebox associé à un article.
nous n’utilisons que le texte dans l’article lui-même.

à plus tard 🙂 …

Categories
Uncategorized

svn up to tgz

#!/bin/bash
#
# Update svn and build
# – a bash from-to.delete to remove deleted files and directories
# – a from-to.tgz of the added/modified files
# only parameter is the base dir
#

OLD=`svnversion -n $1`
echo “Current version: ${OLD}”
svn update $1 > ${OLD}-up.log
NEW=`svnversion -n $1`
if [ $NEW -eq $OLD ]; then echo “NO CHANGE since ${OLD}”; rm ${OLD}-up.log; exit 0; fi

echo “New version: ${NEW}”
cp ${OLD}-up.log ${OLD}-${NEW}.log

# deleted files or dirs?
RM=$(sed -n ‘/^[D]\s\s*\(.*\)$/s//\1/p’ ${OLD}-${NEW}.log)
if [ -n “${RM}” ] ; then
echo ‘#!/bin/bash’ > ${OLD}-${NEW}.delete
echo “# deleted from ${OLD} to ${NEW}” >> ${OLD}-${NEW}.delete
for fil in ${RM}; do echo “rm -R ${fil}” >> ${OLD}-${NEW}.delete ; done
chmod a+x ${OLD}-${NEW}.delete
echo ${OLD}-${NEW}.delete
fi

# added/changed files ?
for fil in  $(sed -n ‘/^[AU]\s\s*\(.*\)$/s//\1/p’ ${OLD}-${NEW}.log); do
if [ ! -d “$fil” ] ; then
TGZ=”${TGZ} ${fil}” ;
fi
done    # fil
if [ -n “${TGZ}” ] ; then
tar czvf ${OLD}-${NEW}.tgz ${TGZ}
echo ${OLD}-${NEW}.tgz
fi
exit 0