Seeking Guidance on Opening a PR for DaisySP

Hi there,

I hope this message finds you well. I’m a bit unsure about the best practices for opening a pull request (PR) given that the DaisySP repository’s access is restricted.

My contributions involve a new module that I believe could be valuable to the DaisySP ecosystem.

It is GranularPlayer for the DaisySP. It’s designed to playback arrays of samples in both directions and offers independent control over time-stretching and pitch-shifting.

To give you a better idea, I am sending along a video that showcases a working example of my module in action. However, I want to make sure I follow the correct procedures and maintain a smooth and coordinated process with the DaisySP community.

I have a couple of questions that I would appreciate some guidance on:

  • Should I wait to open a PR for the module’s examples until the PR for the module itself is merged?

  • What is the process for contributing to the DaisySP repository, considering my contributions are local? Are there specific steps or guidelines I should follow? I have already read the contribution guidelines and style guide and made sure that the code follows it.

I understand that the DaisySP has some restrictions on access, and I want to make sure I respect these rules while actively participating in its development.

Your guidance and advice would be greatly appreciated, and I’m looking forward to your insights on the best practices for contributing to the DaisySP repository. Thank you for your time and support.

here is the video : https://youtu.be/fa7yxalXuXE

and the fork i am working on: GitHub - viniciusfersil123/DaisyExamples: Examples for the Daisy Platform

Best regards,

Vinícius Fernandes

Hi Vinícius!

Thank you for the wait. I’m really excited to see that the GranularPlayer is ready for a PR now! I have been looking forward to it. It’s sounding awesome!

What you would need to do is to make your own fork and then create the pull request from that. And then, one of us will review and we’ll go from there.
I believe this should get you started: Creating a pull request from a fork - GitHub Docs
Or this: How To: Fork a GitHub Repository & Submit a Pull Request – Jake Jarvis

Please let me know if you have any questions! We’re excited to have a closer look at the granular synth.

Hi Takumi,

Thank you so much for your prompt response and for expressing enthusiasm about the GranularPlayer module! I truly appreciate your guidance.

I have taken your advice and created a fork, and I am excited to let you know that I have just opened the pull request for the GranularPlayer module. You can find the PR at the following link:

GranularPlayer Pull Request

I’ve followed the steps outlined in the GitHub documentation you shared, and I’m looking forward to your feedback and any further instructions you may have.

If you have any questions or if there’s anything else I can provide, please feel free to let me know. I’m eager to contribute to the DaisySP community and improve the platform.

Thanks again for your time and support!

Best regards,
Vinícius Fernandes

1 Like

Also, I wanted to inform you that I have an example ready in my DaisyExamples fork repository,.This example is ready for publication whenever it is appropriate. The link to the fork is: https://github.com/viniciusfersil123/DaisyExamples

1 Like

This is great news, Vinícius! Thank you so much for opening the PR.
The team will review it as soon as we find get a chance.

I cloned that repo (with --recurse), rebuilt libs.
Tried to build granularPlayer, got:

granularplayer.cpp:21:1: error: ‘GranularPlayer’ does not name a type
21 | GranularPlayer granularPlayer;

Am I just making some kind of GitHub error?

Thank you so much, @Takumi_Ogata! Feel free to reach out anytime if you believe I can be of assistance in any way

Hi @tele_player,

Thanks a lot for giving my implementation a try. Since it’s a PR still under review, you can follow these steps to address the issue and make use of the GranularPlayer module:

  1. After completing all the steps outlined here, go ahead and delete the DaisySP folder from your DaisyExamples directory.
  2. Clone the DaisySP version I’ve provided anywhere you prefer (cloning it in the root of the DaisyExamples folder would be easier). If you decide to clone the DaisySP folder elsewhere, make sure to copy it to the root folder of DaisyExamples. Note that this version is on the granular_player branch of my repository.
  3. Execute the “rebuild_all” shell script found in the DaisyExamples repository.

You should be all set! If you encounter any further issues, feel free to reach out to me. I’ll do my best to respond promptly. Thanks! :slightly_smiling_face:

Thanks -

As is suspected, it was a git error - I didn’t get the correct DaisySP branch.
Build is sucessful now - I’ll probably hack it to use Patch.Init().

Edit: running granularplayer, with minor changes, on Patch.Init(). Making interesting noises!

1 Like

Hey @tele_player , great to see it is working. Thanks for trying the port ! My SD card module just arrived today, I will try to play around with larger samples and post my results here in the forum !

Unless it’s intentional, judging by how it sounds in your video example I’d suggest you add interpolation in the process() function. It sounds all kinds of glitchy :slight_smile:

Hey @kursiv, appreciate the feedback! I previously implemented the same algorithm in Pure Data using the tabred4~ object, and it did sound better to me—more precisely, it seemed “cleaner.” I’m in the final weeks of my doctoral semester, but once that’s wrapped up, I plan to experiment with implementing some interpolation. If you have any recommendations regarding which interpolation algorithm I should consider or any suggested readings on the topic, feel free to share your thoughts. Thanks again! :slightly_smiling_face:

Yeah the tabread4 seems to implement cubic hermite interpolation by the looks of it.

I’ve been toying around with a granular player myself and I’ve tried a few different interpolations. Linear interpolation gave lots of aliasing, but could be fine for integer down/upsampling. Cubic hermite on the other hand seems like it’s doing the job.
I’m not sure how comfortable you are with math, but if you google cubic hermite interpolation you’ll find lots of different resources that explain how it works and how to implement it.

I’ve implemented it here if you want to have a look, it’s quite similar to what they do in tabread4.

1 Like

Hey @kursiv,

I really appreciate your suggestions and the code examples you provided. It’s really helpful to have a starting point for implementing cubic hermite interpolation.

I’ll dive into the resources on cubic hermite interpolation as you suggested and take a closer look at your code example. Your experience with different interpolations, especially highlighting the aliasing concerns with linear interpolation, is insightful. I’ll definitely keep that in mind as I work on enhancing the GranularPlayer.

I’m comfortable with math and eager to experiment with the implementation. Once I’ve made updates, I’ll share the changes and welcome any further feedback you might have.

Thanks again for your support and for taking the time to share your expertise.