Playnoise Tracker

Interesting, it works fine on Windows!
It may be a bug in Simulator on Mac I believe?
I had Lua initialized before but it's disabled for now.
main.lua file is still in Source directory so project is still compiled as C+Lua project but Lua part is unused really.
Can you delete main.pdz file from Playnoise.pdx directory and check if it helped?
If yes it may be interesting bug to report to Panic team!

Hey, thanks for the update, it's very useful! I will use checkbox/checked box for sure, arrows and A-B buttons will help when (if?) I implement some kind of manual/tutorial!

No; that doesn’t quite do it — it’s still looking for that file. The new error is:

Couldn't find pdz file main.pdz

Hey, can you check that one? I totally removed any Lua reference.
Playnoise.pdx.zip (34.3 KB)

:frowning:

No luck. Same error:

Couldn't find pdz file main.pdz

That's weird because that file is not generated when project is in plain C...
I don't know how Simulator on Mac works and can't test that unfortunately :confused:

Here is another version, with main.pdz. I hope Lua is not initialized because you will get crash every time you will use Menu Item, I described it in this thread: Using MenuItem added with C crashes if Lua runtime is enabled

Playnoise.pdx.zip (55.6 KB)

So, this one does work but just launches into a blank screen.

Guessing that it’s just going into the Lua runtime / loop or whatever, and there’s nothing there since this is supposed to be a C-based project?

Ugh, it would be way easier to debug if I had Mac :smiley:
I guess yes, it's using lua update even if I'm setting C update with pd->system->setUpdateCallback...
Here is another version, inside Lua I'm calling C update (playnoise.update) but keep in mind that for 99% it will crash if you use one of custom side menu buttons :frowning:
Playnoise.pdx.zip (56.2 KB)

Didn’t try this one yet, but have been wondering: are simulator builds even cross platform?

I know for sim builds on macOS it generates dylibs and other platform-specific stuff, and I hadn’t had luck sending my sim builds to Win/Linux users either.

:thinking:

Oh indeed, you are right! I forgot that Simulator doesn't load Playdate binary, it needs it compiled as library (dll/dylib/so). I guess we are out of luck then :confused:

loaded into my playdate and had a little mess about seems like a pretty cool start.. I use M8 tracker (small portable tracker, similar to LSDJ) as my main tracker for music making, and have some thoughts on how a tracker could control on playdate if you are interested.

That's sounds interesting, go ahead!

The basic idea would be the crank would be the main input but you would hold or A or B as a modifier. No button pressed crank will move you up or down steps, Hold A on a step and move the crank to change a note, Hold B and crank to make an area selection and select multiple notes in a sequence, double press B to Cut (this can double as a method of deleting), double press A to paste the last cut selection (generally you would cut and then paste something in the same place and then move to where you want to paste). Use Dpad to navigate, but you could also apply the same crank type navigation if you want more options with in a track, like left, right, or down might let you select filter, bitcush, fx send and crank the amount of each parameter but hold up and crank to move to different tracks or fx page.

This is very nice project and who I am to judge, I don't even have the console, but... I made a tracker in even worse conditions regarding screen resolution so I have a tiny bit of knowledge (?) Anyway, feel free to ignore my grumbling.

  1. Get yourself nice 5*8 pixels font, this one hurts my eyes. I can draw you one if you want.

  2. When drawing pattern editor, don't draw the cells for each pattern row, just make a 1 px verticsl spacing. Vertical lines between channels are ok btw. This would allow to place more rows on the screen at the same time which makes using the tracker much easier.

  3. Use 3*5 px tiny font for the places where you want to save even more screen space. I have an almost finished one, only numbers and uppercase letters though. You can check u8g2 library fonts, there should be some suitable ones for any pixel dimensions.

  4. I don't know what are the <0>... things on the left in note editor, but they also seem to waste some space. These are pattern selectors?

  5. BPM number is misleading for hardcore tracker enjoyers, you may place speed (how many ticks per pattern row) and rate (how many ticks per second, idk if in your tracker you can change this parameter) settings. You can still leave BPM counter but only as an informational one.

  6. Make a bottom line where one long line of text would be. Print some tips and hints there depending on where the user's "cursor" is. This would help newbies to get used to your tracker.

  7. Is this me or your tracker runs in halve the resolution? It's your business of course but you could place a lot more on the screen if in full resolution. Maybe a switch in settings so people with good vision could use the full screen resolution?

