Krotos Modules 3
Loading...
Searching...
No Matches
krotos::WaveformViewerAndEditor Class Reference

#include <WaveformViewerAndEditor.h>

Inheritance diagram for krotos::WaveformViewerAndEditor:
krotos::ZoomableComponent

Classes

struct  ColourDefinitions
 
struct  Layout
 
class  Listener
 

Public Types

enum class  ZoomStyle { start , centre , playhead }
 

Public Member Functions

 WaveformViewerAndEditor (Colour waveformColour, bool minimumSelectionAreaOn, bool enableAreaSelection=true)
 
 ~WaveformViewerAndEditor () override=default
 
void paintOverChildren (Graphics &g) override
 
void timerCallback () override
 
void addListener (Listener *Listener)
 
void removeListener (Listener *Listener)
 
void resized () override
 
String getFileName ()
 
String getLoadedFilePathsAsCSV ()
 
void update (AudioBuffer< float > *newAudio, int sampleRate)
 
void update (KrotosSampleOscillatorSound &sound)
 
void setViewerDropText (String newText)
 
void setViewCentre (float newRangeStart)
 
WaveformViewergetWaveformViewer ()
 
void clear ()
 
void setSelectionEnabled (bool newState)
 
void setStartPosInPercentage (float startPos, float nonModulatedValue=-1.0f)
 
void setEndPosInPercentage (float endPos)
 
void setGrainData (Grain *grains, int numSamples, int numChannels)
 
void copySampleEngineSegmentToSelector (Selector &selector, int segmentIndex)
 
void copySegmentsToSelectors ()
 
void setSampleEngineToDisplay (KrotosSampleOscillatorSound *sampEngine)
 
void setZooms (const Range< float > newRange)
 
void zoomIn ()
 
void zoomOut ()
 
void setZoomStyle (ZoomStyle)
 
Array< File > getExtendedFilePaths (const StringArray &fileNames)
 
void setChildComponentIds (String newId)
 
int mouseXToSampleX (int x)
 
void showFileChooser ()
 Show the waveform view file chooser.
 
void zoomToSegment (size_t segmentIndex)
 Centres the waveform viewer around a given segment, so that the segment fills the entire viewer window.
 
- Public Member Functions inherited from krotos::ZoomableComponent
 ZoomableComponent ()=default
 
 ~ZoomableComponent () override=default
 
void setHorizontalZoomFactor (float factor)
 
void setHorizontalZoomCenter (float center)
 
void setVerticalZoomFactor (float factor)
 
void setVerticalZoomCenter (float center)
 
void setHorizontalZoomFromRange (const Range< float > xr)
 
void SetTransformToFit (int width, int height)
 
float getHorizontalZoomFactor () const
 
float getHorizontalZoomCenter () const
 
float getVerticalZoomFactor () const
 
float getVerticalZoomCenter () const
 
Range< float > getHorizontalRange () const
 
Range< float > getVerticalRange () const
 

Private Types

enum  HoverMode {
  noHover , segmentDrag , selectionDrag , leftEdgeDrag ,
  rightEdgeDrag , undecidedDrag , NUM_HOVER_MODES
}
 

Private Member Functions

void moveSelectionStart (int segmentIndex, int diff)
 
void setSelectionStart (int segmentIndex, int sampleIndex)
 
void moveSelectionEnd (int segmentIndex, int diff)
 
void setSelectionEnd (int segmentIndex, int sampleIndex)
 
void moveSelection (int segmentIndex, int diff)
 
Range< int > getSelection (int segmentIndex)
 
void setHoverFromDirection (int segmentIndex, int mouseDeltaX)
 
MouseCursor hoverModeToMouseCursor (HoverMode hMode)
 
HoverMode deduceSegmentHoverMode (int segmentIndex)
 
void zoomByDelta (float delta)
 
void reportAnyInvalidFiles (const StringArray &filelist)
 
void mouseDrag (const MouseEvent &event) override
 
void mouseWheelMove (const MouseEvent &e, const MouseWheelDetails &wheel) override
 
void mouseUp (const MouseEvent &event) override
 
void mouseDown (const MouseEvent &event) override
 
void mouseMove (const MouseEvent &event) override
 
void mouseEnter (const MouseEvent &event) override
 
void mouseExit (const MouseEvent &event) override
 
bool isInterestedInFileDrag (const StringArray &files) override
 
void filesDropped (const StringArray &files, int x, int y) override
 
void fileDragEnter (const StringArray &files, int x, int y) override
 
void fileDragExit (const StringArray &files) override
 
void mouseMove ()
 

Private Attributes

struct krotos::WaveformViewerAndEditor::Layout m_layout
 
struct krotos::WaveformViewerAndEditor::ColourDefinitions m_colourDefinitions
 
bool m_selectionChanged {false}
 
bool m_middleMouseDown {false}
 
