Jump to content
IGNORED

Need help with my music player code


Recommended Posts

14 minutes ago, Synthpopalooza said:

Distortion settings on the 2nd silent channel do not affect the sound on the first channel, only the frequency settings. 

Thanks! Is that also the case if you reverse the silent/non-silent channels? My question is, which distortion is dominant in 16-bit mode and does it matter which one is silent?

 

And what about high pass filtering where channel 1 and 3 (or 2 and 4) use different distortions? Does that matter?

 

Looking forward to your pokey test program :)

 

Link to comment
Share on other sites

In either combination of 16-bit mode, the distortion of the channel being played takes precedence, and is modified by the frequency setting of the other channel.

 

In hi-pass and two-tone mode, this is also true, however there are possibilities where the normally silent channel can be played to add to the waveform.  In these cases, the distortion setting of the silent channel usually has to match that of the other channel for the modulation to work.

 

The one exception so far to this, is $4x @1.79/64khz in two tone mode.  Because the silent 2nd channel actually takes its carrier frequency values from the standard $Cx 64khz 8-bit table, if you want to play that channel atop the $4x channel, you must play it in $Cx

 

Clocks are another issue.  In 16-bit mode, 1.79 mhz will affect both channels, so there are only three clock settings.  In two-tone and hi-pass, the 1.79 clock is applied on top of the base 64 or 15khz clock, making for 4 possible combinations.  In hi-pass, 1.79 can be applied on either channel, making for 7 possible combinations when doing hi pass on the 0 and 3 channels.

 

Two tone also does not work in tandem with 16-bit.  In hi-pass plus two tone, only the 0 and 2 settings are of use, unless you are also playing the 1 channel atop the 0, in which case the 1+3 modulation can be added.  In $Ax this is easy to implement as I have those modes mostly already documented. 

Link to comment
Share on other sites

So, the best way of proceeding, is documenting the basic filtered modes (16-bit, Reverse 16, two-tone, hi-pass), before applying the hi-pass to either of these.  I have already managed to eliminate some combinations already ... e.g.  Reverse 16 will only work with $2x and $4x in 1.79mhz mode, and I believe the same applies to $8x or $0x plus poly9.  In $Cx Reverse 16, we can also ignore the 15khz clock as well, I think, leaving 64 and 1.79 as the valid settings.

Edited by Synthpopalooza
  • Thanks 1
Link to comment
Share on other sites

Another thing I might do is provide my tables for the $4x and $8x poly9 Reverse 16-bit settings to have you check them for accuracy.  Basically these settings make warbling guitar sounds, with an adjustable vibrato controlled from the second frequency channel.  There are several ratios between AUDF1 and AUDF2 which make these,  but I calculated the optimum settings that make the greatest note range.

 

I will also provide the $4x 1.79 two-tone mode settings I got so far.  I was able to deduce a pattern, so we basically have the default $Cx 64khz scale in 2nd channel, and the modulations are done in the first channel based on either mod 3, mod 5, or non mod.  With mod 5, it's basically a fuzz box distorted $Cx standard bass scale.

Link to comment
Share on other sites

OK, this is a quick and dirty program.

 

Line 21 is where the settings are set.  This one has Reverse 16 $4x @1.79 mhz.  Change this to whatever you need.

 

The arrows step through the settings, while plus and minus will step through the standard $Ax square table for comparison.  Space bar will switch to 15 khz mode to test bass frequencies.  I used a multiplier of 1.016 to correct for 15 khz mode.

 

 

FREQTEST.TUR

  • Thanks 1
Link to comment
Share on other sites

Another thing I will do is run through a preliminary list of all the as-yet unmapped settings in reverse 16-bit,  2-tone, and hi-pass to determine which ones will be suitable for music, then write these ones down.  This will at least give us a good starting point.

 

Once these are finished, then we go to adding hi-pass to these settings.  

Link to comment
Share on other sites

The other caution:

 

There are some settings in the $2x (mod 32 I think) or $Cx/$4x (mod 5), and maybe even in the $0x/$8x plus poly9,  where such frequencies will intermittently generate a tone or silence depending on polycounter settings.  Any automated program for dumping tones to .wav will need to take this into account.

Link to comment
Share on other sites

Oh and one more note on the reverse 4x RMT table:

 

c1 (126,212,50)

Means that AUDF0=126, AUDF1=212 and can be varied by +/- 50 to introduce a warbling vibrato effect.  This method also works on the $8x plus poly9 reverse 16 table.   The higher up the note scale you go, the smaller this range gets, until you get to 0 ... then the steady tones drop out, then notes get dropped from the scale and tuning errors abound.

Link to comment
Share on other sites

So, a short list of the modes that need documenting... omitting the ones that I believe do not produce usable musical tones:

 

Reverse 16-bit:

 

$0x plus poly9 @1.79mhz (?)

$2x @1.79 mhz

$2x @64 khz (?)

$4x @1.79 mhz (documented)

$8x plus poly9 @1.79 mhz (documented)

$Ax @64khz (documented)

$Ax @1.79 mhz

$Ax @15 khz (?)

 

Two-tone:

 

$0x plus poly9 @1.79 mhz (?)

$2x @64khz

$2x@64khz + 1.79 mhz

$4x @64khz + 1.79 mhz (partially documented)

$4x @64khz (?)

$4x @15.khz + 1.79 mhz

$8x plus poly9 @64 khz + 1.79 mhz

$Ax @64khz (documented)

$Ax @15khz (documented)

$Ax @64khz + 1.79 mhz (documented)

$Ax @15khz + 1.79 mhz