Okay that's all... And hey, I wanted to be the first for the tracker, but you were faster! Anyway, good luck, looks like my tracker isn't really possible on Playdate because there is no way to directly control the hardware, I am afraid :slight_smile:

In general idea sounds good, it would greatly utilize main feature of the console.

Unfortunately for me basing whole input on crank is no-go. Problem is the lack of tactile feedback from crank, it's harder to memorize and repeat common actions (note input, changing tracks etc) with this kind of input. Button press is tactile and you know it was pressed because you can feel it. When you turn the crank you can't really tell if it was enough degrees for note change or not.

I will consider some parts of your ideas tho, like setting parameters (fx send, filter, envelope) with a crank!

1 Like

Hey!

I will go through each point:

  1. I picked that font because it's monospace and looks nicely (for me)! It really helped me with development and I have no plans to change it right now.

  2. I'm not quite sure what you mean by "just make 1px vertical spacing" but I don't think that would be give me enough space to have 16 rows per screen. Currently it divides nicely to 8 rows, while 16 would be ideal it's not really possible right now (because point 7)

  3. I didn't utilize whole screen yet so I don't feel like I need to save space, I will check them if needed :slight_smile:

  4. Yeah, it's not working yet but <0>, <1>, ..., are for switching patterns. 16 patterns per track should be enough based on my experience with hardware grooveboxes.

  5. Totally, it was just easier to expose BPM, currently it should be 16 rows per second with 120 BPM.

  6. That's a nice idea, before I was thinking only about demo songs with interactive tutorials (pop-ups).

  7. In the beginning I was using full resolution but I checked my program only in the simulator. After few days I checked it on device and decided to use half-res because everything was so unreadable. I may add resolution scaling in the future, that would require a bit of changes to how I'm creating windows and tables tho, but definitely doable.

You can still make it, it's not a race :smiley: development on this one will be really slow, it's just side project. I didn't really touch Playdate's sound API that much so it's hard to tell what's possible and what's not. First I will focus on synthesizers they (Panic!) provide and then I will think about other types of synthesis.

Well, for second point... See how e.g. klystrack displays patterns.

  1. Flizzer tracker has tiny interface too which did not stop some people, looks like somebody is actually using it! So-so...

Regarding the built-in synth: it's just too limited. If I hear the triangle wave correctly it is also bitcrushed to some point which annoys me, the SID enjoyer. Also no filters, ringmod or hardsync. No 4-op FM with different operators' waveforms. No pitchable samples with optional at least linear interpolation.

What is actually stopping me is the lack of console and, more importantly, the lack of hardware control. I don't like high-level stuff in this area because every CPU cycle matters and using some "standard" functions does not let you be as flexible as I want. After all, why I have read the chunks of MCU reference manual, just for fun? :slight_smile:

Hmm.. yeah I see your point, from my experience with LSDJ and M8 it can be hard to imagine as good a workflow with just a dpad and A / B. A few more quick button based modifiers would go a long way. But I suppose there are other ways, looking forward to how you progress.

I might also throw my hat into the tracker pool once I finish up my game, probably some PCM based thing.. perhaps I will be able to work out how to make the crank feel tactile, with visuals or something.

I'm not sure if I remember docs correctly but there is an option to provide custom waveform generator to Playdate synth. That way you could make basically any type of synthesis. Also there are various filters according to API. I believe Playdate wasn't designed with ultra-low level access to hardware, hence Lua API and Pulp editor. Playdate doesn't have dedicated sound chip, everything sound related is handled by its arm cpu. It's just not the device you are looking for :wink:

It surely is. I LOVED torturing Flipper Zero. I want access to audio buffers directly to make more efficient synth, because anything made through libraries wastes some CPU cycles, this is a tradeoff for easier SDK usage. I also hope I can overclock Playdate a bit, since by reference manual it can run at 216 MHz and iirc Playdate runs at 180?? So I would crank up (no pun intended) frequency at launch of my app and lower it to default value at app exit. There maybe are some other fun things to do, like maybe accessing USB port pins directly, maybe it would allow to output image through VGA in real time (racing the beam)? Ok I am carried away. I just don't like "standard" things because every damn time they limit me in a way I don't want to be limited.