/VoiceModulation

This is a digital audio editor and recorder for android.

Primary LanguageJavaMIT LicenseMIT

VoiceModulation

This is a lightweight digital audio workstation for android created fully from scratch, open source, and available for free on the Google Play Store.

VoiceModulation

Features

  1. 14 time domain variable parameter modulations
  2. dynamic set operations: find/add/delete
  3. project save
  4. undo/redo

Screenshot of VoiceModulation

app_example

How can I contribute/How are modulations implemented?

if the user grants the application permission then when you select a modulation it's given conditional inside MainActivity will be met and the moduation parameters will render to the screen by reusing the ModulateControls class

selected_mod_condition

Now, in order to hear the selected modulation with your given parameters we override the onClickListener for the play button inside ModulateControls like so

modulate_listener

To write this modulation to the Project we override the onLongClickListener for the play button inside ModulateControls like so

modulate_write_listener

Finally, inside of of the Modulation class there is numerous modulations that implement the effect interface and override it's modulate method

modulation_interface

Since we selected Phaser, the Phaser modulation will be called inside of the Modulations class and written to a temporary memory space so that the modulation can either be played or written to the Project

phaser_modulation

Why are the Modulations implemented this way?

If we did not write it this way then we would need a new view for each additional modulation. Writting it this way allows us to take advantage of functional programming and treat the modulations as if they were variables, reusing the UI code for modulations via the ModulateControls class. This makes it extremely simple for anyone to add a new effect. All you must do is create a new modulation by implementing the effect interface and overriding the modulate method inside of the Modulation class. Then create a new conditional inside of MainAcitivity where you pass your new modulation and its arbitrary number parameters to ModulateControls where each parameter can be adjusted by the user

Future Features & Improvements

  1. Many more time domain modulations
  2. frequency domain operations such as pitch shifting
  3. After modulations are written to Project the changes should propagate to the waveform held in GraphLogic
  4. Improvements to core PieceTable data structure
  5. Better interface for managing projects
  6. real time effects
  7. Improvements to GraphLogic Memory
  8. Multi track projects
  9. Supporting more file formats
  10. writing it again in swift
  11. Anything you would like to add!