Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/06/2007, à 06:55

vinc-mai

script: lecteur audio

Bonjour à tous,
j'écris un petit script en bash + zenity (le premier) qui permet de lire des fichiers audio ogg. Ceux qui veulent y jeter un coup d'oeil ou le tester peuvent copier le code dans un fichier ZiK et l'executer de n'importe quel endroit.

#!/bin/bash
#ZiK v 0.2

#gere et lit une playliste audio enregistee dans $HOME/.ZiK/$zpath/chanson.txt
#seul le format ogg est supporté
#le format de playlist est celui de ogg123: le chemin de chaque chanson ou repertoire, un chemin par ligne.

#---dependance---------
#zenity pour gerer l'interface graphique
#ogg123 pour lire la playlist


#---creer un repertoire .ZiK si il n existe pas---
if [ -d $HOME/.ZiK ]
then
	echo;
else
	mkdir $HOME/.ZiK;
fi

#---creation d alias----------------
shopt -s expand_aliases;
alias zenity='zenity --width 600 --height 400 --title=''ZiK';

#---initialisation-----------------
zpath=$HOME/.ZiK;
ipath=$(pwd);

if [ -e ZiK.ini ]
then
	source $zpath/ZiK.ini;
fi

if [ -d $pref ]
then
	cd $prefd;
fi

#---Options-------------------------

if [ "$1" = "--help" ]
then
	if [ -r $zpath/help.txt ]
	then
		cat $zpath/help.txt | zenity --text-info;
		exit 0;
	else
		echo "fichier aide non trouve"
		exit 1;
	fi
fi

####### a changer si d autre variable dans ZiK.ini########
if [ "$1" = "-d" ]
then
	echo "prefd=$(zenity --file-selection --directory)" > $zpath/ZiK.ini;
	exit 0;
fi
######----------------------------------------------#######

if [ "$1" = "-c" ]
then
	if [ -x /usr/bin/mp32ogg ]
	then
		shift;
		cd $ipath;
		if [ $# -eq 0 ]
		then
			mp=$(zenity --file-selection --multiple --separator=' ');
			supprim=$(zenity --list --text='Effacer les fichiers mp3?' --radiolist --column='' --column='' --column='' FALSE 1 oui TRUE 2 non --hide-column=2);

			if [ $? = 1 ]
			then
				exit 1
			fi

			if [ $supprim = 1 ]
			then
				zenity --question --text='Etes vous sur de vouloir supprimer les fichier mp3 qui vont etre transformes en ogg?'
				if [ $? = 0 ]
				then
					opt_mo=--delete
				else
					zenity --warning --text='Les fichiers mp3 seront conserves'
				fi
			fi

			mp32ogg $opt_mo $mp;
			exit 0;
		else
			mp32ogg $@;
			exit 0;
		fi
	else
		zenity --error --text="mp32ogg est necessaire pour convertir vos fichier mp3 au format libre ogg \n Installer le dans /usr/bin"
		exit 1;
	fi
fi

if [ "$1" = "-f" ]
then
	shift
	cd $ipath;
	ogg123 $@;
fi

if [ "$1" = "-I" ]
then
	
	shift
	cd $ipath;
	case $1 in
	-z) opt=-z;;
	-q) opt=-q;;
	-zq | -qz) opt=-zq;;
	*) opt=-;;
	esac
	opt=$opt'@'
	ogg123 $opt $zpath/chanson.txt;
	exit 0;
fi


#---gerer la playlist--------------
action=0;
until [ $action = 6 ]
do
	cat $zpath/chanson.txt  | zenity --text-info --text='playlist actuel';
	action=$(zenity --list --text='Modifier la playlist' --radiolist --column='Choix' --column='numero' --column='Propositions' FALSE 1 'Effacer la playlist' FALSE 2 'Ajouter un(des) fichier(s)' FALSE 3 'Ajouter un(des) repertoire(s)' FALSE 4 'Importer une playlist' FALSE 5 'Exporter la playlist' TRUE 6 'lire la playlist' --hide-column=2)

	if [ $? = 1 ]
	then
		exit 1
	fi

	case $action in
	1) rm $zpath/chanson.txt;;
	2) zenity --file-selection --multiple --separator='
' >> $zpath/chanson.txt ;;
	3) zenity --file-selection --directory --multiple --separator='
' >> $zpath/chanson.txt ;;
	4) cat $(zenity --file-selection) > $zpath/chanson.txt;;
	5) cp $zpath/chanson.txt $(zenity --file-selection --save --confirm-overwrite);;
	esac
done

#---Verification des options de lecture--------
case $1 in
-z) opt=-z;;
-q) opt=-q;;
-zq | -qz) opt=-zq;;
*) opt=-;;
esac
opt=$opt'@'