ListenerList< Listenerm_listeners
 
ScrollAndZoomManager m_scrollManager
 
HoverMode m_hoverMode = HoverMode::noHover
 
std::vector< Selectorm_selectors
 
int m_activeSegmentIndex {0}
 
int m_sampleMouseX {0}
 
int m_mouseX {0}
 
int m_mouseY {0}
 
int m_nextSampleEngineSegment {0}
 
SampleEnginem_sampleEngine {nullptr}
 
std::unique_ptr< GrainDisplaym_grainDisplay
 
std::unique_ptr< WaveformViewerm_waveformView
 
String m_fileName
 
String m_filePath
 
int m_totalSampleLength {0}
 
float m_sampleRate
 
bool m_minimumSelectionAreaOn {false}
 
bool m_hasFileBeenDropped {false}
 
int m_frameCooldownCounter {0}
 
std::unique_ptr< FileChooser > m_sampleChooser
 
const String m_fileChooserWindowTitle {"Select file"}
 
const String m_chooserAllowedFileTypes {"*.wav;*.aif;*.aiff;*.flac;*.ogg"}
 
const String m_validFileExtensions {"wav;aif;aiff;flac;ogg;"}
 
ZoomStyle m_zoomStyle {ZoomStyle::start}
 

Static Private Attributes

static const int FRAME_COOLDOWN {30}
 

Additional Inherited Members

- Protected Member Functions inherited from krotos::ZoomableComponent
void drawNormalisedZoomedRect (Graphics &g, const Rectangle< float > &rect) const
 
void drawNormalisedZoomedRectLine (Graphics &g, const Rectangle< float > &rect) const
 
void drawZoomedRect (Graphics &g, const Rectangle< float > &rect) const
 
void drawNormalisedZoomedLine (Graphics &g, Line< float > line, float thickness) const
 
void drawZoomedLine (Graphics &g, const Line< float > &line, float thickness) const
 
void drawNormalisedZoomedText (Graphics &g, String text, Rectangle< float > bounds) const
 
void drawNormalisedZoomedPath (Graphics &g, const Path &path, float thickness)
 
void drawZoomedPath (Graphics &g, Path path, float thickness)
 
void drawNormalisedZoomedImage (Graphics &g, Image &image, const Rectangle< float > &bounds, bool fillAlphaChannelWithCurrentBrush=false)
 
void fillNormalisedZoomedEllipse (Graphics &g, const Rectangle< float > &bounds)
 
void drawNormalisedZoomedEllipse (Graphics &g, const Rectangle< float > &bounds)
 
void drawZoomedEllipse (Graphics &g, const Rectangle< float > &bounds)
 

Member Enumeration Documentation

◆ HoverMode

Enumerator
noHover 
segmentDrag 
selectionDrag 
leftEdgeDrag 
rightEdgeDrag 
undecidedDrag 
NUM_HOVER_MODES 

◆ ZoomStyle

Zoom options. Note that the mouse wheel zoom will prefer mouse X over zoom style

See also
mouseWheelMove
Enumerator
start 

Zoom in/out at the start of the waveform

centre 

Zoom in/out at the middle of the waveform

playhead 

Zoom in/out at the playhead

Constructor & Destructor Documentation

◆ WaveformViewerAndEditor()

WaveformViewerAndEditor::WaveformViewerAndEditor ( Colour waveformColour,
bool minimumSelectionAreaOn,
bool enableAreaSelection = true )

◆ ~WaveformViewerAndEditor()

krotos::WaveformViewerAndEditor::~WaveformViewerAndEditor ( )
overridedefault

Member Function Documentation

◆ addListener()

void WaveformViewerAndEditor::addListener ( Listener * Listener)

◆ clear()

void WaveformViewerAndEditor::clear ( )

◆ copySampleEngineSegmentToSelector()

void WaveformViewerAndEditor::copySampleEngineSegmentToSelector ( Selector & selector,
int segmentIndex )

◆ copySegmentsToSelectors()

void WaveformViewerAndEditor::copySegmentsToSelectors ( )

Copy all the sample engine segments over to our vector of selectors

◆ deduceSegmentHoverMode()

WaveformViewerAndEditor::HoverMode WaveformViewerAndEditor::deduceSegmentHoverMode ( int segmentIndex)
private

◆ fileDragEnter()

void WaveformViewerAndEditor::fileDragEnter ( const StringArray & files,
int x,
int y )
overrideprivate

◆ fileDragExit()

void WaveformViewerAndEditor::fileDragExit ( const StringArray & files)
overrideprivate

◆ filesDropped()

void WaveformViewerAndEditor::filesDropped ( const StringArray & files,
int x,
int y )
overrideprivate

◆ getExtendedFilePaths()

Array< File > WaveformViewerAndEditor::getExtendedFilePaths ( const StringArray & fileNames)

