|
|
@@ -45,12 +45,12 @@ namespace Urho3D
|
|
|
|
|
|
const char* AUDIO_CATEGORY = "Audio";
|
|
|
|
|
|
-static const int MIN_BUFFERLENGTH = 20;
|
|
|
-static const int MIN_MIXRATE = 11025;
|
|
|
-static const int MAX_MIXRATE = 48000;
|
|
|
+static const i32 MIN_BUFFERLENGTH = 20;
|
|
|
+static const i32 MIN_MIXRATE = 11025;
|
|
|
+static const i32 MAX_MIXRATE = 48000;
|
|
|
static const StringHash SOUND_MASTER_HASH("Master");
|
|
|
|
|
|
-static void SDLAudioCallback(void* userdata, Uint8* stream, int len);
|
|
|
+static void SDLAudioCallback(void* userdata, Uint8* stream, i32 len);
|
|
|
|
|
|
Audio::Audio(Context* context) :
|
|
|
Object(context)
|
|
|
@@ -72,7 +72,7 @@ Audio::~Audio()
|
|
|
context_->ReleaseSDL();
|
|
|
}
|
|
|
|
|
|
-bool Audio::SetMode(int bufferLengthMSec, int mixRate, bool stereo, bool interpolation)
|
|
|
+bool Audio::SetMode(i32 bufferLengthMSec, i32 mixRate, bool stereo, bool interpolation)
|
|
|
{
|
|
|
Release();
|
|
|
|
|
|
@@ -89,15 +89,15 @@ bool Audio::SetMode(int bufferLengthMSec, int mixRate, bool stereo, bool interpo
|
|
|
desired.userdata = this;
|
|
|
|
|
|
// SDL uses power of two audio fragments. Determine the closest match
|
|
|
- int bufferSamples = mixRate * bufferLengthMSec / 1000;
|
|
|
- desired.samples = (Uint16)NextPowerOfTwo((unsigned)bufferSamples);
|
|
|
- if (Abs((int)desired.samples / 2 - bufferSamples) < Abs((int)desired.samples - bufferSamples))
|
|
|
+ i32 bufferSamples = mixRate * bufferLengthMSec / 1000;
|
|
|
+ desired.samples = (Uint16)NextPowerOfTwo((u32)bufferSamples);
|
|
|
+ if (Abs((i32)desired.samples / 2 - bufferSamples) < Abs((i32)desired.samples - bufferSamples))
|
|
|
desired.samples /= 2;
|
|
|
|
|
|
// Intentionally disallow format change so that the obtained format will always be the desired format, even though that format
|
|
|
// is not matching the device format, however in doing it will enable the SDL's internal audio stream with audio conversion.
|
|
|
// Also disallow channels change to avoid issues on multichannel audio device (5.1, 7.1, etc)
|
|
|
- int allowedChanges = SDL_AUDIO_ALLOW_ANY_CHANGE & ~SDL_AUDIO_ALLOW_FORMAT_CHANGE & ~SDL_AUDIO_ALLOW_CHANNELS_CHANGE;
|
|
|
+ i32 allowedChanges = SDL_AUDIO_ALLOW_ANY_CHANGE & ~SDL_AUDIO_ALLOW_FORMAT_CHANGE & ~SDL_AUDIO_ALLOW_CHANNELS_CHANGE;
|
|
|
|
|
|
if (stereo)
|
|
|
{
|
|
|
@@ -127,12 +127,12 @@ bool Audio::SetMode(int bufferLengthMSec, int mixRate, bool stereo, bool interpo
|
|
|
}
|
|
|
|
|
|
stereo_ = obtained.channels == 2;
|
|
|
- sampleSize_ = (unsigned)(stereo_ ? sizeof(int) : sizeof(short));
|
|
|
+ sampleSize_ = (u32)(stereo_ ? sizeof(i32) : sizeof(i16));
|
|
|
// Guarantee a fragment size that is low enough so that Vorbis decoding buffers do not wrap
|
|
|
- fragmentSize_ = Min(NextPowerOfTwo((unsigned)mixRate >> 6u), (unsigned)obtained.samples);
|
|
|
+ fragmentSize_ = Min(NextPowerOfTwo((u32)mixRate >> 6u), (u32)obtained.samples);
|
|
|
mixRate_ = obtained.freq;
|
|
|
interpolation_ = interpolation;
|
|
|
- clipBuffer_ = new int[stereo ? fragmentSize_ << 1u : fragmentSize_];
|
|
|
+ clipBuffer_ = new i32[stereo ? fragmentSize_ << 1u : fragmentSize_];
|
|
|
|
|
|
URHO3D_LOGINFO("Set audio mode " + String(mixRate_) + " Hz " + (stereo_ ? "stereo" : "mono") + (interpolation_ ? " interpolated" : ""));
|
|
|
|
|
|
@@ -267,7 +267,7 @@ float Audio::GetSoundSourceMasterGain(StringHash typeHash) const
|
|
|
return masterIt->second_.GetFloat() * typeIt->second_.GetFloat();
|
|
|
}
|
|
|
|
|
|
-void SDLAudioCallback(void* userdata, Uint8* stream, int len)
|
|
|
+void SDLAudioCallback(void* userdata, Uint8* stream, i32 len)
|
|
|
{
|
|
|
auto* audio = static_cast<Audio*>(userdata);
|
|
|
{
|
|
|
@@ -276,7 +276,7 @@ void SDLAudioCallback(void* userdata, Uint8* stream, int len)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void Audio::MixOutput(void* dest, unsigned samples)
|
|
|
+void Audio::MixOutput(void* dest, u32 samples)
|
|
|
{
|
|
|
if (!playing_ || !clipBuffer_)
|
|
|
{
|
|
|
@@ -287,14 +287,14 @@ void Audio::MixOutput(void* dest, unsigned samples)
|
|
|
while (samples)
|
|
|
{
|
|
|
// If sample count exceeds the fragment (clip buffer) size, split the work
|
|
|
- unsigned workSamples = Min(samples, fragmentSize_);
|
|
|
- unsigned clipSamples = workSamples;
|
|
|
+ u32 workSamples = Min(samples, fragmentSize_);
|
|
|
+ u32 clipSamples = workSamples;
|
|
|
if (stereo_)
|
|
|
clipSamples <<= 1;
|
|
|
|
|
|
// Clear clip buffer
|
|
|
- int* clipPtr = clipBuffer_.Get();
|
|
|
- memset(clipPtr, 0, clipSamples * sizeof(int));
|
|
|
+ i32* clipPtr = clipBuffer_.Get();
|
|
|
+ memset(clipPtr, 0, clipSamples * sizeof(i32));
|
|
|
|
|
|
// Mix samples to clip buffer
|
|
|
for (PODVector<SoundSource*>::Iterator i = soundSources_.Begin(); i != soundSources_.End(); ++i)
|
|
|
@@ -315,7 +315,7 @@ void Audio::MixOutput(void* dest, unsigned samples)
|
|
|
while (clipSamples--)
|
|
|
*destPtr++ = (short)Clamp(*clipPtr++, -32768, 32767);
|
|
|
samples -= workSamples;
|
|
|
- ((unsigned char*&)dest) += sampleSize_ * workSamples;
|
|
|
+ ((u8*&)dest) += sampleSize_ * workSamples;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -343,7 +343,7 @@ void Audio::UpdateInternal(float timeStep)
|
|
|
URHO3D_PROFILE(UpdateAudio);
|
|
|
|
|
|
// Update in reverse order, because sound sources might remove themselves
|
|
|
- for (unsigned i = soundSources_.Size() - 1; i < soundSources_.Size(); --i)
|
|
|
+ for (u32 i = soundSources_.Size() - 1; i < soundSources_.Size(); --i)
|
|
|
{
|
|
|
SoundSource* source = soundSources_[i];
|
|
|
|