diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2024-12-24 22:59:03 +0100 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2024-12-24 22:59:03 +0100 |
commit | bddbeb98b3db8d435de6b2d10269640121475538 (patch) | |
tree | 1a791f5dd49b94ead503b9b77c6b9277f2701a89 /src/wav.cpp | |
parent | c73a0e24a0d5c510a65efbe5c2fbc7fd39a3c003 (diff) | |
parent | 74d6e04c21bddd435bd74c34dbe027b883772a76 (diff) | |
download | atracdenc-bddbeb98b3db8d435de6b2d10269640121475538.tar.gz |
Merge branch 'master' into at3plus-dev
Diffstat (limited to 'src/wav.cpp')
-rw-r--r-- | src/wav.cpp | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/src/wav.cpp b/src/wav.cpp index 8750377..08bff51 100644 --- a/src/wav.cpp +++ b/src/wav.cpp @@ -36,23 +36,50 @@ TWav::TWav(const std::string& path) : Impl(CreatePCMIOReadImpl(path)) { } -TWav::TWav(const std::string& path, uint8_t channels, uint16_t sampleRate) +TWav::TWav(const std::string& path, size_t channels, size_t sampleRate) : Impl(CreatePCMIOWriteImpl(path, channels, 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) + return false; + + data.Zero(read, size - read); + } + + return true; + }); +} + +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(); } -uint8_t TWav::GetChannelNum() const { - return (uint8_t)Impl->GetChannelsNum(); +size_t TWav::GetChannelNum() const { + return Impl->GetChannelsNum(); } -uint16_t TWav::GetSampleRate() const { - return (uint16_t)Impl->GetSampleRate(); +size_t TWav::GetSampleRate() const { + return Impl->GetSampleRate(); } //bool TWav::IsFormatSupported() const { |