◆ getFileName()

String WaveformViewerAndEditor::getFileName ( )

◆ getLoadedFilePathsAsCSV()

String WaveformViewerAndEditor::getLoadedFilePathsAsCSV ( )

◆ getSelection()

Range< int > WaveformViewerAndEditor::getSelection ( int segmentIndex)
private

◆ getWaveformViewer()

WaveformViewer * WaveformViewerAndEditor::getWaveformViewer ( )

◆ hoverModeToMouseCursor()

MouseCursor WaveformViewerAndEditor::hoverModeToMouseCursor ( HoverMode hMode)
private

◆ isInterestedInFileDrag()

bool WaveformViewerAndEditor::isInterestedInFileDrag ( const StringArray & files)
overrideprivate

◆ mouseDown()

void WaveformViewerAndEditor::mouseDown ( const MouseEvent & event)
overrideprivate

◆ mouseDrag()

void WaveformViewerAndEditor::mouseDrag ( const MouseEvent & event)
overrideprivate

◆ mouseEnter()

void WaveformViewerAndEditor::mouseEnter ( const MouseEvent & event)
overrideprivate

◆ mouseExit()

void WaveformViewerAndEditor::mouseExit ( const MouseEvent & event)
overrideprivate

◆ mouseMove() [1/2]

void WaveformViewerAndEditor::mouseMove ( )
private

◆ mouseMove() [2/2]

void WaveformViewerAndEditor::mouseMove ( const MouseEvent & event)
overrideprivate

◆ mouseUp()

void WaveformViewerAndEditor::mouseUp ( const MouseEvent & event)
overrideprivate

◆ mouseWheelMove()

void WaveformViewerAndEditor::mouseWheelMove ( const MouseEvent & e,
const MouseWheelDetails & wheel )
overrideprivate

◆ mouseXToSampleX()

int WaveformViewerAndEditor::mouseXToSampleX ( int x)

Calculate mousex position as a sample index into the sound buffer

◆ moveSelection()

void WaveformViewerAndEditor::moveSelection ( int segmentIndex,
int diff )
private

◆ moveSelectionEnd()

void WaveformViewerAndEditor::moveSelectionEnd ( int segmentIndex,
int diff )
private

◆ moveSelectionStart()

void WaveformViewerAndEditor::moveSelectionStart ( int segmentIndex,
int diff )
private

◆ paintOverChildren()

void WaveformViewerAndEditor::paintOverChildren ( Graphics & g)
override

◆ removeListener()

void WaveformViewerAndEditor::removeListener ( Listener * Listener)

◆ reportAnyInvalidFiles()

void WaveformViewerAndEditor::reportAnyInvalidFiles ( const StringArray & filelist)
private

◆ resized()

void WaveformViewerAndEditor::resized ( )
override

◆ setChildComponentIds()

void WaveformViewerAndEditor::setChildComponentIds ( String newId)

Sets the componentID of all child components

Parameters
[in]newIdThe new component ID that will be applied to all components

◆ setEndPosInPercentage()

void krotos::WaveformViewerAndEditor::setEndPosInPercentage ( float endPos)
inline

◆ setGrainData()

void WaveformViewerAndEditor::setGrainData ( Grain * grains,
int numSamples,
int numChannels )

◆ setHoverFromDirection()

void WaveformViewerAndEditor::setHoverFromDirection ( int segmentIndex,
int mouseDeltaX )
private

◆ setSampleEngineToDisplay()

void WaveformViewerAndEditor::setSampleEngineToDisplay ( KrotosSampleOscillatorSound * sampEngine)

◆ setSelectionEnabled()

void WaveformViewerAndEditor::setSelectionEnabled ( bool newState)

Enable/disable waveform viewer range selection

Parameters
newStateSet true to enable, false to disable

◆ setSelectionEnd()

void WaveformViewerAndEditor::setSelectionEnd ( int segmentIndex,
int sampleIndex )
private

◆ setSelectionStart()

void WaveformViewerAndEditor::setSelectionStart ( int segmentIndex,
int sampleIndex )
private

◆ setStartPosInPercentage()

void krotos::WaveformViewerAndEditor::setStartPosInPercentage ( float startPos,
float nonModulatedValue = -1.0f )
inline

◆ setViewCentre()

void WaveformViewerAndEditor::setViewCentre ( float newRangeStart)

Move the zoom window by specifying a new normalised start position.

◆ setViewerDropText()

void WaveformViewerAndEditor::setViewerDropText ( String newText)

◆ setZooms()

void WaveformViewerAndEditor::setZooms ( const Range< float > newRange)
inline

Set the zoom ranges for all the stacked components in the waveform view.

◆ setZoomStyle()

void WaveformViewerAndEditor::setZoomStyle ( ZoomStyle zoomStyle)

Change the

◆ showFileChooser()

