Loic Coenen
|
bb3dfa8b2a
|
fix: correct RIFF chunk size in test WAV header
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 19:07:09 +00:00 |
|
Loic Coenen
|
3721c0c9e1
|
refactor: disable all tests except failing WAV load/save
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 19:04:36 +00:00 |
|
Loic Coenen
|
c041645019
|
fix: increase sleep duration in WAV load test to ensure control key processing
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 19:03:22 +00:00 |
|
Loic Coenen
|
6344eaed47
|
fix: add debug output and increase delay in WAV load test
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 19:02:59 +00:00 |
|
Loic Coenen
|
f96d7d290d
|
fix: ensure fresh MIDI connection before each integration test
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 18:49:12 +00:00 |
|
Loic Coenen
|
2d254c0503
|
fix: ensure fresh MIDI connection before each integration test
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 18:39:48 +00:00 |
|
Loic Coenen
|
4339fda529
|
fix: keep persistent MIDI client across notes in integration tests
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 18:37:15 +00:00 |
|
Loic Coenen
|
04b59999c8
|
fix: make loop_count atomic and increase remove channel delay
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 18:28:54 +00:00 |
|
Loic Coenen
|
df1f4fa6bd
|
fix: only set loop_count from record_pos when transitioning from record state
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 18:22:55 +00:00 |
|
Loic Coenen
|
7e5362259b
|
refactor: extract JACK MIDI client reconnection logic
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 18:19:35 +00:00 |
|
Loic Coenen
|
b10d218749
|
fix: reconnect MIDI client before each test to avoid stale connections
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 18:19:06 +00:00 |
|
Loic Coenen
|
cc50577444
|
fix: cast atomic pointer loads/stores and remove duplicate free in writer_thread
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-12 18:01:57 +00:00 |
|
Loic Coenen
|
346c15d1c3
|
fix: use persistent MIDI client and fix save_ring race condition
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-11 22:14:33 +00:00 |
|
Loic Coenen
|
7deea9266b
|
fix: reorder passthrough setup before load command in WAV load test
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-11 21:49:35 +00:00 |
|
Loic Coenen
|
7d842163a2
|
fix: increase listen duration and add RMS logging in WAV load test
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-11 21:39:49 +00:00 |
|
Loic Coenen
|
54fa307360
|
fix: increase sleep durations in WAV load test to prevent false failure
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-11 21:31:29 +00:00 |
|
Loic Coenen
|
5430795510
|
feat: push loop output into save ring during playback
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-11 21:16:02 +00:00 |
|
Loic Coenen
|
5a2414b4c3
|
feat: add WAV load/save and ring buffer implementation
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-11 21:15:12 +00:00 |
|
Loic Coenen
|
6b490ed739
|
feat: add WAV file loading, saving, and dedicated I/O threads
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-11 20:58:00 +00:00 |
|
Loic Coenen
|
72839a9e5f
|
Merge remote-tracking branch 'origin/multichannel'
|
2026-05-09 19:55:36 +00:00 |
|
Loic Coenen
|
d6336970bf
|
Merge branch 'multichannel'
|
2026-05-09 19:54:08 +00:00 |
|
Loic Coenen
|
8c061f93cd
|
delete main.c
|
2026-05-09 19:52:10 +00:00 |
|
|
|
2b4531f3f3
|
Merge pull request '1-multichannel' (#1) from 1-multichannel into multichannel
Reviewed-on: #1
|
2026-05-09 15:47:08 -04:00 |
|
Loic Coenen
|
b4a65a5788
|
chore: add git hooks
|
2026-05-09 14:47:04 +00:00 |
|
Loic Coenen
|
20c0820910
|
refactor: use explicit pointer casts to clarify type conversions
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 14:46:09 +00:00 |
|
Loic Coenen
|
934843e9b1
|
fix: move cppcheck suppression comment to same line as assignment
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 13:23:32 +00:00 |
|
Loic Coenen
|
2fa1d159e7
|
refactor: remove global cppcheck suppressions and move usleep suppression locally
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 13:20:37 +00:00 |
|
Loic Coenen
|
982dd4dc02
|
refactor: replace usleep with safe_usleep in integration tests
|
2026-05-09 13:20:36 +00:00 |
|
Loic Coenen
|
b02c45e7ab
|
fix: suppress cppcheck warnings for missing includes and usleep
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 13:19:08 +00:00 |
|
Loic Coenen
|
aa0b191b46
|
makefile
```makefile
<<<<<<< SEARCH
check:
cppcheck --enable=all --error-exitcode=1 --suppress=missingIncludeSystem --suppress=usleepCalled --suppress=unreadVariable --suppress=normalCheckLevelMaxBranches src/*.c --library=posix .
=======
check:
cppcheck --enable=all --error-exitcode=1 --suppress=unreadVariable src/*.c --library=posix .
>>>>>>> REPLACE
```
src/channel.c
```c
<<<<<<< SEARCH
#include "channel.h"
#include <jack/jack.h>
#include <stdatomic.h>
#include <stdio.h>
#include <string.h>
=======
// cppcheck-suppress missingIncludeSystem
#include "channel.h"
#include <jack/jack.h>
#include <stdatomic.h>
#include <stdio.h>
#include <string.h>
>>>>>>> REPLACE
```
src/channel.h
```c
<<<<<<< SEARCH
#include <jack/jack.h>
#include <stdatomic.h>
=======
// cppcheck-suppress missingIncludeSystem
#include <jack/jack.h>
#include <stdatomic.h>
>>>>>>> REPLACE
```
src/looper.c
```c
<<<<<<< SEARCH
#include "looper.h"
#include "channel.h"
#include "midi.h"
#include <jack/jack.h>
#include <jack/midiport.h>
#include <math.h>
#include <stdatomic.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
=======
// cppcheck-suppress missingIncludeSystem
#include "looper.h"
#include "channel.h"
#include "midi.h"
#include <jack/jack.h>
#include <jack/midiport.h>
#include <math.h>
#include <stdatomic.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
>>>>>>> REPLACE
```
src/looper.h
```c
<<<<<<< SEARCH
#include <jack/jack.h>
=======
// cppcheck-suppress missingIncludeSystem
#include <jack/jack.h>
>>>>>>> REPLACE
```
src/main.c
```c
<<<<<<< SEARCH
#include "looper.h"
#include <jack/jack.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
=======
// cppcheck-suppress missingIncludeSystem
#include "looper.h"
#include <jack/jack.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
>>>>>>> REPLACE
```
src/midi.c
```c
<<<<<<< SEARCH
#include "midi.h"
#include "channel.h"
#include <jack/jack.h>
#include <jack/midiport.h>
#include <stdatomic.h>
=======
// cppcheck-suppress missingIncludeSystem
#include "midi.h"
#include "channel.h"
#include <jack/jack.h>
#include <jack/midiport.h>
#include <stdatomic.h>
>>>>>>> REPLACE
```
src/midi.h
```c
<<<<<<< SEARCH
#include <jack/types.h>
=======
// cppcheck-suppress missingIncludeSystem
#include <jack/types.h>
>>>>>>> REPLACE
```
tests/integration.c
```c
<<<<<<< SEARCH
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#include <stdarg.h>
#include <fcntl.h>
#include <jack/jack.h>
#include <jack/midiport.h>
#include <math.h>
#include <time.h>
=======
// cppcheck-suppress missingIncludeSystem
// cppcheck-suppress usleepCalled
// cppcheck-suppress normalCheckLevelMaxBranches
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#include <stdarg.h>
#include <fcntl.h>
#include <jack/jack.h>
#include <jack/midiport.h>
#include <math.h>
#include <time.h>
>>>>>>> REPLACE
```
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 12:46:50 +00:00 |
|
Loic Coenen
|
c2df024350
|
style: reformat code and update cppcheck suppressions
|
2026-05-09 12:46:31 +00:00 |
|
Loic Coenen
|
d2e39f3451
|
chore: add install-hooks target and update cppcheck library flag
|
2026-05-09 12:38:35 +00:00 |
|
Loic Coenen
|
7e9224cdc7
|
fix: replace usleep with nanosleep and fix const correctness
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 12:11:57 +00:00 |
|
Loic Coenen
|
1db9735e1b
|
style: reformat code and reorder includes in looper.c and main.c
|
2026-05-09 12:11:55 +00:00 |
|
Loic Coenen
|
e8d679c1af
|
fix: replace usleep with safe_usleep in integration tests
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 11:45:32 +00:00 |
|
Loic Coenen
|
e7761c4b53
|
fix: replace usleep with nanosleep and fix const correctness in tests
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 11:44:06 +00:00 |
|
Loic Coenen
|
5532b8cd50
|
chore: Add pre-push hooks
|
2026-05-09 11:36:38 +00:00 |
|
Loic Coenen
|
60a8bdcfe8
|
feat: add unbind command (note 63) to reset bind_channel to 0
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 11:14:52 +00:00 |
|
Loic Coenen
|
ac9ce26e9a
|
docs: add multi-channel and bind feature documentation
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 10:28:26 +00:00 |
|
Loic Coenen
|
4ad16824f1
|
docs: add multichannel documentation
|
2026-05-09 10:28:25 +00:00 |
|
Loic Coenen
|
4bacab68c6
|
feat: implement bind feature for associating channels with MIDI notes
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 10:22:33 +00:00 |
|
Loic Coenen
|
740ebaa969
|
test: add integration tests for control-key modifier and channel removal
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 10:09:51 +00:00 |
|
Loic Coenen
|
b0dda3d8ed
|
fix: defer port unregistration to avoid race condition in channel removal
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 10:00:33 +00:00 |
|
Loic Coenen
|
c0a0a6e968
|
fix: add null-checks for MIDI ports and use atomic access for channel active flag
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-09 09:57:36 +00:00 |
|
Loic Coenen
|
74a190c70c
|
#1: multichannel
|
2026-05-08 21:11:22 +00:00 |
|
Loic Coenen
|
d10aeebd13
|
fix: update segfault evaluation to reflect null pointer fixes
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-08 21:09:13 +00:00 |
|
Loic Coenen
|
b73719e8bc
|
fix: guard against NULL audio ports and defer channel activation until port registration succeeds
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-08 21:08:37 +00:00 |
|
Loic Coenen
|
96295fdb4c
|
refactor: split monolithic main.c into modular source files
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-08 21:03:10 +00:00 |
|
Loic Coenen
|
f1a92f1e95
|
fix: increase sleep duration in dynamic channel test to allow processing
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-08 20:56:56 +00:00 |
|
Loic Coenen
|
9eb264aab8
|
feat: implement control key (note 64) and trigger looper command (note 62)
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
|
2026-05-08 20:51:34 +00:00 |
|