From 1af0f083eaad5c024c2b71e60eecabd199778790 Mon Sep 17 00:00:00 2001 From: Hyunin Song Date: Tue, 29 May 2018 17:49:51 +0900 Subject: [PATCH] Fix WAV exporting on Windows --- include/AudioFileDevice.h | 4 ++++ src/core/audio/AudioFileWave.cpp | 19 ++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/include/AudioFileDevice.h b/include/AudioFileDevice.h index 7b6b81eab..e7177b30f 100644 --- a/include/AudioFileDevice.h +++ b/include/AudioFileDevice.h @@ -56,6 +56,10 @@ protected: return m_outputFile.isOpen(); } + inline int outputFileHandle() const + { + return m_outputFile.handle(); + } private: QFile m_outputFile; diff --git a/src/core/audio/AudioFileWave.cpp b/src/core/audio/AudioFileWave.cpp index 45e46b838..8a590a8b8 100644 --- a/src/core/audio/AudioFileWave.cpp +++ b/src/core/audio/AudioFileWave.cpp @@ -27,6 +27,9 @@ #include "endian_handling.h" #include "Mixer.h" +#include +#include + AudioFileWave::AudioFileWave( OutputSettings const & outputSettings, const ch_cnt_t channels, bool & successful, @@ -72,13 +75,15 @@ bool AudioFileWave::startEncoding() m_si.format |= SF_FORMAT_PCM_16; break; } - m_sf = sf_open( -#ifdef LMMS_BUILD_WIN32 - outputFile().toLocal8Bit().constData(), -#else - outputFile().toUtf8().constData(), -#endif - SFM_WRITE, &m_si ); + + // Use file handle to handle unicode file name on Windows + m_sf = sf_open_fd( outputFileHandle(), SFM_WRITE, &m_si, false ); + + if (!m_sf) + { + qWarning("Error: AudioFileWave::startEncoding: %s", sf_strerror(nullptr)); + return false; + } // Prevent fold overs when encountering clipped data sf_command(m_sf, SFC_SET_CLIPPING, NULL, SF_TRUE);