Skip to content

A simple online DAW - not intended to replace professional packages ... yet 😏.

Notifications You must be signed in to change notification settings

purewack/melonJuice-web

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MelonJuice

https://melonjuice.ml

A simple DAW for recording and exporting musical ideas! UI: React Audio: webAudioAPI

Concept and idea

This project is intended as a coding excercise for myself to sharpen up my React skills and knowledge

This project is ideal because it promotes the use of: General:

  • πŸ‘€ A good visual layout
  • πŸ”€ Crossplatform user interaction and design
  • πŸ“š Using different libraries
  • 🌳 Git best practices like branching
  • πŸ§ͺ Unit testing
  • 🧠 Logical project structure for future handoff

React & JS Specific:

  • πŸ™…β€β™‚οΈπŸ™…β€β™€οΈ Immutable data model
  • β†ͺ ↩ Use of reducers for Undo and Redo history
  • πŸ“ Use of Memoization for optimized rendering of petentially 100s of elements
  • πŸ‹οΈβ€β™€οΈπŸ‹οΈβ€β™‚οΈ Lifting up state-
  • 🎣 Use of custom React hooks
  • πŸ”Š Audio Operations separte from React UI
  • πŸ™ Promises

Glossary, App logic, and Editor expectations:

App                        
    |➑ ControlField
    |➑ ToolField
    |➑ AudioField
        |➑ AudioTrack(s)
            |➑ AudioRegion(s)  
                    ^
        |-----------|
    |➑ Player(s)
AudioEngine

AudioRegion:

A container of audio source with a start time and a duration as well as some extra params like fade times.

AudioTrack:

A container for AudioRegions which the AudioEngine can process when playing or recording.

AudioField:

A collection of AudioTracks, this represents a song as a whole.

ToolField:

A space for track tools like solo and mute buttons as well as track labels. This section should follow and be on-screen all the time.

ControlField:

Controls like undo and redo or new and load buttons reside here.

AudioEngine:

Holds a pool of recordings used by AudioRegion and allows recording and playback of audio.

Done So Far

  • You can drag (pink) regions within a (cyan) track and place it anywhere (even to different tracks).
  • If the region you're dragging overlaps existing ones slightly, the one underneath will get cropped.
  • If you cover an existing region, it gets deleted.
  • If you put a small region in a big one, the big one will split into two and be either side the smaller one.
  • You can drag the left and right handles to adjust the start and end of the region the region has a sound file associated with it (dotted green) and the sound file is immutable.
  • The region should allow you to adjust its start and end to the original recorded start and end even if the region was split Before, allowing non destructive editing.
  • Touch controls

About

A simple online DAW - not intended to replace professional packages ... yet 😏.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published