aboutsummaryrefslogtreecommitdiffstats
path: root/src/wav.cpp
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2024-12-24 22:59:03 +0100
committerDaniil Cherednik <dan.cherednik@gmail.com>2024-12-24 22:59:03 +0100
commitbddbeb98b3db8d435de6b2d10269640121475538 (patch)
tree1a791f5dd49b94ead503b9b77c6b9277f2701a89 /src/wav.cpp
parentc73a0e24a0d5c510a65efbe5c2fbc7fd39a3c003 (diff)
parent74d6e04c21bddd435bd74c34dbe027b883772a76 (diff)
downloadatracdenc-bddbeb98b3db8d435de6b2d10269640121475538.tar.gz
Merge branch 'master' into at3plus-dev
Diffstat (limited to 'src/wav.cpp')
-rw-r--r--src/wav.cpp37
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 {