big cleanup: step n+1

This commit is contained in:
tTh 2023-12-14 16:56:38 +01:00
parent 09453280b5
commit 86f3f2e3e7
19 changed files with 145 additions and 166 deletions

2
.gitignore vendored
View File

@ -43,6 +43,8 @@
*.idb *.idb
*.pdb *.pdb
core
# Kernel Module Compile Results # Kernel Module Compile Results
*.mod* *.mod*
*.cmd *.cmd

View File

@ -20,8 +20,8 @@ qui manquent.
## Compilation ## Compilation
Il faut installer les paquets Il faut installer les paquets
`libao-dev` et `libsndfile-dev` avoir de pouvoir `libao-dev`, `libogg-dev`, et `libsndfile-dev` avoir de
générer le moindre exécutable. pouvoir générer le moindre exécutable.
Les machins *ncurses* sont censé être là, sinon Les machins *ncurses* sont censé être là, sinon
c'est `ncurses-dev` qui manque. c'est `ncurses-dev` qui manque.
@ -65,6 +65,9 @@ différents modules.
Deuxième étape : Implémenter une fonction bien *molly-guarded* pour pouvoir Deuxième étape : Implémenter une fonction bien *molly-guarded* pour pouvoir
effacer un fichier sans le moindre risque d'erreur. effacer un fichier sans le moindre risque d'erreur.
Troisième étape : Ajouter un controle du volume sonore, ce qui implique
de replonger dans `alsa` ou la doc de la libao...
tTh. tTh.

View File

@ -1,21 +0,0 @@
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 -

View File

@ -8,7 +8,7 @@
# #
#---------------------------------------------------------------- #----------------------------------------------------------------
VERSION=0.0039 VERSION=0.0040
TEKFLAG= -DDEBUG_LEVEL=1 -g TEKFLAG= -DDEBUG_LEVEL=1 -g
CFLAGS=-Wall -Wextra -ansi $(TEKFLAG) -DVERSION=\"$(VERSION)\" CFLAGS=-Wall -Wextra -ansi $(TEKFLAG) -DVERSION=\"$(VERSION)\"

13
Ecoute/src/README.md Normal file
View File

@ -0,0 +1,13 @@
## dump.c
## ecran.c
## fonctions.c
## ifao.c
## interactive.c
## magic.c
## main.c
## playau.c
## playflac.c
## playnote.c
## playogg.c
## playspeex.c
## playwav.c

View File

