static void _play_file_sample_sync(char *file, int frequency, int ch, int type)
{
audio_out_h output;
- int file_size = 0;
- int read_bytes = 0;
+ long file_size = 0;
+ size_t read_bytes = 0;
int buffer_size = 0;
char *buf = NULL;
FILE *fp = NULL;
file_size = ftell(fp);
fseek(fp, 0, SEEK_SET);
- printf("Play [%s] of size [%d] with [%d][%d][%d]\n", file, file_size, frequency, ch, type);
+ printf("Play [%s] of size [%ld] with [%d][%d][%d]\n", file, file_size, frequency, ch, type);
audio_out_create_new(frequency, ch_table[ch], AUDIO_SAMPLE_TYPE_U8 + type, &output);
audio_out_set_state_changed_cb(output, _audio_out_state_cb, NULL);
audio_out_prepare(output);
audio_out_get_buffer_size(output, &buffer_size);
- buf = (char *)malloc(buffer_size);
+ buf = (char *)calloc(buffer_size, sizeof(char));
if (buf == NULL) {
printf("malloc failed\n");
goto EXIT;
while (file_size > 0) {
read_bytes = fread(buf, 1, buffer_size, fp);
+
printf(".");
- i++;
- if (i % 10 == 0)
+ if (++i % 10 == 0)
printf("|");
if (i % 100 == 0) {
printf("\n");
i = 0;
}
- audio_out_write(output, buf, read_bytes);
- file_size = file_size - read_bytes;
+
+ if (read_bytes != buffer_size) {
+ if (feof(fp)) {
+ printf("\n EOS! this is a last buffer! \n");
+ } else if (ferror(fp)) {
+ printf("\n Error!\n");
+ break;
+ }
+ }
+
+ audio_out_write(output, buf, (unsigned int)read_bytes);
+
+ file_size -= (long)read_bytes;
usleep(10000);
}
EXIT:
+ printf("\n Cleanup now!\n");
audio_out_unprepare(output);
audio_out_destroy(output);
if (fp)
fclose(fp);
- printf("\nEOS!!!! Play done\n");
+ printf("Play done\n");
}
static sound_device_h *find_device_by_id(int id)