| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Synchronize build.gradle and JSyn.java version numbers
Co-authored-by: Phil Burk <[email protected]>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
PlateReverb is a simulation of a metal plate based on all-pass delays.
RoomReverb uses a MultiTapDelay for early reflections and a PlateReverb for diffusion.
Add a DSP package with utility classes used to build unit generators.
Add TuneReverb app with faders for experimenting and hearing reverb.
Add unit tests for SimpleDelay.
Co-authored-by: Phil Burk <[email protected]>
|
|
|
|
|
|
|
|
|
|
| |
Combine channel and noteNumber as a tag for the VoiceAllocator
to avoid collisions when the same note is played on multiple channels.
Allocate more voices: numChannels * voicesPerChannel
For GM2 synths, force channel 10 (9) to use preset 128.
That is a sign for the synth that this is a rhythm channel.
|
|
|
|
| |
LOGGER is not imported, and Double.NaN doesn't follow
traditional '==' comparison rules.
|
|
|
|
| |
Used for MIDI message parsing.
|
|
|
|
|
|
|
|
|
|
| |
The read() could hang forever waiting for data when the
WaveRecorder was stopped.
Now it terminates the thread.
Also fix bug in AudioFifo when partially full. It would not read any data!
Fixes #105
|
|
|
| |
Add new TestCircuit unit test.
|
|
|
|
| |
It was an unnecessary dependency.
|
|
|
|
|
|
| |
It was causing too many problems and had no apparent benefit.
Fixes #101
|
|
|
|
|
|
|
|
|
| |
Add missing parameters.
Create PseudoRandom.
Do not run test that generates the WAV files.
Fix hang in TestConnections.
Fixes #97
|
|
|
|
|
|
| |
Negative input could cause a crash.
Fixes #92
|
|
|
|
| |
Fold waveforms using sin(a*x).
|
| |
|
|
|
|
| |
Includes a minor logging fix
|
|
|
|
| |
Added Gradle (and removed ant), modernized testing via the JUnit framework, moved standalone examples from the tests directory to a separate module, removed sparsely used Java logger and replaced it with SLF4J. More work could be done, however this is a great start to greatly improving the health of the codebase.
|
| |
|
| |
|
|
|
|
| |
Use final in MultiPassThrough
|
|
|
|
| |
Update build.xml to use newer versions of javadoc
|
|
|
|
|
| |
To allow workaround for OpenJDK bug.
https://github.com/philburk/syntona/issues/13
|
| |
|
| |
|
| |
|
|
|
|
| |
Thread#MAX_PRIORITY
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The deadlock scenario is the following:
1) AudioFifo is used with wait on write and read
2) Producer Thread calls write(). The buffer is full, then it gets into
the while(available() == buffer.length) loop
3) a context switch happens right there, BEFORE readSemaphore.wait()
4) Consumer Thread calls read() multiple times until it depletes the
buffer, then ends up in writeSemaphore.wait()
5) context switch back to the Producer Thread, which now calls
readSemaphore.wait()
Deadlock: the buffer is empty, and nobody is going to signal the
producer that there is availability.
This can be reproduced with a simple stress test. I added the stress
test which is simply a copy of an existing one, with a very large value
for the chunk variable.
The race condition is more likely to be hit when the buffer is small,
but I have hit it in "production" with 32K buffers, while generating
large files (a few hundred megabytes).
I am not sure the performance implications of the change, as my use
cases are non-realtime.
Still, all the tests pass.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|\
| |
| | |
Instruments
|
| | |
|
| | |
|
|/
|
|
|
|
| |
Add unit test.
Fix: #15
|
|
|
|
| |
https://github.com/philburk/jsyn/issues/30
|
|
|
|
| |
Also fixed Javadoc errors.
|
| |
|
|
|
|
| |
Also make some members final in SynthesisEngine.
|
| |
|
|\
| |
| | |
fix scaling in FFT
|
| | |
|
|/ |
|
|
|
|
| |
Feedback was causing the filter to hit NaN.
|
| |
|
| |
|
|
|
|
|
|
| |
Fix ListDevices default.
Cleanup interpolator in AutoCorrelator.
Remove empty string from SubtractiveSynth library.
|
|
|
|
| |
noise based on Brownian motion.
|