Browse Source

Audio: moved Buffer::Format to BufferFormat.

More consistent with what's done elsewhere, reduces header dependencies,
allows me to (later) make this independent on the AL library and also
works around a Doxygen bug. Win win!
pull/233/head
Vladimír Vondruš 8 years ago
parent
commit
3a78c4dd5a
  1. 1
      doc/changelog.dox
  2. 2
      src/Magnum/Audio/AbstractImporter.cpp
  3. 6
      src/Magnum/Audio/AbstractImporter.h
  4. 7
      src/Magnum/Audio/Audio.h
  5. 167
      src/Magnum/Audio/Buffer.h
  6. 8
      src/Magnum/Audio/BufferFormat.cpp
  7. 199
      src/Magnum/Audio/BufferFormat.h
  8. 3
      src/Magnum/Audio/CMakeLists.txt
  9. 2
      src/Magnum/Audio/Test/AbstractImporterTest.cpp
  10. 18
      src/Magnum/Audio/Test/BufferFormatTest.cpp
  11. 4
      src/Magnum/Audio/Test/CMakeLists.txt
  12. 2
      src/MagnumPlugins/AnyAudioImporter/AnyImporter.cpp
  13. 2
      src/MagnumPlugins/AnyAudioImporter/AnyImporter.h
  14. 2
      src/MagnumPlugins/AnyAudioImporter/Test/Test.cpp
  15. 26
      src/MagnumPlugins/WavAudioImporter/Test/WavImporterTest.cpp
  16. 26
      src/MagnumPlugins/WavAudioImporter/WavImporter.cpp
  17. 20
      src/MagnumPlugins/WavAudioImporter/WavImporter.h

1
doc/changelog.dox

@ -120,6 +120,7 @@ See also:
@subsection changelog-latest-deprecated Deprecated APIs
- `Audio::Buffer::Format` is deprecated, use `Audio::BufferFormat` instead
- `setData()` functions in the @ref Image and @ref CompressedImage classes
are deprecated because they don't offer anything extra over simple
move-assignment of a new instance.

2
src/Magnum/Audio/AbstractImporter.cpp

