Skip to content

Commit

Permalink
Add listeners to DJPlayer
Browse files Browse the repository at this point in the history
  • Loading branch information
tobiashienzsch committed Jun 11, 2022
1 parent ca4473f commit 34abd99
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 11 deletions.
6 changes: 5 additions & 1 deletion src/DSP/DJPlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace ta

DJPlayer::DJPlayer(juce::AudioFormatManager& _formatManager) : formatManager(_formatManager) {}

DJPlayer::~DJPlayer() {}
DJPlayer::~DJPlayer() = default;

auto DJPlayer::prepareToPlay(int samplesPerBlockExpected, double sampleRate) -> void
{
Expand Down Expand Up @@ -37,6 +37,10 @@ auto DJPlayer::loadFile(juce::File audioFile) -> LengthAndSamplerate
readerSource.reset(newSource.release());
}

gain(1.0);
positionRelative(0.0);
_listeners.call(&Listener::djPlayerFileChanged, audioFile);

return LengthAndSamplerate{length, sr};
}

Expand Down
3 changes: 0 additions & 3 deletions src/MainComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,4 @@ auto MainComponent::setAudioDevices() -> void

auto file = juce::File{"/home/tobante/Music/Loops/Bass.wav"};
_djPlayer.loadFile(file);
_display.loadURL(juce::URL{file});
_djPlayer.gain(1.0);
_djPlayer.positionRelative(0.0);
}
2 changes: 1 addition & 1 deletion src/MainComponent.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ struct MainComponent final : juce::Component
ta::SideBarLeft _sideBarLeft{};
ta::SideBarRight _sideBarRight{};
ta::MainSection _jogWheel;
ta::Display _display{_formatManager};
ta::Display _display{_formatManager, _djPlayer};

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainComponent)
};
10 changes: 9 additions & 1 deletion src/UI/Component/WaveformDisplay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,15 @@ void WaveformDisplay::paint(juce::Graphics& g)
auto area = getLocalBounds().reduced(5);

g.setColour(juce::Colours::white);
if (fileLoaded_) { audioThumb_.drawChannel(g, area, 0, audioThumb_.getTotalLength(), 0, 1.0f); }
if (fileLoaded_)
{
audioThumb_.drawChannel(g, area, 0, audioThumb_.getTotalLength(), 0, 1.0f);

auto x = area.getX() + (area.getWidth() * position_);
auto top = area.getY();
auto bottom = area.getBottom();
g.fillRect(juce::Rectangle<float>(x, top, 3.0f, bottom - top));
}
}

void WaveformDisplay::loadURL(juce::URL audioURL)
Expand Down
12 changes: 10 additions & 2 deletions src/UI/Section/Display.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,22 @@

namespace ta
{
Display::Display(juce::AudioFormatManager& formatManager)
: _thumbnailCache{1}, _waveformDisplay{formatManager, _thumbnailCache}
Display::Display(juce::AudioFormatManager& formatManager, DJPlayer& djPlayer)
: _djPlayer{djPlayer}, _thumbnailCache{1}, _waveformDisplay{formatManager, _thumbnailCache}
{
addAndMakeVisible(_waveformDisplay);
_djPlayer.addListener(this);
startTimerHz(30);
}

Display::~Display() { _djPlayer.removeListener(this); }

auto Display::resized() -> void { _waveformDisplay.setBounds(getLocalBounds()); }

auto Display::timerCallback() -> void { _waveformDisplay.setPositionRelative(_djPlayer.positionRelative()); }

auto Display::loadURL(juce::URL url) -> void { _waveformDisplay.loadURL(url); }

auto Display::djPlayerFileChanged(juce::File const& file) -> void { _waveformDisplay.loadURL(juce::URL{file}); }

} // namespace ta
13 changes: 10 additions & 3 deletions src/UI/Section/Display.hpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
#pragma once

#include "DSP/DJPlayer.hpp"
#include "UI/Component/WaveformDisplay.hpp"

namespace ta
{
struct Display final : juce::Component
struct Display final
: juce::Component
, juce::Timer
, DJPlayer::Listener
{
explicit Display(juce::AudioFormatManager& formatManager);
~Display() override = default;
Display(juce::AudioFormatManager& formatManager, DJPlayer& djPlayer);
~Display() override;

auto loadURL(juce::URL url) -> void;

auto resized() -> void override;
auto timerCallback() -> void override;
auto djPlayerFileChanged(juce::File const& file) -> void override;

private:
DJPlayer& _djPlayer;
juce::AudioThumbnailCache _thumbnailCache;
WaveformDisplay _waveformDisplay;

Expand Down

0 comments on commit 34abd99

Please sign in to comment.