[Pommed-commits] r425 - trunk/pommed
jblache at alioth.debian.org
jblache at alioth.debian.org
Wed Dec 12 11:23:22 UTC 2007
Author: jblache
Date: 2007-12-12 11:23:22 +0000 (Wed, 12 Dec 2007)
New Revision: 425
Modified:
trunk/pommed/beep.c
Log:
Rework & fix the audio sample loading code.
Modified: trunk/pommed/beep.c
===================================================================
--- trunk/pommed/beep.c 2007-12-12 10:51:16 UTC (rev 424)
+++ trunk/pommed/beep.c 2007-12-12 11:23:22 UTC (rev 425)
@@ -272,7 +272,7 @@
{
AFfilehandle affd; /* filehandle for soundfile from libaudiofile */
AFframecount framecount;
- int dummy, channels, byteorder, framesize, precision, err = 0;
+ int dummy, channels, byteorder, framesize, precision;
struct sample *sample;
int ret;
@@ -282,64 +282,67 @@
return NULL;
affd = afOpenFile(filename, "r", 0);
- if (affd > 0)
+ if (!affd)
{
- afGetSampleFormat(affd, AF_DEFAULT_TRACK, &dummy, &precision);
- channels = afGetChannels(affd, AF_DEFAULT_TRACK);
- byteorder = afGetVirtualByteOrder(affd, AF_DEFAULT_TRACK);
- framesize = (int) afGetFrameSize(affd, AF_DEFAULT_TRACK, 0);
- framecount = afGetFrameCount(affd, AF_DEFAULT_TRACK);
- sample->speed = (int) afGetRate(affd, AF_DEFAULT_TRACK);
+ free(sample);
+ return NULL;
+ }
- if (channels <= 2)
- sample->channels = channels;
- else
- err = -1;
+ afGetSampleFormat(affd, AF_DEFAULT_TRACK, &dummy, &precision);
+ channels = afGetChannels(affd, AF_DEFAULT_TRACK);
+ byteorder = afGetVirtualByteOrder(affd, AF_DEFAULT_TRACK);
+ framesize = (int) afGetFrameSize(affd, AF_DEFAULT_TRACK, 0);
+ framecount = afGetFrameCount(affd, AF_DEFAULT_TRACK);
+ sample->speed = (int) afGetRate(affd, AF_DEFAULT_TRACK);
- if (precision == 8)
- sample->format = SND_PCM_FORMAT_S8;
- else if (precision == 16)
- {
- if (byteorder == AF_BYTEORDER_LITTLEENDIAN)
- sample->format = SND_PCM_FORMAT_S16_LE;
- else
- sample->format = SND_PCM_FORMAT_S16_BE;
- }
- else
- err = -1;
+ if (channels <= 2)
+ sample->channels = channels;
+ else
+ goto error_out;
- if (err == 0)
- {
- sample->framesize = framesize;
- sample->framecount = framecount;
- sample->audiodatalen = framecount * framesize;
-
- sample->audiodata = (char *) malloc(sample->audiodatalen);
- if (sample->audiodata != NULL)
- {
- ret = afReadFrames(affd, AF_DEFAULT_TRACK, sample->audiodata, framecount);
- if (ret != framecount)
- {
- free(sample->audiodata);
- err = -1;
- }
- }
- else
- ret = -1;
- }
- afCloseFile(affd);
- }
-
- if (err == -1)
+ switch (precision)
{
- free(sample);
- return NULL;
+ case 8:
+ sample->format = SND_PCM_FORMAT_S8;
+ break;
+ case 16:
+ if (byteorder == AF_BYTEORDER_LITTLEENDIAN)
+ sample->format = SND_PCM_FORMAT_S16_LE;
+ else
+ sample->format = SND_PCM_FORMAT_S16_BE;
+ break;
+ default:
+ goto error_out;
+ break;
}
+ sample->framesize = framesize;
sample->periods = sample->framesize;
sample->buffersize = (sample->periods * 8192) >> 2;
+ sample->framecount = framecount;
+ sample->audiodatalen = framecount * framesize;
+ sample->audiodata = (char *) malloc(sample->audiodatalen);
+ if (sample->audiodata != NULL)
+ {
+ ret = afReadFrames(affd, AF_DEFAULT_TRACK, sample->audiodata, framecount);
+ if (ret != framecount)
+ {
+ free(sample->audiodata);
+ goto error_out;
+ }
+ }
+ else
+ goto error_out;
+
+ afCloseFile(affd);
+
return sample;
+
+ error_out: /* something bad happened */
+ afCloseFile(affd);
+ free(sample);
+ return NULL;
}
@@ -474,9 +477,6 @@
if (!beep_thread_running)
return;
- if (!_dsp.sample)
- return;
-
pthread_mutex_lock(&(_dsp.mutex));
_dsp.command = command;
@@ -492,9 +492,6 @@
{
int i;
- if (!_dsp.sample)
- return;
-
for (i = 0; i < AUDIO_N; i++)
{
if (_dsp.sample[i] == NULL)
More information about the Pommed-commits
mailing list