$Cx @64khz

$Cx @64khz + 1.79 mhz

$Cx @15khz + 1.79 mhz (?)

$Cx @15khz (?)

 

Hi-pass ... most of these are "?"

 

$0x plus poly9... 64+64, 64+1.79, 1.79+64, 1.79+1.79 (?)

$2x 64+64, 64+1.79, 1.79+64

$2x 1.79+1.79 (partially documented)

$4x 1.79+1.79 

$4x 64+1.79, 1.79+64 (?)

$8x plus poly9 all settings except 15khz (?)

$Ax 64+64 (documented)

$Ax 15+15 (documented)

$Ax 1.79+1.79, 1.79+64, 64+1.79, 1.79+15, 15×1.79

$Cx all settings not using 15 khz

 

"?" indicates the setting needs to be tested to see if usable music tones exist.

 

In addition, $8x and $0x using poly17 should be investigated for useful percussive sounds.  I found some interesting ones using the two-tone mode in $8x poly17

 

  • Like 1
Link to comment
Share on other sites

Your Turbo Basic program was a little too spartan for my taste, so I started out writing my own tool anyway :) Here's a screenshot of its GUI.

 

atari000.png.67cd6cf582c695fa868d3ac3531a0a95.png

 

Keys F and G toggle the filters ("gilter")

 

Keys J and K toggle channel join ("koin")

 

Keys 1, 2, 3, 4, 5, 6, 7, 8 increase pokey register values

Keys Q, W, E, R, T, Y, U, I decrease pokey register values

 

Hold shift to increase/decrease by $10

 

P, C, A, D control the remaining AUDCTL bits

M toggles two-tone mode

 

S will sweep one of the 8-bit values from $00 to $FF(settable start/end/step/pause time)

Z will zweep one the 16-bit pairs from $00 to $FFFF (settable start/end/step/pause time)

 

Record WAV with emulator :)

 

The GUI is fully functional, i.e. elements can be turned on/off. Now I need to connect that to routines that handle the key presses and act accordingly. But first I have to see the final of the Tour de France time trial! :)

 

Edit: and hold control to match AUDF frequencies to the nearest $Ax. Further idea is to add a second pokey, but for now this should suffice.

 

Edit2: the CTRL bit for $Ax is not going to work with K: handler, but I'll figure out another way to incorparate a tuning table... stay... tuned ;)

 

Edited by ivop
  • Like 4
  • Thanks 1
Link to comment
Share on other sites

Cool!  :)

 

I would probably institute the standard 16-bit $Ax table as a reference, since it's better tuned.  Can't wait to play with it!

 

Also, you could put in a polycounter reset for those settings that make intermittent silence like the $Cx and $2x settings.

Edited by Synthpopalooza
Link to comment
Share on other sites

1 hour ago, Synthpopalooza said:

How does this FFT stuff work? :)

https://en.wikipedia.org/wiki/Fast_Fourier_transform

http://www.fftw.org/

 

In a nutshell, you sample a "window" of a certain number of audio samples. You run a matrix transformation on that array of samples, and end up with a bunch of "frequency bins" of varying intensity. You can then determine the dominant frequency.

 

 

 

  • Like 1
Link to comment
Share on other sites

17 hours ago, Synthpopalooza said:

What is a good software for Windows that can do this?

I have no idea. I'm not a Windows person. And as for FFT/DFT, I know the theory, somewhat, but have never used it in practice. My idea is to write a simple unix style filter app with the fftw library, where you can do

 

fftwapplication <pokey.wav >frequencies.csv

 

Not sure if I'll continue Pokey Explorer tonight. I'm knackered after kayaking this afternoon ;)

 

Link to comment
Share on other sites

Couldn't help it. Here's an updated version. All visible UI items (inverse video keys) are functional now. No sweeps yet, but I hid that line ;)

 

https://github.com/ivop/pokey-explorer

 

edit: remember, holding shift with 1-8/Q-I increases/decreases by $10 (16). So many weird sounds to be found. Perhaps I should add a random button :)

Edited by ivop
Link to comment
Share on other sites

9 minutes ago, Synthpopalooza said:

So a question:  Will we be able to do 16-bit sweeps on the hi pass channels (0+2, 1+3) as well as the 16-bit and 2-tone channels?

Yes, the idea is that 16-bit "Z"weeps can be done on any combination of channels.

 

Attached is the latest version of "pokey explorer". Downloading the xex from github is not reliable.

 

Would be nice if it could be tested on real hardware. I have not been able to do that, because my SIO2PC PC's monitor died recently. And so did my card reader a while ago. Can't put files on my SIDE2 CF card.

 

pokeyexp.xex

Link to comment
Share on other sites

On 9/21/2020 at 12:33 AM, Synthpopalooza said:

I may get a chance to tonight.  Fingers crossed

Hmmm. I developed this with atari800. Not tested with Altirra or real hardware. Yesterday I finally upgraded from debian 9 (stretch) to debian 10 (buster). A lot of grief (lost network, lost graphics, etc...) but all fixed and in the end I'm satisfied with my new setup. Now I ran pokeyexp.xex with wine on Altirra (installed the latest version 3.90) and it does not register any key presses. I have no idea why.

 

To any of the 7 downloaders, does it work on Altirra on Windows and/or does it work on real hardware?

 

It's pretty weird. I use a few CIO macros ported over from the ATMAS-II library. Used it for midimon. It's basically OPEN #1,4,0,"K:" and then Get each character one by one. It works on atari800. So am I doing something wrong or is it just my b0rked wine Altirra?

Edited by ivop
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...