Yacht - music studio for Pd

I have released a tool that allows you to create music using Playdate's built-in synth on itch.io.
However, it is still a beta version and there are many unimplemented features.
I would love for you to try it and receive lots of opinions!

drumpattern
synthsound
patternsynth

Detailed operating instructions are written on the itch.io page. . .

Video... but it's still in development.

Thanks!

4 Likes

This is really cool! I'm subscribed to you on YouTube so I get update notifications.

Keep going with it!

Thank you for your comments!
Your words are really encouraging.

1 Like

I uploaded overview video!

Do you plan to provide playback code for developers to integrate their compositions into their games?

If so how much CPU is required for playback? Maybe it's too early to say?

1 Like

I've been continuing this project purely for "track-making" on Playdate, so I hadn't anticipated game developers incorporating the compositions made by Yacht for their games. However, I am interested in making that happen!

Playback essentially utilizes the playdate.sound API. Synthesis and Sample player too. The composed song data is exported (saved) as JSON, but it's not compatible with formats used in libraries like Pulp. Nevertheless, should be able to implement that playback engine it relatively easily.

In the early stages of the project, I created a "musical tick" using playdate.resetElapsedTime(), but it was unstable. So, I'm using the classic method of tempo management by watching dummy playdate.sound.sequence. However, playdate.sound still has its quirks, and I've noticed occasional tempo glitches, which is why I set the FPS to "0". This might not be ideal for most game developers!

do you have any ideas?

for reference song data in Lua

song = {
    name = "song1",
    bpm = 120.0,
    volume = 1.0,
    length = 32, -- song bars
    tracks = 4, -- tracks synth1,2,3+drums(4ch)
    struct = {
        -- song struct 
        { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
        { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
        { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
        { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },

    },
    synth1 = { -- synth track
        waveform = 1,
        volume = 1.0,
        pan = 0.0,
        attack = 0,
        decay = 0.1,
        sustain = 0,
        release = 0.0,
        pattern = {
            {
                length = 16,
                direction = 1,
                notes = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
                -- note numbers, 0: noteoff, 128: legato
            },
            -- ......
        },
    },
    drum1 = { -- drums track....
        bank = 1,
        type = 4,
        volume = 1,
        pan = 1.0,
        pattern = {
            {
                length = 16,
                direction = 1,
                notes = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
                -- boolean
            },
            -- ......
        },
    },

}

Synth and sample should be light enough. Frame rate or timing issue will take some consideration.

this app is going to be really, really good. I added some notes on the itch.io page about some possible control improvements. Nice work!

Thank you for your very meaningful comments!
your opinion is valid.
I think I'll try working on these!

I was worried about changing the name because I really liked it, but
We will consider changing this in the next major update.

Where can I try your app?

I've created an NES-like GUI, but maybe I need to implement a Macintosh/GameBoy-like experience.
Tabs and scrolls are the most appropriate approach.
This requires more pixels!
Currently the screen scale is set to x2, this is done to increase fps. . . . But now I know that doesn't make much sense, so maybe I need to make it more user friendly.

1 Like

I'm thinking of a way to combine Lua and C.
I have made an NES-spec LSFR/Wavetable synth using Arduino C++.
Someone said on the forum, "If you want to implement Wavetable with Pd, use C," but I don't really understand what that means...

I think @dave might have some ideas. I recall he said he had recently been looking into something related?

probably...

I think classic game creators or "sound developers" like us prefer to implement algorithms per sample rate rather than sampling (e.g. SoundFont).

Currently, the Lua API only allows access to static wavetables.
But in C, "playdate->sound->synth->setGenerator" exists.
I would like to combine my current code with this. but so hard to me😭

This one is more recent and is what I was referring to

This was his comment on my post!
Vector synthesis really excites me.
However, my current APP is just following their API, so I would like to add original synthesis.
If Music created with Yacht is ported to other games, this suggests the possibility that SFX can also be ported.

1 Like

next version plan (v0.2)

  • New transition system
  • x2 scale and light / dark mode
  • x2 icon fonts (And I have plans to release this for free)

2 Likes