From 8c8ad7f5ab70bd12f48c9fdb46d1d860b7c6bc14 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 28 Jun 2022 22:08:24 -0500 Subject: [PATCH] fix audio saving being totally wrong --- src/engine/sfWrapper.cpp | 11 ++++++++++- src/engine/sfWrapper.h | 4 +++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/engine/sfWrapper.cpp b/src/engine/sfWrapper.cpp index f71bff341..f12dc95be 100644 --- a/src/engine/sfWrapper.cpp +++ b/src/engine/sfWrapper.cpp @@ -19,6 +19,7 @@ #include "sfWrapper.h" #include "../fileutils.h" +#include "sndfile.h" sf_count_t _vioGetSize(void* user) { return ((SFWrapper*)user)->ioGetSize(); @@ -41,7 +42,14 @@ sf_count_t _vioTell(void* user) { } sf_count_t SFWrapper::ioGetSize() { - return (sf_count_t)len; + sf_count_t ret=(sf_count_t)len; + if (fileMode==SFM_WRITE || fileMode==SFM_RDWR) { + ssize_t lastTell=ftell(f); + fseek(f,0,SEEK_END); + ret=(sf_count_t)ftell(f); + fseek(f,lastTell,SEEK_SET); + } + return ret; } sf_count_t SFWrapper::ioSeek(sf_count_t offset, int whence) { @@ -108,5 +116,6 @@ SNDFILE* SFWrapper::doOpen(const char* path, int mode, SF_INFO* sfinfo) { } sf=sf_open_virtual(&vio,mode,sfinfo,this); + if (sf!=NULL) fileMode=mode; return sf; } \ No newline at end of file diff --git a/src/engine/sfWrapper.h b/src/engine/sfWrapper.h index 323871597..6e984a454 100644 --- a/src/engine/sfWrapper.h +++ b/src/engine/sfWrapper.h @@ -35,6 +35,7 @@ class SFWrapper { size_t len; SF_VIRTUAL_IO vio; SNDFILE* sf; + int fileMode; public: sf_count_t ioGetSize(); @@ -48,7 +49,8 @@ class SFWrapper { SFWrapper(): f(NULL), len(0), - sf(NULL) {} + sf(NULL), + fileMode(0) {} }; #endif