aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/zvision/utility.cpp44
-rw-r--r--engines/zvision/utility.h18
2 files changed, 55 insertions, 7 deletions
diff --git a/engines/zvision/utility.cpp b/engines/zvision/utility.cpp
index 5f69fd7433..42fadc78c4 100644
--- a/engines/zvision/utility.cpp
+++ b/engines/zvision/utility.cpp
@@ -25,6 +25,8 @@
#include "common/tokenizer.h"
#include "zvision/utility.h"
+#include "zvision/zvision.h"
+#include "zvision/zork_raw.h"
namespace ZVision {
@@ -179,13 +181,6 @@ void dumpEveryResultAction(const Common::String &destFile) {
output.close();
}
-/**
- * Gets the name of the file (including extension). Forward or back slashes
- * are interpreted as directory changes
- *
- * @param fullPath A full or partial path to the file. Ex: folderOne/folderTwo/file.txt
- * @return The name of the file without any preceding directories. Ex: file.txt
- */
Common::String getFileName(const Common::String &fullPath) {
Common::StringTokenizer tokenizer(fullPath, "/\\");
Common::String token;
@@ -196,4 +191,39 @@ Common::String getFileName(const Common::String &fullPath) {
return token;
}
+void convertRawToWav(const Common::String &inputFile, ZVision *engine, const Common::String &outputFile) {
+ Common::File file;
+ if (!file.open(inputFile))
+ return;
+
+ Audio::AudioStream *audioStream = makeRawZorkStream(inputFile, engine);
+
+ Common::DumpFile output;
+ output.open(outputFile);
+
+ output.writeUint32BE(MKTAG('R', 'I', 'F', 'F'));
+ output.writeUint32LE(file.size() * 2 + 36);
+ output.writeUint32BE(MKTAG('W', 'A', 'V', 'E'));
+ output.writeUint32BE(MKTAG('f', 'm', 't', ' '));
+ output.writeUint32LE(16);
+ output.writeUint16LE(1);
+ uint16 numChannels;
+ if (audioStream->isStereo()) {
+ numChannels = 2;
+ output.writeUint16LE(2);
+ } else {
+ numChannels = 1;
+ output.writeUint16LE(1);
+ }
+ output.writeUint32LE(audioStream->getRate());
+ output.writeUint32LE(audioStream->getRate() * numChannels * 2);
+ output.writeUint16LE(numChannels * 2);
+ output.writeUint16LE(16);
+ output.writeUint32BE(MKTAG('d', 'a', 't', 'a'));
+ output.writeUint32LE(file.size() * 2);
+ int16 *buffer = new int16[file.size()];
+ int readBytes = audioStream->readBuffer(buffer, file.size());
+ output.write(buffer, file.size() * 2);
+}
+
} // End of namespace ZVision
diff --git a/engines/zvision/utility.h b/engines/zvision/utility.h
index dba765b65c..46f81efb33 100644
--- a/engines/zvision/utility.h
+++ b/engines/zvision/utility.h
@@ -30,6 +30,8 @@
namespace ZVision {
+class ZVision;
+
/**
* Opens the sourceFile utilizing Common::File (aka SearchMan) and writes the
* contents to destFile. destFile is created in the working directory
@@ -73,8 +75,24 @@ void removeDuplicateEntries(Common::Array<T> *container) {
}
}
+/**
+ * Gets the name of the file (including extension). Forward or back slashes
+ * are interpreted as directory changes
+ *
+ * @param fullPath A full or partial path to the file. Ex: folderOne/folderTwo/file.txt
+ * @return The name of the file without any preceding directories. Ex: file.txt
+ */
Common::String getFileName(const Common::String &fullPath);
+/**
+ * Converts a ZVision .RAW file to a .WAV
+ * The .WAV will be created in the working directory and will overwrite any existing file
+ *
+ * @param inputFile The path to the input .RAW file
+ * @param outputFile The name of the output .WAV file
+ */
+void convertRawToWav(const Common::String &inputFile, ZVision *engine, const Common::String &outputFile);
+
} // End of namespace ZVision
#endif