Compare commits

...

3 Commits

Author SHA1 Message Date
tth
db3d7283df dernier commit avant travaux... 2019-11-03 18:58:21 +01:00
tth
ec27a42dc1 correcting a very nasty trim bug 2019-11-01 16:25:42 +01:00
tth
134f3170f6 use verbosity flag 2019-11-01 11:37:35 +01:00
15 changed files with 321 additions and 144 deletions

2
.gitignore vendored
View File

@ -3,8 +3,8 @@
audio/t
audio/*.wav
nclooper
ui/t
files/t

13
Makefile Normal file
View File

@ -0,0 +1,13 @@
CC = gcc
CCOPT = -Wall -g -DDEBUG_LEVEL=1
OBJS = ui/ncfuncs.o files/smpllist.o files/ffuncs.o
LIBS = -lcurses
main.o: main.c nclooper.h Makefile
$(CC) ${CCOPT} -c $<
nclooper: main.o ${OBJS} Makefile
$(CC) ${CCOPT} $< ${OBJS} ${LIBS} -o $@

View File

@ -47,11 +47,11 @@ if (NULL==sndf)
buffer = calloc(T_BUFF_WAVES, sizeof(short)*2);
#if DEBUG_LEVEL
fprintf(stderr, "samplerate : %d\n", sfinfo.samplerate);
fprintf(stderr, "frames : %ld\n", sfinfo.frames);
fprintf(stderr, "seekable : %d\n", sfinfo.seekable);
#endif
if (verbosity) {
fprintf(stderr, "samplerate : %d\n", sfinfo.samplerate);
fprintf(stderr, "frames : %ld\n", sfinfo.frames);
fprintf(stderr, "seekable : %d\n", sfinfo.seekable);
}
for (pass=0; pass<loop; pass++) {

View File

@ -19,14 +19,37 @@ void help(int k)
{
}
/* --------------------------------------------------------------------- */
int envoyer_du_son(char *fname, int k)
{
ao_device *device;
int foo;
device = init_ao_output(44100);
fprintf(stderr, "AO init -> %p\n", device);
switch (k) {
case 0:
foo = blast_this_file(fname, device, 1);
fprintf(stderr, "blast file -> %d\n", foo);
break;
case 1:
foo = play_some_stuff(device, 0);
fprintf(stderr, "play stuff -> %d\n", foo);
break;
}
foo = close_ao_output(device);
fprintf(stderr, "AO close -> %d\n", foo);
return 0;
}
/* --------------------------------------------------------------------- */
int main(int argc, char *argv[])
{
int foo;
ao_device *device;
int opt;
while ((opt = getopt(argc, argv, "hv")) != -1) {
switch(opt) {
case 'h': help(0); break;
@ -38,18 +61,7 @@ while ((opt = getopt(argc, argv, "hv")) != -1) {
fprintf(stderr, "argc = %d, optind = %d\n", argc, optind);
#endif
device = init_ao_output(44100);
fprintf(stderr, "AO init -> %p\n", device);
foo = play_some_stuff(device, 0);
fprintf(stderr, "play stuff -> %d\n", foo);
foo = blast_this_file("AK14V-ORDRES.wav", device, 3);
fprintf(stderr, "blast file -> %d\n", foo);
foo = close_ao_output(device);
fprintf(stderr, "AO close -> %d\n", foo);
envoyer_du_son("AK14V-ORDRES.wav", 0);
return 0;
}

View File

@ -4,8 +4,11 @@ CCOPT = -Wall -g -DDEBUG_LEVEL=1
ffuncs.o: ffuncs.c ffuncs.h Makefile
$(CC) ${CCOPT} -c $<
smpllist.o: smpllist.c smpllist.h ffuncs.h Makefile
$(CC) ${CCOPT} -c $<
LIBS =
OBJS = ffuncs.o
OBJS = ffuncs.o smpllist.o
t: t.c ${OBJS} Makefile
$(CC) ${CCOPT} $< ${OBJS} ${LIBS} -o $@

View File

@ -2,19 +2,6 @@
* various file functions
*/
/* --------------------------------------------------------------------- */
/* two arbitrary magic number */
#define SZ_TEXT 20
#define SZ_PATH 400
typedef struct {
char key;
int flags;
char text[SZ_TEXT+1];
char path[SZ_PATH+1];
} SampleRef;
/* --------------------------------------------------------------------- */

View File

@ -1,3 +1,4 @@
a | bla bla | ../AK14V-ORDRES.wav
z |znare|znare.wav
B | plop ! | ../AK14V-ORDRES.wav
c | classic | foo.wav

139
files/smpllist.c Normal file
View File

@ -0,0 +1,139 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "../nclooper.h"
#include "ffuncs.h"
#include "smpllist.h"
/* --------------------------------------------------------------------- */
extern int verbosity;
/* --------------------------------------------------------------------- */
void affiche_un_sample(SampleRef *sref, int options)
{
printf("%c %02X [%-20s] %s\n", sref->key, sref->flags, sref->text,
sref->path);
}
/* --------------------------------------------------------------------- */
int decode_la_ligne(char *line, SampleRef *sref)
{
char *ptr, *cp;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' %p )\n", __func__, line, sref);
// dump(line);
#endif
/*
* ON THE WAY TO PARSING HELL
*/
ptr = strtok(line, "|");
if (NULL==ptr) {
fprintf(stderr, "fubarized\n");
return -1;
}
cp = ltrim(rtrim(ptr));
if (verbosity) fprintf(stderr, "key [%s]\n", cp);
if ( ! isalpha(*cp)) {
fprintf(stderr, "invalid key 0x%02x\n", *cp);
return -2;
}
sref->key = toupper(*cp);
ptr = strtok(NULL, "|");
if (NULL==ptr) {
fprintf(stderr, "line to short\n");
return -3;
}
cp = ltrim(rtrim(ptr));
if (verbosity) fprintf(stderr, "text [%s]\n", cp);
if (strlen(cp) > SZ_TEXT) {
fprintf(stderr, "text too long\n");
return -4;
}
strcpy(sref->text, cp);
ptr = strtok(NULL, "|");
if (NULL==ptr) {
fprintf(stderr, "line to short\n");
return -6;
}
cp = ltrim(rtrim(ptr));
if (verbosity) fprintf(stderr, "path [%s]\n", cp);
if (strlen(ptr) > SZ_PATH) {
fprintf(stderr, "path too long\n");
return -5;
}
strcpy(sref->path, cp);
return 0;
}
/* --------------------------------------------------------------------- */
#define T_LINE 500
int lecture_liste_des_samples(char *fname, SampleRef *samples)
{
FILE *fp;
char line[T_LINE+1];
int ln; /* line number */
int foo, bar, idx;
SampleRef sample;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' )\n", __func__, fname);
#endif
/*
* first step : clean the current list
*/
for (foo=0; foo<26; foo++) {
memset(samples+foo, 0, sizeof(SampleRef));
}
if (NULL==(fp=fopen(fname, "r"))) {
perror(fname);
exit(1);
}
ln = 1;
while (NULL != fgets(line, T_LINE, fp)) {
/* degommer l'eventuel \n */
bar = strlen(line);
if (0==bar) {
fprintf(stderr,"line %d very short\n", ln);
continue;
}
bar--; /* backspace one char */
if ('\n' == line[bar]) line[bar]='\0';
memset(&sample, 0, sizeof(SampleRef));
foo = decode_la_ligne(line, &sample);
#if DEBUG_LEVEL
fprintf(stderr, "decode la ligne -> %d\n\n", foo);
#endif
if (!foo) {
affiche_un_sample(&sample, 0);
idx = tolower(sample.key) - 'a';
if (idx<0 || idx>25) {
/* serious bug here */
break;
}
memcpy(samples+idx, &sample, sizeof(SampleRef));
}
ln++;
}
fclose(fp);
return -1;
}
/* --------------------------------------------------------------------- */

12
files/smpllist.h Normal file
View File

@ -0,0 +1,12 @@
/* --------------------------------------------------------------------- */
void affiche_un_sample(SampleRef *sref, int options);
int decode_la_ligne(char *line, SampleRef *sref);
int lecture_liste_des_samples(char *fname, SampleRef *array);

115
files/t.c
View File

@ -8,113 +8,16 @@
#include <string.h>
#include <ctype.h>
#include "../nclooper.h"
#include "smpllist.h"
#include "ffuncs.h"
/* --------------------------------------------------------------------- */
int verbosity;
/* --------------------------------------------------------------------- */
void affiche_un_sample(SampleRef *sref)
{
printf("%c %02X [%-20s] %s\n", sref->key, sref->flags, sref->text,
sref->path);
}
/* --------------------------------------------------------------------- */
static int decode_la_ligne(char *line, SampleRef *sref)
{
char *ptr, *cp;
SampleRef the_samples[26];
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' %p )\n", __func__, line, sref);
// dump(line);
#endif
/*
* ON THE WAY TO PARSING HELL
*/
ptr = strtok(line, "|");
cp = ltrim(rtrim(ptr));
fprintf(stderr, "key [%s]\n", cp);
if ( ! isalpha(*cp)) {
fprintf(stderr, "invalid key 0x%02x\n", *cp);
return -2;
}
sref->key = toupper(*cp);
ptr = strtok(NULL, "|");
if (NULL==ptr) {
fprintf(stderr, "line to short\n");
return -3;
}
cp = ltrim(rtrim(ptr));
fprintf(stderr, "text [%s]\n", cp);
if (strlen(cp) > SZ_TEXT) {
fprintf(stderr, "text too long\n");
return -4;
}
strcpy(sref->text, cp);
ptr = strtok(NULL, "|");
if (NULL==ptr) {
fprintf(stderr, "line to short\n");
return -6;
}
fprintf(stderr, "path [%s]\n", ltrim(rtrim(ptr)));
if (strlen(ptr) > SZ_TEXT) {
fprintf(stderr, "path too long\n");
return -5;
}
strcpy(sref->path, ptr);
return 0;
}
/* --------------------------------------------------------------------- */
#define T_LINE 300
int essai_lecture_liste(char *fname)
{
FILE *fp;
char line[T_LINE+1];
int ln; /* line number */
int foo, bar;
SampleRef sample;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' )\n", __func__, fname);
#endif
if (NULL==(fp=fopen(fname, "r"))) {
perror(fname);
exit(1);
}
ln = 1;
while (NULL != fgets(line, T_LINE, fp)) {
// fprintf(stderr, "%3d = %s", ln, line);
/* degommer l'eventuel \n */
bar = strlen(line);
if (0==bar) {
fprintf(stderr,"line %d very short\n", ln);
continue;
}
bar--; /* backspace one char */
if ('\n' == line[bar]) line[bar]='\0';
memset(&sample, 0, sizeof(SampleRef));
foo = decode_la_ligne(line, &sample);
fprintf(stderr, "decode la ligne -> %d\n\n", foo);
affiche_un_sample(&sample);
ln++;
}
fclose(fp);
return -1;
}
/* --------------------------------------------------------------------- */
void help(int k)
{
@ -129,10 +32,11 @@ int foo;
int opt;
char *listname = "samples.list";
while ((opt = getopt(argc, argv, "hv")) != -1) {
while ((opt = getopt(argc, argv, "hl:v")) != -1) {
switch(opt) {
case 'h': help(0); break;
case 'v': verbosity++; break;
case 'l': listname = optarg; break;
}
}
@ -140,8 +44,13 @@ while ((opt = getopt(argc, argv, "hv")) != -1) {
fprintf(stderr, "argc = %d, optind = %d\n", argc, optind);
#endif
foo = essai_lecture_liste(listname);
fprintf(stderr,"essai lecture '%s' -> %d\n", listname, foo);
foo = lecture_liste_des_samples(listname, the_samples);
fprintf(stderr,"retour lecture liste '%s' -> %d\n", listname, foo);
for (foo=0; foo<26; foo++) {
printf("%3d %02x %s\n", foo, the_samples[foo].key,
the_samples[foo].text);
}
return 0;
}

59
main.c Normal file
View File

@ -0,0 +1,59 @@
/*
* NcLooper test des fonctions fichier (???)
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
#include "nclooper.h"
// #include "files/smpllist.h"
// #include "files/ffuncs.h"
/* --------------------------------------------------------------------- */
int verbosity;
SampleRef the_samples[26];
/* --------------------------------------------------------------------- */
void help(int k)
{
puts("NcLooper : version pas finie...");
exit(0);
}
/* --------------------------------------------------------------------- */
int main(int argc, char *argv[])
{
int foo;
int opt;
char *listname = "samples.list";
while ((opt = getopt(argc, argv, "hl:v")) != -1) {
switch(opt) {
case 'h': help(0); break;
case 'v': verbosity++; break;
case 'l': listname = optarg; break;
}
}
#if DEBUG_LEVEL
fprintf(stderr, "argc = %d, optind = %d\n", argc, optind);
#endif
foo = lecture_liste_des_samples(listname, the_samples);
fprintf(stderr,"retour lecture liste '%s' -> %d\n", listname, foo);
for (foo=0; foo<26; foo++) {
printf("%3d %02x %s\n", foo, the_samples[foo].key,
the_samples[foo].text);
}
return 0;
}
/* --------------------------------------------------------------------- */

18
nclooper.h Normal file
View File

@ -0,0 +1,18 @@
/*
* NcLooper
*/
/* two arbitrary magic number */
#define SZ_TEXT 20
#define SZ_PATH 400
typedef struct {
char key;
int flags;
char text[SZ_TEXT+1];
char path[SZ_PATH+1];
} SampleRef;
#include "files/smpllist.h"
#include "files/ffuncs.h"

View File

@ -3,7 +3,7 @@
*/
#include <curses.h>
#include "ncfuncs.h"
/* --------------------------------------------------------------------- */
int init_ecran(char *txt)
@ -11,7 +11,7 @@ int init_ecran(char *txt)
initscr();
standout();
border('o', 'o', 'o', 'o', 'X', 'X', 'X', 'X');
// border('o', 'o', 'o', 'o', 'X', 'X', 'X', 'X');
standend();
mvaddstr(1, 5, txt);
refresh();
@ -27,3 +27,12 @@ endwin();
return 0;
}
/* --------------------------------------------------------------------- */
int idx2position(int idx, int *prow, int *pcol)
{
*prow = 6 + (idx % 13);
*pcol = 4 + (40*(idx/13));
return 0;
}
/* --------------------------------------------------------------------- */

View File

@ -2,7 +2,10 @@
* NcLooper--- interface curses, fonctions de base
*/
#include <curses.h>
int init_ecran(char *txt);
int fin_ecran(void);
int idx2position(int idx, int *prow, int *pcol);

20
ui/t.c
View File

@ -6,24 +6,26 @@
#include <stdlib.h>
#include <unistd.h>
#include "../nclooper.h"
#include "ncfuncs.h"
/* --------------------------------------------------------------------- */
int verbosity;
/* --------------------------------------------------------------------- */
void help(int k)
{
puts("plop...");
puts("test des fonctions de l'interface utilisateur");
exit(0);
}
/* --------------------------------------------------------------------- */
int main(int argc, char *argv[])
{
int foo;
int foo, idx;
int opt;
int row, col;
while ((opt = getopt(argc, argv, "hv")) != -1) {
switch(opt) {
@ -37,9 +39,19 @@ fprintf(stderr, "argc = %d, optind = %d\n", argc, optind);
#endif
foo = init_ecran("* NcLooper *");
sleep(2);
for (idx=0; idx<26; idx++) {
foo = idx2position(idx, &row, &col);
standout();
mvaddch(row, col, '<');
mvaddch(row, col+1, 'A' + idx);
mvaddch(row, col+2, '>');
standend();
mvaddstr(row, col+5, "bla bla bla...");
}
refresh();
sleep(3);
fin_ecran();