#---lecture de la playlist--------
ogg123 $opt $zpath/chanson.txt

#---destruction d alias-----------
unalias zenity;

#

exit

Voici le fichier d'aide à placer dans le sous repertoire .ZiK de votre home (déjà créé si vous avez lance ZiK).

ZiK v 0.2

dependance:
zenity
ogg123
mp32ogg (uniquement pour la conversion de fichiers mp3 en fichiers ogg)

Ce script a pour but de generer une playlist audio et de lire cette liste de fichier audio
Le seul format supporte est le format ogg.
Les playlist lues sont constituee de fichiers texte ou chaque ligne est le chemin d un fichier audio ou d un repertoire. Dans ce dernier cas, tous les fichiers ogg contenu dans ce reprtoire seront lus. 

Option:
--help 	affiche l'aide.
-I 		n'affiche pas d'interface graphique, joue la derniere playlist jouee. Les options -z et -q doivent etre apelees dans un deuxieme temps. Ex: ZiK -I -zq. Il s'agit bien de i majuscule et non d'un l.
-f		joue le ou les fichier(s) audio passer en arguments. Accepte de nouvelles options dans un deuxieme temps (les memes que ogg123). Ex: ZiK -f -z *.ogg jouera les fichiers audio du repertoire courant dans un ordre aleatoire. Les noms de fichiers audio ne doivent pas contenir d espace. Utiliser ogg123 si c est le cas.
-z		joue la playlist dans un ordre aleatoire.
-q		n'affiche pas les donnees tag dans la console.
-d		permet de fixer le repertoire par defaut utilise lors des navigations.
-c		permet la conversion de fichiers mp3 en fichier ogg. ZiK -c <option> <fichier>. Donner les memes options que pour mp32ogg. Voir man mp32ogg. Les noms de fichiers ne doivent pas contenir d espace; essayer directment avec mp32ogg si c est le cas.

ZiK --help affiche l'aide.
J'en dis pas plus pour l'instant car j'aimerai bien développer l'aide en fonction de vos questions.
Je préviens: il y a sûrement plein de bugs et de plein de choses à améliorer. N'hésiter à faire des sujections et des critiques.


ZiK un lecteur audio et son blog.

Hors ligne

#2 Le 13/06/2007, à 12:45

vinc-mai

Re : script: lecteur audio

Deux petites questions:

1) j'aimerai gérer un fichier ZiK.ini dans lequel des variables serait définies par défaut (1 par ligne) et potentiellement modifiable par l'utilisateur. Lors d'une de ces modifications, il faut que je récrive le fichier ini. Je penser à le récrire entièrement (comment modifier une seule entrée?).

cat "var1=$var1" > ZiK.ini
cat "var2=$var2 >> ZiK.ini
etc.

Il aurait-il quelque chose de plus simple?

2) J'aimerai bien afficher une icône puisque zenity donne cette possibilité. Une idée Pour la création de celle-ci?
Quels sont les formats supportés  par zenity? Quelqu'un se sent capable sinon de la créer?

Dernière modification par vinc-mai (Le 13/06/2007, à 12:46)


ZiK un lecteur audio et son blog.

Hors ligne

#3 Le 13/06/2007, à 13:30

Yannick_LM

Re : script: lecteur audio

