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 */
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,
/**
* @brief 16-bit signed stereo A-Law Compressed Sound Format
*
* @requires_al_extension Extension @al_extension{EXT,ALAW}
*/
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,
/**
* @brief 16-bit signed Mu-Law Compressed Sound Format
*
* @requires_al_extension Extension @al_extension{EXT,MULAW}
*/
StereoMuLaw = AL_FORMAT_STEREO_MULAW_EXT,
/**
@ -91,25 +113,93 @@ class Buffer {
*/
StereoDouble = AL_FORMAT_STEREO_DOUBLE_EXT,
/**
* @brief 8-bit unsigned quadrophonic
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad8 = AL_FORMAT_QUAD8,
/**
* @brief 16-bit signed quadrophonic
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad16 = AL_FORMAT_QUAD16,
/**
* @brief 32-bit interleaved floating-point quadrophonic
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad32 = AL_FORMAT_QUAD32,
Rear8 = AL_FORMAT_REAR8,
Rear16 = AL_FORMAT_REAR16,
Rear32 = AL_FORMAT_REAR32,
Five_1Chnl8 = AL_FORMAT_51CHN8,
Five_1Chnl16 = AL_FORMAT_51CHN16,
Five_1Chnl32 = AL_FORMAT_51CHN32,
/**
* @brief 8-bit unsigned 5.1 surround
*
* @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,
Six_1Chnl32 = AL_FORMAT_61CHN32,
/**
* @brief 32-bit interleaved floating-point 5.1 surround
*
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround51Channel32 = AL_FORMAT_51CHN32,
Seven_1Chnl8 = AL_FORMAT_71CHN8,
Seven_1Chnl16 = AL_FORMAT_71CHN16,
Seven_1Chnl32 = AL_FORMAT_71CHN32
/**
* @brief 8-bit unsigned 6.1 surround
*
* @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{
_extension(AL,EXT,FLOAT32),
_extension(AL,EXT,DOUBLE),
_extension(AL,EXT,ALAW),
_extension(AL,EXT,MULAW),
_extension(AL,EXT,MCFORMATS),
_extension(ALC,EXT,ENUMERATION),
_extension(ALC,SOFTX,HRTF),
_extension(ALC,SOFT,HRTF)

3
src/Magnum/Audio/Extensions.h

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

1
src/MagnumExternal/OpenAL/extensions.h vendored

@ -66,6 +66,7 @@ extern "C" {
#define AL_FORMAT_STEREO_ALAW_EXT 0x10017
#endif
/* AL_EXT_MCFORMATS */
#ifndef AL_EXT_MCFORMATS
#define AL_EXT_MCFORMATS 1
#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)
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 mono8MuLaw.wav "/mono8MuLaw.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 mono8();
void mono8junk();
void mono8ALaw();
void mono8MuLaw();
void mono16();
@ -67,6 +68,7 @@ WavImporterTest::WavImporterTest() {
&WavImporterTest::unsupportedFormat,
&WavImporterTest::unsupportedChannelCount,
&WavImporterTest::mono8,
// &WavImporterTest::mono8junk,
&WavImporterTest::mono8ALaw,
&WavImporterTest::mono8MuLaw,
&WavImporterTest::mono16,
@ -124,6 +126,14 @@ void WavImporterTest::mono8() {
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() {
WavImporter importer;
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";
return;
}
}
/* 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)
_format = Buffer::Format::MonoFloat;
else if(formatChunk.numChannels == 2 && formatChunk.bitsPerSample == 32)
@ -116,8 +115,8 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
<< "bits per sample";
return;
}
}
else if(formatChunk.audioFormat == WAVE_FORMAT_ALAW) {
/* Check ALAW format */
} else if(formatChunk.audioFormat == WAVE_FORMAT_ALAW) {
if(formatChunk.numChannels == 1)
_format = Buffer::Format::MonoALaw;
else if(formatChunk.numChannels == 2)
@ -128,8 +127,8 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
<< "bits per sample";
return;
}
}
else if(formatChunk.audioFormat == WAVE_FORMAT_MULAW) {
/* Check MULAW format */
} else if(formatChunk.audioFormat == WAVE_FORMAT_MULAW) {
if(formatChunk.numChannels == 1)
_format = Buffer::Format::MonoMuLaw;
else if(formatChunk.numChannels == 2)
@ -140,12 +139,12 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
<< "bits per sample";
return;
}
}
else if(formatChunk.audioFormat == WAVE_FORMAT_EXTENSIBLE) {
/* We do not currently support EXTENSIBLE formats */
} else if(formatChunk.audioFormat == WAVE_FORMAT_EXTENSIBLE) {
Error() << "Audio::WavImporter::openData(): unsupported audio format: extensible not implememented" << formatChunk.audioFormat;
return;
}
else {
/* Unknown format */
} else {
Error() << "Audio::WavImporter::openData(): unsupported audio format" << formatChunk.audioFormat;
return;
}
@ -195,7 +194,7 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
CORRADE_INTERNAL_ASSERT(!Utility::Endianness::isBigEndian());
/* 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);
std::copy(dataChunkPtr, dataChunkPtr+dataChunkSize, _data.begin());
return;

Loading…
Cancel
Save