[Tool]Pokitto Music Tracker

I’m added save song function. Rboy tracker loads song but also popup error message. I don’t know why.

Good job @NullMember

The UI runs on hardware. Going to start looking at the fileIO and check how that works.

Edit: and ofcourse adding sound.

3 Likes

Some dummy bugs fixed :smile: today i start working to import synth library to tracker.

Edit: what is the Note Number (Internal Reference) in rboy tracker? I think it’s midi number of note but it’s half note different from midi note numbers.

1 Like

How hard would it be to give pokkito functions like those teenage engineering pocket operators but with your own samples?

I’m not used pocket operator before but I like TE’s products. Today and next three day is feast of Ramadan. I’m visiting my relatives and friends. After that I can check what we can :slight_smile:

1 Like

@nullmember I have not forgotten you! I will get back to this Tracker project soon. I’ll try to release new stuff on github later today

@jonne I like to hear this. I know you have too many job. Don’t push yourself :slight_smile:

Cool, Have a good feast!

1 Like

Thank you very much :slight_smile:

1 Like

Hey, if I remember correctly you were using Linux. Sound works in Linux now, you can continue work on the tracker.

Start by looking at the setOSC() command in the POKITTO_LIBS/Synth directory. That is the low-level call to the 3 oscillators.

It’s awesome. I’m not using Linux at this time but i have linux skills :smile:. I’m still thinking about your question at Music Format topic. Maybe we can use wavetables like pico-8 or tic-80. tic-80 have 16 wavetable and each wavetable 32 byte. So it takes maximum 512bytes. What you think about that?

I’ve just resurrected the rboy tracker. This is a project I made originally for Gamebuino but was halted because the Gamebuino didn’t have enough memory to do the playback.

I will start meshing the rbtracker code with your (@NullMember) project. I hope to have something to show in not too distant future.

I will also update and release the rbtracker so we have at least one compatible tracker to use on a PC.

2 Likes

Cool :slight_smile:

Some feedback on the UI: selecting waveform /arpeggio mode makes screen blank

also: please make a playNote method in your Tracker class. This is called when you are changing pitch/instrument to give sound feedback to user how the note sounds. And put calls for that method in your UI. we can then hook that up to the synth & use same call in playback

edit; in rbtracker, the playNote method looks like this:

void rbtrackerFrame::playNote(uint8_t notenum)
{
uint8_t tracknum = Grid->GetCursorColumn();
if (tracknum == 0){
setOSC(&osc1,1,Wave->GetSelection(),Loop->IsChecked(), Echo->IsChecked(), ADSR->IsChecked(),
notenum,InstVol->GetValue(), Attack->GetValue(), Decay->GetValue(), Sustain->GetValue()<<8,
Release->GetValue(), MaxBend->GetValue(), BendRate->GetValue(), ArpMode->GetSelection(), Overdrive->GetValue(), Kick->GetValue());
} else if (tracknum == 1){
setOSC(&osc2,1,Wave->GetSelection(),Loop->IsChecked(), Echo->IsChecked(), ADSR->IsChecked(),
notenum,InstVol->GetValue(), Attack->GetValue(), Decay->GetValue(), Sustain->GetValue()<<8,
Release->GetValue(), MaxBend->GetValue(), BendRate->GetValue(), ArpMode->GetSelection(), Overdrive->GetValue(), Kick->GetValue());
} else {
setOSC(&osc3,1,Wave->GetSelection(),Loop->IsChecked(), Echo->IsChecked(), ADSR->IsChecked(),
notenum,InstVol->GetValue(), Attack->GetValue(), Decay->GetValue(), Sustain->GetValue()<<8,
Release->GetValue(), MaxBend->GetValue(), BendRate->GetValue(), ArpMode->GetSelection(), Overdrive->GetValue(), Kick->GetValue());
}
}

I’m thinking to add playnote for a while. And I know this bug and I already fix it. But maybe I’m not updated GitHub repo :smile:. Tomorrow I look at these things. Do you have any suggestions other than these?

Well, since you have built the UI, I think it would be best if you add the audio methods as “empty stubs” in the places where you thing sound output should begin.

What I mean is that you declare:

void Tracker::playPattern()
void Tracker::playSong()
void Tracker::pause();
void Tracker::playNote()

In this style. Then It is easy for me to work with you and we can “fill in the missing bits” together

The way that it works in rbtracker is simple: there are 3 channels and 3 oscillators. When the playback starts, the sound callback function begins reading the “blocks” inside the pattern. When it encounters a note, it calls setOSC with the details of the note and the instrument. osc1 is for channel 1, osc2 is for channel 2 and osc3 is for channel 3

In any case, the right way to do this is:

  1. get playNote (play individual note) function working
  2. get playPattern (read through pattern) function working
  3. combine playPattern to playNote (so now it reads and plays)
  4. get playSong (play through all patterns) to work

and thats it. Its not a huge amount of work.

Note about selecting waveform/arpeggio mode bug: I looked it and i already fixed and updated. Problem is Core::menu function. On the old versions of Pokitto Simulator they works

I will take a look at the core::menu later today

Edit: it works… ? I know it looks different now, but thats because I am planning to make it better anyhow.

BTW, added direct to gif output to sim just now (not updated in repo yet)

1 Like

I wrote the file I/O for this last night.

There is something still wrong with the code that turns the pitches to note values

Basically this means that same tracker song can be edited both on PC and on Pokitto

4 Likes

Note values fixed, play mode is running (no sound yet)

5 Likes