| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
FIXME need better solution, add evaluate to FloatSample()
|
| |
|
| |
|
| |
|
|\
| |
| | |
Instruments
|
| | |
|
|/
|
|
|
|
| |
Add unit test.
Fix: #15
|
| |
|
|
|
|
| |
Also make some members final in SynthesisEngine.
|
| |
|
| |
|
|
|
|
|
|
| |
Fix ListDevices default.
Cleanup interpolator in AutoCorrelator.
Remove empty string from SubtractiveSynth library.
|
|
|
|
| |
noise based on Brownian motion.
|
|
|