@ -97,7 +97,7 @@ void AbstractImporter::close() {
}
}
Buffer::Format AbstractImporter::format() const {
BufferFormat AbstractImporter::format() const {
CORRADE_ASSERT(isOpened(), "Audio::AbstractImporter::format(): no file opened", {});
return doFormat();
}

6
src/Magnum/Audio/AbstractImporter.h

@ -32,7 +32,7 @@
#include <Corrade/PluginManager/AbstractManagingPlugin.h>
#include "Magnum/Magnum.h"
#include "Magnum/Audio/Buffer.h"
#include "Magnum/Audio/BufferFormat.h"
namespace Magnum { namespace Audio {
@ -151,7 +151,7 @@ class MAGNUM_AUDIO_EXPORT AbstractImporter: public PluginManager::AbstractManagi
/** @{ @name Data access */
/** @brief Sample format */
Buffer::Format format() const;
BufferFormat format() const;
/** @brief Sample frequency */
UnsignedInt frequency() const;
@ -187,7 +187,7 @@ class MAGNUM_AUDIO_EXPORT AbstractImporter: public PluginManager::AbstractManagi
virtual void doClose() = 0;
/** @brief Implementation for @ref format() */
virtual Buffer::Format doFormat() const = 0;
virtual BufferFormat doFormat() const = 0;
/** @brief Implementation for @ref frequency() */
virtual UnsignedInt doFrequency() const = 0;

7
src/Magnum/Audio/Audio.h

@ -31,10 +31,17 @@
#include <Magnum/Magnum.h>
#ifndef DOXYGEN_GENERATING_OUTPUT
typedef int ALenum;
#endif
namespace Magnum { namespace Audio {
#ifndef DOXYGEN_GENERATING_OUTPUT
class AbstractImporter;
enum class BufferFormat: ALenum;
class Buffer;
class Context;
class Source;

167
src/Magnum/Audio/Buffer.h

@ -37,165 +37,25 @@
#include <Corrade/Containers/ArrayView.h>
#include "Magnum/Magnum.h"
#include "Magnum/Audio/Audio.h"
#include "Magnum/Audio/visibility.h"
#ifdef MAGNUM_BUILD_DEPRECATED
#include <Corrade/Utility/Macros.h>
#include "Magnum/Audio/BufferFormat.h"
#endif
namespace Magnum { namespace Audio {
/** @brief Sample buffer */
class Buffer {
public:
/**
* @brief Sample format
*
* @note Multi-channel format is played without 3D spatialization
* (useful for background music)
* @see @ref setData()
* @m_enum_values_as_keywords
#ifdef MAGNUM_BUILD_DEPRECATED
/** @brief @copybrief BufferFormat
* @deprecated Use @ref BufferFormat instead.
*/
enum class Format: ALenum {
Mono8 = AL_FORMAT_MONO8, /**< 8-bit unsigned mono */
Mono16 = AL_FORMAT_MONO16, /**< 16-bit signed mono */
Stereo8 = AL_FORMAT_STEREO8, /**< 8-bit interleaved unsigned stereo */
Stereo16 = AL_FORMAT_STEREO16, /**< 16-bit interleaved signed stereo */
/**
* 8-bit mono [A-Law Compressed Sound Format](https://en.wikipedia.org/wiki/A-law_algorithm)
* @requires_al_extension Extension @al_extension{EXT,ALAW}
*/
MonoALaw = AL_FORMAT_MONO_ALAW_EXT,
/**
* 8-bit interleaved stereo [A-Law Compressed Sound Format](https://en.wikipedia.org/wiki/A-law_algorithm)
* @requires_al_extension Extension @al_extension{EXT,ALAW}
*/
StereoALaw = AL_FORMAT_STEREO_ALAW_EXT,
/**
* 8-bit mono [μ-Law Compressed Sound Format](https://en.wikipedia.org/wiki/Μ-law_algorithm)
* @requires_al_extension Extension @al_extension{EXT,MULAW}
*/
MonoMuLaw = AL_FORMAT_MONO_MULAW_EXT,
/**
* 8-bit interleaved [μ-Law Compressed Sound Format](https://en.wikipedia.org/wiki/Μ-law_algorithm)
* @requires_al_extension Extension @al_extension{EXT,MULAW}
*/
StereoMuLaw = AL_FORMAT_STEREO_MULAW_EXT,
/**
* 32-bit floating-point mono
* @requires_al_extension Extension @al_extension{EXT,float32}
*/
MonoFloat = AL_FORMAT_MONO_FLOAT32,
/**
* 32-bit interleaved floating-point stereo
* @requires_al_extension Extension @al_extension{EXT,float32}
*/
StereoFloat = AL_FORMAT_STEREO_FLOAT32,
/**
* 64-bit floating-point mono
* @requires_al_extension Extension @al_extension{EXT,double}
*/
MonoDouble = AL_FORMAT_MONO_DOUBLE_EXT,
/**
* 64-bit interleaved floating-point stereo
* @requires_al_extension Extension @al_extension{EXT,double}
*/
StereoDouble = AL_FORMAT_STEREO_DOUBLE_EXT,
/**
* 8-bit unsigned quadrophonic
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad8 = AL_FORMAT_QUAD8,
/**
* 16-bit signed quadrophonic
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad16 = AL_FORMAT_QUAD16,
/**
* 32-bit interleaved floating-point quadrophonic
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad32 = AL_FORMAT_QUAD32,
/**
* 8-bit unsigned rear
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Rear8 = AL_FORMAT_REAR8,
/**
* 16-bit signed rear
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Rear16 = AL_FORMAT_REAR16,
/**
* 32-bit interleaved floating-point rear
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Rear32 = AL_FORMAT_REAR32,
/**
* 8-bit unsigned 5.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround51Channel8 = AL_FORMAT_51CHN8,
/**
* 16-bit signed 5.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround51Channel16 = AL_FORMAT_51CHN16,
/**
* 32-bit interleaved floating-point 5.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround51Channel32 = AL_FORMAT_51CHN32,
/**
* 8-bit unsigned 6.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround61Channel8 = AL_FORMAT_61CHN8,
/**
* 16-bit signed 6.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround61Channel16 = AL_FORMAT_61CHN16,
/**
* 32-bit interleaved floating-point 6.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround61Channel32 = AL_FORMAT_61CHN32,
/**
* 8-bit unsigned 7.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround71Channel8 = AL_FORMAT_71CHN8,
/**
* 16-bit signed 7.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround71Channel16 = AL_FORMAT_71CHN16,
/**
* 32-bit interleaved floating-point 7.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround71Channel32 = AL_FORMAT_71CHN32
};
typedef CORRADE_DEPRECATED("use BufferFormat instead") BufferFormat Format;
#endif
/**
* @brief Constructor
@ -237,7 +97,7 @@ class Buffer {
*
* @see @fn_al_keyword{BufferData}
*/
Buffer& setData(Format format, Containers::ArrayView<const void> data, ALsizei frequency) {
Buffer& setData(BufferFormat format, Containers::ArrayView<const void> data, ALsizei frequency) {
alBufferData(_id, ALenum(format), data, data.size(), frequency);
return *this;
}
@ -246,9 +106,6 @@ class Buffer {
ALuint _id;
};
/** @debugoperatorclassenum{Buffer,Buffer::Format} */
MAGNUM_AUDIO_EXPORT Debug& operator<<(Debug& debug, Buffer::Format value);
inline Buffer::Buffer(Buffer&& other): _id(other._id) {
other._id = 0;
}

8
src/Magnum/Audio/Buffer.cpp → src/Magnum/Audio/BufferFormat.cpp

@ -23,16 +23,16 @@
DEALINGS IN THE SOFTWARE.
*/
#include "Buffer.h"
#include "BufferFormat.h"
#include <Corrade/Utility/Debug.h>
namespace Magnum { namespace Audio {
Debug& operator<<(Debug& debug, const Buffer::Format value) {
Debug& operator<<(Debug& debug, const BufferFormat value) {
switch(value) {
/* LCOV_EXCL_START */
#define _c(value) case Buffer::Format::value: return debug << "Audio::Buffer::Format::" #value;
#define _c(value) case BufferFormat::value: return debug << "Audio::BufferFormat::" #value;
_c(Mono8)
_c(Mono16)
_c(Stereo8)
@ -73,7 +73,7 @@ Debug& operator<<(Debug& debug, const Buffer::Format value) {
/* LCOV_EXCL_STOP */
}
return debug << "Audio::Buffer::Format(" << Debug::nospace << reinterpret_cast<void*>(ALenum(value)) << Debug::nospace << ")";
return debug << "Audio::BufferFormat(" << Debug::nospace << reinterpret_cast<void*>(ALenum(value)) << Debug::nospace << ")";
}
}}

199
src/Magnum/Audio/BufferFormat.h

@ -0,0 +1,199 @@
#ifndef Magnum_Audio_BufferFormat_h
#define Magnum_Audio_BufferFormat_h
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018
Vladimír Vondruš <mosra@centrum.cz>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
/** @file
* @brief Enum @ref Magnum::Audio::BufferFormat
*/
#include <al.h>
#include "MagnumExternal/OpenAL/extensions.h"
#include "Magnum/Magnum.h"
#include "Magnum/Audio/visibility.h"
namespace Magnum { namespace Audio {
/**
@brief Buffer sample format
@note Multi-channel format is played without 3D spatialization (useful for
background music)
@see @ref Buffer::setData(), @ref AbstractImporter::format()
@m_enum_values_as_keywords
*/
enum class BufferFormat: ALenum {
Mono8 = AL_FORMAT_MONO8, /**< 8-bit unsigned mono */
Mono16 = AL_FORMAT_MONO16, /**< 16-bit signed mono */
Stereo8 = AL_FORMAT_STEREO8, /**< 8-bit interleaved unsigned stereo */
Stereo16 = AL_FORMAT_STEREO16, /**< 16-bit interleaved signed stereo */
/**
* 8-bit mono [A-Law Compressed Sound Format](https://en.wikipedia.org/wiki/A-law_algorithm)
* @requires_al_extension Extension @al_extension{EXT,ALAW}
*/
MonoALaw = AL_FORMAT_MONO_ALAW_EXT,
/**
* 8-bit interleaved stereo [A-Law Compressed Sound Format](https://en.wikipedia.org/wiki/A-law_algorithm)
* @requires_al_extension Extension @al_extension{EXT,ALAW}
*/
StereoALaw = AL_FORMAT_STEREO_ALAW_EXT,
/**
* 8-bit mono [μ-Law Compressed Sound Format](https://en.wikipedia.org/wiki/Μ-law_algorithm)
* @requires_al_extension Extension @al_extension{EXT,MULAW}
*/
MonoMuLaw = AL_FORMAT_MONO_MULAW_EXT,
/**
* 8-bit interleaved [μ-Law Compressed Sound Format](https://en.wikipedia.org/wiki/Μ-law_algorithm)
* @requires_al_extension Extension @al_extension{EXT,MULAW}
*/
StereoMuLaw = AL_FORMAT_STEREO_MULAW_EXT,
/**
* 32-bit floating-point mono
* @requires_al_extension Extension @al_extension{EXT,float32}
*/
MonoFloat = AL_FORMAT_MONO_FLOAT32,
/**
* 32-bit interleaved floating-point stereo
* @requires_al_extension Extension @al_extension{EXT,float32}
*/
StereoFloat = AL_FORMAT_STEREO_FLOAT32,
/**
* 64-bit floating-point mono
* @requires_al_extension Extension @al_extension{EXT,double}
*/
MonoDouble = AL_FORMAT_MONO_DOUBLE_EXT,
/**
* 64-bit interleaved floating-point stereo
* @requires_al_extension Extension @al_extension{EXT,double}
*/
StereoDouble = AL_FORMAT_STEREO_DOUBLE_EXT,
/**
* 8-bit unsigned quadrophonic
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad8 = AL_FORMAT_QUAD8,
/**
* 16-bit signed quadrophonic
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad16 = AL_FORMAT_QUAD16,
/**
* 32-bit interleaved floating-point quadrophonic
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Quad32 = AL_FORMAT_QUAD32,
/**
* 8-bit unsigned rear
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Rear8 = AL_FORMAT_REAR8,
/**
* 16-bit signed rear
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Rear16 = AL_FORMAT_REAR16,
/**
* 32-bit interleaved floating-point rear
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Rear32 = AL_FORMAT_REAR32,
/**
* 8-bit unsigned 5.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround51Channel8 = AL_FORMAT_51CHN8,
/**
* 16-bit signed 5.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround51Channel16 = AL_FORMAT_51CHN16,
/**
* 32-bit interleaved floating-point 5.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround51Channel32 = AL_FORMAT_51CHN32,
/**
* 8-bit unsigned 6.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround61Channel8 = AL_FORMAT_61CHN8,
/**
* 16-bit signed 6.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround61Channel16 = AL_FORMAT_61CHN16,
/**
* 32-bit interleaved floating-point 6.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround61Channel32 = AL_FORMAT_61CHN32,
/**
* 8-bit unsigned 7.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround71Channel8 = AL_FORMAT_71CHN8,
/**
* 16-bit signed 7.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround71Channel16 = AL_FORMAT_71CHN16,
/**
* 32-bit interleaved floating-point 7.1 surround
* @requires_al_extension Extension @al_extension{EXT,MCFORMATS}
*/
Surround71Channel32 = AL_FORMAT_71CHN32
};
/** @debugoperatorenum{BufferFormat} */
MAGNUM_AUDIO_EXPORT Debug& operator<<(Debug& debug, BufferFormat value);
}}
#endif

3
src/Magnum/Audio/CMakeLists.txt

@ -29,7 +29,7 @@ find_package(OpenAL REQUIRED)
set(MagnumAudio_SRCS
AbstractImporter.cpp
Audio.cpp
Buffer.cpp
BufferFormat.cpp
Context.cpp
Renderer.cpp
Source.cpp)
@ -38,6 +38,7 @@ set(MagnumAudio_HEADERS
AbstractImporter.h
Audio.h
Buffer.h
BufferFormat.h
Context.h
Extensions.h
Renderer.h

2
src/Magnum/Audio/Test/AbstractImporterTest.cpp

@ -57,7 +57,7 @@ void AbstractImporterTest::openFile() {
opened = (data.size() == 1 && data[0] == '\xa5');
}
Buffer::Format doFormat() const override { return {}; }
BufferFormat doFormat() const override { return {}; }
UnsignedInt doFrequency() const override { return {}; }
Corrade::Containers::Array<char> doData() override { return nullptr; }

18
src/Magnum/Audio/Test/BufferTest.cpp → src/Magnum/Audio/Test/BufferFormatTest.cpp

@ -26,26 +26,26 @@
#include <sstream>
#include <Corrade/TestSuite/Tester.h>
#include "Magnum/Audio/Buffer.h"
#include "Magnum/Audio/BufferFormat.h"
namespace Magnum { namespace Audio { namespace Test {
struct BufferTest: TestSuite::Tester {
explicit BufferTest();
struct BufferFormatTest: TestSuite::Tester {
explicit BufferFormatTest();
void debugFormat();
};
BufferTest::BufferTest() {
addTests({&BufferTest::debugFormat});
BufferFormatTest::BufferFormatTest() {
addTests({&BufferFormatTest::debugFormat});
}
void BufferTest::debugFormat() {
void BufferFormatTest::debugFormat() {
std::ostringstream out;
Debug(&out) << Buffer::Format::Stereo16 << Buffer::Format(0xdead);
CORRADE_COMPARE(out.str(), "Audio::Buffer::Format::Stereo16 Audio::Buffer::Format(0xdead)\n");
Debug(&out) << BufferFormat::Stereo16 << BufferFormat(0xdead);
CORRADE_COMPARE(out.str(), "Audio::BufferFormat::Stereo16 Audio::BufferFormat(0xdead)\n");
}
}}}
CORRADE_TEST_MAIN(Magnum::Audio::Test::BufferTest)
CORRADE_TEST_MAIN(Magnum::Audio::Test::BufferFormatTest)

4
src/Magnum/Audio/Test/CMakeLists.txt

@ -37,14 +37,14 @@ corrade_add_test(AudioAbstractImporterTest AbstractImporterTest.cpp
LIBRARIES MagnumAudio
FILES file.bin)
target_include_directories(AudioAbstractImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
corrade_add_test(AudioBufferTest BufferTest.cpp LIBRARIES MagnumAudio)
corrade_add_test(AudioBufferFormatTest BufferFormatTest.cpp LIBRARIES MagnumAudio)
corrade_add_test(AudioContextTest ContextTest.cpp LIBRARIES MagnumAudio)
corrade_add_test(AudioRendererTest RendererTest.cpp LIBRARIES MagnumAudio)
corrade_add_test(AudioSourceTest SourceTest.cpp LIBRARIES MagnumAudio)
set_target_properties(
AudioAbstractImporterTest
AudioBufferTest
AudioBufferFormatTest
AudioContextTest
AudioRendererTest
AudioSourceTest

2
src/MagnumPlugins/AnyAudioImporter/AnyImporter.cpp

@ -75,7 +75,7 @@ void AnyImporter::doOpenFile(const std::string& filename) {
_in = std::move(importer);
}
Buffer::Format AnyImporter::doFormat() const { return _in->format(); }
BufferFormat AnyImporter::doFormat() const { return _in->format(); }
UnsignedInt AnyImporter::doFrequency() const { return _in->frequency(); }

2
src/MagnumPlugins/AnyAudioImporter/AnyImporter.h

@ -92,7 +92,7 @@ class MAGNUM_ANYAUDIOIMPORTER_EXPORT AnyImporter: public AbstractImporter {
MAGNUM_ANYAUDIOIMPORTER_LOCAL void doClose() override;
MAGNUM_ANYAUDIOIMPORTER_LOCAL void doOpenFile(const std::string& filename) override;
MAGNUM_ANYAUDIOIMPORTER_LOCAL Buffer::Format doFormat() const override;
MAGNUM_ANYAUDIOIMPORTER_LOCAL BufferFormat doFormat() const override;
MAGNUM_ANYAUDIOIMPORTER_LOCAL UnsignedInt doFrequency() const override;
MAGNUM_ANYAUDIOIMPORTER_LOCAL Containers::Array<char> doData() override;

2
src/MagnumPlugins/AnyAudioImporter/Test/Test.cpp

@ -68,7 +68,7 @@ void AnyImporterTest::wav() {
CORRADE_VERIFY(importer->openFile(WAV_FILE));
/* Check only parameters, as it is good enough proof that it is working */
CORRADE_COMPARE(importer->format(), Buffer::Format::Stereo8);
CORRADE_COMPARE(importer->format(), BufferFormat::Stereo8);
CORRADE_COMPARE(importer->frequency(), 96000);
}

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

@ -184,7 +184,7 @@ void WavImporterTest::invalidFactChunk() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "invalidFactChunk.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::Mono16);
CORRADE_COMPARE(importer->format(), BufferFormat::Mono16);
CORRADE_COMPARE(importer->frequency(), 22050);
CORRADE_COMPARE(importer->data().size(), 3724);
@ -207,7 +207,7 @@ void WavImporterTest::mono8() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "mono8.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::Mono8);
CORRADE_COMPARE(importer->format(), BufferFormat::Mono8);
CORRADE_COMPARE(importer->frequency(), 22050);
CORRADE_COMPARE(importer->data().size(), 2136);
@ -220,7 +220,7 @@ void WavImporterTest::mono8junk() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "mono8junk.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::Mono8);
CORRADE_COMPARE(importer->format(), BufferFormat::Mono8);
CORRADE_COMPARE(importer->frequency(), 22050);
CORRADE_COMPARE_AS(importer->data().prefix(4),
@ -232,7 +232,7 @@ void WavImporterTest::mono8ALaw() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "mono8ALaw.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::MonoALaw);
CORRADE_COMPARE(importer->format(), BufferFormat::MonoALaw);
CORRADE_COMPARE(importer->frequency(), 8000);
CORRADE_COMPARE(importer->data().size(), 4096);
@ -246,7 +246,7 @@ void WavImporterTest::mono8MuLaw() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "mono8MuLaw.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::MonoMuLaw);
CORRADE_COMPARE(importer->format(), BufferFormat::MonoMuLaw);
CORRADE_COMPARE(importer->frequency(), 8000);
CORRADE_COMPARE(importer->data().size(), 4096);
@ -260,7 +260,7 @@ void WavImporterTest::mono16() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "mono16.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::Mono16);
CORRADE_COMPARE(importer->format(), BufferFormat::Mono16);
CORRADE_COMPARE(importer->frequency(), 44000);
CORRADE_COMPARE_AS(importer->data(),
@ -282,7 +282,7 @@ void WavImporterTest::stereo8() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "stereo8.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::Stereo8);
CORRADE_COMPARE(importer->format(), BufferFormat::Stereo8);
CORRADE_COMPARE(importer->frequency(), 96000);
CORRADE_COMPARE_AS(importer->data(),
@ -295,7 +295,7 @@ void WavImporterTest::stereo8ALaw() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "stereo8ALaw.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::StereoALaw);
CORRADE_COMPARE(importer->format(), BufferFormat::StereoALaw);
CORRADE_COMPARE(importer->frequency(), 8000);
CORRADE_COMPARE(importer->data().size(), 4096);
@ -309,7 +309,7 @@ void WavImporterTest::stereo8MuLaw() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "stereo8MuLaw.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::StereoMuLaw);
CORRADE_COMPARE(importer->format(), BufferFormat::StereoMuLaw);
CORRADE_COMPARE(importer->frequency(), 8000);
CORRADE_COMPARE(importer->data().size(), 4096);
@ -332,7 +332,7 @@ void WavImporterTest::stereo16() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "stereo16.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::Stereo16);
CORRADE_COMPARE(importer->format(), BufferFormat::Stereo16);
CORRADE_COMPARE(importer->frequency(), 44100);
CORRADE_COMPARE_AS(importer->data(),
@ -362,7 +362,7 @@ void WavImporterTest::mono32f() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "mono32f.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::MonoFloat);
CORRADE_COMPARE(importer->format(), BufferFormat::MonoFloat);
CORRADE_COMPARE(importer->frequency(), 48000);
CORRADE_COMPARE(importer->data().size(), 3920);
@ -376,7 +376,7 @@ void WavImporterTest::stereo32f() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "stereo32f.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::StereoFloat);
CORRADE_COMPARE(importer->format(), BufferFormat::StereoFloat);
CORRADE_COMPARE(importer->frequency(), 44100);
CORRADE_COMPARE(importer->data().size(), 1352);
@ -390,7 +390,7 @@ void WavImporterTest::stereo64f() {
std::unique_ptr<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "stereo64f.wav")));
CORRADE_COMPARE(importer->format(), Buffer::Format::StereoDouble);
CORRADE_COMPARE(importer->format(), BufferFormat::StereoDouble);
CORRADE_COMPARE(importer->frequency(), 8000);
CORRADE_COMPARE(importer->data().size(), 375888);

26
src/MagnumPlugins/WavAudioImporter/WavImporter.cpp

@ -128,13 +128,13 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
if(formatChunk->audioFormat == WavAudioFormat::Pcm) {
/* Decide about format */
if(formatChunk->numChannels == 1 && formatChunk->bitsPerSample == 8)
_format = Buffer::Format::Mono8;
_format = BufferFormat::Mono8;
else if(formatChunk->numChannels == 1 && formatChunk->bitsPerSample == 16)
_format = Buffer::Format::Mono16;
_format = BufferFormat::Mono16;
else if(formatChunk->numChannels == 2 && formatChunk->bitsPerSample == 8)
_format = Buffer::Format::Stereo8;
_format = BufferFormat::Stereo8;
else if(formatChunk->numChannels == 2 && formatChunk->bitsPerSample == 16)
_format = Buffer::Format::Stereo16;
_format = BufferFormat::Stereo16;
else {
Error() << "Audio::WavImporter::openData(): PCM with unsupported channel count"
<< formatChunk->numChannels << "with" << formatChunk->bitsPerSample
@ -145,13 +145,13 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
/* Check IEEE Float format */
} else if(formatChunk->audioFormat == WavAudioFormat::IeeeFloat) {
if(formatChunk->numChannels == 1 && formatChunk->bitsPerSample == 32)
_format = Buffer::Format::MonoFloat;
_format = BufferFormat::MonoFloat;
else if(formatChunk->numChannels == 2 && formatChunk->bitsPerSample == 32)
_format = Buffer::Format::StereoFloat;
_format = BufferFormat::StereoFloat;
else if(formatChunk->numChannels == 1 && formatChunk->bitsPerSample == 64)
_format = Buffer::Format::MonoDouble;
_format = BufferFormat::MonoDouble;
else if(formatChunk->numChannels == 2 && formatChunk->bitsPerSample == 64)
_format = Buffer::Format::StereoDouble;
_format = BufferFormat::StereoDouble;
else {
Error() << "Audio::WavImporter::openData(): IEEE with unsupported channel count"
<< formatChunk->numChannels << "with" << formatChunk->bitsPerSample
@ -162,9 +162,9 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
/* Check A-Law format */
} else if(formatChunk->audioFormat == WavAudioFormat::ALaw) {
if(formatChunk->numChannels == 1)
_format = Buffer::Format::MonoALaw;
_format = BufferFormat::MonoALaw;
else if(formatChunk->numChannels == 2)
_format = Buffer::Format::StereoALaw;
_format = BufferFormat::StereoALaw;
else {
Error() << "Audio::WavImporter::openData(): ALaw with unsupported channel count"
<< formatChunk->numChannels << "with" << formatChunk->bitsPerSample
@ -175,9 +175,9 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
/* Check μ-Law format */
} else if(formatChunk->audioFormat == WavAudioFormat::MuLaw) {
if(formatChunk->numChannels == 1)
_format = Buffer::Format::MonoMuLaw;
_format = BufferFormat::MonoMuLaw;
else if(formatChunk->numChannels == 2)
_format = Buffer::Format::StereoMuLaw;
_format = BufferFormat::StereoMuLaw;
else {
Error() << "Audio::WavImporter::openData(): MuLaw with unsupported channel count"
<< formatChunk->numChannels << "with" << formatChunk->bitsPerSample
@ -219,7 +219,7 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
void WavImporter::doClose() { _data = nullptr; }
Buffer::Format WavImporter::doFormat() const { return _format; }
BufferFormat WavImporter::doFormat() const { return _format; }
UnsignedInt WavImporter::doFrequency() const { return _frequency; }

20
src/MagnumPlugins/WavAudioImporter/WavImporter.h

@ -59,12 +59,16 @@ namespace Magnum { namespace Audio {
Supports mono and stereo files of the following formats:
- 8 bit per channel PCM, imported as @ref Buffer::Format::Mono8 and @ref Buffer::Format::Stereo8
- 16 bit per channel PCM, imported as @ref Buffer::Format::Mono16 and @ref Buffer::Format::Stereo16
- 32-bit IEEE Float, imported as @ref Buffer::Format::MonoFloat / @ref Buffer::Format::StereoFloat
- 64-bit IEEE Float, imported as @ref Buffer::Format::MonoDouble / @ref Buffer::Format::StereoDouble
- A-Law, imported as @ref Buffer::Format::MonoALaw / @ref Buffer::Format::StereoALaw
- μ-Law, imported as @ref Buffer::Format::MonoMuLaw / @ref Buffer::Format::StereoMuLaw
- 8 bit per channel PCM, imported as @ref BufferFormat::Mono8 and
@ref BufferFormat::Stereo8
- 16 bit per channel PCM, imported as @ref BufferFormat::Mono16 and
@ref BufferFormat::Stereo16
- 32-bit IEEE Float, imported as @ref BufferFormat::MonoFloat /
@ref BufferFormat::StereoFloat
- 64-bit IEEE Float, imported as @ref BufferFormat::MonoDouble /
@ref BufferFormat::StereoDouble
- A-Law, imported as @ref BufferFormat::MonoALaw / @ref BufferFormat::StereoALaw
- μ-Law, imported as @ref BufferFormat::MonoMuLaw / @ref BufferFormat::StereoMuLaw
This plugin is built if `WITH_WAVAUDIOIMPORTER` is enabled when building
Magnum. To use dynamic plugin, you need to load the @cpp "WavAudioImporter" @ce
@ -92,12 +96,12 @@ class MAGNUM_WAVAUDIOIMPORTER_EXPORT WavImporter: public AbstractImporter {
MAGNUM_WAVAUDIOIMPORTER_LOCAL void doOpenData(Containers::ArrayView<const char> data) override;
MAGNUM_WAVAUDIOIMPORTER_LOCAL void doClose() override;
MAGNUM_WAVAUDIOIMPORTER_LOCAL Buffer::Format doFormat() const override;
MAGNUM_WAVAUDIOIMPORTER_LOCAL BufferFormat doFormat() const override;
MAGNUM_WAVAUDIOIMPORTER_LOCAL UnsignedInt doFrequency() const override;
MAGNUM_WAVAUDIOIMPORTER_LOCAL Containers::Array<char> doData() override;
Containers::Array<char> _data;
Buffer::Format _format;
BufferFormat _format;
UnsignedInt _frequency;
};

Loading…
Cancel
Save