mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-16 09:04:38 +00:00
Update sfxSndStream.cpp
add different file type modes and reset stream after reading (torque still reads the full thing)
This commit is contained in:
parent
b7c04c5734
commit
482eb28ded
1 changed files with 32 additions and 1 deletions
|
|
@ -105,14 +105,45 @@ void SFXSndStream::reset()
|
||||||
|
|
||||||
U32 SFXSndStream::read(U8* buffer, U32 length)
|
U32 SFXSndStream::read(U8* buffer, U32 length)
|
||||||
{
|
{
|
||||||
|
if (!sndFile)
|
||||||
|
{
|
||||||
|
Con::errorf("SFXSndStream - read: Called on uninitialized stream.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
U32 framesToRead = length / mFormat.getBytesPerSample();
|
||||||
U32 framesRead = 0;
|
U32 framesRead = 0;
|
||||||
|
|
||||||
framesRead = sf_readf_short(sndFile, (short*)buffer, sfinfo.frames);
|
switch (sfinfo.format & SF_FORMAT_SUBMASK)
|
||||||
|
{
|
||||||
|
case SF_FORMAT_PCM_S8:
|
||||||
|
case SF_FORMAT_PCM_U8:
|
||||||
|
framesRead = sf_readf_int(sndFile, reinterpret_cast<int*>(buffer), framesToRead);
|
||||||
|
break;
|
||||||
|
case SF_FORMAT_PCM_16:
|
||||||
|
case SF_FORMAT_VORBIS:
|
||||||
|
framesRead = sf_readf_short(sndFile, reinterpret_cast<short*>(buffer), framesToRead);
|
||||||
|
break;
|
||||||
|
case SF_FORMAT_PCM_24:
|
||||||
|
framesRead = sf_readf_int(sndFile, reinterpret_cast<int*>(buffer), framesToRead); // 24-bit usually stored in 32-bit containers
|
||||||
|
break;
|
||||||
|
case SF_FORMAT_PCM_32:
|
||||||
|
case SF_FORMAT_FLOAT:
|
||||||
|
framesRead = sf_readf_float(sndFile, reinterpret_cast<float*>(buffer), framesToRead);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Con::errorf("SFXSndStream - read: Unsupported format.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (framesRead != sfinfo.frames)
|
if (framesRead != sfinfo.frames)
|
||||||
{
|
{
|
||||||
Con::errorf("SFXSndStream - read: %s", sf_strerror(sndFile));
|
Con::errorf("SFXSndStream - read: %s", sf_strerror(sndFile));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reset stream
|
||||||
|
setPosition(0);
|
||||||
|
|
||||||
return framesRead * mFormat.getBytesPerSample();
|
return framesRead * mFormat.getBytesPerSample();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue