diff options
-rw-r--r-- | intern/audaspace/intern/AUD_DefaultMixer.cpp | 77 | ||||
-rw-r--r-- | intern/audaspace/intern/AUD_DefaultMixer.h | 59 | ||||
-rw-r--r-- | intern/audaspace/intern/AUD_ResampleFactory.h | 39 | ||||
-rw-r--r-- | source/blender/collada/AnimationExporter.cpp | 2 | ||||
-rw-r--r-- | source/blender/collada/AnimationExporter.h | 2 |
5 files changed, 177 insertions, 2 deletions
diff --git a/intern/audaspace/intern/AUD_DefaultMixer.cpp b/intern/audaspace/intern/AUD_DefaultMixer.cpp new file mode 100644 index 00000000000..20471d6e874 --- /dev/null +++ b/intern/audaspace/intern/AUD_DefaultMixer.cpp @@ -0,0 +1,77 @@ +/* + * $Id$ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * Copyright 2009-2011 Jörg Hermann Müller + * + * This file is part of AudaSpace. + * + * Audaspace is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * AudaSpace is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Audaspace; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file audaspace/intern/AUD_DefaultMixer.cpp + * \ingroup audaspaceintern + */ + + +#include "AUD_DefaultMixer.h" +#ifdef WITH_SAMPLERATE +#include "AUD_SRCResampleReader.h" +#else +#include "AUD_LinearResampleReader.h" +#endif +#include "AUD_ChannelMapperReader.h" +#include "AUD_ChannelMapperFactory.h" + +#include <cstring> + +AUD_DefaultMixer::AUD_DefaultMixer(AUD_DeviceSpecs specs) : + AUD_Mixer(specs) +{ +} + +AUD_IReader* AUD_DefaultMixer::prepare(AUD_IReader* reader) +{ + // hacky for now, until a better channel mapper reader is available + AUD_ChannelMapperFactory cmf(NULL, m_specs); + + AUD_Specs specs = reader->getSpecs(); + + // if channel count is lower in output, rechannel before resampling + if(specs.channels < m_specs.channels) + { + reader = new AUD_ChannelMapperReader(reader, + cmf.getMapping(specs.channels)); + specs.channels = m_specs.channels; + } + + // resample + if(specs.rate != m_specs.rate) +#ifdef WITH_SAMPLERATE + reader = new AUD_SRCResampleReader(reader, m_specs.specs); +#else + reader = new AUD_LinearResampleReader(reader, m_specs.specs); +#endif + + // rechannel + if(specs.channels != m_specs.channels) + reader = new AUD_ChannelMapperReader(reader, + cmf.getMapping(specs.channels)); + + return reader; +} diff --git a/intern/audaspace/intern/AUD_DefaultMixer.h b/intern/audaspace/intern/AUD_DefaultMixer.h new file mode 100644 index 00000000000..a347141b5e0 --- /dev/null +++ b/intern/audaspace/intern/AUD_DefaultMixer.h @@ -0,0 +1,59 @@ +/* + * $Id$ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * Copyright 2009-2011 Jörg Hermann Müller + * + * This file is part of AudaSpace. + * + * Audaspace is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * AudaSpace is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Audaspace; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file audaspace/intern/AUD_DefaultMixer.h + * \ingroup audaspaceintern + */ + + +#ifndef AUD_DEFAULTMIXER +#define AUD_DEFAULTMIXER + +#include "AUD_Mixer.h" + +/** + * This class is able to mix audiosignals of different channel count and sample + * rate and convert it to a specific output format. + * It uses a default ChannelMapperFactory and a SRCResampleFactory for + * the perparation. + */ +class AUD_DefaultMixer : public AUD_Mixer +{ +public: + /** + * Creates the mixer. + */ + AUD_DefaultMixer(AUD_DeviceSpecs specs); + + /** + * This funuction prepares a reader for playback. + * \param reader The reader to prepare. + * \return The reader that should be used for playback. + */ + virtual AUD_IReader* prepare(AUD_IReader* reader); +}; + +#endif //AUD_DEFAULTMIXER diff --git a/intern/audaspace/intern/AUD_ResampleFactory.h b/intern/audaspace/intern/AUD_ResampleFactory.h new file mode 100644 index 00000000000..634b82b3c96 --- /dev/null +++ b/intern/audaspace/intern/AUD_ResampleFactory.h @@ -0,0 +1,39 @@ +/* + * $Id$ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * Copyright 2009-2011 Jörg Hermann Müller + * + * This file is part of AudaSpace. + * + * Audaspace is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * AudaSpace is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Audaspace; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file audaspace/intern/AUD_ResampleFactory.h + * \ingroup audaspaceintern + */ + + +#ifndef AUD_RESAMPLEFACTORY +#define AUD_RESAMPLEFACTORY + +#include "AUD_MixerFactory.h" + +typedef AUD_MixerFactory AUD_ResampleFactory; + +#endif //AUD_RESAMPLEFACTORY diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp index c6f108306be..8a0a39da558 100644 --- a/source/blender/collada/AnimationExporter.cpp +++ b/source/blender/collada/AnimationExporter.cpp @@ -1,5 +1,5 @@ /* - * $Id: DocumentExporter.cpp 36898 2011-05-25 17:14:31Z phabtar $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * diff --git a/source/blender/collada/AnimationExporter.h b/source/blender/collada/AnimationExporter.h index 495cdefc9a2..267ad4be887 100644 --- a/source/blender/collada/AnimationExporter.h +++ b/source/blender/collada/AnimationExporter.h @@ -1,5 +1,5 @@ /* - * $Id: DocumentExporter.cpp 36898 2011-05-25 17:14:31Z phabtar $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * |