Giter Site home page Giter Site logo

dawg / dawg Goto Github PK

View Code? Open in Web Editor NEW
99.0 99.0 11.0 13.31 MB

A DAW built using Electron and the Web Audio API

Home Page: https://dawg.github.io

License: MIT License

JavaScript 0.45% Vue 35.68% CSS 0.23% HTML 0.14% TypeScript 63.49% Makefile 0.02%

dawg's Introduction

DAWG

Build Status Version

DAWG

A DAW built using the Web Audio API ๐Ÿค˜

About

DAWG is Digital Audio Workstation (DAW) built using web technologies and distributed as a native application using Electron ๐ŸŽน It was initially developed as part of the 2018-2019 ENGG 4000 (Senior Design Project) course at UNB but is now being developed as a side project. DAWG strives (although currently fails) to offer the same functionality of DAWs such as FL Studio and Ableton. The name DAWG initially comes from our group name in the ENGG 4000 course: Digital Audio Workstation Group (DAWG).

Quick Links

โ†ณ Homepage
โ†ณ Installation Guide
โ†ณ User Guide

Contributing

See our Wiki to learn about contributing to the project!

Authors

Jacob Smith Matt DeSilva Amir Eldesoky Alex ODonnell
Software Engineering Electrical Engineering Electrical Engineering Electrical Engineering

Acknowledgements

GridSound was a great reference during development. For example, components such as Timeline.vue and BeatLines.vue were based off similar component implementations from gs-ui-components.

VS Code was also used as a reference during development. We are big fans of the structure and navigation tools (Shortcuts, Command Palette, etc) and wanted to implement similar features within DAWG.

dawg's People

Contributors

aeldesoky avatar aodonnell avatar dependabot[bot] avatar desilvamatt avatar jsmith avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dawg's Issues

File Format

As we start to store data within project files, we need to actually design the file format.

We could use a JSON format; however, this poses versioning problems. I think we should use protocol buffer files.

As we are in the initial phases, versioning shouldn't matter much; however, once people start using the software we need to start a major/minor versioning system. Minor version updates should be compatble forwards and backwards whereas major version updates can break stuff.

Mini Side Drawer

We need to create a tabbed side drawer. Basically, this will involve putting two drawers on the same side and make one control the other.

See here to learn about how drawers work the Vuetify (the component library we are currently using). One drawer will be a mini-variant and the other will be full size (I have no clue how to get two on one side but I'm sure it's possible).

Additionally, we will have to implement some tabbing functionality. See Tabs.vue and Tab.vue since they basically contain the code that you will need to implement this functionality. Hopefully, we will be able to reuse code.

Better Scrollbars

We need better scroll bars. The custom scrollbars provided are not working that well.

I will add more details later!

Travis Testing

Set up Travis to test PRs and to build tags. Right now, Travis is just building the application.

Mixer

Implement the mixer and the effects.

Pattern Protobuf

This story involves the design of the pattern proto file. A pattern will include a name + notes. Each note will contain a time, key, velocity, length, pan and maybe more information in the future.

Right now, we are storing information like thie 1:2:2. See here for information about that format. This format won't suffice for all situations as it is not precise enough and will need to be refactored in the future. We should research how other DAWs (GridSound, Fl Studio) keep time information. Additionally, Tone.js has a more precise format called ticks that are also described in the above link. See here for a bit more information.

Bottom Drawer

We need to implement a tabbed bottom drawer (panel?). It will hopefully look very similar to the tab system VS Code uses.

This issue involves implementing the UI and the tabbing system. See Tab.vue and Tabs.vue. Hopefully, we can reuse code!

Automatic Updates

As a user, I don't want to worry about manually updating the software everytime a new version comes out. This should be an almost automatic process.

I want to get this feature done early so we can push out updates to whoever install our software. There is definitely stuff out there that should allow us to roll out automatic updates.

  • Automatic updates should be enabled by default. They should be able to be disabled in the settings (which currently doesn't exist).
  • While downloading the new application, we should show a spinner in the footer. When the download is complete, we should show a notification with a button that says something like Restart to Update.

Detachable Playlist

As part of the UI and UX requirements, the playlist editor should be detachable.

Playlist

This is a large issue that will eventually be broken down into smaller chunks.

Add Notification Manager

We need to add a notification manager that will allow us to send information to the user.

We should basically duplicate the API Atom uses for their NotficationManager.

Additionally, this issue involves creating UI components. They should also be modeled off Atom's components and should behave in a similar manner (ie. most recent at the top, least recent on the bottom). When if dev mode, run something like atom.notifications.addInfo('jacob', {dismissable: true}) to get a persistent notification so you extract the CSS.

TODO

  • Add success, info, warning, error methods
  • Add ability to add buttons
  • Add clear all button if > 1 is displayed (like Atom)
  • Add ability to dismiss

Fix Bugs with Existing Piano Roll

Expected Behavior

What was the expected behavior?

Current Behavior

What is the current behavior?

Failure Information (for bugs)

Provide information about the failure if this is a bug. If it is not a bug, please remove the rest of this template.

Steps to Reproduce

Provide detailed steps for reproducing the issue.

Context

Please provide any relevant information about your setup that might be needed to reproduce the issue.

Failure Logs or Screenshots

Please include any relevant log snippets, files, or screenshots here.

Delete notes at the start of the sequencer

Expected Behavior

You should be able to select notes at time 0 using the drag and select feature. We should check to see how Fl Studio handles that edge condition and replicate their solution.

Current Behavior

You are not able to select those notes because your box can only go left to right.

Keyboard Shortcuts

As part of the UX and UI requirements, we need to make the tab systems accessible using keyboard shortcuts.

Footer

We should add a small footer (similar to VS Code).

General Improvements

Creating this issue to keep track of a few things I want to improve before the design symposium.

  • Capture finger movement from the trackpad
  • Drag on menubar to move the window
  • Only serialize on exit
  • Enhance specific serialization to add sizes, context

JavaScript -> TypeScript

It may be useful to convert the current codebase from JavaScript to TypeScript. Our repository will become fairly large and having a types system should help reduce bugs!

TypeScript should be super easy to integrate into the project.

Audio file IDs

We need a better way to uniquely identify audio files so make projects more portable...

Basic Synthesizers

Initially, we need basic synthesizers to be able to test our system. This should take advantage of Tone.js for actually producing the sound.

They should look something very similar to this: https://codepen.io/gridsound/pen/opEMyj

For now, we probably don't have to show the waveform and could just display text.

Themable

To ensure we don't have to refactor in the future, we need to create and setup default theme colors that can be used throughout the project. This should allow users to easily customize themes.

The colors should be based off the XD mockup.

Show All Commands

One feature I love about VS Code and Atom are their Show All Commands feature (Ctrl+Shift+p for VS Code). This allows the user to quickly find and run a command.

We should copy the VSCode command launcher and integrate it into the DAW.

Keyboard Shortcut

We should model the mechanism VS Code uses to define keyboard shortcuts. Although this feature isn't essential right away, we could save some refactoring in the future.

See here for more information about how VS Code does keyboard shortcuts.

ONNX.js

We should start prototyping with ONNX.js ASAP.

This issue entails introducing the library into the project and getting basic inference working.

Timeline Detail

The amount of detail on the timeline (dots and numbers) should vary based on the number of pixels per beat. As we zoom out, we should display less detail and more detail when we zoom in.

Try zooming in and out on GridSound and you will see the correct implementation. This issue is currently blocked my the timeline which isn't in develop yet.

Sample Tab

We will a simple sample tab to visualize sound files and to initiate transcription and separation. This will allow us to test the ML inference flows.

Related to #10 and #44

Command Palette

As part of the UI and UX requirements, we need to implement a command palette.

Research RTC

This issue doesn't involve any code. I'm just wondering how to start the RTC portion of this project.

Here are the questions that I currently have:

  1. Should we start with a centralized or decentralized approach? Would a decentralized approach be easier at the start as we don't need a central server to be always running?
  2. What kind of data types should we use to facilitate collaboration? See here for info about CRDTs. This info would be good to have ASAP so we can avoid refactoring.

Plugins

Research how VSCode does plugins. We will want to do something similar!

Sample Preview in File Browser

Right now, we have a working file explorer but lack the needed functionality for the DAW.

  1. We should filter files based on its extension so we only show audio files.
  2. We should support up/down/right/left arrow key navigation similar to IDEs.
  3. When an audio file is focused on, we should automatically play the sample.

Additionally, the UI should probably be improved!

Resize Bugs / Issues

Expected Behavior

Elements with a fixed size should stay the same size when the window is resized. We just need to add an event listener to the parent.

Current Behavior

All element resize since the sizes are set with %s.

Settings Files

Eventually, we will need to configure settings using a settings file. We should try and model how VS Code does their settings.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.