diff --git a/include/ProjectRenderer.h b/include/ProjectRenderer.h
index c00a9bb51..06f08a20b 100644
--- a/include/ProjectRenderer.h
+++ b/include/ProjectRenderer.h
@@ -44,6 +44,7 @@ public:
enum Depths
{
Depth_16Bit,
+ Depth_24Bit,
Depth_32Bit,
NumDepths
} ;
diff --git a/src/core/ProjectRenderer.cpp b/src/core/ProjectRenderer.cpp
index 75a707592..b14634332 100644
--- a/src/core/ProjectRenderer.cpp
+++ b/src/core/ProjectRenderer.cpp
@@ -76,14 +76,30 @@ ProjectRenderer::ProjectRenderer( const Mixer::qualitySettings & _qs,
return;
}
- bool success_ful = false;
+ int depth;
+ switch (_os.depth)
+ {
+ case Depth_16Bit:
+ depth = 16;
+ break;
+ case Depth_24Bit:
+ depth = 24;
+ break;
+ case Depth_32Bit:
+ depth = 32;
+ break;
+ default:
+ // If this line is reached the enum has been extended without taking care here
+ Q_ASSERT(false);
+ }
+
+ bool successful = false;
m_fileDev = fileEncodeDevices[_file_format].m_getDevInst(
- _os.samplerate, DEFAULT_CHANNELS, success_ful,
+ _os.samplerate, DEFAULT_CHANNELS, successful,
_out_file, _os.vbr,
_os.bitrate, _os.bitrate - 64, _os.bitrate + 64,
- _os.depth == Depth_32Bit ? 32 : 16,
- Engine::mixer() );
- if( success_ful == false )
+ depth, Engine::mixer() );
+ if( !successful )
{
delete m_fileDev;
m_fileDev = NULL;
diff --git a/src/core/audio/AudioFileWave.cpp b/src/core/audio/AudioFileWave.cpp
index 65b87db79..a52ea5a96 100644
--- a/src/core/audio/AudioFileWave.cpp
+++ b/src/core/audio/AudioFileWave.cpp
@@ -64,11 +64,20 @@ bool AudioFileWave::startEncoding()
m_si.sections = 1;
m_si.seekable = 0;
+ m_si.format = SF_FORMAT_WAV;
+
switch( depth() )
{
- case 32: m_si.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT; break;
- case 16:
- default: m_si.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; break;
+ case 32:
+ m_si.format |= SF_FORMAT_FLOAT;
+ break;
+ case 24:
+ m_si.format |= SF_FORMAT_PCM_24;
+ break;
+ case 16:
+ default:
+ m_si.format |= SF_FORMAT_PCM_16;
+ break;
}
m_sf = sf_open(
#ifdef LMMS_BUILD_WIN32
@@ -88,7 +97,7 @@ void AudioFileWave::writeBuffer( const surroundSampleFrame * _ab,
const fpp_t _frames,
const float _master_gain )
{
- if( depth() == 32 )
+ if( depth() == 32 || depth() == 24 )
{
float * buf = new float[_frames*channels()];
for( fpp_t frame = 0; frame < _frames; ++frame )
diff --git a/src/gui/dialogs/export_project.ui b/src/gui/dialogs/export_project.ui
index f6d695c23..4384993af 100644
--- a/src/gui/dialogs/export_project.ui
+++ b/src/gui/dialogs/export_project.ui
@@ -86,16 +86,7 @@
6
-
- 0
-
-
- 0
-
-
- 0
-
-
+
0
-
@@ -148,16 +139,7 @@
-
-
- 0
-
-
- 0
-
-
- 0
-
-
+
0
-
@@ -174,6 +156,11 @@
16 Bit Integer
+ -
+
+ 24 Bit Float
+
+
-
32 Bit Float