#65

Add simple TUI for effect and pot control

OpenChrisX101010wants to merge intofrom

Closes #11

Simple terminal UI as requested by @torvalds:

"Some UI for actually turning the virtual 'pots' and picking the effect would probably be interesting. But only something simple."

What it does

  • Select effects (flanger, echo, fm, am, phaser, discont)
  • Adjust the 4 virtual pots for each effect
  • Process audio and play the result

Implementation

  • Single Python file (~200 lines)
  • Uses only curses from standard library
  • No external dependencies
  • Stays with existing languages (Python already used for visualize.py)

As @ahwelp suggested, this uses Python instead of Rust/Ratatui to avoid adding a new language and heavy dependencies.

Controls

  • Up/Down: Select effect
  • Tab: Cycle pots
  • Left/Right: Adjust value
  • p: Process and play
  • r: Reset
  • q: Quit

Activity

20
torvalds9mo ago

Would you mind looking at expanding this a bit for the new dynamic control functionality I added to the 'convert' binary?

See commit ea71138 ("convert: add somewhat realtime control interface") which talks about changing the pot values at runtime using a file descriptor and the "--control=" command line switch. I think it should work just fine in your python model.

torvalds9mo ago

Would you mind looking at expanding this a bit for the new dynamic control functionality I added to the 'convert' binary?

See commit ea71138 ("convert: add somewhat realtime control interface") which talks about changing the pot values at runtime using a file descriptor and the "--control=" command line switch. I think it should work just fine in your python model.

torvalds9mo ago

Would you mind looking at expanding this a bit for the new dynamic control functionality I added to the 'convert' binary?

See commit ea71138 ("convert: add somewhat realtime control interface") which talks about changing the pot values at runtime using a file descriptor and the "--control=" command line switch. I think it should work just fine in your python model.

torvalds9mo ago

Would you mind looking at expanding this a bit for the new dynamic control functionality I added to the 'convert' binary?

See commit ea71138 ("convert: add somewhat realtime control interface") which talks about changing the pot values at runtime using a file descriptor and the "--control=" command line switch. I think it should work just fine in your python model.

ChrisX1010109mo ago

Would you mind looking at expanding this a bit for the new dynamic control functionality I added to the 'convert' binary?

See commit ea71138 ("convert: add somewhat realtime control interface") which talks about changing the pot values at runtime using a file descriptor and the "--control=" command line switch. I think it should work just fine in your python model.

Updated with --control= support from ea71138. Sends pXYY commands in real-time. Uses aplay -B 100 when available.

Ready to add effect switching once added to convert.

If anything else needs changing, please let me know. Happy to help, sir. Have a great rest of the weekend!

Kindly, Chris

ChrisX1010109mo ago

Would you mind looking at expanding this a bit for the new dynamic control functionality I added to the 'convert' binary?

See commit ea71138 ("convert: add somewhat realtime control interface") which talks about changing the pot values at runtime using a file descriptor and the "--control=" command line switch. I think it should work just fine in your python model.

Updated with --control= support from ea71138. Sends pXYY commands in real-time. Uses aplay -B 100 when available.

Ready to add effect switching once added to convert.

If anything else needs changing, please let me know. Happy to help, sir. Have a great rest of the weekend!

Kindly, Chris

ChrisX1010109mo ago

Would you mind looking at expanding this a bit for the new dynamic control functionality I added to the 'convert' binary?

See commit ea71138 ("convert: add somewhat realtime control interface") which talks about changing the pot values at runtime using a file descriptor and the "--control=" command line switch. I think it should work just fine in your python model.

Updated with --control= support from ea71138. Sends pXYY commands in real-time. Uses aplay -B 100 when available.

Ready to add effect switching once added to convert.

If anything else needs changing, please let me know. Happy to help, sir. Have a great rest of the weekend!

Kindly, Chris

ChrisX1010109mo ago

Would you mind looking at expanding this a bit for the new dynamic control functionality I added to the 'convert' binary?

See commit ea71138 ("convert: add somewhat realtime control interface") which talks about changing the pot values at runtime using a file descriptor and the "--control=" command line switch. I think it should work just fine in your python model.

Updated with --control= support from ea71138. Sends pXYY commands in real-time. Uses aplay -B 100 when available.

Ready to add effect switching once added to convert.

If anything else needs changing, please let me know. Happy to help, sir. Have a great rest of the weekend!

Kindly, Chris

RodrigoSKohl9mo ago

@ChrisX101010 I changed your code to use TUI with Tkinter, but I used the SoundDevice library instead ffplay or aplay (because ffplay dont work properly with matplotlib): https://github.com/RodrigoSKohl/AudioNoise/tree/feat/tui-portaudio I think it still needs a lot of features, like a reset effect and others, but it works.

RodrigoSKohl9mo ago

@ChrisX101010 I changed your code to use TUI with Tkinter, but I used the SoundDevice library instead ffplay or aplay (because ffplay dont work properly with matplotlib): https://github.com/RodrigoSKohl/AudioNoise/tree/feat/tui-portaudio I think it still needs a lot of features, like a reset effect and others, but it works.

RodrigoSKohl9mo ago

@ChrisX101010 I changed your code to use TUI with Tkinter, but I used the SoundDevice library instead ffplay or aplay (because ffplay dont work properly with matplotlib): https://github.com/RodrigoSKohl/AudioNoise/tree/feat/tui-portaudio I think it still needs a lot of features, like a reset effect and others, but it works.

ChrisX1010109mo ago

@ChrisX101010 I changed your code to use TUI with Tkinter, but I used the SoundDevice library instead ffplay or aplay (because ffplay dont work properly with matplotlib): https://github.com/RodrigoSKohl/AudioNoise/tree/feat/tui-portaudio I think it still needs a lot of features, like a reset effect and others, but it works.

Oh it looks beautiful! but I think Linus needs both ffplay and aplay so he can tune these effects in real time using a guitar pedal, this is more of a GUI and I aimed for simplicity but thank you! I actually will check it out :) Maybe a suggestion and cool idea is to make like a big knob that when different settings applied it will turn the knob, like with an animation and a pointer I guess, like a real life knob, maybe like this for example: https://www.google.com/search?client=ms-android-samsung-ss&hs=m5r9&sca_esv=88a22a1789578c76&sxsrf=ANbL-n7Xw00uRKn6CshsYC_2c9K6kUj7bw:1768991890314&udm=2&fbs=ADc_l-aYG5x8-d5ibnXMiddSQf3iPFI3XMezC0rbXzfktIPjQp1x2jIzBlATx_ViNv2Emlk-lMTphCuWvoDVaknBGbNkHZ4HMp8T1MDXT1vhG0k5ngUSomA-Iz-Joj5g2UwVdQBYT7BSljs4p3Rsq-hTex5AFnJJABXfD2oWDkbrkBWE_dPliSFReZDoXwj-f0T58AoNwLTjuCrdUTrK_OnbB320lW4KlqpFeHWIVVBQdlmHzJkyrWo&q=guitar+knob+on+pedal&sa=X&ved=2ahUKEwjJi-6puJySAxUCA9sEHRICI6cQtKgLegQIFBAB&biw=384&bih=731&dpr=3.75&aic=0

ChrisX1010109mo ago

@ChrisX101010 I changed your code to use TUI with Tkinter, but I used the SoundDevice library instead ffplay or aplay (because ffplay dont work properly with matplotlib): https://github.com/RodrigoSKohl/AudioNoise/tree/feat/tui-portaudio I think it still needs a lot of features, like a reset effect and others, but it works.

