Month ago I received my Playdate!
After two days I started to tinker with SDK and finally started working on project I wanted to make for this device.
Playnoise Tracker is tracker (duh) music software for your Playdate.
It allows you to write songs using Playdate internal synths.
Currently it's in really early stage but it has basic workflow implemented.
Only 1 pattern
64 steps per pattern
You can edit only note and octave (velocity in the future, maybe some FX?)
No way to edit track settings => every track defaults to sine wave (I didn't implement UI yet)
No way to rename song (auto save is working, enabled by default)
D-pad moves cursor around windows, each A press goes one level down, B goes one level up.
Each window has a bit different layout that can be navigated using D-pad.
Crank can be used to move playhead, each time it encounters notes it will preview them.
Some windows are not working (yet) but most important do. In the middle you can see two tracks side by side and edit notes in Track edit section.
In top-right corner you can find BPM setting of your song (120 by default).
Invert colors - set light or dark theme
Crank speed - crank can be used for song preview
Cursor speed - changes how quickly notes change when you hold up or down button
Autosave - if true then song will be autosaved on quit
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!
Ugh, it would be way easier to debug if I had Mac
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 Playnoise.pdx.zip (56.2 KB)
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.
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.
Get yourself nice 5*8 pixels font, this one hurts my eyes. I can draw you one if you want.
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.
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.
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?
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.
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.
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
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!
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.
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)
I didn't utilize whole screen yet so I don't feel like I need to save space, I will check them if needed
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.
Totally, it was just easier to expose BPM, currently it should be 16 rows per second with 120 BPM.
That's a nice idea, before I was thinking only about demo songs with interactive tutorials (pop-ups).
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 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.