Browse Source

Add documentation and extensions

pull/175/head
Alice 10 years ago
parent
commit
a8e22f03a0
  1. 108
      src/Magnum/Audio/Buffer.h
  2. 3
      src/Magnum/Audio/Context.cpp
  3. 3
      src/Magnum/Audio/Extensions.h
  4. 1
      src/MagnumExternal/OpenAL/extensions.h
  5. 2
      src/MagnumPlugins/WavAudioImporter/Test/CMakeLists.txt
  6. 10
      src/MagnumPlugins/WavAudioImporter/Test/WavImporterTest.cpp
  7. BIN
      src/MagnumPlugins/WavAudioImporter/Test/mono8junk.wav
  8. 21
      src/MagnumPlugins/WavAudioImporter/WavImporter.cpp

108
src/Magnum/Audio/Buffer.h

@ -57,10 +57,32 @@ class Buffer {
Stereo8 = AL_FORMAT_STEREO8, /**< 8-bit interleaved unsigned stereo */ Stereo8 = AL_FORMAT_STEREO8, /**< 8-bit interleaved unsigned stereo */
Stereo16 = AL_FORMAT_STEREO16, /**< 16-bit interleaved signed stereo */ Stereo16 = AL_FORMAT_STEREO16, /**< 16-bit interleaved signed stereo */
/**
* @brief 8-bit unsigned mono A-Law Compressed Sound Format
*
* @requires_al_extension Extension @al_extension{EXT,ALAW}
*/
MonoALaw = AL_FORMAT_MONO_ALAW_EXT, MonoALaw = AL_FORMAT_MONO_ALAW_EXT,
/**
* @brief 16-bit signed stereo A-Law Compressed Sound Format
*
* @requires_al_extension Extension @al_extension{EXT,ALAW}
*/
StereoALaw = AL_FORMAT_STEREO_ALAW_EXT, StereoALaw = AL_FORMAT_STEREO_ALAW_EXT,
/**
* @brief 8-bit unsigned mono Mu-Law Compressed Sound Format
*
* @requires_al_extension Extension @al_extension{EXT,MULAW}
*/
MonoMuLaw = AL_FORMAT_MONO_MULAW_EXT, MonoMuLaw = AL_FORMAT_MONO_MULAW_EXT,
/**
* @brief 16-bit signed Mu-Law Compressed Sound Format
*
* @requires_al_extension Extension @al_extension{EXT,MULAW}
*/
StereoMuLaw = AL_FORMAT_STEREO_MULAW_EXT, StereoMuLaw = AL_FORMAT_STEREO_MULAW_EXT,
/** /**
@ -91,25 +113,93 @@ class Buffer {
*/ */
StereoDouble = AL_FORMAT_STEREO_DOUBLE_EXT, StereoDouble = AL_FORMAT_STEREO_DOUBLE_EXT,
/**
* @brief 8-bit unsigned quadrophonic
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad8 = AL_FORMAT_QUAD8, Quad8 = AL_FORMAT_QUAD8,
/**
* @brief 16-bit signed quadrophonic
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad16 = AL_FORMAT_QUAD16, Quad16 = AL_FORMAT_QUAD16,
/**
* @brief 32-bit interleaved floating-point quadrophonic
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad32 = AL_FORMAT_QUAD32, Quad32 = AL_FORMAT_QUAD32,
Rear8 = AL_FORMAT_REAR8, Rear8 = AL_FORMAT_REAR8,
Rear16 = AL_FORMAT_REAR16, Rear16 = AL_FORMAT_REAR16,
Rear32 = AL_FORMAT_REAR32, Rear32 = AL_FORMAT_REAR32,
Five_1Chnl8 = AL_FORMAT_51CHN8, /**
Five_1Chnl16 = AL_FORMAT_51CHN16, * @brief 8-bit unsigned 5.1 surround
Five_1Chnl32 = AL_FORMAT_51CHN32, *
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround51Channel8 = AL_FORMAT_51CHN8,
/**
* @brief 16-bit signed 5.1 surround
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround51Channel16 = AL_FORMAT_51CHN16,
Six_1Chnl8 = AL_FORMAT_61CHN8, /**
Six_1Chnl16 = AL_FORMAT_61CHN16, * @brief 32-bit interleaved floating-point 5.1 surround
Six_1Chnl32 = AL_FORMAT_61CHN32, *
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround51Channel32 = AL_FORMAT_51CHN32,
Seven_1Chnl8 = AL_FORMAT_71CHN8, /**
Seven_1Chnl16 = AL_FORMAT_71CHN16, * @brief 8-bit unsigned 6.1 surround
Seven_1Chnl32 = AL_FORMAT_71CHN32 *
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround61Channel8 = AL_FORMAT_61CHN8,
/**
* @brief 16-bit signed 6.1 surround
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround61Channel16 = AL_FORMAT_61CHN16,
/**
* @brief 32-bit interleaved floating-point 6.1 surround
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround61Channel32 = AL_FORMAT_61CHN32,
/**
* @brief 8-bit unsigned 7.1 surround
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround71Channel8 = AL_FORMAT_71CHN8,
/**
* @brief 16-bit signed 7.1 surround
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround71Channel16 = AL_FORMAT_71CHN16,
/**
* @brief 32-bit interleaved floating-point 7.1 surround
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround71Channel32 = AL_FORMAT_71CHN32
}; };
/** /**

3
src/Magnum/Audio/Context.cpp

@ -44,6 +44,9 @@ const std::vector<Extension>& Extension::extensions() {
static const std::vector<Extension> extensions{ static const std::vector<Extension> extensions{
_extension(AL,EXT,FLOAT32), _extension(AL,EXT,FLOAT32),
_extension(AL,EXT,DOUBLE), _extension(AL,EXT,DOUBLE),
_extension(AL,EXT,ALAW),
_extension(AL,EXT,MULAW),
_extension(AL,EXT,MCFORMATS),
_extension(ALC,EXT,ENUMERATION), _extension(ALC,EXT,ENUMERATION),
_extension(ALC,SOFTX,HRTF), _extension(ALC,SOFTX,HRTF),
_extension(ALC,SOFT,HRTF) _extension(ALC,SOFT,HRTF)

3
src/Magnum/Audio/Extensions.h

@ -79,6 +79,9 @@ namespace AL {
namespace EXT { namespace EXT {
_extension(AL,EXT,FLOAT32) // #??? _extension(AL,EXT,FLOAT32) // #???
_extension(AL,EXT,DOUBLE) // #??? _extension(AL,EXT,DOUBLE) // #???
_extension(AL,EXT,ALAW) // #???
_extension(AL,EXT,MULAW) // #???
_extension(AL,EXT,MCFORMATS) // #???
} }
} namespace ALC { } namespace ALC {
namespace EXT { namespace EXT {

1
src/MagnumExternal/OpenAL/extensions.h vendored

@ -66,6 +66,7 @@ extern "C" {
#define AL_FORMAT_STEREO_ALAW_EXT 0x10017 #define AL_FORMAT_STEREO_ALAW_EXT 0x10017
#endif #endif
/* AL_EXT_MCFORMATS */
#ifndef AL_EXT_MCFORMATS #ifndef AL_EXT_MCFORMATS
#define AL_EXT_MCFORMATS 1 #define AL_EXT_MCFORMATS 1
#define AL_FORMAT_QUAD8 0x1204 #define AL_FORMAT_QUAD8 0x1204

2
src/MagnumPlugins/WavAudioImporter/Test/CMakeLists.txt

@ -38,6 +38,8 @@ target_include_directories(WavAudioImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_D
if(CORRADE_TARGET_EMSCRIPTEN) if(CORRADE_TARGET_EMSCRIPTEN)
emscripten_embed_file(WavAudioImporterTest mono8.wav "/mono8.wav") emscripten_embed_file(WavAudioImporterTest mono8.wav "/mono8.wav")
emscripten_embed_file(WavAudioImporterTest mono8.wav "/mono8junk.wav")
emscripten_embed_file(WavAudioImporterTest mono8ALaw.wav "/mono8ALaw.wav") emscripten_embed_file(WavAudioImporterTest mono8ALaw.wav "/mono8ALaw.wav")
emscripten_embed_file(WavAudioImporterTest mono8MuLaw.wav "/mono8MuLaw.wav") emscripten_embed_file(WavAudioImporterTest mono8MuLaw.wav "/mono8MuLaw.wav")
emscripten_embed_file(WavAudioImporterTest mono16.wav "/mono16.wav") emscripten_embed_file(WavAudioImporterTest mono16.wav "/mono16.wav")

10
src/MagnumPlugins/WavAudioImporter/Test/WavImporterTest.cpp

@ -45,6 +45,7 @@ class WavImporterTest: public TestSuite::Tester {
void unsupportedChannelCount(); void unsupportedChannelCount();
void mono8(); void mono8();
void mono8junk();
void mono8ALaw(); void mono8ALaw();
void mono8MuLaw(); void mono8MuLaw();
void mono16(); void mono16();
@ -67,6 +68,7 @@ WavImporterTest::WavImporterTest() {
&WavImporterTest::unsupportedFormat, &WavImporterTest::unsupportedFormat,
&WavImporterTest::unsupportedChannelCount, &WavImporterTest::unsupportedChannelCount,
&WavImporterTest::mono8, &WavImporterTest::mono8,
// &WavImporterTest::mono8junk,
&WavImporterTest::mono8ALaw, &WavImporterTest::mono8ALaw,
&WavImporterTest::mono8MuLaw, &WavImporterTest::mono8MuLaw,
&WavImporterTest::mono16, &WavImporterTest::mono16,
@ -124,6 +126,14 @@ void WavImporterTest::mono8() {
CORRADE_COMPARE(importer.frequency(), 22050); CORRADE_COMPARE(importer.frequency(), 22050);
} }
void WavImporterTest::mono8junk() {
WavImporter importer;
CORRADE_VERIFY(importer.openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "mono8junk.wav")));
CORRADE_COMPARE(importer.format(), Buffer::Format::Mono8);
CORRADE_COMPARE(importer.frequency(), 22050);
}
void WavImporterTest::mono8ALaw() { void WavImporterTest::mono8ALaw() {
WavImporter importer; WavImporter importer;
CORRADE_VERIFY(importer.openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "mono8ALaw.wav"))); CORRADE_VERIFY(importer.openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "mono8ALaw.wav")));

