Google Summer of Code 2022 - Integrating Faust into Bespoke

Name - Drew

Email - contact.protodrew@pm.me

Website - protodrew.website

Country of Residence - USA

Timezone - EST (UTC -4)

Instant Messaging

Discord - Proto#8300

Matrix - protodrew:sealight.xyz

Mastodon - @protodrew@merveilles.town

About Me

I am a second year Interactive Media and Game Development Technology student beginning my journey into audio programming and live coding through open-source technology with an emphasis on performance and modularity. I will be available starting May 20 until the project is completed, and will be able to work 30-40 hours a week.

Why this project?

I have been experimenting with Bespoke as a utility for cross-platform live coding and audio composition for a few months now, working more with DSLs including Faust. I want to give back because I am passionate, highly motivated, and more proficient in C/C++. This is the perfect opportunity to combine my interests and contribute to a project that I am very passionate about.

Technological Abilities and Roadmap

I am proficient in systems programming with C/C++ to create cross-platform libraries in addition to standalone programs. For reference with this project, I have been investigating the recent Faust integration in touch designer[1] as well as JiT compiler integration with JUCE[2]. I think the best course of action at the beginning would be to connect with bgaster (the most active member of the Bespoke to Faust integration discussion on github), and discuss what would be not only the simplest and lightest implementation, but also allow for enhancements to the Bespoke ecosystem as a whole. After speaking with Stephane Letz of the Faust project, rather than integrating Faust with Bespoke using LLVM JiT or WASM integration, it would be simpler and easier to utilize Faust's Interpreter[3]. I'm still working my way through both the general backend of the relevant parts of Faust, as well as the documentation on utilizing the interpreter[4].

1: https://github.com/DBraun/TD-Faust/
2: https://github.com/olilarkin/juce_faustllvm/tree/master/source
3: https://github.com/grame-cncm/faust/tree/master-dev/compiler/generator/interpreter
4: https://faustdoc.grame.fr/manual/embedding/#using-libfaust-with-the-interpreter-backend

After reading the discussion on the GitHub issue[5] Bespoke has open on it, it seems that the biggest hurdle would be accounting for UI if we were to take the an approach other than static implementation of libfaust. I would love the opportunity to dig into UI and further develop skills in that area during this project. Further research and conversations with Stephane have outlined that I would be able to work with Faust's pre-existing UI subclasses[6].

5: https://github.com/BespokeSynth/BespokeSynth/issues/317
6: https://github.com/grame-cncm/faust/tree/master-dev/architecture/faust/gui

My initial program would follow the `faust2xx` model, allowing for a potential rewrite of some existing Bespoke plugins, as well as the creation of new ones statically. This would be the simplest stage of the implementation, and allow for a more intimate understanding of the interoperability between Faust and Bespoke that I would utilize for the next stage of the project.

After the `faust2xx` module has been completed, the focus would shift towards integrating the Faust interpreter into Bespoke. This is definitely the more complex portion of the project, but I believe I could at least get this started in the summer we have together, and go on to flesh it out with the collaboration of both the Bespoke and Faust teams if it is not fully completed by the end of the GSoC period.

At the end of the day, I am extremely passionate about both of these ecosystems, and the future of open-source audio projects. I believe I could be a valuable asset to the program, and begin a relationship with one of the fastest growing FOSS DAWs in the game that would benefit both platforms. This will be a fantastic learning opportunity for me, alongside an amazing plugin for the community. The chance to cut my teeth on large open source projects is something that I have been excited to do for a long time.

Timeline

before May 20

May 20 - June 12

June 13

June 27

July 11

July 25

July 26 - Sep 5

Sep 6 - Sep 11

Sep 12

Future

follow me on the fediverse
rss (web & gemini)