aboutsummaryrefslogtreecommitdiffstats
path: root/src/wav.cpp
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2024-12-20 22:31:20 +0100
committerDaniil Cherednik <dan.cherednik@gmail.com>2024-12-21 16:30:07 +0100
commit74d6e04c21bddd435bd74c34dbe027b883772a76 (patch)
tree4221df9da5a17897296e5f7f841f01b1f6428c74 /src/wav.cpp
parent78649b2f5941e0649db960cafb2997b5ca432be1 (diff)
downloadatracdenc-74d6e04c21bddd435bd74c34dbe027b883772a76.tar.gz
[refactoring] Get rid of TFloat parameter. Use float.
Diffstat (limited to 'src/wav.cpp')
-rw-r--r--src/wav.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/wav.cpp b/src/wav.cpp
index c182dbc..f62bbb3 100644
--- a/src/wav.cpp
+++ b/src/wav.cpp
@@ -43,6 +43,31 @@ TWav::TWav(const std::string& path, size_t channels, size_t sampleRate)
TWav::~TWav() {
}
+IPCMReader* TWav::GetPCMReader() const {
+ return new TWavPcmReader([this](TPCMBuffer& data, const uint32_t size) {
+ if (data.Channels() != Impl->GetChannelsNum())
+ throw TWrongReadBuffer();
+
+ size_t read;
+ if ((read = Impl->Read(data, size)) != size) {
+ if (!read)
+ throw TNoDataToRead();
+
+ data.Zero(read, size - read);
+ }
+ });
+}
+
+IPCMWriter* TWav::GetPCMWriter() {
+ return new TWavPcmWriter([this](const TPCMBuffer& data, const uint32_t size) {
+ if (data.Channels() != Impl->GetChannelsNum())
+ throw TWrongReadBuffer();
+ if (Impl->Write(data, size) != size) {
+ fprintf(stderr, "can't write block\n");
+ }
+ });
+}
+
uint64_t TWav::GetTotalSamples() const {
return Impl->GetTotalSamples();
}