2017-09-26 23:25:55 -04:00
|
|
|
// Copyright (c) Charles J. Cliffe
|
|
|
|
// SPDX-License-Identifier: GPL-2.0+
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "AudioFile.h"
|
|
|
|
|
|
|
|
#include <fstream>
|
|
|
|
|
|
|
|
class AudioFileWAV : public AudioFile {
|
|
|
|
|
|
|
|
public:
|
|
|
|
AudioFileWAV();
|
2021-04-04 22:13:31 -04:00
|
|
|
~AudioFileWAV() override;
|
2017-09-26 23:25:55 -04:00
|
|
|
|
2018-01-14 09:30:40 -05:00
|
|
|
//override to manage name change with multi-part WAV.
|
2021-04-04 22:13:31 -04:00
|
|
|
void setOutputFileName(std::string filename) override;
|
2018-01-14 09:30:40 -05:00
|
|
|
|
2018-01-13 05:50:08 -05:00
|
|
|
//override of the base method to generate multi-part
|
|
|
|
//WAV to overcome the WAV format size limit.
|
2021-04-04 22:13:31 -04:00
|
|
|
std::string getOutputFileName() override;
|
2017-09-26 23:25:55 -04:00
|
|
|
|
2021-04-04 22:13:31 -04:00
|
|
|
std::string getExtension() override;
|
2018-01-13 05:50:08 -05:00
|
|
|
|
2021-04-04 22:13:31 -04:00
|
|
|
bool writeToFile(AudioThreadInputPtr input) override;
|
|
|
|
bool closeFile() override;
|
2017-09-26 23:25:55 -04:00
|
|
|
|
|
|
|
protected:
|
|
|
|
std::ofstream outputFileStream;
|
2017-11-02 00:01:10 -04:00
|
|
|
size_t dataChunkPos;
|
2018-01-07 02:55:38 -05:00
|
|
|
long long currentFileSize = 0;
|
|
|
|
int currentSequenceNumber = 0;
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
2021-04-04 22:13:31 -04:00
|
|
|
size_t getMaxWritableNumberOfSamples(const AudioThreadInputPtr& input) const;
|
2018-01-07 02:55:38 -05:00
|
|
|
|
2021-04-04 22:13:31 -04:00
|
|
|
void writeHeaderToFileStream(const AudioThreadInputPtr& input);
|
2018-01-07 02:55:38 -05:00
|
|
|
|
|
|
|
//write [startInputPosition; endInputPosition[ samples from input into the file.
|
2021-04-04 22:13:31 -04:00
|
|
|
void writePayloadToFileStream(const AudioThreadInputPtr& input, size_t startInputPosition, size_t endInputPosition);
|
2017-09-26 23:25:55 -04:00
|
|
|
};
|