mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-14 10:05:44 -04:00
Drop support for 8 bit wav files that were never used anyways.
This commit is contained in:
parent
63a06b0a17
commit
a2dfccc560
30
src/Audio.c
30
src/Audio.c
@ -75,13 +75,6 @@ static void Volume_Mix16(cc_int16* samples, int count, int volume) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Volume_Mix8(cc_uint8* samples, int count, int volume) {
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < count; i++, samples++) {
|
|
||||||
samples[0] = (127 + (samples[0] - 127) * volume / 100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*########################################################################################################################*
|
/*########################################################################################################################*
|
||||||
*------------------------------------------------Native implementation----------------------------------------------------*
|
*------------------------------------------------Native implementation----------------------------------------------------*
|
||||||
@ -140,14 +133,14 @@ cc_result Audio_SetFormat(AudioHandle handle, struct AudioFormat* format) {
|
|||||||
if (AudioFormat_Eq(cur, format)) return 0;
|
if (AudioFormat_Eq(cur, format)) return 0;
|
||||||
if (ctx->Handle && (res = waveOutClose(ctx->Handle))) return res;
|
if (ctx->Handle && (res = waveOutClose(ctx->Handle))) return res;
|
||||||
|
|
||||||
int sampleSize = format->Channels * format->BitsPerSample / 8;
|
int sampleSize = format->Channels * 2; /* 16 bits per sample / 8 */
|
||||||
WAVEFORMATEX fmt;
|
WAVEFORMATEX fmt;
|
||||||
fmt.wFormatTag = WAVE_FORMAT_PCM;
|
fmt.wFormatTag = WAVE_FORMAT_PCM;
|
||||||
fmt.nChannels = format->Channels;
|
fmt.nChannels = format->Channels;
|
||||||
fmt.nSamplesPerSec = format->SampleRate;
|
fmt.nSamplesPerSec = format->SampleRate;
|
||||||
fmt.nAvgBytesPerSec = format->SampleRate * sampleSize;
|
fmt.nAvgBytesPerSec = format->SampleRate * sampleSize;
|
||||||
fmt.nBlockAlign = sampleSize;
|
fmt.nBlockAlign = sampleSize;
|
||||||
fmt.wBitsPerSample = format->BitsPerSample;
|
fmt.wBitsPerSample = 16;
|
||||||
fmt.cbSize = 0;
|
fmt.cbSize = 0;
|
||||||
|
|
||||||
ctx->Format = *format;
|
ctx->Format = *format;
|
||||||
@ -311,14 +304,9 @@ cc_result Audio_Close(AudioHandle handle) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ALenum GetALFormat(int channels, int bitsPerSample) {
|
static ALenum GetALFormat(int channels) {
|
||||||
if (bitsPerSample == 16) {
|
|
||||||
if (channels == 1) return AL_FORMAT_MONO16;
|
if (channels == 1) return AL_FORMAT_MONO16;
|
||||||
if (channels == 2) return AL_FORMAT_STEREO16;
|
if (channels == 2) return AL_FORMAT_STEREO16;
|
||||||
} else if (bitsPerSample == 8) {
|
|
||||||
if (channels == 1) return AL_FORMAT_MONO8;
|
|
||||||
if (channels == 2) return AL_FORMAT_STEREO8;
|
|
||||||
}
|
|
||||||
Logger_Abort("Unsupported audio format"); return 0;
|
Logger_Abort("Unsupported audio format"); return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -328,7 +316,7 @@ cc_result Audio_SetFormat(AudioHandle handle, struct AudioFormat* format) {
|
|||||||
ALenum err;
|
ALenum err;
|
||||||
|
|
||||||
if (AudioFormat_Eq(cur, format)) return 0;
|
if (AudioFormat_Eq(cur, format)) return 0;
|
||||||
ctx->DataFormat = GetALFormat(format->Channels, format->BitsPerSample);
|
ctx->DataFormat = GetALFormat(format->Channels);
|
||||||
ctx->Format = *format;
|
ctx->Format = *format;
|
||||||
|
|
||||||
if ((err = Audio_FreeSource(ctx))) return err;
|
if ((err = Audio_FreeSource(ctx))) return err;
|
||||||
@ -453,6 +441,7 @@ static cc_result Sound_ReadWaveData(struct Stream* stream, struct Sound* snd) {
|
|||||||
cc_uint32 fourCC, size;
|
cc_uint32 fourCC, size;
|
||||||
cc_uint8 tmp[WAV_FMT_SIZE];
|
cc_uint8 tmp[WAV_FMT_SIZE];
|
||||||
cc_result res;
|
cc_result res;
|
||||||
|
int bitsPerSample;
|
||||||
|
|
||||||
if ((res = Stream_Read(stream, tmp, 12))) return res;
|
if ((res = Stream_Read(stream, tmp, 12))) return res;
|
||||||
fourCC = Stream_GetU32_BE(&tmp[0]);
|
fourCC = Stream_GetU32_BE(&tmp[0]);
|
||||||
@ -473,7 +462,9 @@ static cc_result Sound_ReadWaveData(struct Stream* stream, struct Sound* snd) {
|
|||||||
snd->Format.Channels = Stream_GetU16_LE(&tmp[2]);
|
snd->Format.Channels = Stream_GetU16_LE(&tmp[2]);
|
||||||
snd->Format.SampleRate = Stream_GetU32_LE(&tmp[4]);
|
snd->Format.SampleRate = Stream_GetU32_LE(&tmp[4]);
|
||||||
/* tmp[8] (6) alignment data and stuff */
|
/* tmp[8] (6) alignment data and stuff */
|
||||||
snd->Format.BitsPerSample = Stream_GetU16_LE(&tmp[14]);
|
|
||||||
|
bitsPerSample = Stream_GetU16_LE(&tmp[14]);
|
||||||
|
if (bitsPerSample != 16) return WAV_ERR_SAMPLE_BITS;
|
||||||
size -= WAV_FMT_SIZE;
|
size -= WAV_FMT_SIZE;
|
||||||
} else if (fourCC == WAV_FourCC('d','a','t','a')) {
|
} else if (fourCC == WAV_FourCC('d','a','t','a')) {
|
||||||
snd->Data = (cc_uint8*)Mem_TryAlloc(size, 1);
|
snd->Data = (cc_uint8*)Mem_TryAlloc(size, 1);
|
||||||
@ -615,12 +606,8 @@ static void Sounds_PlayRaw(struct SoundOutput* output, struct Sound* snd, struct
|
|||||||
data = output->Buffer;
|
data = output->Buffer;
|
||||||
|
|
||||||
Mem_Copy(data, snd->Data, snd->Size);
|
Mem_Copy(data, snd->Data, snd->Size);
|
||||||
if (fmt->BitsPerSample == 8) {
|
|
||||||
Volume_Mix8((cc_uint8*)data, snd->Size, volume);
|
|
||||||
} else {
|
|
||||||
Volume_Mix16((cc_int16*)data, snd->Size / 2, volume);
|
Volume_Mix16((cc_int16*)data, snd->Size / 2, volume);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ((res = Audio_BufferData(output->Handle, 0, data, snd->Size))) { Sounds_Fail(res); return; }
|
if ((res = Audio_BufferData(output->Handle, 0, data, snd->Size))) { Sounds_Fail(res); return; }
|
||||||
if ((res = Audio_Play(output->Handle))) { Sounds_Fail(res); return; }
|
if ((res = Audio_Play(output->Handle))) { Sounds_Fail(res); return; }
|
||||||
@ -774,7 +761,6 @@ static cc_result Music_PlayOgg(struct Stream* source) {
|
|||||||
|
|
||||||
fmt.Channels = vorbis.channels;
|
fmt.Channels = vorbis.channels;
|
||||||
fmt.SampleRate = vorbis.sampleRate;
|
fmt.SampleRate = vorbis.sampleRate;
|
||||||
fmt.BitsPerSample = 16;
|
|
||||||
if ((res = Audio_SetFormat(music_out, &fmt))) goto cleanup;
|
if ((res = Audio_SetFormat(music_out, &fmt))) goto cleanup;
|
||||||
|
|
||||||
/* largest possible vorbis frame decodes to blocksize1 * channels samples */
|
/* largest possible vorbis frame decodes to blocksize1 * channels samples */
|
||||||
|
@ -21,8 +21,8 @@ void Audio_PlayStepSound(cc_uint8 type);
|
|||||||
|
|
||||||
#define AUDIO_MAX_BUFFERS 4
|
#define AUDIO_MAX_BUFFERS 4
|
||||||
/* Information about a source of audio. */
|
/* Information about a source of audio. */
|
||||||
struct AudioFormat { cc_uint16 Channels, BitsPerSample; int SampleRate; };
|
struct AudioFormat { cc_uint16 Channels; int SampleRate; };
|
||||||
#define AudioFormat_Eq(a, b) ((a)->Channels == (b)->Channels && (a)->BitsPerSample == (b)->BitsPerSample && (a)->SampleRate == (b)->SampleRate)
|
#define AudioFormat_Eq(a, b) ((a)->Channels == (b)->Channels && (a)->SampleRate == (b)->SampleRate)
|
||||||
typedef int AudioHandle;
|
typedef int AudioHandle;
|
||||||
|
|
||||||
/* Acquires an audio context. */
|
/* Acquires an audio context. */
|
||||||
|
@ -13,6 +13,7 @@ enum ERRORS_ALL {
|
|||||||
OGG_ERR_INVALID_SIG, OGG_ERR_VERSION,
|
OGG_ERR_INVALID_SIG, OGG_ERR_VERSION,
|
||||||
/* WAV audio decoding errors*/
|
/* WAV audio decoding errors*/
|
||||||
WAV_ERR_STREAM_HDR, WAV_ERR_STREAM_TYPE, WAV_ERR_DATA_TYPE, WAV_ERR_NO_DATA,
|
WAV_ERR_STREAM_HDR, WAV_ERR_STREAM_TYPE, WAV_ERR_DATA_TYPE, WAV_ERR_NO_DATA,
|
||||||
|
WAV_ERR_SAMPLE_BITS,
|
||||||
/* Vorbis audio decoding errors */
|
/* Vorbis audio decoding errors */
|
||||||
VORBIS_ERR_HEADER,
|
VORBIS_ERR_HEADER,
|
||||||
VORBIS_ERR_WRONG_HEADER, VORBIS_ERR_FRAMING,
|
VORBIS_ERR_WRONG_HEADER, VORBIS_ERR_FRAMING,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user