aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sam_player.c26
-rw-r--r--wave.h2
-rw-r--r--wave_linux.c4
3 files changed, 10 insertions, 22 deletions
diff --git a/sam_player.c b/sam_player.c
index ee604e7..9b2292c 100644
--- a/sam_player.c
+++ b/sam_player.c
@@ -12,35 +12,23 @@ static wave_t wave = { 1, 44100, 8, 0, 1, wave_buffer };
int main(int argc, char **argv)
{
- int argi;
- char *arg, c, buf[200], *p;
unsigned int wave_length;
- p = buf;
- for(argi = 1;argi < argc;argi++)
+
+ if(argc != 3)
{
- arg = argv[argi];
- do
- {
- c = *(arg++);
- if(c >= 'a' && c <= 'z')
- c = (c - 'a') + 'A';
- if(c != '\"')
- {
- if(p < &buf[sizeof(buf) - 1])
- *(p++) = (c != '\0') ? c : ' ';
- }
- }while(c != '\0');
+ printf("Usage: %s <filename.wav> <text>\n", argv[0]);
+ return 1;
}
- *p = '\0';
+
sam_init();
wave_length = sizeof(wave_buffer);
- sam_recite(buf, wave.samples_per_sec, wave_buffer, &wave_length);
+ sam_recite(argv[2], wave.samples_per_sec, wave_buffer, &wave_length);
if(wave_length > 0)
{
if(wave_length > sizeof(wave_buffer))
wave_length = sizeof(wave_buffer);
wave.frame_size = wave_length;
- (void)wave_out(&wave);
+ wave_out(&wave, argv[1]);
}
return 0;
}
diff --git a/wave.h b/wave.h
index 3798996..2804517 100644
--- a/wave.h
+++ b/wave.h
@@ -13,6 +13,6 @@ typedef struct __wave
const void *frame_data; // pointer to the buffer containing sample frames
}wave_t;
-int wave_out(wave_t *wave);
+void wave_out(wave_t *wave, const char* filename);
#endif
diff --git a/wave_linux.c b/wave_linux.c
index f960a9b..90fc3a6 100644
--- a/wave_linux.c
+++ b/wave_linux.c
@@ -2,7 +2,7 @@
#include "wave.h"
#include <sndfile.h>
-int wave_out(wave_t *wave)
+void wave_out(wave_t *wave, const char* filename)
{
SNDFILE* out;
SF_INFO info;
@@ -11,7 +11,7 @@ int wave_out(wave_t *wave)
info.channels = wave->channels;
info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_U8;
- out = sf_open("out.wav", SFM_WRITE, &info);
+ out = sf_open(filename, SFM_WRITE, &info);
sf_write_raw(out, wave->frame_data, wave->frame_size);
sf_close(out);