PT-1210 equivalent for the C64 ?!
category: code [glöplog]
Hi there,
I'm still wondering why there's no equivalent on C64 like PT-1210 on Amiga or STj on Atari ST (maybe it exist, but where please ?). SID is so nice to listen & mix, party dancers love it, and the HVSC is soooo full of pure bombs...
So strange that no-one made a tool for that...
Got absolutly no ASM or code notions, and no idea how the .sid files could be complex, wild, and different (must change from tracker to tracker I guess).
So it might came from a "technical" reason ?! Is it ? Any idea ?
Thanks...
I'm still wondering why there's no equivalent on C64 like PT-1210 on Amiga or STj on Atari ST (maybe it exist, but where please ?). SID is so nice to listen & mix, party dancers love it, and the HVSC is soooo full of pure bombs...
So strange that no-one made a tool for that...
Got absolutly no ASM or code notions, and no idea how the .sid files could be complex, wild, and different (must change from tracker to tracker I guess).
So it might came from a "technical" reason ?! Is it ? Any idea ?
Thanks...
Not sure what you mean, but.. Patchwork v1.0 by 4mat
The biggest issue of all is format, no not 4mat,but the music file format. PT 1210 uses protracker, a single standard format for all of its tunes. The replayer is inside the software so can be controlled and manipulated. With sid files, the replayer code is part of the file and wildly different in almost every file. This means adding control hooks would need to be done sid by sid.
The good news is kabuto mocked up a proof on concept by running a basic music routine via a cia interrupt with keyboard adjusting control and it sounded like it would work really well.
The good news is kabuto mocked up a proof on concept by running a basic music routine via a cia interrupt with keyboard adjusting control and it sounded like it would work really well.
I "think" if it was possible in some way to record the output values of a SID file and convert them into a standard playback format, you'd be well onto a winner.
I'd also like to add, we would be WELL up for doing a version for the C64.
I'd also like to add, we would be WELL up for doing a version for the C64.
You can record the output as a .wav file and .. :D
Quote:
You can record the output as a .wav file and ..
.. play it back using some sort of modern C64, perhaps built around an ARM-based soc encased in a retrotard-pleasing chunk of plastic made to look like the original.
Patchwork is recording the output sid values into a large buffer, the problem is I can only fit about 25 seconds in unpacked. (so it can seek and play in any direction fast)
You'd need to convert the whole HVSC into an intermediate SID events format (SID-MiDi? ;) and then do the software on top, because SID files are individual programs, with wildly different player code and data storage etc. (as explained above)
and then try and fit all that data in 64k with a UI? unlikely isn't it.
oh, I thought we are talking cross-platform. REU perhaps?
probably not as that woulkd drastically reduce the number of systems which could actually use the software. as it stands ( at least in our current development version ) PT-1210 runs on every single Amiga and we'd want the same for the C64 if we did it.
Quote:
I "think" if it was possible in some way to record the output values of a SID file and convert them into a standard playback format, you'd be well onto a winner.
I actually did this. It's part of the SoLoud audio engine distribution. Offline, you run a modified c64 emulator which records all writes to SID registers into a compact format, and then for playback you just adjust SID registers based on the recorded timestamps.
The resulting files are HUGE. Even when normalized to single change per register per video frame.
The format I use is:
[8 bit: register][8bit: value]
[16 bit: 15 bits of ticks of delay before next reg write, high bit always on]
If the high bit of the input is on, it means we're reading a delay, otherwise it's a reg write. Depending on quantization there may be any number of reg writes in a row.. if delay between two reg writes is over 32k ticks, NOP writes are stored. I guess this could be made more efficient with encoding for longer pauses, but it's unlikely that a song has long delays with no reg writes.
I'm aware this is not the most compact format possible, as the register count is fairly low and not all 256 values are legal for all of the registers.. (and the result can be run through zlib or whatever), but still, we're talking several megabyte files here. (and even when compressed, several hundred k).
Using more granular quantization will shrink the file size (as delays between reg writes go away and some writes possibly get clobbered) but will inevitably wreck timing and thus break the songs.
To make things even worse, automatic conversion from HVSC isn't even possible because sid files being code, there's no automatic way to figure out when a song ends. If it does.
[8 bit: register][8bit: value]
[16 bit: 15 bits of ticks of delay before next reg write, high bit always on]
If the high bit of the input is on, it means we're reading a delay, otherwise it's a reg write. Depending on quantization there may be any number of reg writes in a row.. if delay between two reg writes is over 32k ticks, NOP writes are stored. I guess this could be made more efficient with encoding for longer pauses, but it's unlikely that a song has long delays with no reg writes.
I'm aware this is not the most compact format possible, as the register count is fairly low and not all 256 values are legal for all of the registers.. (and the result can be run through zlib or whatever), but still, we're talking several megabyte files here. (and even when compressed, several hundred k).
Using more granular quantization will shrink the file size (as delays between reg writes go away and some writes possibly get clobbered) but will inevitably wreck timing and thus break the songs.
To make things even worse, automatic conversion from HVSC isn't even possible because sid files being code, there's no automatic way to figure out when a song ends. If it does.
Thanks for all those explanations...
And i'm glad to see that other peepz seemed interrested for such a tool, coz till now i've never heard/read someone about that.
So, technically it seem really really complex to have it on a c64...
Mmmmm... Sidplay (1 & 2) seem able to replay most of the .sid files even if they came from various musicians/editor/codes. But Sidplay is on huge fat PC and it's not real SID but emulation... But... It could be kinda "not so bad" :)
If I remember good when i use to have windows, the v1 of Sidplay allowed me to mute/unmute the channels (dunno why it desappeared on v2), and there was also a kind of "speed selector" (like x1, x2, ... not so precise but...).
I don't remember it was ok to have differente players launched at the same time (on linux my sidplay without ui does it).
So let's say "it just missing" :
- a better speed control,
- a loop pattern tool,
- a way to put 2 sidplay "decks" into a UI with dualsoundcard managing like they did on Mixxx,
And we got it :) ? [or maybe not... still got no idea of the possible or not coz coding is very blur for me]
Mah... Who could be interrested of spending hours of code for such a toy ? Nobody I guess... People will answer me "convert your .sid into .mp3 with sidplay and have fun with Mixxx". Maaaaah, that's not the same :)
Sidplay is HardSID compatible, so it might could work with it... Or not... But maybe it's possible to "build" a special interface with 2 SID chips for this special PC programm, who knows :)
And i'm glad to see that other peepz seemed interrested for such a tool, coz till now i've never heard/read someone about that.
So, technically it seem really really complex to have it on a c64...
Mmmmm... Sidplay (1 & 2) seem able to replay most of the .sid files even if they came from various musicians/editor/codes. But Sidplay is on huge fat PC and it's not real SID but emulation... But... It could be kinda "not so bad" :)
If I remember good when i use to have windows, the v1 of Sidplay allowed me to mute/unmute the channels (dunno why it desappeared on v2), and there was also a kind of "speed selector" (like x1, x2, ... not so precise but...).
I don't remember it was ok to have differente players launched at the same time (on linux my sidplay without ui does it).
So let's say "it just missing" :
- a better speed control,
- a loop pattern tool,
- a way to put 2 sidplay "decks" into a UI with dualsoundcard managing like they did on Mixxx,
And we got it :) ? [or maybe not... still got no idea of the possible or not coz coding is very blur for me]
Mah... Who could be interrested of spending hours of code for such a toy ? Nobody I guess... People will answer me "convert your .sid into .mp3 with sidplay and have fun with Mixxx". Maaaaah, that's not the same :)
Sidplay is HardSID compatible, so it might could work with it... Or not... But maybe it's possible to "build" a special interface with 2 SID chips for this special PC programm, who knows :)
Outside of Patchwork I was working on a real-time sid mixer with beat matching. (quick video here But as you say, it's mostly hours of UI work, which isn't a very attractive job. All the channels and filters are bussed so you can plug into multiple sids and I was writing a bunch of FX for the outboard side. (some of which ended up in Patchwork like the pitch shifter)
@4mat : Nice !!! So, maybe one day, who knows, you'll find the motivation to finish it and release it ? :)
@sol_hsa you can parse _some_ song length data from the file C64Music/DOCUMENTS/Songlengths.txt included with HVSC. And that's the best there's available currently!
4mat shown some prototypes on his twitter some month ago, and now Tero released this : https://csdb.dk/release/index.php?id=201357 ... Yeehaaa ! Thanks so much guys <3 <3 <3 !
Heh. Lucky I had missed 4-mat's efforts -- I probably would not have even started. Or if someone asked to do PT1210 for C64, I would have answered (like so many above) that there are too many technicalities that it's not exactly possible. It was only because someone asked for something reasonably simple (a SID player that could mute channels) that I even got started.
https://www.pouet.net/prod.php?which=88206
The first public mix is already up, proving that it is very crashy indeed, but not completely impossible: https://www.twitch.tv/videos/948455087
https://www.pouet.net/prod.php?which=88206
The first public mix is already up, proving that it is very crashy indeed, but not completely impossible: https://www.twitch.tv/videos/948455087
Quote:
It was only because someone asked for something reasonably simple (a SID player that could mute channels) that I even got started.
Funny, that's almost exactly how PT-1210 came to be :) It started with Akira asking if you could re-pitch samples while changing BPM and here we are now.
Haven't had a chance to try it out yet but hats off to you good sir, this is exactly what we need. We had even considered taking a look at doing this for the C64 but it seems you're off to a flying start.
Really interested in how it works in terms of the Sid Data Dump etc.
Would obviously like to help out where possible, not sure how we get hold of you though? I'm on twitter but we also have a PT-1210 discord server.
This is what you want: https://csdb.dk/release/?id=201357