BIN
src/MagnumPlugins/WavAudioImporter/Test/mono8junk.wav

Binary file not shown.

21
src/MagnumPlugins/WavAudioImporter/WavImporter.cpp

@ -99,9 +99,8 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
<< "bits per sample"; << "bits per sample";
return; return;
} }
}
/* Check IEEE Float format */ /* Check IEEE Float format */
else if(formatChunk.audioFormat == WAVE_FORMAT_IEEE_FLOAT) { } else if(formatChunk.audioFormat == WAVE_FORMAT_IEEE_FLOAT) {
if(formatChunk.numChannels == 1 && formatChunk.bitsPerSample == 32) if(formatChunk.numChannels == 1 && formatChunk.bitsPerSample == 32)
_format = Buffer::Format::MonoFloat; _format = Buffer::Format::MonoFloat;
else if(formatChunk.numChannels == 2 && formatChunk.bitsPerSample == 32) else if(formatChunk.numChannels == 2 && formatChunk.bitsPerSample == 32)
@ -116,8 +115,8 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
<< "bits per sample"; << "bits per sample";
return; return;
} }
} /* Check ALAW format */
else if(formatChunk.audioFormat == WAVE_FORMAT_ALAW) { } else if(formatChunk.audioFormat == WAVE_FORMAT_ALAW) {
if(formatChunk.numChannels == 1) if(formatChunk.numChannels == 1)
_format = Buffer::Format::MonoALaw; _format = Buffer::Format::MonoALaw;
else if(formatChunk.numChannels == 2) else if(formatChunk.numChannels == 2)
@ -128,8 +127,8 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
<< "bits per sample"; << "bits per sample";
return; return;
} }
} /* Check MULAW format */
else if(formatChunk.audioFormat == WAVE_FORMAT_MULAW) { } else if(formatChunk.audioFormat == WAVE_FORMAT_MULAW) {
if(formatChunk.numChannels == 1) if(formatChunk.numChannels == 1)
_format = Buffer::Format::MonoMuLaw; _format = Buffer::Format::MonoMuLaw;
else if(formatChunk.numChannels == 2) else if(formatChunk.numChannels == 2)
@ -140,12 +139,12 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
<< "bits per sample"; << "bits per sample";
return; return;
} }
} /* We do not currently support EXTENSIBLE formats */
else if(formatChunk.audioFormat == WAVE_FORMAT_EXTENSIBLE) { } else if(formatChunk.audioFormat == WAVE_FORMAT_EXTENSIBLE) {
Error() << "Audio::WavImporter::openData(): unsupported audio format: extensible not implememented" << formatChunk.audioFormat; Error() << "Audio::WavImporter::openData(): unsupported audio format: extensible not implememented" << formatChunk.audioFormat;
return; return;
} /* Unknown format */
else { } else {
Error() << "Audio::WavImporter::openData(): unsupported audio format" << formatChunk.audioFormat; Error() << "Audio::WavImporter::openData(): unsupported audio format" << formatChunk.audioFormat;
return; return;
} }
@ -195,7 +194,7 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
CORRADE_INTERNAL_ASSERT(!Utility::Endianness::isBigEndian()); CORRADE_INTERNAL_ASSERT(!Utility::Endianness::isBigEndian());
/* Copy the data */ /* Copy the data */
const char* dataChunkPtr = reinterpret_cast<const char*>(++dataChunk); const char* dataChunkPtr = reinterpret_cast<const char*>(dataChunk + 1);
_data = Containers::Array<char>(dataChunkSize); _data = Containers::Array<char>(dataChunkSize);
std::copy(dataChunkPtr, dataChunkPtr+dataChunkSize, _data.begin()); std::copy(dataChunkPtr, dataChunkPtr+dataChunkSize, _data.begin());
return; return;

Loading…
Cancel
Save