une ancienne version
This commit is contained in:
		
							parent
							
								
									04544e9500
								
							
						
					
					
						commit
						1584115e8b
					
				
							
								
								
									
										3
									
								
								Ecoute/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Ecoute/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
 | 
			
		||||
ecoute
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										60
									
								
								Ecoute/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Ecoute/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
			
		||||
#----------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
#	abominable sound console player
 | 
			
		||||
#	by Thierry 'tth' Boudet		- build on Slackware.
 | 
			
		||||
#
 | 
			
		||||
#	Recent versions: http://tontonth.free.fr/
 | 
			
		||||
#	complains go to "tontonth O free o fr".
 | 
			
		||||
#
 | 
			
		||||
#----------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
VERSION=0.0036
 | 
			
		||||
 | 
			
		||||
TEKFLAG= -DDEBUG_LEVEL=1 -g
 | 
			
		||||
CFLAGS=-Wall -Wextra -ansi  $(TEKFLAG) -DVERSION=\"$(VERSION)\"
 | 
			
		||||
BIBS=-lncurses -lao -lsndfile -logg
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
all:	ecoute
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
main.o:		main.c		ecoute.h	Makefile
 | 
			
		||||
ecran.o:	ecran.c		ecoute.h	Makefile
 | 
			
		||||
dump.o:		dump.c		ecoute.h	Makefile
 | 
			
		||||
magic.o:	magic.c		ecoute.h	Makefile
 | 
			
		||||
interactive.o:	interactive.c	ecoute.h	Makefile
 | 
			
		||||
fonctions.o:	fonctions.c	ecoute.h	Makefile
 | 
			
		||||
ifao.o:		ifao.c		ecoute.h	Makefile
 | 
			
		||||
playwav.o:	playwav.c	ecoute.h	Makefile
 | 
			
		||||
playnote.o:	playnote.c	ecoute.h	Makefile
 | 
			
		||||
playau.o:	playau.c	ecoute.h	Makefile
 | 
			
		||||
playogg.o:	playogg.c	ecoute.h	Makefile
 | 
			
		||||
playspeex.o:	playspeex.c	ecoute.h	Makefile
 | 
			
		||||
playflac.o:	playflac.c	ecoute.h	Makefile
 | 
			
		||||
 | 
			
		||||
OBJ=main.o ecran.o playnote.o playwav.o playogg.o fonctions.o interactive.o \
 | 
			
		||||
	dump.o playau.o playspeex.o playflac.o magic.o ifao.o
 | 
			
		||||
 | 
			
		||||
ecoute:		$(OBJ)
 | 
			
		||||
	gcc $(TEKFLAG) $(OBJ) $(BIBS) -o ecoute
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------
 | 
			
		||||
#  services targets
 | 
			
		||||
 | 
			
		||||
FILES=*.c *.h *.txt Makefile *.man *.html
 | 
			
		||||
 | 
			
		||||
install:	ecoute
 | 
			
		||||
	cp ./ecoute /usr/local/bin
 | 
			
		||||
 | 
			
		||||
lines:
 | 
			
		||||
	wc  $(FILES) | sort -n
 | 
			
		||||
 | 
			
		||||
tarball: $(FILES)
 | 
			
		||||
	ls $^ > MANIFEST ;			\
 | 
			
		||||
	( cd .. ;				\
 | 
			
		||||
	tar zcvf ecoute-$(VERSION).tar.gz `sed 's/^/Ecoute\//' Ecoute/MANIFEST` )
 | 
			
		||||
	date >> tarball
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------
 | 
			
		||||
							
								
								
									
										21
									
								
								Ecoute/README.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								Ecoute/README.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
 | 
			
		||||
 4 Feb 2005 : this is a new project. I want a console player for ogg/wav
 | 
			
		||||
	audiofiles, and may be ogg & speex.
 | 
			
		||||
	who suit my needs: standalone, lowcost, easytouse.
 | 
			
		||||
 | 
			
		||||
 You need libsndfile and libao installed.
 | 
			
		||||
 | 
			
		||||
 I DON'T know the technic for playing .ogg files :(
 | 
			
		||||
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
TODO:
 | 
			
		||||
	- build the ogg player *now*
 | 
			
		||||
	- rename some files, because the 'info displayer' go in the
 | 
			
		||||
	  same file as the player.
 | 
			
		||||
	- write a better english.
 | 
			
		||||
	- build a function for detecting sound file with a bad .EXT
 | 
			
		||||
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
						- Thierry 'tTh' Boudet -
 | 
			
		||||
							
								
								
									
										88
									
								
								Ecoute/dump.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								Ecoute/dump.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,88 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	dump.c
 | 
			
		||||
 *	======	debug module for 'Ecoute' - 2005.03.06
 | 
			
		||||
 *
 | 
			
		||||
 *  Warning: gruik coding inside.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include    <unistd.h>
 | 
			
		||||
#include    <fcntl.h>
 | 
			
		||||
#include    <string.h>
 | 
			
		||||
#include    <ctype.h>
 | 
			
		||||
#include    "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
#define T_BUFF_HEX	(16*16)
 | 
			
		||||
 | 
			
		||||
int hexadump(char *fname, WINDOW *w)
 | 
			
		||||
{
 | 
			
		||||
int		fd;
 | 
			
		||||
unsigned char	buffer[T_BUFF_HEX];
 | 
			
		||||
int		lig, col, idx;
 | 
			
		||||
char		chaine[10], lettre;
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, "hexadump of %s\n", fname);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
if ( (fd=open(fname, O_RDONLY)) < 0 )
 | 
			
		||||
	{
 | 
			
		||||
	mvwaddstr(w, 2, 2, "err open");		wrefresh(w);
 | 
			
		||||
	getch();
 | 
			
		||||
	return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ( T_BUFF_HEX != read(fd, buffer, T_BUFF_HEX) )
 | 
			
		||||
	{
 | 
			
		||||
	mvwaddstr(w, 2, 2, "err read");		wrefresh(w);
 | 
			
		||||
	getch();
 | 
			
		||||
	}
 | 
			
		||||
close(fd);
 | 
			
		||||
 | 
			
		||||
for (lig=0; lig<16; lig++)
 | 
			
		||||
	{
 | 
			
		||||
	for (col=0; col<16; col++)
 | 
			
		||||
		{
 | 
			
		||||
		idx = (lig*16) + col;
 | 
			
		||||
		sprintf(chaine, "%02x", buffer[idx]);
 | 
			
		||||
		mvwaddstr(w, lig+1, (col*3)+1, chaine);
 | 
			
		||||
		if (isprint(buffer[idx]))
 | 
			
		||||
			lettre = buffer[idx];
 | 
			
		||||
		else
 | 
			
		||||
			lettre = '.';
 | 
			
		||||
		mvwaddch(w, lig+1, col+50, lettre);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
wrefresh(w);
 | 
			
		||||
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	public entry point.
 | 
			
		||||
 */
 | 
			
		||||
int dump_this_file(char *fname, int flag)
 | 
			
		||||
{
 | 
			
		||||
WINDOW		*popup;
 | 
			
		||||
int		foo;
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">> dump_this_file ( '%s' %d )\n", fname, flag);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
popup = newwin(18, 68, L_POPUP, C_POPUP);
 | 
			
		||||
bordure(popup, 1);
 | 
			
		||||
mvwaddstr(popup, 0, 2, "{{ dump of ");
 | 
			
		||||
mvwaddstr(popup, 0, 13, fname);
 | 
			
		||||
mvwaddstr(popup, 0, 13+strlen(fname), " }}");
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
 | 
			
		||||
foo = hexadump(fname, popup);
 | 
			
		||||
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
getch();
 | 
			
		||||
delwin(popup);	
 | 
			
		||||
touchwin(stdscr); refresh();
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										100
									
								
								Ecoute/ecoute.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								Ecoute/ecoute.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,100 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	ecoute.h
 | 
			
		||||
 *	--------		Fevrier 2005 a Frontignan-Plage
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#include  <ncurses.h>
 | 
			
		||||
 | 
			
		||||
#define		T_BUFFER	8192
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
void	about(void);
 | 
			
		||||
void	help(void);
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	ecran.c - ncurses related functions and global vars.
 | 
			
		||||
 */
 | 
			
		||||
#define		L_POPUP		5
 | 
			
		||||
#define		C_POPUP		9
 | 
			
		||||
 | 
			
		||||
void	bordure(WINDOW * w, int flag);
 | 
			
		||||
int	progress_bar(WINDOW *win, long val, long maxval, int type);
 | 
			
		||||
void	prepare_ecran(void);
 | 
			
		||||
void	say_goodbye(void);
 | 
			
		||||
 | 
			
		||||
extern int	couleur;
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	interactive.c - choice a file to play
 | 
			
		||||
 */
 | 
			
		||||
#define SORT_NAME_A	1
 | 
			
		||||
#define SORT_NAME_B	2
 | 
			
		||||
 | 
			
		||||
int	fileselector(void);
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	sound file types
 | 
			
		||||
 */
 | 
			
		||||
#define		SON_UNKNOW	0
 | 
			
		||||
#define		SON_NOTE	42
 | 
			
		||||
#define		SON_WAV		95
 | 
			
		||||
#define		SON_OGG		20
 | 
			
		||||
#define		SON_SPEEX	21
 | 
			
		||||
#define		SON_FLAC	22
 | 
			
		||||
#define		SON_AU		128
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	players functions
 | 
			
		||||
 */
 | 
			
		||||
int	note_player(char *fname, WINDOW *popup);
 | 
			
		||||
int	wav_player(char *fname, WINDOW *popup);
 | 
			
		||||
int	au_player(char *fname, WINDOW *popup);
 | 
			
		||||
int	ogg_player(char *fname, WINDOW *popup);
 | 
			
		||||
int	speex_player(char *fname, WINDOW *popup);
 | 
			
		||||
int	flac_player(char *fname, WINDOW *popup);
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	_magic.c_ 	check if the file is a sound file.
 | 
			
		||||
 */
 | 
			
		||||
int	magic_detect(char *filename, long *pb);
 | 
			
		||||
void	magic_plop(int type);
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	'fonctions.c'
 | 
			
		||||
 */
 | 
			
		||||
long	taille_fichier(int fd);
 | 
			
		||||
int	type_du_fichier(char *nom);
 | 
			
		||||
char	*type2ext(int type);
 | 
			
		||||
char	*type2descr(int type);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	Flags  is a bitfield
 | 
			
		||||
 */
 | 
			
		||||
int	play_this_file(char *nom, int type, int flags);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	new, 18 Avril 2005, proto may change.
 | 
			
		||||
 */
 | 
			
		||||
int	info_about_this_file(char *nom, int type);
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	hexadecimal dumper.
 | 
			
		||||
 */
 | 
			
		||||
int	dump_this_file(char *fname, int flag);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	libao technical interface
 | 
			
		||||
 */
 | 
			
		||||
int	init_sound_output(char *dev, int k);
 | 
			
		||||
int	setup_sound_output(int splr, int nbch);
 | 
			
		||||
int	start_sound_output(int k);
 | 
			
		||||
int	stop_sound_output(int k);
 | 
			
		||||
int	infos_sound_output(char *title);
 | 
			
		||||
 | 
			
		||||
void	infos_driver_son(void);
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										49
									
								
								Ecoute/ecoute.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								Ecoute/ecoute.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
<title>Ecoute, c'est du Tonton Th</title>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<h1 align=center>Ecoute</h1>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Le tinyware <tt>ecoute</tt> est un embryon de <i>player</i> de fichiers
 | 
			
		||||
son, destiné à un usage <i>one-shoot</i>: vous le lancez, il démarre
 | 
			
		||||
en moins d'une seconde, vous choisissez le fichier à écouter, et
 | 
			
		||||
voilà, c'est fini...
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
Pour le moment, il sait lire les <tt>.wav</tt>, les <tt>.au</tt>
 | 
			
		||||
et un format étrange que j'utilise pour mes diverses expériences
 | 
			
		||||
sonores. Vous êtes prévenus, c'est un bricolage.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<h2 align=center><a href="ecoute.tar.gz">download</a></h2>
 | 
			
		||||
 | 
			
		||||
<p align="center"><img src="ecoute-help.gif" alt="capture fenetre aide"></p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<p align="center"><img src="ecoute-dump.gif" alt="capture fenetre dump"></p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
La prochaine étape sera la lecture des <tt>.ogg</tt>, suivie de peu
 | 
			
		||||
par les <tt>.speex</tt>. Quand ces deux formats seront assimilés,
 | 
			
		||||
je me pencherais volontiers sur des améliorations de l'interface
 | 
			
		||||
utilisateur, afin d'en faire un truc encore plus <i>one-shoot</i>,
 | 
			
		||||
tout en conservant l'aspect glamour de l'interface ncurses.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
C'est fait sur, et pour, du Linux. Il faut avoir les bibliothèques
 | 
			
		||||
<tt>libsndfile</tt>, <tt>libogg</tt> et <tt>libao</tt> installées.
 | 
			
		||||
A priori, c'est
 | 
			
		||||
portable vers d'autres variantes d'Unix. D'ailleurs, je vais
 | 
			
		||||
essayer de le faire tourner dans OpenBSD un de ces soirs, parce
 | 
			
		||||
que bon, ya pas de raisons que ça ne marche pas.
 | 
			
		||||
Enfin, si il y en a, on va bientôt savoir lesquelles...
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										30
									
								
								Ecoute/ecoute.man
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Ecoute/ecoute.man
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
.TH Ecoute 1 "2005 September" "various OS" "Tonton Th"
 | 
			
		||||
 | 
			
		||||
.SH NAME
 | 
			
		||||
ecoute \- ncurses based note,wav,ogg,au player.
 | 
			
		||||
 | 
			
		||||
.SH SYNOPSYS
 | 
			
		||||
\fBecoute\fP 
 | 
			
		||||
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
No command-line available.
 | 
			
		||||
 | 
			
		||||
.SH INTERACTIVE
 | 
			
		||||
This player is a real ncurses based interactive software.
 | 
			
		||||
Full of bugs, a lot of to_be_done functions. You can try
 | 
			
		||||
the '?' key at main screen.
 | 
			
		||||
 | 
			
		||||
.SH CONFIG FILE
 | 
			
		||||
All your config files are belong to us. 
 | 
			
		||||
 | 
			
		||||
.SH WHAT IS A .note FILE ?
 | 
			
		||||
This a raw, monophonic, 16 bits, 24000 smpl/s binary file.
 | 
			
		||||
You can seek the web for a 'ziktth' software if you need more informations.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.SH AUTHOR(S)
 | 
			
		||||
Thierry (aka tth) Boudet. http://tboudet.free.fr/
 | 
			
		||||
 | 
			
		||||
.SH DEDICACE
 | 
			
		||||
This software is dedicated to DEC, who build the pdp11.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										119
									
								
								Ecoute/ecran.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								Ecoute/ecran.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,119 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	ecran.c
 | 
			
		||||
 *	-------
 | 
			
		||||
 * 
 | 
			
		||||
 *  Maybe, one day, we can have colors...
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include  <stdlib.h>
 | 
			
		||||
#include  <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include  "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	global variables
 | 
			
		||||
 */
 | 
			
		||||
int	couleur = 0;
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
void bordure(WINDOW * w, int flag)
 | 
			
		||||
{
 | 
			
		||||
if (flag)
 | 
			
		||||
	box(w, 0, 0);
 | 
			
		||||
else
 | 
			
		||||
	wborder(w, '|', '|', '-', '-', '+', '+', '+', '+');
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int alerte(char *texte, int flag)
 | 
			
		||||
{
 | 
			
		||||
/*
 | 
			
		||||
 * this func is a stub. real implementation for the next release.
 | 
			
		||||
 */
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
#define T_MAX_PB 90
 | 
			
		||||
int	progress_bar(WINDOW *win, long val, long maxval, int type)
 | 
			
		||||
{
 | 
			
		||||
int	foo, largeur;
 | 
			
		||||
int	larg_win, haut_win;
 | 
			
		||||
int	curseur;
 | 
			
		||||
char	chaine[T_MAX_PB+1];
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	premier defi, retrouver largeur et hauteur de la fenetre
 | 
			
		||||
 */
 | 
			
		||||
larg_win = getmaxx(win);
 | 
			
		||||
haut_win = getmaxy(win);
 | 
			
		||||
 | 
			
		||||
largeur = (T_MAX_PB<larg_win ? T_MAX_PB : larg_win) - 6;
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
sprintf(chaine, "> x %-4d y %-4d l %-4d <", larg_win, haut_win, largeur);
 | 
			
		||||
mvwaddstr(win, 1, 1, chaine);
 | 
			
		||||
wrefresh(win);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
curseur = (val*largeur) / maxval;
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
fprintf(stderr, "maxval %ld  val %ld  largeur %d  curseur %d\n",
 | 
			
		||||
			maxval, val, largeur, curseur);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
chaine[0] = '[', chaine[largeur] = ']', chaine[largeur+1] = '\0';
 | 
			
		||||
for (foo=1; foo<largeur; foo++)
 | 
			
		||||
	{
 | 
			
		||||
	if (foo<curseur)
 | 
			
		||||
		chaine[foo] = 'o';
 | 
			
		||||
	else
 | 
			
		||||
		chaine[foo] = '-';
 | 
			
		||||
	}
 | 
			
		||||
mvwaddstr(win, haut_win-3, 2, chaine);
 | 
			
		||||
wrefresh(win);
 | 
			
		||||
 | 
			
		||||
foo = 42;
 | 
			
		||||
return foo;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
void termine_ecran(void)
 | 
			
		||||
{
 | 
			
		||||
endwin();	exit(0);
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
void prepare_ecran(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">>> %s ( )\n", __func__);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
initscr();
 | 
			
		||||
 | 
			
		||||
if (has_colors())
 | 
			
		||||
	{
 | 
			
		||||
	use_default_colors();
 | 
			
		||||
	couleur = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
nonl();		cbreak();	noecho();
 | 
			
		||||
 | 
			
		||||
keypad(stdscr, TRUE);		/* acces aux touches 'curseur' */
 | 
			
		||||
 | 
			
		||||
bordure(stdscr, 1);
 | 
			
		||||
standout();
 | 
			
		||||
mvaddstr(0, 5, "{ Ecoute v " VERSION " - by tTh }");
 | 
			
		||||
mvaddstr(LINES-1, 5, "{ hit '?' for help, 'Q' for quit }");
 | 
			
		||||
standend();
 | 
			
		||||
refresh();
 | 
			
		||||
 | 
			
		||||
atexit(termine_ecran);
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
void	say_goodbye(void)
 | 
			
		||||
{
 | 
			
		||||
bordure(stdscr, 0);
 | 
			
		||||
wrefresh(stdscr);
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										223
									
								
								Ecoute/fonctions.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										223
									
								
								Ecoute/fonctions.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,223 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	fonctions.c		Ecoute: a sound player.
 | 
			
		||||
 *	-----------		23 Fev 2005 - dans le froid de Frontignan
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include    <stdio.h>
 | 
			
		||||
#include    <string.h>
 | 
			
		||||
#include    <sys/types.h>
 | 
			
		||||
#include    <sys/stat.h>
 | 
			
		||||
 | 
			
		||||
#include    "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
long	taille_fichier(int fd)
 | 
			
		||||
{
 | 
			
		||||
struct stat	st;
 | 
			
		||||
int		foo;
 | 
			
		||||
foo = fstat(fd, &st);
 | 
			
		||||
if (foo) {
 | 
			
		||||
	perror("fonctions.c:18 fstat");
 | 
			
		||||
	return -1;
 | 
			
		||||
	}
 | 
			
		||||
return st.st_size;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
struct un_type_de_fichier {
 | 
			
		||||
	char	*extension;
 | 
			
		||||
	int	numtype;
 | 
			
		||||
	char	*descr;
 | 
			
		||||
	} types_de_fichiers[] =
 | 
			
		||||
{
 | 
			
		||||
 {	".note",	SON_NOTE,	"tTh .note files"		},
 | 
			
		||||
 {	".wav",		SON_WAV,	"Microsoft Wave"		},
 | 
			
		||||
 {	".ogg",		SON_OGG,	"Xiph Ogg/Vorbis"		},
 | 
			
		||||
 {	".speex",	SON_SPEEX,	"Xiph Compressed speach"	},
 | 
			
		||||
 {	".au",		SON_AU,		"Sun/NeXT audio data"		},
 | 
			
		||||
 {	".flac",	SON_FLAC,	"Free Lossless Audio Codec"	},
 | 
			
		||||
};
 | 
			
		||||
#define NBR_TYPES 	\
 | 
			
		||||
	(sizeof(types_de_fichiers)/sizeof(struct un_type_de_fichier))
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	this function is based on the .extension of the filename.
 | 
			
		||||
 *	this is a very crude system, because we run on Unix, where
 | 
			
		||||
 *	file extensions are not a hard law.
 | 
			
		||||
 *
 | 
			
		||||
 *	see also 'magic.c' for a more advanced function...
 | 
			
		||||
 */
 | 
			
		||||
int	type_du_fichier(char *nom)
 | 
			
		||||
{
 | 
			
		||||
int		foo, len_nom, len_ext;
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
fprintf(stderr, "type_du_fichier(%s)\n", nom);
 | 
			
		||||
#endif
 | 
			
		||||
len_nom = strlen(nom);
 | 
			
		||||
for (foo=0; foo<NBR_TYPES; foo++)
 | 
			
		||||
	{
 | 
			
		||||
	len_ext = strlen(types_de_fichiers[foo].extension);
 | 
			
		||||
	if ( (len_nom > len_ext) &&
 | 
			
		||||
	     !strcmp(nom+(len_nom-len_ext), types_de_fichiers[foo].extension) )
 | 
			
		||||
		{
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
		fprintf(stderr, "   found %s\n", types_de_fichiers[foo].descr);
 | 
			
		||||
#endif
 | 
			
		||||
		return(types_de_fichiers[foo].numtype);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
fprintf(stderr, "    fail...\n");
 | 
			
		||||
#endif
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
char	*type2ext(int type)
 | 
			
		||||
{
 | 
			
		||||
int	foo;
 | 
			
		||||
 | 
			
		||||
if (type == SON_UNKNOW)
 | 
			
		||||
	return "unknow";
 | 
			
		||||
 | 
			
		||||
for (foo=0; foo<NBR_TYPES; foo++)
 | 
			
		||||
	{
 | 
			
		||||
	if (type==types_de_fichiers[foo].numtype)
 | 
			
		||||
		return (types_de_fichiers[foo].extension)+1;
 | 
			
		||||
	}
 | 
			
		||||
return "???";
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
char	*type2descr(int type)
 | 
			
		||||
{
 | 
			
		||||
int	foo;
 | 
			
		||||
 | 
			
		||||
if (type == SON_UNKNOW)
 | 
			
		||||
	return "unknow";
 | 
			
		||||
 | 
			
		||||
for (foo=0; foo<NBR_TYPES; foo++)
 | 
			
		||||
	{
 | 
			
		||||
	if (type==types_de_fichiers[foo].numtype)
 | 
			
		||||
		return (types_de_fichiers[foo].descr);
 | 
			
		||||
	}
 | 
			
		||||
return "lp0 on fire";
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int	play_this_file(char *nom, int type, int flags)
 | 
			
		||||
{
 | 
			
		||||
int		foo;
 | 
			
		||||
WINDOW		*popup;
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">>> %s ( '%s' %d 0x%x )\n", __func__, nom, type, flags);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	ncurses initial stuff
 | 
			
		||||
 */
 | 
			
		||||
popup = newwin(12, 60, L_POPUP, C_POPUP);
 | 
			
		||||
bordure(popup, 1);
 | 
			
		||||
/* wstandout(popup); */
 | 
			
		||||
mvwaddstr(popup, 0, 2, "{ playing ");
 | 
			
		||||
mvwaddstr(popup, 0, 12, nom);
 | 
			
		||||
mvwaddstr(popup, 0, 12+strlen(nom), " }");
 | 
			
		||||
/*wstandend(popup); */
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
 | 
			
		||||
foo = start_sound_output(0);
 | 
			
		||||
 | 
			
		||||
switch (type)
 | 
			
		||||
	{
 | 
			
		||||
	case SON_NOTE:
 | 
			
		||||
		foo = note_player(nom, popup);
 | 
			
		||||
		break;	
 | 
			
		||||
	case SON_WAV:
 | 
			
		||||
		foo = wav_player(nom, popup);
 | 
			
		||||
		break;
 | 
			
		||||
	case SON_OGG:
 | 
			
		||||
		foo = ogg_player(nom, popup);
 | 
			
		||||
		break;
 | 
			
		||||
	case SON_AU:
 | 
			
		||||
		foo = au_player(nom, popup);
 | 
			
		||||
		break;
 | 
			
		||||
	case SON_SPEEX:
 | 
			
		||||
		foo = speex_player(nom, popup);
 | 
			
		||||
		break;
 | 
			
		||||
	case SON_FLAC:
 | 
			
		||||
		foo = flac_player(nom, popup);
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
foo = stop_sound_output(0);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	screen washing.
 | 
			
		||||
 */
 | 
			
		||||
delwin(popup);
 | 
			
		||||
touchwin(stdscr);	refresh();
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, "    end of %s\n", __func__);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
return foo;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int	info_about_this_file(char *nom, int type)
 | 
			
		||||
{
 | 
			
		||||
int		foo;
 | 
			
		||||
WINDOW		*popup;
 | 
			
		||||
char		chaine[100];
 | 
			
		||||
struct stat	st;
 | 
			
		||||
long		magicbits;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	ncurses initial stuff
 | 
			
		||||
 */
 | 
			
		||||
popup = newwin(12, 64, L_POPUP, C_POPUP);
 | 
			
		||||
bordure(popup, 1);
 | 
			
		||||
wstandout(popup);
 | 
			
		||||
mvwaddstr(popup, 0, 2, "{ infos about ");
 | 
			
		||||
mvwaddstr(popup, 0, 16, nom);
 | 
			
		||||
mvwaddstr(popup, 0, 16+strlen(nom), " }");
 | 
			
		||||
wstandend(popup);
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	filesystem infos
 | 
			
		||||
 */
 | 
			
		||||
foo = stat(nom, &st);
 | 
			
		||||
if (foo != 0)
 | 
			
		||||
	{
 | 
			
		||||
	mvwaddstr(popup, 3, 2, "hu ho, stat failed ?");
 | 
			
		||||
	}
 | 
			
		||||
else
 | 
			
		||||
	{
 | 
			
		||||
	sprintf(chaine, "owned by:  user id %d, group id %d", 
 | 
			
		||||
			st.st_uid, st.st_gid);
 | 
			
		||||
	mvwaddstr(popup, 3, 2, chaine);
 | 
			
		||||
	sprintf(chaine, "size:      %ld bytes ", st.st_size);
 | 
			
		||||
	mvwaddstr(popup, 4, 2, chaine);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	internals infos
 | 
			
		||||
 */
 | 
			
		||||
foo = magic_detect(nom, &magicbits);
 | 
			
		||||
sprintf(chaine, "magic_detect: %4d", foo);
 | 
			
		||||
mvwaddstr(popup, 8, 2, chaine);
 | 
			
		||||
mvwaddstr(popup, 8, 25, type2descr(foo));
 | 
			
		||||
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
getch();
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	screen cleanup.
 | 
			
		||||
 */
 | 
			
		||||
delwin(popup);
 | 
			
		||||
touchwin(stdscr);	refresh();
 | 
			
		||||
 | 
			
		||||
return foo;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										141
									
								
								Ecoute/ifao.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								Ecoute/ifao.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,141 @@
 | 
			
		||||
/*
 | 
			
		||||
 *		ifao.c		(libao interface)
 | 
			
		||||
 *		------
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include    <stdlib.h>
 | 
			
		||||
#include    <unistd.h>
 | 
			
		||||
#include    <string.h>
 | 
			
		||||
#include    <ao/ao.h>
 | 
			
		||||
 | 
			
		||||
#include    "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	privates variables of this module. MUST be static !
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define TBUF	100
 | 
			
		||||
 | 
			
		||||
static int			isactive;
 | 
			
		||||
static char			devname[TBUF+1];
 | 
			
		||||
static ao_sample_format		AOSF;
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 */
 | 
			
		||||
int setup_sound_output(int splr, int nbch)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">>> %s ( %d %d )\n", __func__, splr, nbch);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
if (splr)	AOSF.rate        = splr;
 | 
			
		||||
if (nbch)	AOSF.channels    = nbch;
 | 
			
		||||
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	initialisation of this module who MUST be called
 | 
			
		||||
 *	before any use of this module !
 | 
			
		||||
 */
 | 
			
		||||
int   init_sound_output(char *device, int k)
 | 
			
		||||
{
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">>> %s ( '%s' %d )\n", __func__, device, k);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* some default values */
 | 
			
		||||
AOSF.rate 		= 44100;
 | 
			
		||||
AOSF.channels		= 2;
 | 
			
		||||
AOSF.bits		= 16;
 | 
			
		||||
AOSF.byte_format	= AO_FMT_LITTLE;		/* XXX ??? */
 | 
			
		||||
 | 
			
		||||
/*  XXX    see the libao documentation for exact syntax */
 | 
			
		||||
if (TBUF < strlen(device)) {
 | 
			
		||||
	fprintf(stderr, "buffer overflow in %s\n", __func__);
 | 
			
		||||
	exit(1);
 | 
			
		||||
	}
 | 
			
		||||
strcpy(devname, device);
 | 
			
		||||
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int   start_sound_output(int k)
 | 
			
		||||
{
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">>> %s ( %d )\n", __func__, k);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int   stop_sound_output(int k)
 | 
			
		||||
{
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">>> %s ( %d )\n", __func__, k);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int   infos_sound_output(char *title)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
if (NULL==title) {
 | 
			
		||||
	abort();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
fprintf(stderr, "   +------ snd out infos (%s)\n", title);
 | 
			
		||||
fprintf(stderr, "   |  device name      '%s'\n", devname);
 | 
			
		||||
fprintf(stderr, "   |  sample rate      %d\n", AOSF.rate);
 | 
			
		||||
fprintf(stderr, "   |  channels         %d\n", AOSF.channels );
 | 
			
		||||
fprintf(stderr, "   |  bits/smpl        %d\n", AOSF.bits );
 | 
			
		||||
fprintf(stderr, "   |  is active ?      %s\n", isactive ? "yes" : "no");
 | 
			
		||||
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
void  infos_driver_son(void)
 | 
			
		||||
{
 | 
			
		||||
int		foo;
 | 
			
		||||
WINDOW		*popup;
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">>> %s ( )\n", __func__);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define VID_INV 0
 | 
			
		||||
 | 
			
		||||
popup = newwin(12, 60, L_POPUP, C_POPUP);
 | 
			
		||||
bordure(popup, 1);
 | 
			
		||||
#if VID_INV
 | 
			
		||||
wstandout(popup);
 | 
			
		||||
#endif
 | 
			
		||||
mvwaddstr(popup, 0, 2, "{{ sound driver }}");
 | 
			
		||||
#if VID_INV
 | 
			
		||||
wstandend(popup);
 | 
			
		||||
#endif
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
 | 
			
		||||
foo = start_sound_output(0);
 | 
			
		||||
if (foo) {
 | 
			
		||||
	fprintf(stderr, "  %s: start_sound_output -> %d\n", __func__, foo);
 | 
			
		||||
	}
 | 
			
		||||
foo = stop_sound_output(0);
 | 
			
		||||
if (foo) {
 | 
			
		||||
	fprintf(stderr, "  %s: stop_sound_output -> %d\n", __func__, foo);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
mvwaddstr(popup,  4, 9, "* function not implemented *");
 | 
			
		||||
mvwaddstr(popup, 11, 2, "{{ hit any key to reboot }}");
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
getch();
 | 
			
		||||
delwin(popup);
 | 
			
		||||
touchwin(stdscr);	refresh();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										301
									
								
								Ecoute/interactive.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										301
									
								
								Ecoute/interactive.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,301 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	fileselector.c
 | 
			
		||||
 *	--------------		18 Fevrier 2005.
 | 
			
		||||
 *
 | 
			
		||||
 *	some code borrowed from 'Visual Hexdiff' :-)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include    <stdio.h>
 | 
			
		||||
#include    <stdlib.h>
 | 
			
		||||
#include    <string.h>
 | 
			
		||||
#include    <sys/time.h>
 | 
			
		||||
#include    <sys/stat.h>
 | 
			
		||||
#include    <dirent.h>
 | 
			
		||||
#include    <errno.h>
 | 
			
		||||
 | 
			
		||||
#include    "ecoute.h"
 | 
			
		||||
 | 
			
		||||
extern char *strdup(const char *);		/* WTF? */
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
typedef struct {
 | 
			
		||||
	long		smplrate;
 | 
			
		||||
	short		channels;
 | 
			
		||||
	short		type;
 | 
			
		||||
	} FICH_SON;
 | 
			
		||||
 | 
			
		||||
typedef struct  {
 | 
			
		||||
	long		taille;
 | 
			
		||||
	char		*nom;
 | 
			
		||||
	int		idx;
 | 
			
		||||
	time_t		epochtime;
 | 
			
		||||
	FICH_SON	son;
 | 
			
		||||
	} FICH;
 | 
			
		||||
	
 | 
			
		||||
static FICH	*liste;
 | 
			
		||||
static int	taille;		/* taille de la liste */
 | 
			
		||||
static int	nombre;		/* nbre d'entrées dans la liste */
 | 
			
		||||
 | 
			
		||||
#define		TCHONK	42
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	return 1 if we can safely read the file
 | 
			
		||||
 */
 | 
			
		||||
int	teste_fichier(char *nom, struct stat *stb, int flag)
 | 
			
		||||
{
 | 
			
		||||
int		foo;
 | 
			
		||||
foo = stat(nom, stb);
 | 
			
		||||
if (foo) {
 | 
			
		||||
	fprintf(stderr, "in %s stat -> %d\n", __func__, errno);
 | 
			
		||||
	}
 | 
			
		||||
if (S_ISDIR(stb->st_mode))	return 0;
 | 
			
		||||
/* XXX
 | 
			
		||||
 *	check if the file is readable
 | 
			
		||||
 */
 | 
			
		||||
return 1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*
 | 
			
		||||
 *	dedicated comparaison functions for sorting in the file selector.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
static int cmp_name_asc(const void *a, const void *b)
 | 
			
		||||
{ return strcmp( ((FICH *)a)->nom, ((FICH *)b)->nom); }
 | 
			
		||||
static int cmp_name_dsc(const void *a, const void *b)
 | 
			
		||||
{ return strcmp( ((FICH *)b)->nom, ((FICH *)a)->nom); }
 | 
			
		||||
 | 
			
		||||
static int cmp_idx_asc(const void *a, const void *b)
 | 
			
		||||
{ return ((FICH *)a)->idx - ((FICH *)b)->idx; }
 | 
			
		||||
static int cmp_idx_dsc(const void *a, const void *b)
 | 
			
		||||
{ return ((FICH *)b)->idx - ((FICH *)a)->idx; }
 | 
			
		||||
 | 
			
		||||
static int cmp_size_asc(const void *a, const void *b)
 | 
			
		||||
{ return ((FICH *)a)->taille - ((FICH *)b)->taille; }
 | 
			
		||||
static int cmp_size_dsc(const void *a, const void *b)
 | 
			
		||||
{ return ((FICH *)b)->taille - ((FICH *)a)->taille; }
 | 
			
		||||
 | 
			
		||||
/* and sorting by date ? */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int	trier_la_liste(int mode)
 | 
			
		||||
{
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, "tri de la liste, mode=%d\n", mode);
 | 
			
		||||
#endif
 | 
			
		||||
switch(mode)
 | 
			
		||||
	{
 | 
			
		||||
	case 1:
 | 
			
		||||
		qsort(liste, nombre, sizeof(FICH), cmp_name_asc);
 | 
			
		||||
		break;
 | 
			
		||||
	case 2:
 | 
			
		||||
		qsort(liste, nombre, sizeof(FICH), cmp_name_dsc);
 | 
			
		||||
		break;
 | 
			
		||||
	case 3:
 | 
			
		||||
		qsort(liste, nombre, sizeof(FICH), cmp_size_asc);
 | 
			
		||||
		break;
 | 
			
		||||
	case 4:
 | 
			
		||||
		qsort(liste, nombre, sizeof(FICH), cmp_size_dsc);
 | 
			
		||||
		break;
 | 
			
		||||
	case 10:
 | 
			
		||||
		qsort(liste, nombre, sizeof(FICH), cmp_idx_asc);
 | 
			
		||||
		break;
 | 
			
		||||
	case 11:
 | 
			
		||||
		qsort(liste, nombre, sizeof(FICH), cmp_idx_dsc);
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int	faire_la_liste(void)
 | 
			
		||||
{
 | 
			
		||||
DIR		*dir;
 | 
			
		||||
struct dirent	*de;
 | 
			
		||||
struct stat	statbuf;
 | 
			
		||||
int		foo, type;
 | 
			
		||||
int		devine;
 | 
			
		||||
long		magicbits;
 | 
			
		||||
 | 
			
		||||
if ( NULL == (liste = malloc(TCHONK*sizeof(FICH))) )
 | 
			
		||||
	{
 | 
			
		||||
	fprintf(stderr, "\nno memory in file-listing\n");
 | 
			
		||||
	abort();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
dir = opendir(".");
 | 
			
		||||
if (dir == NULL) { abort(); }		/* XXX hard failure */
 | 
			
		||||
 | 
			
		||||
nombre = 0;
 | 
			
		||||
while ( (de=readdir(dir)) != NULL)
 | 
			
		||||
	{
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
#endif
 | 
			
		||||
	if ( ! teste_fichier(de->d_name, &statbuf, 0) )
 | 
			
		||||
		{
 | 
			
		||||
		continue;
 | 
			
		||||
		}
 | 
			
		||||
	type = type_du_fichier(de->d_name);
 | 
			
		||||
	if (type < 0)
 | 
			
		||||
		{
 | 
			
		||||
		continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	/* use the magic system (new 13 mai, may be bugged) */
 | 
			
		||||
	devine = magic_detect(de->d_name, &magicbits);
 | 
			
		||||
	fprintf(stderr, "%s %s %d\n", __func__, de->d_name, devine);
 | 
			
		||||
 | 
			
		||||
	/* strdup is a 'non-portable' function ? */
 | 
			
		||||
	liste[nombre].nom = strdup(de->d_name);
 | 
			
		||||
	liste[nombre].taille = statbuf.st_size;
 | 
			
		||||
	liste[nombre].idx = nombre;
 | 
			
		||||
	liste[nombre].son.type = type;
 | 
			
		||||
	liste[nombre].epochtime = 15000;
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
	fprintf(stderr, "%4d: %-20s %8ld  %4d\n",
 | 
			
		||||
			nombre, liste[nombre].nom, liste[nombre].taille, type);
 | 
			
		||||
#endif
 | 
			
		||||
	nombre++;
 | 
			
		||||
	/* if needed, increase the size of the list */
 | 
			
		||||
	if (nombre >= taille)
 | 
			
		||||
		{
 | 
			
		||||
		liste = realloc(liste, sizeof(FICH)*(taille+TCHONK));
 | 
			
		||||
		taille += TCHONK;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
foo = closedir(dir);
 | 
			
		||||
 | 
			
		||||
return nombre;			/* ??? */
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int print_entry(WINDOW *w, int number, int line)
 | 
			
		||||
{
 | 
			
		||||
int	ln;
 | 
			
		||||
 | 
			
		||||
ln = strlen(liste[number].nom);
 | 
			
		||||
 | 
			
		||||
mvwprintw(w, line, 2, "%3d    %-40s  %9d  ", 
 | 
			
		||||
				liste[number].idx,
 | 
			
		||||
				liste[number].nom,
 | 
			
		||||
				liste[number].taille);
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int fileselector(void)
 | 
			
		||||
{
 | 
			
		||||
int		foo;
 | 
			
		||||
WINDOW		*wfs;
 | 
			
		||||
int		first, curseur, idx, affh;
 | 
			
		||||
int		key, flag_exit;
 | 
			
		||||
char		chaine[100];
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">>> %s ( )\n", __func__);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
foo = faire_la_liste();
 | 
			
		||||
 | 
			
		||||
affh = LINES-7;
 | 
			
		||||
/*
 | 
			
		||||
 *	create a subwindow for list of files
 | 
			
		||||
 */
 | 
			
		||||
wfs = derwin(stdscr, affh, COLS-2, 2, 1);
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
bordure(wfs, 0);
 | 
			
		||||
#endif
 | 
			
		||||
wrefresh(wfs);
 | 
			
		||||
 | 
			
		||||
first = curseur = 0;
 | 
			
		||||
flag_exit = 0;
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, "    %s enter interactive\n", __func__);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
do
 | 
			
		||||
	{
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
	sprintf(chaine, "nombre:%3d first:%3d  curseur:%3d",
 | 
			
		||||
				nombre, first, curseur);
 | 
			
		||||
	mvwaddstr(wfs, 0, 50, chaine);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (foo=0; foo<affh; foo++)
 | 
			
		||||
		{
 | 
			
		||||
		idx = foo+first;
 | 
			
		||||
		if (idx >= nombre)	break;
 | 
			
		||||
 | 
			
		||||
		if (curseur==foo)	wstandout(wfs);
 | 
			
		||||
		/*
 | 
			
		||||
		 * display the entry, need more work :(
 | 
			
		||||
		 */
 | 
			
		||||
		print_entry(wfs, idx, foo);
 | 
			
		||||
		if (curseur==foo)	wstandend(wfs);
 | 
			
		||||
		}
 | 
			
		||||
	wrefresh(wfs);
 | 
			
		||||
 | 
			
		||||
	key = getch();
 | 
			
		||||
	/*
 | 
			
		||||
	 *	ici il faudrait effacer le curseur ?
 | 
			
		||||
	 */
 | 
			
		||||
	switch (key)
 | 
			
		||||
		{
 | 
			
		||||
		case KEY_UP:
 | 
			
		||||
			if (curseur)			curseur--;
 | 
			
		||||
			else if (first>0)		first--;
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case KEY_DOWN:
 | 
			
		||||
			if ((curseur+first) >= (nombre-1))	break;
 | 
			
		||||
			if (curseur < affh-1)		curseur++;
 | 
			
		||||
			else if (first<(nombre-affh))	first++;
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case KEY_HOME:
 | 
			
		||||
			curseur = first = 0;
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		/* the show must go on */
 | 
			
		||||
		case '\r': case 'p':
 | 
			
		||||
			idx = curseur+first;	/* ??? */
 | 
			
		||||
			play_this_file(liste[idx].nom, liste[idx].son.type, 0);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case 'D':	case 'd':
 | 
			
		||||
			idx = curseur+first;	/* ??? FIXME */
 | 
			
		||||
			dump_this_file(liste[idx].nom, 0);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case 'I':	case 'i':
 | 
			
		||||
			idx = curseur+first;	/* ??? FIXME */
 | 
			
		||||
			info_about_this_file(liste[idx].nom,
 | 
			
		||||
						liste[idx].son.type);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case 'A':	case 'a': about(); break;
 | 
			
		||||
		case 'H':	case 'h':	case '?': help(); break;
 | 
			
		||||
 | 
			
		||||
		case 'n':	trier_la_liste(1);	break;
 | 
			
		||||
		case 'N':	trier_la_liste(2);	break;
 | 
			
		||||
		case 's':	trier_la_liste(3);	break;
 | 
			
		||||
		case 'S':	trier_la_liste(4);	break;
 | 
			
		||||
		case 'u':	trier_la_liste(10);	break;
 | 
			
		||||
		case 'U':	trier_la_liste(11);	break;
 | 
			
		||||
 | 
			
		||||
		case '$':	infos_driver_son();	break;
 | 
			
		||||
 | 
			
		||||
		case 'Q':	case 'q':
 | 
			
		||||
			flag_exit = 1;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	} while ( ! flag_exit );
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, "    %s exit interactive\n", __func__);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										72
									
								
								Ecoute/magic.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								Ecoute/magic.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,72 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	magic.c
 | 
			
		||||
 *	=======		26 Avril 2005
 | 
			
		||||
 *
 | 
			
		||||
 *	reconnaissance heuristique des fichiers sons.
 | 
			
		||||
 *	Gruik coding inside.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include    <stdio.h>
 | 
			
		||||
#include    <unistd.h>
 | 
			
		||||
#include    <fcntl.h>
 | 
			
		||||
#include    <string.h>
 | 
			
		||||
#include    "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
#define   T_BUFF_MAGIC	222
 | 
			
		||||
 | 
			
		||||
int	magic_detect(char *fname, long *pbits)
 | 
			
		||||
{
 | 
			
		||||
int		fd;
 | 
			
		||||
char		buffer[T_BUFF_MAGIC];
 | 
			
		||||
 | 
			
		||||
if ( (fd=open(fname, O_RDONLY)) < 0 )
 | 
			
		||||
	{
 | 
			
		||||
	perror(fname);
 | 
			
		||||
	return -1;
 | 
			
		||||
	}
 | 
			
		||||
if ( T_BUFF_MAGIC != read(fd, buffer, T_BUFF_MAGIC) )
 | 
			
		||||
	{
 | 
			
		||||
	close(fd);
 | 
			
		||||
	return -2;
 | 
			
		||||
	}
 | 
			
		||||
close(fd);		
 | 
			
		||||
 | 
			
		||||
/* now, we have the first bytes of the file in the buffer, so we can
 | 
			
		||||
   try the divination process... */
 | 
			
		||||
 | 
			
		||||
*pbits = 0L;
 | 
			
		||||
 | 
			
		||||
if (0 == strncmp(buffer, "RIFF", 4))
 | 
			
		||||
	{
 | 
			
		||||
	if (0 == strncmp(buffer+8, "WAVE", 4))
 | 
			
		||||
		{
 | 
			
		||||
		return SON_WAV;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if (0 == strncmp(buffer, ".snd", 4))
 | 
			
		||||
	{
 | 
			
		||||
	return SON_AU;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if (0 == strncmp(buffer, "OggS", 4))
 | 
			
		||||
	{
 | 
			
		||||
	if (0 == strncmp(buffer+28, "\x01vorbis", 7))
 | 
			
		||||
		{
 | 
			
		||||
		return SON_OGG;
 | 
			
		||||
		}
 | 
			
		||||
	if (0 == strncmp(buffer+28, "Speex   ", 7))
 | 
			
		||||
		{
 | 
			
		||||
		return SON_SPEEX;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/* please add FLAC magic here XXX */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* really don't know, baylout */
 | 
			
		||||
return SON_UNKNOW;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										151
									
								
								Ecoute/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								Ecoute/main.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,151 @@
 | 
			
		||||
/*
 | 
			
		||||
 *		------
 | 
			
		||||
 *		Ecoute
 | 
			
		||||
 *		------  an ogg/note/wav player from tth
 | 
			
		||||
 *
 | 
			
		||||
 * 15 juillet 2007: ogg palying don(t work, sorry...
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include    <stdlib.h>
 | 
			
		||||
#include    <unistd.h>
 | 
			
		||||
#include    <string.h>
 | 
			
		||||
#include    <getopt.h>
 | 
			
		||||
 | 
			
		||||
#include    "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
static char *about_texte[] = 
 | 
			
		||||
	{
 | 
			
		||||
	"{{ About... }}",
 | 
			
		||||
	"Ecoute, a sound player - version " VERSION,
 | 
			
		||||
	"Another ugly software made by tontonTh",
 | 
			
		||||
	"",
 | 
			
		||||
	"Send bugs reports: tontonth(O)free(o)fr",
 | 
			
		||||
	"",
 | 
			
		||||
	"Binary build: " __DATE__ "  /  " __TIME__,
 | 
			
		||||
	NULL
 | 
			
		||||
	};
 | 
			
		||||
static char *help_texte[] = 
 | 
			
		||||
	{
 | 
			
		||||
	"{{ Help me }}",
 | 
			
		||||
	"<enter>     Play the selected file",
 | 
			
		||||
	"A           About this software...",
 | 
			
		||||
	"D           Dump begin of file in hexadecimal",
 | 
			
		||||
	"R           Play a randomly selected file",
 | 
			
		||||
	"nN          Sort by name",
 | 
			
		||||
	"sS          Sort by file size",
 | 
			
		||||
	"tT          Sort by file time",
 | 
			
		||||
	"uU          Sort by order (unsort)",
 | 
			
		||||
	"I           Infos about this file",
 | 
			
		||||
	"$           What is the sound driver ?",
 | 
			
		||||
	"",
 | 
			
		||||
	"Q           Quit",
 | 
			
		||||
	NULL
 | 
			
		||||
	};
 | 
			
		||||
void popup_texte(char *lignes[])
 | 
			
		||||
{
 | 
			
		||||
WINDOW * popup;
 | 
			
		||||
int	nblignes;
 | 
			
		||||
int	foo, largmax;
 | 
			
		||||
char	**ptr;
 | 
			
		||||
 | 
			
		||||
nblignes = largmax = 0;
 | 
			
		||||
ptr = lignes+1;
 | 
			
		||||
while ( *ptr != NULL )
 | 
			
		||||
	{
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
	fprintf(stderr, "%p  %s\n", ptr, *ptr);
 | 
			
		||||
#endif
 | 
			
		||||
	foo = strlen(*ptr);
 | 
			
		||||
	if (largmax < foo)	largmax = foo;
 | 
			
		||||
	nblignes++;
 | 
			
		||||
	ptr++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
popup = newwin((nblignes)+5, largmax+6, L_POPUP, C_POPUP);
 | 
			
		||||
bordure(popup, 1);
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
 | 
			
		||||
for (foo=1; foo<=nblignes; foo++)
 | 
			
		||||
	{
 | 
			
		||||
	mvwaddstr(popup, (foo)+1, 3, lignes[foo]);
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
	fprintf(stderr, "%4d %s\n", foo, lignes[foo]);
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
mvwaddstr(popup, 0, 5, *lignes);		/* window title */
 | 
			
		||||
wmove(popup, 0, 0);
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
getch();
 | 
			
		||||
delwin(popup);	
 | 
			
		||||
			/* pourquoi, quand je fait le 'delwin', ncurses
 | 
			
		||||
			   ne rafraichit pas la zone qui était masquée ? */
 | 
			
		||||
touchwin(stdscr); refresh();
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
void about(void)
 | 
			
		||||
{
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
fprintf(stderr, "------------ about\n");
 | 
			
		||||
#endif
 | 
			
		||||
popup_texte(about_texte);
 | 
			
		||||
}
 | 
			
		||||
void help(void)
 | 
			
		||||
{
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
fprintf(stderr, "------------ help\n");
 | 
			
		||||
#endif
 | 
			
		||||
popup_texte(help_texte);
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
void help_cli(char *command)
 | 
			
		||||
{
 | 
			
		||||
printf("Usage: %s <options>\n", command);
 | 
			
		||||
puts("Options:");
 | 
			
		||||
puts("\t-d\taudio device");
 | 
			
		||||
puts("\t-h\tthis help");
 | 
			
		||||
puts("\t-x\tenable crash");
 | 
			
		||||
 | 
			
		||||
exit(0);
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
/*									*/
 | 
			
		||||
int main(int argc, char * argv[])
 | 
			
		||||
{
 | 
			
		||||
int		opt = 0;
 | 
			
		||||
int		foo;
 | 
			
		||||
char		*audiodevice = "none";
 | 
			
		||||
 | 
			
		||||
while ((opt = getopt(argc, argv, "d:hx")) != -1) {
 | 
			
		||||
	switch (opt) {
 | 
			
		||||
		case 'd':
 | 
			
		||||
			audiodevice = optarg;
 | 
			
		||||
			break;
 | 
			
		||||
		case 'h':
 | 
			
		||||
			help_cli(argv[0]);		break;
 | 
			
		||||
		default:
 | 
			
		||||
			fprintf(stderr, "gni %c ?\n", opt);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
fprintf(stderr, "audio device = %s\n", audiodevice);
 | 
			
		||||
 | 
			
		||||
foo = init_sound_output(audiodevice, 0);
 | 
			
		||||
if (foo) {
 | 
			
		||||
	fprintf(stderr, "init sound output -> %d\n", foo);
 | 
			
		||||
	exit(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
infos_sound_output("dans main");
 | 
			
		||||
 | 
			
		||||
prepare_ecran();
 | 
			
		||||
 | 
			
		||||
fileselector();
 | 
			
		||||
 | 
			
		||||
say_goodbye();
 | 
			
		||||
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										138
									
								
								Ecoute/playau.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								Ecoute/playau.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,138 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	playau.c
 | 
			
		||||
 *	--------			2 Mars 2005
 | 
			
		||||
 *
 | 
			
		||||
 *	This code is almost a copy'n'past from "playwav.c", but
 | 
			
		||||
 *	it was slightly updated. May be I have introduced new bugs,
 | 
			
		||||
 *	who have to be backported :)
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include   <fcntl.h>
 | 
			
		||||
#include   <string.h>
 | 
			
		||||
#include   <sndfile.h>
 | 
			
		||||
#include   <ao/ao.h>		/* for the sound output */
 | 
			
		||||
 | 
			
		||||
#include   "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int	au_player(char *fname, WINDOW *popup)
 | 
			
		||||
{
 | 
			
		||||
SNDFILE			* sndf;
 | 
			
		||||
SF_INFO			sfinfo;
 | 
			
		||||
ao_sample_format	format;
 | 
			
		||||
ao_device		* device;
 | 
			
		||||
int			driver;
 | 
			
		||||
 | 
			
		||||
char			chaine[100];
 | 
			
		||||
short			* samples;
 | 
			
		||||
long			total_lu;
 | 
			
		||||
int			lu;
 | 
			
		||||
int			maxsample;
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">>> %s ( '%s' %p )\n", __func__, fname, popup);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	get help from 'sndfile' for getting datas
 | 
			
		||||
 */
 | 
			
		||||
memset(&sfinfo, 0, sizeof(sfinfo));
 | 
			
		||||
 | 
			
		||||
sndf = sf_open(fname, SFM_READ, &sfinfo);
 | 
			
		||||
if (sndf==NULL)
 | 
			
		||||
	{
 | 
			
		||||
	mvwaddstr(popup, 4, 4, "Invalid file ?");
 | 
			
		||||
	wrefresh(popup);
 | 
			
		||||
	getch();
 | 
			
		||||
	delwin(popup);
 | 
			
		||||
	touchwin(stdscr);	refresh();
 | 
			
		||||
	return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
sprintf(chaine, "frames         %lu", (unsigned long)sfinfo.frames);
 | 
			
		||||
mvwaddstr(popup, 2, 5, chaine);
 | 
			
		||||
sprintf(chaine, "sample rate    %d", sfinfo.samplerate);
 | 
			
		||||
mvwaddstr(popup, 3, 5, chaine);
 | 
			
		||||
sprintf(chaine, "channels       %d", sfinfo.channels);
 | 
			
		||||
mvwaddstr(popup, 4, 5, chaine);
 | 
			
		||||
sprintf(chaine, "format         %x", sfinfo.format);
 | 
			
		||||
mvwaddstr(popup, 5, 5, chaine);
 | 
			
		||||
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
getch();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	memory allocation
 | 
			
		||||
 *	warning, we can get multiples channels.
 | 
			
		||||
 */
 | 
			
		||||
if ( NULL == (samples = malloc(T_BUFFER*sizeof(short))) )
 | 
			
		||||
	{
 | 
			
		||||
	perror("\n no memory in AU player");
 | 
			
		||||
	abort();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	configuration of the sound output
 | 
			
		||||
 */
 | 
			
		||||
ao_initialize();	
 | 
			
		||||
driver = ao_default_driver_id();
 | 
			
		||||
format.bits		= 16;				/* ? */
 | 
			
		||||
format.channels		= sfinfo.channels;
 | 
			
		||||
format.rate		= sfinfo.samplerate;
 | 
			
		||||
format.byte_format	= AO_FMT_LITTLE;		/* XXX ??? */
 | 
			
		||||
device = ao_open_live(driver, &format, NULL);
 | 
			
		||||
if (device == NULL)
 | 
			
		||||
	{
 | 
			
		||||
	fprintf(stderr, "\nEcoute: Error open device\n");
 | 
			
		||||
	/*
 | 
			
		||||
	 *  comment connaitre la cause de l'erreur ?
 | 
			
		||||
	 */
 | 
			
		||||
	abort();  
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	Go! Read the samples, compute some numbers and...
 | 
			
		||||
 *	...???
 | 
			
		||||
 */
 | 
			
		||||
total_lu = 0L;
 | 
			
		||||
maxsample = 0;
 | 
			
		||||
while ( (lu=sf_read_short(sndf, samples, T_BUFFER)) > 0 )
 | 
			
		||||
	{
 | 
			
		||||
	ao_play(device, (char *)samples, lu*2);
 | 
			
		||||
 | 
			
		||||
	/* WHY IS THIS CODE COMMENTED-OUT ? 
 | 
			
		||||
 | 
			
		||||
	for (foo=0; foo<lu; foo++)
 | 
			
		||||
		{
 | 
			
		||||
		bar = samples[foo];
 | 
			
		||||
		if (bar > maxsample)
 | 
			
		||||
			{
 | 
			
		||||
			sprintf(chaine, "%9ld %6d", total_lu, bar);
 | 
			
		||||
			mvwaddstr(popup, 7, 1, chaine);
 | 
			
		||||
			wrefresh(popup);
 | 
			
		||||
			maxsample = bar;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	maxsample = 0;
 | 
			
		||||
	*/
 | 
			
		||||
 | 
			
		||||
	total_lu += (long)lu;
 | 
			
		||||
	progress_bar(popup, total_lu/sfinfo.channels, sfinfo.frames, 0);
 | 
			
		||||
	wrefresh(popup);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
fprintf(stderr, "maxsample = %d\n", maxsample);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	some cleanup...
 | 
			
		||||
 */
 | 
			
		||||
free(samples);					/* kill buff */
 | 
			
		||||
sf_close(sndf);
 | 
			
		||||
ao_close(device);	ao_shutdown();	
 | 
			
		||||
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										28
									
								
								Ecoute/playflac.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Ecoute/playflac.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	playflac.c
 | 
			
		||||
 *	----------			20 Janvier 2022
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include   <fcntl.h>
 | 
			
		||||
#include   <unistd.h>
 | 
			
		||||
#include   <ao/ao.h>		/* for the sound output */
 | 
			
		||||
 | 
			
		||||
#include   "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int	flac_player(char *fname, WINDOW *popup)
 | 
			
		||||
{
 | 
			
		||||
int			ret;
 | 
			
		||||
 | 
			
		||||
ret = 43;
 | 
			
		||||
 | 
			
		||||
mvwaddstr(popup, 1, 2, "Flac playing: work in progress...");
 | 
			
		||||
wrefresh(popup);	sleep(1);
 | 
			
		||||
 | 
			
		||||
mvwaddstr(popup, 6, 6, "*** COREDUMPING ***");
 | 
			
		||||
wrefresh(popup);	getch();
 | 
			
		||||
 | 
			
		||||
return ret; 		/* XXX */
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										91
									
								
								Ecoute/playnote.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								Ecoute/playnote.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,91 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	playnote.c
 | 
			
		||||
 *	----------			23 Fevrier 2005
 | 
			
		||||
 * 
 | 
			
		||||
 *  this subplayer is a personnal subplayer. Far back in the past,
 | 
			
		||||
 *  I've made a lot of softwares around sound synteses. The unique
 | 
			
		||||
 *  file format was 16bits, 2400samples/seconds and Intel endianism.
 | 
			
		||||
 *
 | 
			
		||||
 *		Here is the player.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include   <unistd.h>
 | 
			
		||||
#include   <fcntl.h>
 | 
			
		||||
#include   <ao/ao.h>		/* for the sound output */
 | 
			
		||||
#include   "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int note_player(char *fname, WINDOW *popup)
 | 
			
		||||
{
 | 
			
		||||
int			driver;
 | 
			
		||||
ao_sample_format	format;
 | 
			
		||||
ao_device		*device;
 | 
			
		||||
int			lu, fd;
 | 
			
		||||
short			*samples;
 | 
			
		||||
char			chaine[100];
 | 
			
		||||
long			taille, total;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	file and memory stuff
 | 
			
		||||
 */
 | 
			
		||||
if ( NULL == (samples = malloc(T_BUFFER*sizeof(short))) )
 | 
			
		||||
	{
 | 
			
		||||
	perror("memory in note_player");
 | 
			
		||||
	abort();
 | 
			
		||||
	}
 | 
			
		||||
if ( 0 > (fd=open(fname, O_RDONLY)) )
 | 
			
		||||
	{
 | 
			
		||||
	perror(fname);
 | 
			
		||||
	abort();
 | 
			
		||||
	}
 | 
			
		||||
taille = taille_fichier(fd);
 | 
			
		||||
if (taille < 0) {
 | 
			
		||||
	fprintf(stderr, "%s: size < 0        WTF?\n", __func__);
 | 
			
		||||
	}
 | 
			
		||||
sprintf(chaine, "%10ld samples, %5ld seconds", taille/2, taille/(24000*2));
 | 
			
		||||
mvwaddstr(popup, 2, 2, chaine);
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
 | 
			
		||||
ao_initialize();			/* must be paired with ao_shutdown */
 | 
			
		||||
driver = ao_default_driver_id();
 | 
			
		||||
 | 
			
		||||
format.bits		= 16;
 | 
			
		||||
format.channels		= 1;
 | 
			
		||||
format.rate		= 24000;
 | 
			
		||||
format.byte_format	= AO_FMT_LITTLE;		/* XXX ??? */
 | 
			
		||||
device = ao_open_live(driver, &format, NULL);
 | 
			
		||||
if (device == NULL)
 | 
			
		||||
	{
 | 
			
		||||
	fprintf(stderr, "\r\n%s: Error open device\n", __func__);
 | 
			
		||||
	/* comment connaitre la cause de l'erreur ? */
 | 
			
		||||
	abort();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *		+-------------------------------+
 | 
			
		||||
 *		|   let's the show go on...     |
 | 
			
		||||
 *		+-------------------------------+
 | 
			
		||||
 */
 | 
			
		||||
total = 0L;
 | 
			
		||||
while ( (lu=read(fd, samples, T_BUFFER)) > 0 )
 | 
			
		||||
	{
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
	sprintf(chaine, "%9ld Kb    %-7d", total/1024, lu);
 | 
			
		||||
#else
 | 
			
		||||
	sprintf(chaine, "%9ld Kb", total/1024);
 | 
			
		||||
#endif
 | 
			
		||||
	mvwaddstr(popup, 5, 7, chaine); wrefresh(popup); 
 | 
			
		||||
	total += lu;
 | 
			
		||||
	progress_bar(popup, total, taille, 0);
 | 
			
		||||
	ao_play(device, (char *)samples, lu);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	this is the end, my friends...
 | 
			
		||||
 */
 | 
			
		||||
ao_close(device);
 | 
			
		||||
ao_shutdown();				/* must be paired with ao_initialise */
 | 
			
		||||
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										52
									
								
								Ecoute/playogg.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								Ecoute/playogg.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	playogg.c
 | 
			
		||||
 *	---------			2 Mars 2005
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 *  2005, Apr 11:	just downloaded some tarball from xiph.org, thinking
 | 
			
		||||
 *			about some code samples...
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include   <fcntl.h>
 | 
			
		||||
#include   <unistd.h>
 | 
			
		||||
#include   <ogg/ogg.h>
 | 
			
		||||
#include   <ao/ao.h>		/* for the sound output */
 | 
			
		||||
 | 
			
		||||
#include   "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int	ogg_player(char *fname, WINDOW *popup)
 | 
			
		||||
{
 | 
			
		||||
ogg_sync_state		oy;
 | 
			
		||||
char			*oggbuff;
 | 
			
		||||
int			ret;
 | 
			
		||||
 | 
			
		||||
mvwaddstr(popup, 1, 2, "Ogg playing: work in progress...");
 | 
			
		||||
wrefresh(popup);	sleep(1);
 | 
			
		||||
 | 
			
		||||
mvwaddstr(popup, 6, 6, "*** COREDUMPING ***");
 | 
			
		||||
wrefresh(popup);	getch();
 | 
			
		||||
 | 
			
		||||
return -42; 		/* XXX */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	preparation
 | 
			
		||||
 */
 | 
			
		||||
ret = ogg_sync_init(&oy);
 | 
			
		||||
mvwprintw(popup, 2, 2, "ogg_sync_init -> %d", ret);
 | 
			
		||||
 | 
			
		||||
oggbuff = ogg_sync_buffer(&oy, T_BUFFER);
 | 
			
		||||
mvwprintw(popup, 3, 2, "ogg_sync_buffer -> %p", oggbuff);
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
getch();
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	termination
 | 
			
		||||
 */
 | 
			
		||||
ogg_sync_clear(&oy);
 | 
			
		||||
ogg_sync_destroy(&oy);
 | 
			
		||||
getch();
 | 
			
		||||
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										26
									
								
								Ecoute/playspeex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								Ecoute/playspeex.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	playspeex.c
 | 
			
		||||
 *	-----------			12 Avril 2005
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include   <fcntl.h>
 | 
			
		||||
#include   <unistd.h>
 | 
			
		||||
#include   <ogg/ogg.h>
 | 
			
		||||
#include   <ao/ao.h>		/* for the sound output */
 | 
			
		||||
 | 
			
		||||
#include   "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int	speex_player(char *fname, WINDOW *popup)
 | 
			
		||||
{
 | 
			
		||||
mvwaddstr(popup, 1, 2, fname);
 | 
			
		||||
mvwaddstr(popup, 1, 4, "Speex playing: work in progress...");
 | 
			
		||||
wrefresh(popup);	sleep(1);
 | 
			
		||||
 | 
			
		||||
mvwaddstr(popup, 6, 6, "*** COREDUMPING ***");
 | 
			
		||||
wrefresh(popup);	getch();
 | 
			
		||||
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
							
								
								
									
										132
									
								
								Ecoute/playwav.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								Ecoute/playwav.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,132 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	playwav.c
 | 
			
		||||
 *	---------			23 Fevrier 2005
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include   <fcntl.h>
 | 
			
		||||
#include   <string.h>
 | 
			
		||||
#include   <sndfile.h>
 | 
			
		||||
#include   <ao/ao.h>		/* for the sound output */
 | 
			
		||||
 | 
			
		||||
#include   "ecoute.h"
 | 
			
		||||
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
int	wav_player(char *fname, WINDOW *popup)
 | 
			
		||||
{
 | 
			
		||||
SNDFILE			* sndf;
 | 
			
		||||
SF_INFO			sfinfo;
 | 
			
		||||
int			driver;
 | 
			
		||||
ao_sample_format	format;
 | 
			
		||||
ao_device		* device;
 | 
			
		||||
char			chaine[120];
 | 
			
		||||
short			* samples;
 | 
			
		||||
int			lu;
 | 
			
		||||
long			total_lu;
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, ">>> %s ( '%s' %p )\n", __func__, fname, popup);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	get help from 'sndfile' for getting datas
 | 
			
		||||
 */
 | 
			
		||||
memset(&sfinfo, 0, sizeof(sfinfo));
 | 
			
		||||
 | 
			
		||||
sndf = sf_open(fname, SFM_READ, &sfinfo);
 | 
			
		||||
if (sndf==NULL)
 | 
			
		||||
	{
 | 
			
		||||
	mvwaddstr(popup, 4, 4, "Invalid file ?");
 | 
			
		||||
	wrefresh(popup);
 | 
			
		||||
	getch();
 | 
			
		||||
	delwin(popup);
 | 
			
		||||
	touchwin(stdscr);	refresh();
 | 
			
		||||
	return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
sprintf(chaine, "frames      %lu", (unsigned long)sfinfo.frames);
 | 
			
		||||
mvwaddstr(popup, 2, 5, chaine);
 | 
			
		||||
sprintf(chaine, "smplrate    %d", sfinfo.samplerate);
 | 
			
		||||
mvwaddstr(popup, 3, 5, chaine);
 | 
			
		||||
sprintf(chaine, "channels    %d", sfinfo.channels);
 | 
			
		||||
mvwaddstr(popup, 4, 5, chaine);
 | 
			
		||||
sprintf(chaine, "format      0x%x", sfinfo.format);
 | 
			
		||||
mvwaddstr(popup, 5, 5, chaine);
 | 
			
		||||
sprintf(chaine, "sections    %d", sfinfo.sections);
 | 
			
		||||
mvwaddstr(popup, 6, 5, chaine);
 | 
			
		||||
 | 
			
		||||
wrefresh(popup);
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL > 1
 | 
			
		||||
getch();					/* XXX */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	memory allocation
 | 
			
		||||
 *	warning, we can get multiples channels.
 | 
			
		||||
 */
 | 
			
		||||
if ( NULL == (samples = malloc(T_BUFFER*sizeof(short))) )
 | 
			
		||||
	{
 | 
			
		||||
	perror("memory shortage in WAV player");
 | 
			
		||||
	abort();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	initialize the "Cabasse Sampan" output device (aka libao)
 | 
			
		||||
 */
 | 
			
		||||
ao_initialize();
 | 
			
		||||
driver = ao_default_driver_id();
 | 
			
		||||
/* XXX valeurs provisoires XXX */
 | 
			
		||||
memset(&format, 0, sizeof(ao_sample_format));
 | 
			
		||||
format.bits		= 16;
 | 
			
		||||
format.channels		= sfinfo.channels;
 | 
			
		||||
format.rate		= sfinfo.samplerate;
 | 
			
		||||
format.byte_format	= AO_FMT_LITTLE;		/* XXX ??? */
 | 
			
		||||
device = ao_open_live(driver, &format, NULL);
 | 
			
		||||
if (device == NULL)
 | 
			
		||||
	{
 | 
			
		||||
	fprintf(stderr, "\nEcoute: Error open device\n");
 | 
			
		||||
	/*
 | 
			
		||||
	 *  comment connaitre la cause de l'erreur ?
 | 
			
		||||
	 */
 | 
			
		||||
	abort();  
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	**********************
 | 
			
		||||
 *	*  the playing loop  *
 | 
			
		||||
 *	**********************
 | 
			
		||||
 */
 | 
			
		||||
total_lu = 0L;
 | 
			
		||||
while ( (lu=sf_read_short(sndf, samples, T_BUFFER)) > 0 )
 | 
			
		||||
	{
 | 
			
		||||
	ao_play(device, (char *)samples, lu*2);
 | 
			
		||||
	total_lu += (long)lu;
 | 
			
		||||
	progress_bar(popup, total_lu/sfinfo.channels, sfinfo.frames, 0);
 | 
			
		||||
	wrefresh(popup);
 | 
			
		||||
 | 
			
		||||
	/* HERE WE HAVE TO DETECT A 'STOP LISTEN' FUNCTION. */
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	shutdown "La voix du Theatre"
 | 
			
		||||
 */
 | 
			
		||||
ao_close(device);	ao_shutdown();	
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	memory release
 | 
			
		||||
 */
 | 
			
		||||
free(samples);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	releasing 'sndfile' ressources
 | 
			
		||||
 */
 | 
			
		||||
sf_close(sndf);
 | 
			
		||||
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
fprintf(stderr, "    end of %s\n", __func__);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
return -1;
 | 
			
		||||
}
 | 
			
		||||
/*==------------------------------------------------------------------==*/
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user