@ -14,7 +14,7 @@
/*==------------------------------------------------------------------==*/ /*==------------------------------------------------------------------==*/
#define T_BUFF_HEX (16*16) #define T_BUFF_HEX (16*16)
int hexadump(char *fname, WINDOW *w) static int hexadump(char *fname, WINDOW *w)
{ {
int fd; int fd;
unsigned char buffer[T_BUFF_HEX]; unsigned char buffer[T_BUFF_HEX];
@ -25,24 +25,20 @@ char chaine[10], lettre;
fprintf(stderr, "hexadump of %s\n", fname); fprintf(stderr, "hexadump of %s\n", fname);
#endif #endif
if ( (fd=open(fname, O_RDONLY)) < 0 ) if ( (fd=open(fname, O_RDONLY)) < 0 ) {
{
mvwaddstr(w, 2, 2, "err open"); wrefresh(w); mvwaddstr(w, 2, 2, "err open"); wrefresh(w);
getch(); getch();
return -1; return -1;
} }
if ( T_BUFF_HEX != read(fd, buffer, T_BUFF_HEX) ) if ( T_BUFF_HEX != read(fd, buffer, T_BUFF_HEX) ) {
{
mvwaddstr(w, 2, 2, "err read"); wrefresh(w); mvwaddstr(w, 2, 2, "err read"); wrefresh(w);
getch(); getch();
} }
close(fd); close(fd);
for (lig=0; lig<16; lig++) for (lig=0; lig<16; lig++) {
{ for (col=0; col<16; col++) {
for (col=0; col<16; col++)
{
idx = (lig*16) + col; idx = (lig*16) + col;
sprintf(chaine, "%02x", buffer[idx]); sprintf(chaine, "%02x", buffer[idx]);
mvwaddstr(w, lig+1, (col*3)+1, chaine); mvwaddstr(w, lig+1, (col*3)+1, chaine);
@ -64,7 +60,6 @@ return 0;
int dump_this_file(char *fname, int flag) int dump_this_file(char *fname, int flag)
{ {
WINDOW *popup; WINDOW *popup;
int foo;
#if DEBUG_LEVEL #if DEBUG_LEVEL
fprintf(stderr, ">> dump_this_file ( '%s' %d )\n", fname, flag); fprintf(stderr, ">> dump_this_file ( '%s' %d )\n", fname, flag);
@ -73,11 +68,11 @@ fprintf(stderr, ">> dump_this_file ( '%s' %d )\n", fname, flag);
popup = newwin(18, 68, L_POPUP, C_POPUP); popup = newwin(18, 68, L_POPUP, C_POPUP);
bordure(popup, 1); bordure(popup, 1);
mvwaddstr(popup, 0, 2, "{ dump of "); mvwaddstr(popup, 0, 2, "{ dump of ");
mvwaddstr(popup, 0, 13, fname); mvwaddstr(popup, 0, 12, fname);
mvwaddstr(popup, 0, 13+strlen(fname), " }"); mvwaddstr(popup, 0, 12+strlen(fname), " }");
wrefresh(popup); wrefresh(popup);
foo = hexadump(fname, popup); (void)hexadump(fname, popup);
wrefresh(popup); wrefresh(popup);
getch(); getch();

View File

@ -97,6 +97,6 @@ int start_sound_output(int k);
int stop_sound_output(int k); int stop_sound_output(int k);
int infos_sound_output(char *title); int infos_sound_output(char *title);
void infos_driver_son(void); void infos_techniques(void);
/*==------------------------------------------------------------------==*/ /*==------------------------------------------------------------------==*/

View File

@ -19,10 +19,8 @@ int couleur = 0;
/*==------------------------------------------------------------------==*/ /*==------------------------------------------------------------------==*/
void bordure(WINDOW * w, int flag) void bordure(WINDOW * w, int flag)
{ {
if (flag) if (flag) box(w, 0, 0);
box(w, 0, 0); else wborder(w, '|', '|', '-', '-', '+', '+', '+', '+');
else
wborder(w, '|', '|', '-', '-', '+', '+', '+', '+');
} }
/*==------------------------------------------------------------------==*/ /*==------------------------------------------------------------------==*/
int alerte(char *texte, int flag) int alerte(char *texte, int flag)
@ -63,12 +61,16 @@ fprintf(stderr, "maxval %ld val %ld largeur %d curseur %d\n",
#endif #endif
chaine[0] = '[', chaine[largeur] = ']', chaine[largeur+1] = '\0'; chaine[0] = '[', chaine[largeur] = ']', chaine[largeur+1] = '\0';
for (foo=1; foo<largeur; foo++) for (foo=1; foo<largeur; foo++) {
{ if (type) {
if (foo<curseur) if (foo<curseur) chaine[foo] = 'o';
chaine[foo] = 'o'; else chaine[foo] = '-';
else }
chaine[foo] = '-'; else {
if (foo<curseur) chaine[foo] = '*';
else chaine[foo] = '.';
}
} }
mvwaddstr(win, haut_win-3, 2, chaine); mvwaddstr(win, haut_win-3, 2, chaine);
wrefresh(win); wrefresh(win);
@ -91,8 +93,7 @@ fprintf(stderr, ">>> %s ( )\n", __func__);
initscr(); initscr();
if (has_colors()) if (has_colors()) {
{
use_default_colors(); use_default_colors();
couleur = 1; couleur = 1;
} }

View File

@ -15,6 +15,7 @@ long taille_fichier(int fd)
{ {
struct stat st; struct stat st;
int foo; int foo;
foo = fstat(fd, &st); foo = fstat(fd, &st);
if (foo) { if (foo) {
perror("fonctions.c:18 fstat"); perror("fonctions.c:18 fstat");
@ -27,14 +28,15 @@ struct un_type_de_fichier {
char *extension; char *extension;
int numtype; int numtype;
char *descr; char *descr;
} types_de_fichiers[] = } types_de_fichiers[] = {
{
{ ".note", SON_NOTE, "tTh .note files" }, { ".note", SON_NOTE, "tTh .note files" },
{ ".wav", SON_WAV, "Microsoft Wave" }, { ".wav", SON_WAV, "Microsoft Wave" },
{ ".ogg", SON_OGG, "Xiph Ogg/Vorbis" }, { ".ogg", SON_OGG, "Xiph Ogg/Vorbis" },
{ ".speex", SON_SPEEX, "Xiph Compressed speach" }, { ".speex", SON_SPEEX, "Xiph Compressed speach" },
{ ".au", SON_AU, "Sun/NeXT audio data" }, { ".au", SON_AU, "Sun/NeXT audio data" },
{ ".flac", SON_FLAC, "Free Lossless Audio Codec" }, { ".flac", SON_FLAC, "Free Lossless Audio Codec" },
{ ".opus", SON_OPUS, "OPUS" },
{ ".mp3", SON_MP3, "mp3" },
}; };
#define NBR_TYPES \ #define NBR_TYPES \
(sizeof(types_de_fichiers)/sizeof(struct un_type_de_fichier)) (sizeof(types_de_fichiers)/sizeof(struct un_type_de_fichier))
@ -55,12 +57,10 @@ int foo, len_nom, len_ext;
fprintf(stderr, "type_du_fichier(%s)\n", nom); fprintf(stderr, "type_du_fichier(%s)\n", nom);
#endif #endif
len_nom = strlen(nom); len_nom = strlen(nom);
for (foo=0; foo<NBR_TYPES; foo++) for (foo=0; foo<NBR_TYPES; foo++) {
{
len_ext = strlen(types_de_fichiers[foo].extension); len_ext = strlen(types_de_fichiers[foo].extension);
if ( (len_nom > len_ext) && if ( (len_nom > len_ext) &&
!strcmp(nom+(len_nom-len_ext), types_de_fichiers[foo].extension) ) !strcmp(nom+(len_nom-len_ext), types_de_fichiers[foo].extension) ) {
{
#if DEBUG_LEVEL > 1 #if DEBUG_LEVEL > 1
fprintf(stderr, " found %s\n", types_de_fichiers[foo].descr); fprintf(stderr, " found %s\n", types_de_fichiers[foo].descr);
#endif #endif
@ -78,11 +78,9 @@ char *type2ext(int type)
{ {
int foo; int foo;
if (type == SON_UNKNOW) if (type == SON_UNKNOW) return "unknow";
return "unknow";
for (foo=0; foo<NBR_TYPES; foo++) for (foo=0; foo<NBR_TYPES; foo++) {
{
if (type==types_de_fichiers[foo].numtype) if (type==types_de_fichiers[foo].numtype)
return (types_de_fichiers[foo].extension)+1; return (types_de_fichiers[foo].extension)+1;
} }
@ -93,11 +91,9 @@ char *type2descr(int type)
{ {
int foo; int foo;
if (type == SON_UNKNOW) if (type == SON_UNKNOW) return "unknow";
return "unknow";
for (foo=0; foo<NBR_TYPES; foo++) for (foo=0; foo<NBR_TYPES; foo++) {
{
if (type==types_de_fichiers[foo].numtype) if (type==types_de_fichiers[foo].numtype)
return (types_de_fichiers[foo].descr); return (types_de_fichiers[foo].descr);
} }
@ -197,27 +193,25 @@ wrefresh(popup);
* filesystem infos * filesystem infos
*/ */
foo = stat(nom, &st); foo = stat(nom, &st);
if (foo != 0) if (foo != 0) {
{ mvwaddstr(popup, 2, 2, "hu ho, stat failed ?");
mvwaddstr(popup, 3, 2, "hu ho, stat failed ?");
} }
else else {
{
sprintf(chaine, "owned by: user id %d, group id %d", sprintf(chaine, "owned by: user id %d, group id %d",
st.st_uid, st.st_gid); st.st_uid, st.st_gid);
mvwaddstr(popup, 3, 2, chaine); mvwaddstr(popup, 2, 2, chaine);
sprintf(chaine, "size: %ld bytes or %ld MB.", sprintf(chaine, "size: %ld bytes or %ld MB.",
st.st_size, st.st_size,
1 + (st.st_size / (1024*1024)) ); 1 + (st.st_size / (1024*1024)) );
mvwaddstr(popup, 4, 2, chaine); mvwaddstr(popup, 3, 2, chaine);
} }
/* /*
* internals infos * internals infos
*/ */
sprintf(chaine, "magic_detect: %4d / ", type); sprintf(chaine, "magic_detect: %4d / ", type);
mvwaddstr(popup, 8, 2, chaine); mvwaddstr(popup, 6, 2, chaine);
mvwaddstr(popup, 8, 25, type2descr(type)); mvwaddstr(popup, 6, 25, type2descr(type));
wrefresh(popup); wrefresh(popup);
getch(); getch();

View File

@ -7,7 +7,7 @@
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <ao/ao.h> #include <ao/ao.h>
#include <sndfile.h>
#include "ecoute.h" #include "ecoute.h"
/*==------------------------------------------------------------------==*/ /*==------------------------------------------------------------------==*/
@ -98,39 +98,24 @@ fprintf(stderr, " | is active ? %s\n", isactive ? "yes" : "no");
return -1; return -1;
} }
/*==------------------------------------------------------------------==*/ /*==------------------------------------------------------------------==*/
void infos_driver_son(void) void infos_techniques(void)
{ {
int foo; int foo;
WINDOW *popup; WINDOW *popup;
char *cptr;
#if DEBUG_LEVEL #if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( )\n", __func__); fprintf(stderr, ">>> %s ( )\n", __func__);
#endif #endif
#define VID_INV 0
popup = newwin(12, 60, L_POPUP, C_POPUP); popup = newwin(12, 60, L_POPUP, C_POPUP);
bordure(popup, 1); bordure(popup, 1);
#if VID_INV mvwaddstr(popup, 0, 2, "{ Technical infos }");
wstandout(popup);
#endif
mvwaddstr(popup, 0, 2, "{{ sound driver }}");
#if VID_INV
wstandend(popup);
#endif
wrefresh(popup);
foo = start_sound_output(0); cptr = sf_version_string();
if (foo) { mvwaddstr(popup, 2, 3, cptr);
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 *"); */
mvwaddstr(popup, 11, 2, "{{ hit any key to reboot }}");
wrefresh(popup); wrefresh(popup);
getch(); getch();
delwin(popup); delwin(popup);

View File

@ -44,6 +44,11 @@ static int nombre; /* nbre d'entr
int teste_fichier(char *nom, struct stat *stb, int flag) int teste_fichier(char *nom, struct stat *stb, int flag)
{ {
int foo; int foo;
if (flag) {
fprintf(stderr, "in %s, flag must be 0, was %d\n", __func__, flag);
}
foo = stat(nom, stb); foo = stat(nom, stb);
if (foo) { if (foo) {
fprintf(stderr, "in %s stat -> %d\n", __func__, errno); fprintf(stderr, "in %s stat -> %d\n", __func__, errno);
@ -83,8 +88,7 @@ int trier_la_liste(int mode)
#if DEBUG_LEVEL #if DEBUG_LEVEL
fprintf(stderr, "tri de la liste, mode=%d\n", mode); fprintf(stderr, "tri de la liste, mode=%d\n", mode);
#endif #endif
switch(mode) switch(mode) {
{
case 1: case 1:
qsort(liste, nombre, sizeof(FICH), cmp_name_asc); qsort(liste, nombre, sizeof(FICH), cmp_name_asc);
break; break;
@ -117,8 +121,7 @@ int foo, type;
int devine; int devine;
long magicbits; long magicbits;
if ( NULL == (liste = malloc(TCHONK*sizeof(FICH))) ) if ( NULL == (liste = malloc(TCHONK*sizeof(FICH))) ) {
{
fprintf(stderr, "\nno memory in file-listing\n"); fprintf(stderr, "\nno memory in file-listing\n");
abort(); abort();
} }
@ -127,17 +130,12 @@ dir = opendir(".");
if (dir == NULL) { abort(); } /* XXX hard failure */ if (dir == NULL) { abort(); } /* XXX hard failure */
nombre = 0; nombre = 0;
while ( (de=readdir(dir)) != NULL) while ( (de=readdir(dir)) != NULL) {
{ if ( ! teste_fichier(de->d_name, &statbuf, 0) ) {
#if DEBUG_LEVEL
#endif
if ( ! teste_fichier(de->d_name, &statbuf, 0) )
{
continue; continue;
} }
type = type_du_fichier(de->d_name); type = type_du_fichier(de->d_name);
if (type < 0) if (type < 0) {
{
continue; continue;
} }
@ -159,8 +157,7 @@ while ( (de=readdir(dir)) != NULL)
#endif #endif
nombre++; nombre++;
/* if needed, increase the size of the list */ /* if needed, increase the size of the list */
if (nombre >= taille) if (nombre >= taille) {
{
liste = realloc(liste, sizeof(FICH)*(taille+TCHONK)); liste = realloc(liste, sizeof(FICH)*(taille+TCHONK));
taille += TCHONK; taille += TCHONK;
} }
@ -177,7 +174,7 @@ int ln;
ln = strlen(liste[number].nom); ln = strlen(liste[number].nom);
mvwprintw(w, line, 2, "%3d %-40s %9d ", mvwprintw(w, line, 2, " %3d %-50s %9d ",
liste[number].idx, liste[number].idx,
liste[number].nom, liste[number].nom,
liste[number].taille); liste[number].taille);
@ -197,7 +194,9 @@ fprintf(stderr, ">>> %s ( )\n", __func__);
#endif #endif
foo = faire_la_liste(); foo = faire_la_liste();
if (0 == foo) {
/* XXX ERROR MESSAGE AND QUIT ? */
}
affh = LINES-7; affh = LINES-7;
/* /*
* create a subwindow for list of files * create a subwindow for list of files
@ -215,16 +214,14 @@ flag_exit = 0;
fprintf(stderr, " %s enter interactive\n", __func__); fprintf(stderr, " %s enter interactive\n", __func__);
#endif #endif
do do {
{
#if DEBUG_LEVEL > 1 #if DEBUG_LEVEL > 1
sprintf(chaine, "nombre:%3d first:%3d curseur:%3d", sprintf(chaine, "nombre:%3d first:%3d curseur:%3d",
nombre, first, curseur); nombre, first, curseur);
mvwaddstr(wfs, 0, 50, chaine); mvwaddstr(wfs, 0, 50, chaine);
#endif #endif
for (foo=0; foo<affh; foo++) for (foo=0; foo<affh; foo++) {
{
idx = foo+first; idx = foo+first;
if (idx >= nombre) break; if (idx >= nombre) break;
@ -241,8 +238,7 @@ do
/* /*
* ici il faudrait effacer le curseur ? * ici il faudrait effacer le curseur ?
*/ */
switch (key) switch (key) {
{
case KEY_UP: case KEY_UP:
if (curseur) curseur--; if (curseur) curseur--;
else if (first>0) first--; else if (first>0) first--;
@ -262,21 +258,24 @@ do
case '\r': case 'p': case '\r': case 'p':
idx = curseur+first; /* ??? */ idx = curseur+first; /* ??? */
foo = play_this_file(liste[idx].nom, liste[idx].son.type, 0); foo = play_this_file(liste[idx].nom, liste[idx].son.type, 0);
#if DEBUG_LEVEL
fprintf(stderr, "play '%s' => %d\n",liste[idx].nom, foo); fprintf(stderr, "play '%s' => %d\n",liste[idx].nom, foo);
#endif
break; break;
case 'D': case 'd': case 'D': case 'd':
idx = curseur+first; /* ??? FIXME */ idx = curseur+first;
/* second parameter is ignored */
dump_this_file(liste[idx].nom, 0); dump_this_file(liste[idx].nom, 0);
break; break;
case 'I': case 'i': case 'I': case 'i':
idx = curseur+first; /* ??? FIXME */ idx = curseur+first;
info_about_this_file(liste[idx].nom, info_about_this_file(liste[idx].nom,
liste[idx].son.type); liste[idx].son.type);
break; break;
case 'A': case 'a': about(); break; case 'A': case 'a': about(); break;
case 'H': case 'h': case '?': help(); break; case 'H': case 'h': case '?': help(); break;
case 'n': trier_la_liste(1); break; case 'n': trier_la_liste(1); break;
@ -286,9 +285,9 @@ do
case 'u': trier_la_liste(10); break; case 'u': trier_la_liste(10); break;
case 'U': trier_la_liste(11); break; case 'U': trier_la_liste(11); break;
case '$': infos_driver_son(); break; case '$': infos_techniques(); break;
case 'Q': case 'q': case 'Q':
flag_exit = 1; flag_exit = 1;
break; break;
} }

View File

@ -20,13 +20,11 @@ int magic_detect(char *fname, long *pbits)
int fd; int fd;
char buffer[T_BUFF_MAGIC]; char buffer[T_BUFF_MAGIC];
if ( (fd=open(fname, O_RDONLY)) < 0 ) if ( (fd=open(fname, O_RDONLY)) < 0 ) {
{
perror(fname); perror(fname);
return -1; return -1;
} }
if ( T_BUFF_MAGIC != read(fd, buffer, T_BUFF_MAGIC) ) if ( T_BUFF_MAGIC != read(fd, buffer, T_BUFF_MAGIC) ) {
{
close(fd); close(fd);
return -2; return -2;
} }
@ -69,4 +67,3 @@ if (0 == strncmp(buffer, "OggS", 4))
return SON_UNKNOW; return SON_UNKNOW;
} }
/*==------------------------------------------------------------------==*/ /*==------------------------------------------------------------------==*/
/*==------------------------------------------------------------------==*/

View File

@ -17,7 +17,7 @@
/*==------------------------------------------------------------------==*/ /*==------------------------------------------------------------------==*/
static char *about_texte[] = static char *about_texte[] =
{ {
"{{ About... }}", "{ About... }",
"Ecoute, a sound player - version " VERSION, "Ecoute, a sound player - version " VERSION,
"Another ugly software made by tontonTh", "Another ugly software made by tontonTh",
"", "",
@ -38,7 +38,7 @@ static char *help_texte[] =
"tT Sort by file time", "tT Sort by file time",
"uU Sort by order (unsort)", "uU Sort by order (unsort)",
"I Infos about this file", "I Infos about this file",
"$ What is the sound driver ?", "$ Technical infos",
"", "",
"Q Quit", "Q Quit",
NULL NULL
@ -52,8 +52,7 @@ char **ptr;
nblignes = largmax = 0; nblignes = largmax = 0;
ptr = lignes+1; ptr = lignes+1;
while ( *ptr != NULL ) while ( *ptr != NULL ) {
{
#if DEBUG_LEVEL > 1 #if DEBUG_LEVEL > 1
fprintf(stderr, "%p %s\n", ptr, *ptr); fprintf(stderr, "%p %s\n", ptr, *ptr);
#endif #endif
@ -63,12 +62,11 @@ while ( *ptr != NULL )
ptr++; ptr++;
} }
popup = newwin((nblignes)+5, largmax+6, L_POPUP, C_POPUP); popup = newwin((nblignes)+4, largmax+7, L_POPUP, C_POPUP);
bordure(popup, 1); bordure(popup, 1);
wrefresh(popup); wrefresh(popup);
for (foo=1; foo<=nblignes; foo++) for (foo=1; foo<=nblignes; foo++) {
{
mvwaddstr(popup, (foo)+1, 3, lignes[foo]); mvwaddstr(popup, (foo)+1, 3, lignes[foo]);
#if DEBUG_LEVEL > 1 #if DEBUG_LEVEL > 1
fprintf(stderr, "%4d %s\n", foo, lignes[foo]); fprintf(stderr, "%4d %s\n", foo, lignes[foo]);
@ -118,6 +116,10 @@ int foo;
char *audiodevice = "none"; char *audiodevice = "none";
char *newdir = NULL; char *newdir = NULL;
#if DEBUG_LEVEL
fprintf(stderr, "\n\tE C O U T E %d\n\n", getpid());
#endif
while ((opt = getopt(argc, argv, "d:hs:x")) != -1) { while ((opt = getopt(argc, argv, "d:hs:x")) != -1) {
switch (opt) { switch (opt) {
case 'd': case 'd':

View File

@ -27,7 +27,7 @@ int driver;
char chaine[100]; char chaine[100];
short * samples; short * samples;
long total_lu; long total_lu;
int lu; int foo, bar, lu;
int maxsample; int maxsample;
#if DEBUG_LEVEL #if DEBUG_LEVEL
@ -40,8 +40,7 @@ fprintf(stderr, ">>> %s ( '%s' %p )\n", __func__, fname, popup);
memset(&sfinfo, 0, sizeof(sfinfo)); memset(&sfinfo, 0, sizeof(sfinfo));
sndf = sf_open(fname, SFM_READ, &sfinfo); sndf = sf_open(fname, SFM_READ, &sfinfo);
if (sndf==NULL) if (NULL == sndf) {
{
mvwaddstr(popup, 4, 4, "Invalid file ?"); mvwaddstr(popup, 4, 4, "Invalid file ?");
wrefresh(popup); wrefresh(popup);
getch(); getch();
@ -58,19 +57,14 @@ sprintf(chaine, "channels %d", sfinfo.channels);
mvwaddstr(popup, 4, 5, chaine); mvwaddstr(popup, 4, 5, chaine);
sprintf(chaine, "format %x", sfinfo.format); sprintf(chaine, "format %x", sfinfo.format);
mvwaddstr(popup, 5, 5, chaine); mvwaddstr(popup, 5, 5, chaine);
wrefresh(popup); wrefresh(popup);
#if DEBUG_LEVEL
getch();
#endif
/* /*
* memory allocation * memory allocation
* warning, we can get multiples channels. * warning, we can get multiples channels.
*/ */
if ( NULL == (samples = malloc(T_BUFFER*sizeof(short))) ) if ( NULL == (samples = malloc(T_BUFFER*sizeof(short)))) {
{ perror("no memory in AU player\n");
perror("\n no memory in AU player");
abort(); abort();
} }
@ -78,14 +72,26 @@ if ( NULL == (samples = malloc(T_BUFFER*sizeof(short))) )
* configuration of the sound output * configuration of the sound output
*/ */
ao_initialize(); ao_initialize();
#if DEBUG_LEVEL
fprintf(stderr, "%s: ao ititialised\n", __func__);
#endif
driver = ao_default_driver_id(); driver = ao_default_driver_id();
#if DEBUG_LEVEL
fprintf(stderr, "%s: ao default driver = %d\n", __func__, driver);
#endif
memset(&format, 0, sizeof(format));
format.bits = 16; /* ? */ format.bits = 16; /* ? */
format.channels = sfinfo.channels; format.channels = sfinfo.channels;
format.rate = sfinfo.samplerate; format.rate = sfinfo.samplerate;
format.byte_format = AO_FMT_LITTLE; /* XXX ??? */ format.byte_format = AO_FMT_LITTLE; /* XXX ??? */
fprintf(stderr, "%s: going to open ao\n", __func__);
device = ao_open_live(driver, &format, NULL); device = ao_open_live(driver, &format, NULL);
if (device == NULL) fprintf(stderr, "%s: open live -> %p\n", device);
{ if (NULL == device) {
fprintf(stderr, "\nEcoute: Error open device\n"); fprintf(stderr, "\nEcoute: Error open device\n");
/* /*
* comment connaitre la cause de l'erreur ? * comment connaitre la cause de l'erreur ?
@ -99,28 +105,25 @@ if (device == NULL)
*/ */
total_lu = 0L; total_lu = 0L;
maxsample = 0; maxsample = 0;
while ( (lu=sf_read_short(sndf, samples, T_BUFFER)) > 0 )
{ #if DEBUG_LEVEL
fprintf(stderr, "%s: enter loop\n", __func__);
#endif
while ( (lu=sf_read_short(sndf, samples, T_BUFFER)) > 0 ) {
ao_play(device, (char *)samples, lu*2); ao_play(device, (char *)samples, lu*2);
for (foo=0; foo<lu; foo++) {
/* WHY IS THIS CODE COMMENTED-OUT ? bar = abs(samples[foo]);
if (bar > maxsample) {
for (foo=0; foo<lu; foo++) sprintf(chaine, "%9ld max %6d", total_lu, bar);
{
bar = samples[foo];
if (bar > maxsample)
{
sprintf(chaine, "%9ld %6d", total_lu, bar);
mvwaddstr(popup, 7, 1, chaine); mvwaddstr(popup, 7, 1, chaine);
wrefresh(popup); wrefresh(popup);
maxsample = bar; maxsample = bar;
} }
} }
maxsample = 0; maxsample = 0;
*/
total_lu += (long)lu; total_lu += (long)lu;
progress_bar(popup, total_lu/sfinfo.channels, sfinfo.frames, 0); progress_bar(popup, total_lu/sfinfo.channels, sfinfo.frames, 1);
wrefresh(popup); wrefresh(popup);
} }

View File

@ -83,6 +83,7 @@ while ( (lu=read(fd, samples, T_BUFFER)) > 0 )
/* /*
* this is the end, my friends... * this is the end, my friends...
*/ */
free(samples);
ao_close(device); ao_close(device);
ao_shutdown(); /* must be paired with ao_initialise */ ao_shutdown(); /* must be paired with ao_initialise */

View File

@ -9,6 +9,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <string.h>
#include <ogg/ogg.h> #include <ogg/ogg.h>
#include <ao/ao.h> /* for the sound output */ #include <ao/ao.h> /* for the sound output */
@ -21,10 +22,11 @@ ogg_sync_state oy;
char *oggbuff; char *oggbuff;
int ret; int ret;
mvwaddstr(popup, 1, 2, "Ogg playing: work in progress..."); mvwaddstr(popup, 5, 2, fname);
mvwaddstr(popup, 3, 2, "Ogg playing: work in progress...");
wrefresh(popup); sleep(1); wrefresh(popup); sleep(1);
mvwaddstr(popup, 6, 6, "*** COREDUMPING ***"); /* mvwaddstr(popup, 6, 6, "*** COREDUMPING ***"); */
wrefresh(popup); getch(); wrefresh(popup); getch();
return -42; /* XXX */ return -42; /* XXX */
@ -32,6 +34,7 @@ return -42; /* XXX */
/* /*
* preparation * preparation
*/ */
memset(&oy, 0, sizeof(oy));
ret = ogg_sync_init(&oy); ret = ogg_sync_init(&oy);
mvwprintw(popup, 2, 2, "ogg_sync_init -> %d", ret); mvwprintw(popup, 2, 2, "ogg_sync_init -> %d", ret);
@ -40,6 +43,10 @@ mvwprintw(popup, 3, 2, "ogg_sync_buffer -> %p", oggbuff);
wrefresh(popup); wrefresh(popup);
getch(); getch();
/*
* action !
*/
/* /*
* termination * termination
*/ */

View File

@ -31,9 +31,8 @@ fprintf(stderr, ">>> %s ( '%s' %p )\n", __func__, fname, popup);
* get help from 'sndfile' for getting datas * get help from 'sndfile' for getting datas
*/ */
memset(&sfinfo, 0, sizeof(sfinfo)); memset(&sfinfo, 0, sizeof(sfinfo));
sndf = sf_open(fname, SFM_READ, &sfinfo); sndf = sf_open(fname, SFM_READ, &sfinfo);
if (sndf==NULL) if (NULL==sndf)
{ {
mvwaddstr(popup, 4, 4, "Invalid file ?"); mvwaddstr(popup, 4, 4, "Invalid file ?");
wrefresh(popup); wrefresh(popup);
@ -53,7 +52,6 @@ sprintf(chaine, "format 0x%x", sfinfo.format);
mvwaddstr(popup, 5, 5, chaine); mvwaddstr(popup, 5, 5, chaine);
sprintf(chaine, "sections %d", sfinfo.sections); sprintf(chaine, "sections %d", sfinfo.sections);
mvwaddstr(popup, 6, 5, chaine); mvwaddstr(popup, 6, 5, chaine);
wrefresh(popup); wrefresh(popup);
#if DEBUG_LEVEL > 1 #if DEBUG_LEVEL > 1
@ -82,7 +80,7 @@ format.channels = sfinfo.channels;
format.rate = sfinfo.samplerate; format.rate = sfinfo.samplerate;
format.byte_format = AO_FMT_LITTLE; /* XXX ??? */ format.byte_format = AO_FMT_LITTLE; /* XXX ??? */
device = ao_open_live(driver, &format, NULL); device = ao_open_live(driver, &format, NULL);
if (device == NULL) if (NULL==device)
{ {
fprintf(stderr, "\nEcoute: Error open device\n"); fprintf(stderr, "\nEcoute: Error open device\n");
/* /*