Oh it looks beautiful! but I think Linus needs both ffplay and aplay so he can tune these effects in real time using a guitar pedal, this is more of a GUI and I aimed for simplicity but thank you! I actually will check it out :) Maybe a suggestion and cool idea is to make like a big knob that when different settings applied it will turn the knob, like with an animation and a pointer I guess, like a real life knob, maybe like this for example: https://www.google.com/search?client=ms-android-samsung-ss&hs=m5r9&sca_esv=88a22a1789578c76&sxsrf=ANbL-n7Xw00uRKn6CshsYC_2c9K6kUj7bw:1768991890314&udm=2&fbs=ADc_l-aYG5x8-d5ibnXMiddSQf3iPFI3XMezC0rbXzfktIPjQp1x2jIzBlATx_ViNv2Emlk-lMTphCuWvoDVaknBGbNkHZ4HMp8T1MDXT1vhG0k5ngUSomA-Iz-Joj5g2UwVdQBYT7BSljs4p3Rsq-hTex5AFnJJABXfD2oWDkbrkBWE_dPliSFReZDoXwj-f0T58AoNwLTjuCrdUTrK_OnbB320lW4KlqpFeHWIVVBQdlmHzJkyrWo&q=guitar+knob+on+pedal&sa=X&ved=2ahUKEwjJi-6puJySAxUCA9sEHRICI6cQtKgLegQIFBAB&biw=384&bih=731&dpr=3.75&aic=0

ChrisX1010109mo ago

@ChrisX101010 I changed your code to use TUI with Tkinter, but I used the SoundDevice library instead ffplay or aplay (because ffplay dont work properly with matplotlib): https://github.com/RodrigoSKohl/AudioNoise/tree/feat/tui-portaudio I think it still needs a lot of features, like a reset effect and others, but it works.

Oh it looks beautiful! but I think Linus needs both ffplay and aplay so he can tune these effects in real time using a guitar pedal, this is more of a GUI and I aimed for simplicity but thank you! I actually will check it out :) Maybe a suggestion and cool idea is to make like a big knob that when different settings applied it will turn the knob, like with an animation and a pointer I guess, like a real life knob, maybe like this for example: https://www.google.com/search?client=ms-android-samsung-ss&hs=m5r9&sca_esv=88a22a1789578c76&sxsrf=ANbL-n7Xw00uRKn6CshsYC_2c9K6kUj7bw:1768991890314&udm=2&fbs=ADc_l-aYG5x8-d5ibnXMiddSQf3iPFI3XMezC0rbXzfktIPjQp1x2jIzBlATx_ViNv2Emlk-lMTphCuWvoDVaknBGbNkHZ4HMp8T1MDXT1vhG0k5ngUSomA-Iz-Joj5g2UwVdQBYT7BSljs4p3Rsq-hTex5AFnJJABXfD2oWDkbrkBWE_dPliSFReZDoXwj-f0T58AoNwLTjuCrdUTrK_OnbB320lW4KlqpFeHWIVVBQdlmHzJkyrWo&q=guitar+knob+on+pedal&sa=X&ved=2ahUKEwjJi-6puJySAxUCA9sEHRICI6cQtKgLegQIFBAB&biw=384&bih=731&dpr=3.75&aic=0

ChrisX1010109mo ago

Updated with --control= support from ea71138. All effects working (including tube and growlingbass). Reads effects dynamically from Makefile.

Included FIR.raw for tube effect to work out-of-the-box.

ChrisX1010109mo ago

Updated with --control= support from ea71138. All effects working (including tube and growlingbass). Reads effects dynamically from Makefile.

Included FIR.raw for tube effect to work out-of-the-box.

ChrisX1010109mo ago

@torvalds Hey, sir! Can you please check now the updated TUI? :] I hope you like it. If any more changes or updates needed, please let me know. At your disposal. Appreciate your reviews and exposure. It really means a lot to me.

ChrisX1010109mo ago

@torvalds Hey, sir! Can you please check now the updated TUI? :] I hope you like it. If any more changes or updates needed, please let me know. At your disposal. Appreciate your reviews and exposure. It really means a lot to me.