Răsfoiți Sursa

32 bit float test

32 bit floating point sounds
marauder2k7 1 an în urmă
părinte
comite
c28cedc2d8

+ 2 - 5
Engine/source/sfx/media/sfxSndStream.cpp

@@ -59,15 +59,12 @@ bool SFXSndStream::_readHeader()
    case SF_FORMAT_PCM_16:
       bitsPerSample = 16;
       break;
-   case SF_FORMAT_VORBIS:
-      bitsPerSample = 16;
-      sf_command(sndFile, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE);
-      break;
    case SF_FORMAT_PCM_24:
       bitsPerSample = 24;
       break;
    case SF_FORMAT_PCM_32:
    case SF_FORMAT_FLOAT:
+   case SF_FORMAT_VORBIS:
       bitsPerSample = 32;
       break;
    default:
@@ -124,7 +121,6 @@ U32 SFXSndStream::read(U8* buffer, U32 length)
       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:
@@ -132,6 +128,7 @@ U32 SFXSndStream::read(U8* buffer, U32 length)
       break;
    case SF_FORMAT_PCM_32:
    case SF_FORMAT_FLOAT:
+   case SF_FORMAT_VORBIS:
       framesRead = sf_readf_float(sndFile, reinterpret_cast<float*>(buffer), framesToRead);
       break;
    default:

+ 13 - 3
Engine/source/sfx/openal/sfxALBuffer.h

@@ -84,14 +84,24 @@ class SFXALBuffer : public SFXBuffer
                return AL_FORMAT_STEREO8;
             else if( bps == 32 )
                return AL_FORMAT_STEREO16;
+            else if (bps == 64)
+            {
+               if (alIsExtensionPresent("AL_EXT_FLOAT32"))
+                  return AL_FORMAT_STEREO_FLOAT32;
+            }
          }
          else if( format.getChannels() == 1 )
          {
             const U32 bps = format.getBitsPerSample();
-            if( bps == 8 )
+            if (bps == 8)
                return AL_FORMAT_MONO8;
-            else if( bps == 16 )
+            else if (bps == 16)
                return AL_FORMAT_MONO16;
+            else if (bps == 32)
+            {
+               if(alIsExtensionPresent("AL_EXT_FLOAT32"))
+                  return AL_FORMAT_MONO_FLOAT32;
+            }
          }
          return 0;
       }
@@ -116,4 +126,4 @@ class SFXALBuffer : public SFXBuffer
       virtual ~SFXALBuffer();
 };
 
-#endif // _SFXALBUFFER_H_
+#endif // _SFXALBUFFER_H_