summaryrefslogtreecommitdiffstats
path: root/src/common/resources/sndfile.h
diff options
context:
space:
mode:
authorKrzysztof Dermont <erihel@gmail.com>2014-06-21 02:58:41 +0200
committerKrzysztof Dermont <erihel@gmail.com>2014-06-21 02:59:26 +0200
commit1630cf0ed20ea8df879327af1275ff281a9bc7e0 (patch)
tree8ea090c6ce1e9ea5b5fc95198bdbf5489d8d686f /src/common/resources/sndfile.h
parent2260f6bf4feb62929e32a1bea9cd3f403aa034b1 (diff)
downloadcolobot-1630cf0ed20ea8df879327af1275ff281a9bc7e0.tar.gz
colobot-1630cf0ed20ea8df879327af1275ff281a9bc7e0.tar.bz2
colobot-1630cf0ed20ea8df879327af1275ff281a9bc7e0.zip
Implemented libsndfile loader in PhysFS
Diffstat (limited to 'src/common/resources/sndfile.h')
-rw-r--r--src/common/resources/sndfile.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/common/resources/sndfile.h b/src/common/resources/sndfile.h
new file mode 100644
index 0000000..5ea6ccc
--- /dev/null
+++ b/src/common/resources/sndfile.h
@@ -0,0 +1,54 @@
+// * This file is part of the COLOBOT source code
+// * Copyright (C) 2014 Polish Portal of Colobot (PPC)
+// *
+// * This program 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 3 of the License, or
+// * (at your option) any later version.
+// *
+// * This program 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 this program. If not, see http://www.gnu.org/licenses/.
+
+#pragma once
+
+#include <string>
+#include <physfs.h>
+#include <sndfile.h>
+
+
+class CSNDFile
+{
+public:
+ CSNDFile(const std::string &filename);
+ virtual ~CSNDFile();
+
+ SF_INFO &GetFileInfo();
+ bool IsOpen();
+ std::string &GetLastError();
+ sf_count_t Read(short int *ptr, sf_count_t items);
+
+private:
+ static sf_count_t SNDLength(void *data);
+ static sf_count_t SNDSeek(sf_count_t offset, int whence, void *data);
+ static sf_count_t SNDRead(void *ptr, sf_count_t count, void *data);
+ static sf_count_t SNDWrite(const void *ptr, sf_count_t count, void *data);
+ static sf_count_t SNDTell(void *data);
+
+ SF_INFO m_file_info;
+ SNDFILE *m_snd_file;
+ PHYSFS_File *m_file;
+ std::string m_last_error;
+
+ SF_VIRTUAL_IO snd_callbacks = {
+ SNDLength,
+ SNDSeek,
+ SNDRead,
+ SNDWrite,
+ SNDTell
+ };
+};