]> git.lizzy.rs Git - plan9front.git/commitdiff
mp3dec: fix volume for mp3dec
authorcinap_lenrek <cinap_lenrek@gmx.de>
Wed, 6 Nov 2013 21:18:36 +0000 (22:18 +0100)
committercinap_lenrek <cinap_lenrek@gmx.de>
Wed, 6 Nov 2013 21:18:36 +0000 (22:18 +0100)
the libmad samples need to be scaled properly. the
previous assumption was that it is 32 bits, but it
really is MAD_F_FRACTBITS + sign bit and rest used
for overflow.

thanks eekee!

sys/src/cmd/audio/mp3dec/main.c

index 50a000e06f77ffef72720f60c86cd71145b4547d..1aef43e0ccd358943f2368ec666b3b41dd2d7c10 100644 (file)
@@ -46,7 +46,7 @@ output(void *, struct mad_header const* header, struct mad_pcm *pcm)
 
                rate = pcm->samplerate;
                chans = pcm->channels;
-               snprint(fmt, sizeof(fmt), "s32r%dc%d", rate, chans);
+               snprint(fmt, sizeof(fmt), "s%dr%dc%d", MAD_F_FRACBITS+1, rate, chans);
 
                if(ifd >= 0){
                        close(ifd);
@@ -82,6 +82,13 @@ output(void *, struct mad_header const* header, struct mad_pcm *pcm)
                p = buf + j*4;
                for(i=0; i < pcm->length; i++){
                        v = *s++;
+
+                       /* clipping */
+                       if(v >= MAD_F_ONE)
+                               v = MAD_F_ONE-1;
+                       else if(v < -MAD_F_ONE)
+                               v = -MAD_F_ONE;
+
                        p[0] = v, v>>=8;
                        p[1] = v, v>>=8;
                        p[2] = v, v>>=8;