Browse Source

Remove 8 kHz upsampling

dds
PaulStoffregen 11 years ago
parent
commit
9e16bb1de7
3 changed files with 2 additions and 109 deletions
  1. +0
    -108
      Audio.cpp
  2. +0
    -1
      Audio.h
  3. +2
    -0
      ulaw.c

+ 0
- 108
Audio.cpp View File

format = *data++; format = *data++;
next = data; next = data;
prior = 0; prior = 0;
fraction = 0;
if (format == (44100 | (8 << 24))) { if (format == (44100 | (8 << 24))) {
playing = 1; playing = 1;
} else if (format == (44100 | (16 << 24))) { } else if (format == (44100 | (16 << 24))) {
consumed = 32; consumed = 32;
break; break;


case 7: // 8 bits, 8000 Hz - has audible problem, pull requests welcome!
if (fraction > 0) {
tmp32 = *in++;
s1 = (int8_t)((tmp32 >> 0) & 255) << 8;
s2 = (int8_t)((tmp32 >> 8) & 255) << 8;
s3 = (int8_t)((tmp32 >> 16) & 255) << 8;
s4 = (int8_t)((tmp32 >> 24) & 255) << 8;
switch (fraction) {
case 20: *out++ = (s0 * 7447 + s1 * 8937) >> 14;
*out++ = (s0 * 4468 + s1 * 11916) >> 14;
case 18: *out++ = (s0 * 1489 + s1 * 14894) >> 14;
*out++ = (s1 * 14894 + s2 * 1489) >> 14;
case 16: *out++ = (s1 * 11916 + s2 * 4468) >> 14;
*out++ = (s1 * 8937 + s2 * 7447) >> 14;
case 14: *out++ = (s1 * 5958 + s2 * 10426) >> 14;
*out++ = (s1 * 2978 + s2 * 13405) >> 14;
case 12: *out++ = s2;
*out++ = (s2 * 13405 + s3 * 2978) >> 14;
case 10: *out++ = (s2 * 10426 + s3 * 5958) >> 14;
*out++ = (s2 * 7447 + s3 * 8937) >> 14;
case 8: *out++ = (s2 * 4468 + s3 * 11916) >> 14;
*out++ = (s2 * 1489 + s3 * 14894) >> 14;
case 6: *out++ = (s3 * 14894 + s4 * 1489) >> 14;
*out++ = (s3 * 11916 + s4 * 4468) >> 14;
case 4: *out++ = (s3 * 8937 + s4 * 7447) >> 14;
*out++ = (s3 * 5958 + s4 * 10426) >> 14;
case 2: *out++ = (s3 * 2978 + s4 * 13405) >> 14;
*out++ = s4;
}
s0 = s4;
consumed = 4;
} else {
consumed = 0;
}
for (i = fraction; i < AUDIO_BLOCK_SAMPLES-22 /* 106 */ ; i += 22) {
tmp32 = *in++;
s1 = (int8_t)((tmp32 >> 0) & 255) << 8;
s2 = (int8_t)((tmp32 >> 8) & 255) << 8;
s3 = (int8_t)((tmp32 >> 16) & 255) << 8;
s4 = (int8_t)((tmp32 >> 24) & 255) << 8;
*out++ = (s0 * 13405 + s1 * 2978) >> 14;
*out++ = (s0 * 10426 + s1 * 5958) >> 14;
*out++ = (s0 * 7447 + s1 * 8937) >> 14;
*out++ = (s0 * 4468 + s1 * 11916) >> 14;
*out++ = (s0 * 1489 + s1 * 14894) >> 14;
*out++ = (s1 * 14894 + s2 * 1489) >> 14;
*out++ = (s1 * 11916 + s2 * 4468) >> 14;
*out++ = (s1 * 8937 + s2 * 7447) >> 14;
*out++ = (s1 * 5958 + s2 * 10426) >> 14;
*out++ = (s1 * 2978 + s2 * 13405) >> 14;
*out++ = s2;
*out++ = (s2 * 13405 + s3 * 2978) >> 14;
*out++ = (s2 * 10426 + s3 * 5958) >> 14;
*out++ = (s2 * 7447 + s3 * 8937) >> 14;
*out++ = (s2 * 4468 + s3 * 11916) >> 14;
*out++ = (s2 * 1489 + s3 * 14894) >> 14;
*out++ = (s3 * 14894 + s4 * 1489) >> 14;
*out++ = (s3 * 11916 + s4 * 4468) >> 14;
*out++ = (s3 * 8937 + s4 * 7447) >> 14;
*out++ = (s3 * 5958 + s4 * 10426) >> 14;
*out++ = (s3 * 2978 + s4 * 13405) >> 14;
*out++ = s4;
s0 = s4;
consumed += 4;
}
if (i < AUDIO_BLOCK_SAMPLES) {
fraction = 22 - (AUDIO_BLOCK_SAMPLES - i);
tmp32 = *in;
s1 = (int8_t)((tmp32 >> 0) & 255) << 8;
s2 = (int8_t)((tmp32 >> 8) & 255) << 8;
s3 = (int8_t)((tmp32 >> 16) & 255) << 8;
s4 = (int8_t)((tmp32 >> 24) & 255) << 8;
do {
*out++ = (s0 * 13405 + s1 * 2978) >> 14;
*out++ = (s0 * 10426 + s1 * 5958) >> 14;
if ((i += 2) == AUDIO_BLOCK_SAMPLES) break;
*out++ = (s0 * 7447 + s1 * 8937) >> 14;
*out++ = (s0 * 4468 + s1 * 11916) >> 14;
if ((i += 2) == AUDIO_BLOCK_SAMPLES) break;
*out++ = (s0 * 1489 + s1 * 14894) >> 14;
*out++ = (s1 * 14894 + s2 * 1489) >> 14;
if ((i += 2) == AUDIO_BLOCK_SAMPLES) break;
*out++ = (s1 * 11916 + s2 * 4468) >> 14;
*out++ = (s1 * 8937 + s2 * 7447) >> 14;
if ((i += 2) == AUDIO_BLOCK_SAMPLES) break;
*out++ = (s1 * 5958 + s2 * 10426) >> 14;
*out++ = (s1 * 2978 + s2 * 13405) >> 14;
if ((i += 2) == AUDIO_BLOCK_SAMPLES) break;
*out++ = s2;
*out++ = (s2 * 13405 + s3 * 2978) >> 14;
if ((i += 2) == AUDIO_BLOCK_SAMPLES) break;
*out++ = (s2 * 10426 + s3 * 5958) >> 14;
*out++ = (s2 * 7447 + s3 * 8937) >> 14;
if ((i += 2) == AUDIO_BLOCK_SAMPLES) break;
*out++ = (s2 * 4468 + s3 * 11916) >> 14;
*out++ = (s2 * 1489 + s3 * 14894) >> 14;
if ((i += 2) == AUDIO_BLOCK_SAMPLES) break;
*out++ = (s3 * 14894 + s4 * 1489) >> 14;
*out++ = (s3 * 11916 + s4 * 4468) >> 14;
if ((i += 2) == AUDIO_BLOCK_SAMPLES) break;
*out++ = (s3 * 8937 + s4 * 7447) >> 14;
*out++ = (s3 * 5958 + s4 * 10426) >> 14;
} while (0);
} else {
fraction = 0;
}
break;
default: default:
release(block); release(block);
playing = 0; playing = 0;

+ 0
- 1
Audio.h View File

const unsigned int *next; const unsigned int *next;
uint32_t length; uint32_t length;
int16_t prior; int16_t prior;
uint8_t fraction;
uint8_t playing; uint8_t playing;
}; };



+ 2
- 0
ulaw.c View File

#include <stdint.h>

const int16_t ulaw_decode_table[256] = { const int16_t ulaw_decode_table[256] = {
0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 0, 8, 16, 24, 32, 40, 48, 56, 64, 72,
80, 88, 96, 104, 112, 120, 128, 144, 160, 176, 80, 88, 96, 104, 112, 120, 128, 144, 160, 176,

Loading…
Cancel
Save