diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2024-12-20 22:31:20 +0100 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2024-12-21 16:30:07 +0100 |
commit | 74d6e04c21bddd435bd74c34dbe027b883772a76 (patch) | |
tree | 4221df9da5a17897296e5f7f841f01b1f6428c74 /src/wav.cpp | |
parent | 78649b2f5941e0649db960cafb2997b5ca432be1 (diff) | |
download | atracdenc-74d6e04c21bddd435bd74c34dbe027b883772a76.tar.gz |
[refactoring] Get rid of TFloat parameter. Use float.
Diffstat (limited to 'src/wav.cpp')
-rw-r--r-- | src/wav.cpp | 25 |
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(); } |