void WaveformViewerAndEditor::showFileChooser ( )

Show the waveform view file chooser.

◆ timerCallback()

void WaveformViewerAndEditor::timerCallback ( )
override

◆ update() [1/2]

void WaveformViewerAndEditor::update ( AudioBuffer< float > * newAudio,
int sampleRate )

◆ update() [2/2]

void WaveformViewerAndEditor::update ( KrotosSampleOscillatorSound & sound)

◆ zoomByDelta()

void WaveformViewerAndEditor::zoomByDelta ( float delta)
private

◆ zoomIn()

void WaveformViewerAndEditor::zoomIn ( )

Make waveform view bigger

◆ zoomOut()

void WaveformViewerAndEditor::zoomOut ( )

Make waveform view smaller

◆ zoomToSegment()

void WaveformViewerAndEditor::zoomToSegment ( size_t segmentIndex)

Centres the waveform viewer around a given segment, so that the segment fills the entire viewer window.

Parameters
segmentIndexThe index of the segment in the sample engine to zoom to.

Member Data Documentation

◆ FRAME_COOLDOWN

const int krotos::WaveformViewerAndEditor::FRAME_COOLDOWN {30}
staticprivate

◆ m_activeSegmentIndex

int krotos::WaveformViewerAndEditor::m_activeSegmentIndex {0}
private

◆ m_chooserAllowedFileTypes

const String krotos::WaveformViewerAndEditor::m_chooserAllowedFileTypes {"*.wav;*.aif;*.aiff;*.flac;*.ogg"}
private

◆ m_colourDefinitions

struct krotos::WaveformViewerAndEditor::ColourDefinitions krotos::WaveformViewerAndEditor::m_colourDefinitions
private

◆ m_fileChooserWindowTitle

const String krotos::WaveformViewerAndEditor::m_fileChooserWindowTitle {"Select file"}
private

◆ m_fileName

String krotos::WaveformViewerAndEditor::m_fileName
private

◆ m_filePath

String krotos::WaveformViewerAndEditor::m_filePath
private

◆ m_frameCooldownCounter

int krotos::WaveformViewerAndEditor::m_frameCooldownCounter {0}
private

◆ m_grainDisplay

std::unique_ptr<GrainDisplay> krotos::WaveformViewerAndEditor::m_grainDisplay
private

◆ m_hasFileBeenDropped

bool krotos::WaveformViewerAndEditor::m_hasFileBeenDropped {false}
private

◆ m_hoverMode

HoverMode krotos::WaveformViewerAndEditor::m_hoverMode = HoverMode::noHover
private

◆ m_layout

struct krotos::WaveformViewerAndEditor::Layout krotos::WaveformViewerAndEditor::m_layout
private

◆ m_listeners

ListenerList<Listener> krotos::WaveformViewerAndEditor::m_listeners
private

◆ m_middleMouseDown

bool krotos::WaveformViewerAndEditor::m_middleMouseDown {false}
private

◆ m_minimumSelectionAreaOn

bool krotos::WaveformViewerAndEditor::m_minimumSelectionAreaOn {false}
private

◆ m_mouseX

int krotos::WaveformViewerAndEditor::m_mouseX {0}
private

◆ m_mouseY

int krotos::WaveformViewerAndEditor::m_mouseY {0}
private

◆ m_nextSampleEngineSegment

int krotos::WaveformViewerAndEditor::m_nextSampleEngineSegment {0}
private

◆ m_sampleChooser

std::unique_ptr<FileChooser> krotos::WaveformViewerAndEditor::m_sampleChooser
private

◆ m_sampleEngine

SampleEngine* krotos::WaveformViewerAndEditor::m_sampleEngine {nullptr}
private

◆ m_sampleMouseX

int krotos::WaveformViewerAndEditor::m_sampleMouseX {0}
private

◆ m_sampleRate

float krotos::WaveformViewerAndEditor::m_sampleRate
private

◆ m_scrollManager

ScrollAndZoomManager krotos::WaveformViewerAndEditor::m_scrollManager
private

◆ m_selectionChanged

bool krotos::WaveformViewerAndEditor::m_selectionChanged {false}
private

◆ m_selectors

std::vector<Selector> krotos::WaveformViewerAndEditor::m_selectors
private

◆ m_totalSampleLength

int krotos::WaveformViewerAndEditor::m_totalSampleLength {0}
private

◆ m_validFileExtensions

const String krotos::WaveformViewerAndEditor::m_validFileExtensions {"wav;aif;aiff;flac;ogg;"}
private

◆ m_waveformView

std::unique_ptr<WaveformViewer> krotos::WaveformViewerAndEditor::m_waveformView
private

◆ m_zoomStyle

ZoomStyle krotos::WaveformViewerAndEditor::m_zoomStyle {ZoomStyle::start}
private

The documentation for this class was generated from the following files: