Commit Graph

41 Commits (main)

Author SHA1 Message Date
Ben Niemann ef5527be03 Move flatpy to a separate repo and include it as a submodule. 2022-01-02 04:07:45 +01:00
Ben Niemann 66275ca434 Fix typo. 2022-01-01 02:51:40 +01:00
Ben Niemann ee1a2d49af Move subprocess from nix to a submodule. 2022-01-01 02:50:50 +01:00
Ben Niemann c1954a4032 Move dep_sort from nix to a submodule. 2022-01-01 02:30:58 +01:00
Ben Niemann 1d5ebaa58e Update comment. 2021-12-31 09:17:00 +01:00
Ben Niemann 4bd251ec49 Tweak QNanoPainter build. 2021-12-31 04:28:56 +01:00
Ben Niemann a7afb8b878 Add QNanoPainter as a submodule and add it to the build script. 2021-12-31 03:46:27 +01:00
Ben Niemann 0ce8b75e20 Tabula Rasa 2021-10-16 13:49:10 +02:00
Ben Niemann 3fb19792d4 Assorted bug fixes and minor improvements.
- runs ./waf build on reload
- more information in engine dump
- after a crash, do not reopen previously opened projects (to avoid entering a crash loop)
- rename nodes via context menu (double click on title was very flaky)
- settings dialog shows engine state and load
- dialog to add N measures to measured tracks (Score and Beat Tracks), or fill them till the end of the project
- fix test sample playback in settings dialog
- fix some class of crashes when restarting the engine
- changing BPM triggers rerendering of samples
- fix size of control dials in mixer node UI
- remove crackling when chaning mixer control values
- fix in sample track crash when changing BPM
- engine state wasn't updated when undoing a node removal
- fix corruption of device list in MIDI Source node when plugging in/unplugging a device
- gracefully handle more crashes while opening/creating projects
- name labels for hidden tracks might become visible
- resize track name labels when renaming tracks
- unittest results might not get written to disk
- separate messages for engine load and state
- EngineState tracker is owned by EditorApp (which also owns the engine client) instead of EditorWindow
2020-03-13 11:32:06 +01:00
Ben Niemann 462cb1c1f0 Upgrade mypy to 0.761 2020-02-18 05:46:07 +01:00
Ben Niemann eb2abe9cb0 Improvements to sample tracks.
- Support importing MP3 and AAC files (decoded with ffmpeg).
- Files are decoded to raw f32 files into the project directory.
- Correctly render stereo files.
- Render chunks of the wave form into "cache tiles".
- Do rendering asynchronously in a background thread.
- Improve test coverage.
2020-02-18 03:34:25 +01:00
Ben Niemann bae6940b36 Track list improvements. 2019-12-15 17:35:10 +01:00
Ben Niemann f4c583ee5b New copy&paste system. 2019-09-22 19:26:41 +02:00
Ben Niemann f81b4e3889 Add a basic pianoroll track type. 2019-09-08 23:38:58 +02:00
Ben Niemann 53ccc97183 Improve test infrastructure.
- Reanimate vmtests.
- Use waf to run tests.
- Run clang-tidy of C++ sources.
- Ensure noisicaä still runs on Ubuntu 16.04.
- Upgrade mypy to 0.720 and fix new issues.
2019-08-11 15:10:31 +02:00
Ben Niemann 0e4c0ddf10 Switch build system to waf. 2019-07-20 07:54:48 +02:00
Ben Niemann bc9be73125 Add MIDI Looper node. 2019-06-23 03:28:09 +02:00
Ben Niemann 8d7c0cc0d4 Reorganize the app start process and use a new "open project" dialog.
Also:
- Initial project debugger.
- Random name generator for new projects.
- Don't crash when opening a project fails.
- Fix crash when opening project with deleted node.
- All project files are now in a single directory.
- Single model for instrument library shared across widgets.
2019-06-13 23:35:21 +02:00
Ben Niemann fa52f61595 Fix faustlibraries installer to work from a clean slate. 2019-05-30 20:30:40 +02:00
Ben Niemann 5ca602b9e4 Add some more builtin nodes.
- Oscillator
- VCA
- Noise
- Step Sequencer
- MIDI CC to CV

Also added the infrastructure to use Faust for creating new processors (used by the Oscillator, VCA
and Noise nodes).
2019-04-25 18:27:13 +02:00
Ben Niemann c3e5c3a88d Allow nodes to have dynamic list of ports.
- Currently only used for CustomCSound nodes.
- Bring back node parameters
- Add a ObjectListEditor widget.
2019-04-06 15:58:26 +02:00
Ben Niemann 6d52afb424 Optionally "expose" control values as input ports, so they can be connected to other nodes.
Also:
- Also add ControlValueDials for a-rate control ports (and make them exposeable).
- Fix exception in UI when removing nodes with connections.
- Fix exception in PluginHost when cleaning up some LV2 plugins.
- Dump audio engine opcode list to log.
2019-03-24 05:30:10 +01:00
Ben Niemann 51db281537 Add a basic performance test for IPCs.
So I can measure improvements as I change that stuff.
2019-02-01 00:12:04 +01:00
Ben Niemann 9fd2fdeb7b Update licenses to 2019. 2019-01-12 01:20:46 +01:00
Ben Niemann 21ec283822 Reorganize code to make creating new node types easier.
Adding new node types required adding bits and pieces in many places, which was tedious and failure
prone.
Now it's just cloning the directory of one of the existing nodes and adding a few lines to
'registries' (all in one directory).

Also:
- Reanimate custom csound node.
- All nodes can be muted.
2019-01-08 10:11:57 +01:00
Ben Niemann aa380e9c07 Custom UI for mixer nodes and an Instrument node to bring back sample playback.
And various internal changes and cleanups to support this.
2019-01-04 01:31:33 +01:00
Ben Niemann bc8cc6bf71 Upgrade mypy to V0.650
- fix a number of newly reported issues with PyQt5 stubs.
- add empty stub files for all 3rdparty libs without stubs.
- remove local copy of protobuf stubs, the version from the official typeshed is now good enough.
2018-12-21 23:46:36 +01:00
Ben Niemann 66d7f8c6af Change the primary metaphor to 'modular synth' instead of 'multitrack recorder'.
- tracks are now just special types of nodes in the pipeline graph.
- completely reimplemented the pipeline graph UI.
- greatly simplified the UI, got rid of all the docks.
- some functionality got lost along the way or hasn't been reimplemented yet.
2018-12-21 17:03:16 +01:00
Ben Niemann e60d6a11d0 Major refactoring of the project model.
- Move basic model code into noisicaa.model.
- Change internal property storage to protobufs.
- Commands also use protobufs.
- All serializations uses protobufs.
- Object are managed by a Pool object.
- Object references are stored as object IDs and dereferenced lazily.

Also:
- Everything is pylint clean.
- noisicaa.music and most of noisicaa.ui are now mypy strict.
- Generate mypy stubs for generated protobuf code.
- Cleaned up some obsolete cruft.
- Some improvements to runtests.
2018-05-26 14:58:16 +02:00
Ben Niemann 7c5d8fd969 Make the noisicaa.ui.track_items module mypy clean (but loose). 2018-04-15 15:34:57 +02:00
Ben Niemann f42ee88ef7 Make large parts of noisicaa.ui mypy clean, but still loose. 2018-04-15 14:22:48 +02:00
Ben Niemann d4b21f1817 Make noisicaa.ui.dock_widget mypy clean (but still loose). 2018-04-15 09:12:50 +02:00
Ben Niemann 29e0b30523 Make noisicaa.audioproc.engine mypy clean.
Mostly by adding stubs for various cython modules.
2018-04-09 06:50:07 +02:00
Ben Niemann a633925136 Add my own typeshed and populate with PyQt5 stubs. 2018-03-29 13:44:38 +02:00
Ben Niemann 45be492aed Massive refactoring of the audio layer.
- Run all audio in a single process.
  - Instead of a main audio process connected to the backend and one process per opened project.
  - Audio engine is composed of a tree of 'realms', with the top-level realm hooked up to the
    backend, and each project creates a sub-realm.
- Run plugins in a separate process, isolated from the main audio engine.
  - Turns out I really want to support the LV2 instance access feature, so UIs need to run in the
    same process as the plugin itself.
  - So plugins need to be isolated from each other, so they can use different UI toolkits without
    linker symbol clashes. I.e. they can't all run in the main audio process.
- Separate audio processing from the project process.
  - Instead of generating MIDI events from the project and route them to the audio pipeline, have
    processors in the pipeline, which capture the full state of the project and emit events during
    playback. Changes to the project update those processors to keep them in sync.
- Use protocol buffers for a lot of internal messages in non-realtime contexts.
- Very basic support for LV2 plugin UIs.
  - Trying to get that working triggered all those changes above...
- And many, many more changes...
2018-03-21 08:01:20 +01:00
Ben Niemann 2ba9fd9c54 Update licenses for 2018. 2018-01-17 05:30:32 +01:00
Ben Niemann e9271e9490 Move playback logic into backend and improve time management.
- Improve time management:
  - Type-safe C++ and Python classes for musical times and durations.
  - Everything work in the musical time domain until the very end. During playback each
    sample is mapped in an efficient way to a musical time to figure out what needs to play.
  - Make variable names, etc. more consistent.
- Remove the AudioStreamProxy:
  - Move everything needed for playback into the backend.
    - The player logic (playing or not, looping, what musical time to play for the next
      block, etc.).
    - Contents of each track in an efficient-to-play format (score and beat tracks as
      pianorolls, etc).
  - Project updates the backend (of every active player) whenever track contents change,
    thus keeping the backend up-to-date.
  - Employs lock-free data structures where applicable.
  - This converts a large chunk of code in the critical path from Python to C++.
- Introduce protocol buffers for messages in non-realtime contexts.
2018-01-17 05:19:14 +01:00
Ben Niemann fdc6d7dc35 Add copyright preamble to all sources. 2017-10-04 15:03:38 +02:00
Ben Niemann bf5f8f3744 Basic LV2 support. No plugin UIs, event ports, etc. yet. 2016-12-29 02:31:17 +01:00
Ben Niemann 53900e4971 Upgrade csound to 6.08 2016-11-27 02:08:04 +01:00
Ben Niemann 81d808e23c Download, build and install csound 6.07.0 via a pseudo python package. 2016-07-10 16:38:59 +02:00