C'est marrant, y avait un post sur "réinventer la roue" y a pas longtemps ...
(Le prend pas mal )
Une solution au 1) : parcourir le fichier avec un magnifique script en perl
C'est juste histoire d'apprendre un langage de programmation sympathique, acquérir des notions sur les régexp, etc. (si c'est bien l'envie d'apprendre qui te motive)
Sinon, il y  a peut-être plus simple, je sais pas...
Peut-être du côté des Here Documents, si tu connais déjà vi, ça peut servir...


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#4 Le 13/06/2007, à 16:00

vinc-mai

Re : script: lecteur audio

Yannick_LM a écrit :

C'est marrant, y avait un post sur "réinventer la roue" y a pas longtemps ...
(Le prend pas mal )

lol Oui c'est exactement je réinvente la roue en partant d'un carré puis en passant à un pentagone, etc.

Merci pour les liens sur perl et Here Documents que je ne connais pas. Je vais regarder çà.
(vi, je m'en suis servi 1 fois et j'en garde un mauvais souvenir hmm)

J'aimerai bien faire une interface graphique (genre Dékibulle qui est le logiciel pour moi) un peu plus élaborer mais bon je commence avec zenity pour me faire la main. Je verrai si je continue avec autre chose plus tard Quoi? Aucune idée. GTk? Quel langage? Il va falloir que je me renseigne.


ZiK un lecteur audio et son blog.

Hors ligne

#5 Le 19/06/2007, à 19:39

vinc-mai

Re : script: lecteur audio

Ma petite application avance. Je crois que j'arrive au bout des possibilités offertes par zenity pour gérer l'interface.
Voici la partie du code s'occupe de la lecture des fichiers audios.

while read line
do
	nom=$(basename "$line")
	echo "tooltip: $nom" >&3
	if [[ "${nom:(-3)}" = "mp3" ]]
	then
		lect=mpg321
	else
		lect=ogg123
	fi
	$lect -q "$line" & 
	zenity --info --text="$nom \n \n \nChanson suivante?"
	if [[ $? = 1 ]]
	then
		exec 3>&-
		kill $!
		exit 0
	fi
	kill $!
done < $hpath/$lecture

Pour chaque ligne contenue dans le fichier $hpath/$lecture, le programme affiche le nom de la chanson dans la zone de notification (echo "tooltip: $nom" >&3 passe le nom à zenity --notification -listen) .
Une fenêtre  contenant le nom de la chanson s'ouvre. Si on la ferme, le programme prend fin. Si on appuye sur Ok, le programme lit la chanson suivante.

Malheureusement, lorsqu'une chanson prend fin, le programme attend qu'on appuye sur OK!! J'aimerai qu'il passe directement à la chanson suivante. Je ne vois pas comment faire.

Je vais maintenant, je pense m'orienter vers un autre langage que bash afin de gérer l'interface et les fonctions chansons suivantes/précédentes...
Je ne sais lequel choisir. Des proposition?

Sur le net, j'ai trouvé des infos sur Ruby/Gtk ou Tcl/Tk? Sont-ils appropriés? Permettent-ils d'appeler ogg123 et mpg321? Permettent-ils d'appeler des scripts en Bash?

Ce que j'aimerai à la fin c'est un fenêtre découpée en 2:
une partie ayant la liste des fichiers audios d'un répertoire et sous répertoire (explorateur audio), l'autre contenant la liste de lecture afin de pouvoir ajouter/enlever facilement des chansons.

Dernière modification par vinc-mai (Le 19/06/2007, à 19:44)


ZiK un lecteur audio et son blog.

Hors ligne

#6 Le 19/06/2007, à 20:04

Yannick_LM

Re : script: lecteur audio

Moi je pencherai plus pour Ruby.
Tiens, je suis tombé par hasard sur un topic qui en parle :
http://www.loligrub.be/forum_viewtopic.php?32.2070
La discussion est assez intéressante, y a plein de liens bien, et j'y ai appris plein de choses.


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#7 Le 19/06/2007, à 20:57

vinc-mai

Re : script: lecteur audio

Merci, je vais regarder déjà les tutos sur Ruby puis Ruby/gtk.

PS: si çà intéresse du monde je peux poster le code du lecteur en bash/zenity.
Bien que l'application ne soit peut-être pas intéressantes pour la plupart des gens.


ZiK un lecteur audio et son blog.

Hors ligne

#8 Le 19/06/2007, à 23:30

vinc-mai

Re : script: lecteur audio

Je commence à regarder ce que donne ruby.
J'ai installer par aptitude ruby ruby-gnome2 irb ruby1.8-dev (plus 2 ou 3 autres).

Je copie le code suivant dans un fichier es2.rb

require 'gtk2'

Gtk.init

windo = Gtk::Window.new
button = Gtk::Button.new('Bonjour tout le monde')
windo.add(button)

button.show
windo.show

Gtk.main

et j'obtiens une fenêtre big_smile et des erreurs hmm

 ruby es2.rb
/usr/lib/ruby/1.8/glib2.rb: line 55ruby1.8-dev
   GLib-GObject-CRITICAL **:g_boxed_type_register_static: assertion `g_type_from_name (name) == 0' failed
/usr/lib/ruby/1.8/glib2.rb: line 55
   GLib-GObject-CRITICAL **:g_param_spec_boxed: assertion `G_TYPE_IS_BOXED (boxed_type)' failed
/usr/lib/ruby/1.8/glib2.rb: line 55
   GLib-GObject-CRITICAL **:g_object_class_install_property: assertion `G_IS_PARAM_SPEC (pspec)' failed
/usr/lib/ruby/1.8/glib2.rb: line 55
   GLib-GObject-CRITICAL **:g_param_spec_boxed: assertion `G_TYPE_IS_BOXED (boxed_type)' failed
/usr/lib/ruby/1.8/glib2.rb: line 55
   GLib-GObject-CRITICAL **:g_object_class_install_property: assertion `G_IS_PARAM_SPEC (pspec)' failed

Si je de mande une fenêtre un peu plus compliqué avec 3 boutons (suite du tuto), j'obtiens toujours les erreurs mais sans la fenêtre.:(
Il y-a-t'il d'autres paquets à installer.


ZiK un lecteur audio et son blog.

Hors ligne