Skip to content

Commit

Permalink
Do not add duplicate sounds for merging.
Browse files Browse the repository at this point in the history
  • Loading branch information
MaurycyLiebner committed Sep 25, 2022
1 parent beb3d3b commit d919d4d
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 48 deletions.
2 changes: 1 addition & 1 deletion src/core/CacheHandlers/soundcachehandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include "CacheHandlers/hddcachablecachehandler.h"
#include "CacheHandlers/soundcachecontainer.h"
#include "FileCacheHandlers/audiostreamsdata.h"
#include "FileCacheHandlers/soundreader.h"
#include "FileCacheHandlers/soundreaderformerger.h"

class CORE_EXPORT SoundDataHandler : public FileDataCacheHandler {
typedef stdsptr<SoundCacheContainer> stdptrSCC;
Expand Down
13 changes: 0 additions & 13 deletions src/core/FileCacheHandlers/soundreader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,16 +205,3 @@ void SoundReader::readFrame() {
dstSampleRate,
dstSampleFormat, dstChLayout);
}

#include "Sound/soundmerger.h"
void SoundReaderForMerger::afterProcessing() {
for(const auto& merger : mMergers) {
if(!merger) continue;
for(const auto& ss : mSSAbsRanges) {
merger->addSoundToMerge({ss.fSampleShift, ss.fSamplesRange,
ss.fVolume, ss.fSpeed,
enve::make_shared<Samples>(getSamples())});
}
}
SoundReader::afterProcessing();
}
31 changes: 0 additions & 31 deletions src/core/FileCacheHandlers/soundreader.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,35 +62,4 @@ class CORE_EXPORT SoundReader : public eHddTask {
stdsptr<Samples> mSamples;
};

#include "Sound/soundmerger.h"
class CORE_EXPORT SoundReaderForMerger : public SoundReader {
e_OBJECT
struct SingleSound {
int fSampleShift;
SampleRange fSamplesRange;
QrealSnapshot fVolume;
qreal fSpeed;
};
protected:
SoundReaderForMerger(SoundHandler * const cacheHandler,
const stdsptr<AudioStreamsData>& openedAudio,
const int secondId, const SampleRange& sampleRange) :
SoundReader(cacheHandler, openedAudio, secondId, sampleRange) {}

void afterProcessing();
public:
void addSingleSound(const int sampleShift,
const SampleRange& absRange,
const QrealSnapshot& volume,
const qreal speed) {
mSSAbsRanges.append({sampleShift, absRange, volume, speed});
}

void addMerger(SoundMerger * const merger) {
mMergers << merger;
}
private:
QList<SingleSound> mSSAbsRanges;
QList<stdptr<SoundMerger>> mMergers;
};
#endif // SOUNDREADER_H
36 changes: 36 additions & 0 deletions src/core/FileCacheHandlers/soundreaderformerger.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include "soundreaderformerger.h"

#include "Sound/soundmerger.h"

SoundReaderForMerger::SoundReaderForMerger(
SoundHandler* const cacheHandler,
const stdsptr<AudioStreamsData>& openedAudio,
const int secondId, const SampleRange& sampleRange) :
SoundReader(cacheHandler, openedAudio, secondId, sampleRange) {}

void SoundReaderForMerger::afterProcessing() {
for(const auto& merger : mMergers) {
if(!merger) continue;
for(const auto& ss : mSSAbsRanges) {
merger->addSoundToMerge({ss.fSampleShift, ss.fSamplesRange,
ss.fVolume, ss.fSpeed,
enve::make_shared<Samples>(getSamples())});
}
}
SoundReader::afterProcessing();
}

void SoundReaderForMerger::addSingleSound(void* const soundPtr,
const int sampleShift,
const SampleRange& absRange,
const QrealSnapshot& volume,
const qreal speed) {
const bool c = mSoundPtrs.contains(soundPtr);
if(c) return;
mSoundPtrs.append(soundPtr);
mSSAbsRanges.append({sampleShift, absRange, volume, speed});
}

void SoundReaderForMerger::addMerger(SoundMerger* const merger) {
mMergers << merger;
}
38 changes: 38 additions & 0 deletions src/core/FileCacheHandlers/soundreaderformerger.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#ifndef SOUNDREADERFORMERGER_H
#define SOUNDREADERFORMERGER_H

#include "soundreader.h"

#include "Animators/qrealsnapshot.h"

class SoundMerger;

class CORE_EXPORT SoundReaderForMerger : public SoundReader {
e_OBJECT
struct SingleSound {
int fSampleShift;
SampleRange fSamplesRange;
QrealSnapshot fVolume;
qreal fSpeed;
};
protected:
SoundReaderForMerger(SoundHandler * const cacheHandler,
const stdsptr<AudioStreamsData>& openedAudio,
const int secondId, const SampleRange& sampleRange);

void afterProcessing();
public:
void addSingleSound(void* const soundPtr,
const int sampleShift,
const SampleRange& absRange,
const QrealSnapshot& volume,
const qreal speed);

void addMerger(SoundMerger * const merger);
private:
QList<void*> mSoundPtrs;
QList<SingleSound> mSSAbsRanges;
QList<stdptr<SoundMerger>> mMergers;
};

#endif // SOUNDREADERFORMERGER_H
6 changes: 5 additions & 1 deletion src/core/FileCacheHandlers/videocachehandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,14 @@

#ifndef VIDEOCACHEHANDLER_H
#define VIDEOCACHEHANDLER_H

#include "animationcachehandler.h"
#include "videostreamsdata.h"
#include <set>
#include "filecachehandler.h"
#include "CacheHandlers/hddcachablecachehandler.h"

#include <set>

class VideoFrameLoader;
class VideoFrameHandler;

Expand Down
5 changes: 3 additions & 2 deletions src/core/Sound/soundcomposition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#include "canvas.h"
#include "CacheHandlers/soundcachecontainer.h"
#include "soundmerger.h"
#include "FileCacheHandlers/soundreader.h"
#include "FileCacheHandlers/soundreaderformerger.h"

SoundComposition::SoundComposition(Canvas * const parent) :
QIODevice(parent), mParent(parent) {
Expand Down Expand Up @@ -120,7 +120,8 @@ SoundMerger *SoundComposition::scheduleSecond(const int secondId) {
if(!reader) continue;
reader->addMerger(task.get());
reader->addDependent(task.get());
reader->addSingleSound(sound->getSampleShift(),
reader->addSingleSound(sound.get(),
sound->getSampleShift(),
sound->absSampleRange(),
sound->getVolumeSnap(),
sound->getStretch());
Expand Down
2 changes: 2 additions & 0 deletions src/core/core.pro
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ SOURCES += \
FileCacheHandlers/imagecachehandler.cpp \
FileCacheHandlers/imagesequencecachehandler.cpp \
FileCacheHandlers/soundreader.cpp \
FileCacheHandlers/soundreaderformerger.cpp \
FileCacheHandlers/svgfilecachehandler.cpp \
FileCacheHandlers/videocachehandler.cpp \
FileCacheHandlers/videoframeloader.cpp \
Expand Down Expand Up @@ -460,6 +461,7 @@ HEADERS += \
FileCacheHandlers/imagecachehandler.h \
FileCacheHandlers/imagesequencecachehandler.h \
FileCacheHandlers/soundreader.h \
FileCacheHandlers/soundreaderformerger.h \
FileCacheHandlers/svgfilecachehandler.h \
FileCacheHandlers/videocachehandler.h \
FileCacheHandlers/videoframeloader.h \
Expand Down

0 comments on commit d919d4d

Please sign in to comment.