Jump to content
Avram

question about Bill Williams' audio

Recommended Posts

Posted (edited)

I've been recommending Atari games to a friend and I started reminiscing about Bill William's games (if you've not seen his work, Alley Cat and Necromancer are unbelievably good. There's also this great article: Stanley Kubrick Is Gone - Electron Dance). My question is this - did Bill Williams use digitized sound in Salmon Run and Alley Cat? Or was it just excellent use of POKEY?

Edited by Avram
changed a hyphen to a colon

Share this post


Link to post
Share on other sites

Alley Cat uses digital sound for sure.

Salmon Run - I don't think so (not sure I've ever played it but I checked a video and it seems mostly a couple of voices playing semi-random high pitched pure notes)

  • Like 1

Share this post


Link to post
Share on other sites

Bill Williams was just that good! He knew how to use POKEY better than nearly everyone.

  • Like 2

Share this post


Link to post
Share on other sites
Posted (edited)
48 minutes ago, Mrshoujo said:

Bill Williams was just that good! He knew how to use POKEY better than nearly everyone.

That funky music on the second level of Necromancer is jaw-droppingly great. The man was a genius.

Edited by firebottle
the game name
  • Like 1

Share this post


Link to post
Share on other sites

Thanks, Rybags - I had a feeling that was the case so thank you for confirming it. And yes, firebottle and Mrshoujo, Bill Williams was so good at what he did. 

Share this post


Link to post
Share on other sites
5 hours ago, lbaeza said:

Avram, I have put together this site

 

https://sites.google.com/site/billwilliamsatarisounds/

 

It's an online version of Bill William's "Atari Sounds" column, as published by Softside magazine.

 

I think it's worth reading in order to understand how Bill created those amazing sounds.

 

Regards,

Luis.

I did not know anyone was discussing (using) PWM back in 1982.  Impressive stuff.

  • Like 1

Share this post


Link to post
Share on other sites

Whoa.... that last article had some serious typos and the formatting was completely out of whack. Here's a cleaned up version that at least compiles (in good old 68000 here: https://tinyurl.com/y6mlvbt6):

 

/*Music In C
by Bill Williams
If the name of this file is CMUS.C,
your linking file (CMUS.LNK)
should look like this:

cmus
aio
graphics
dbc.obj
*/
#define PARMS 12
#define RAND 0xD20A
#define TRUE 1
#define SKCTL 0xD20F
#define SSKCTL 0x232
#define AUDCTL 0x0208

char d[PARMS]; /* dice */
char f[PARMS]; /* pinking filters */
char fn[10];   /* freq/note table */
char vol[4];   /* volume counts */
char note[4];  /* voice’s note */

main()
{
    int i, voice, tempo, x, y;
    /* Initialize Pokey for sound */
    poke(SSKCTL, 3);
    poke(SKCTL, 3);
    poke(AUDCTL, 0);
    /* Initialize pink numbers */
    for (i = 0; i <= PARMS; ++ i) {
        d[i] = peek(RAND);
        f[i] = peek(RAND);
    }
    /* Set up note table.
    Current candidate notes
    make up a two-octave pentatonic
    scale.
    */
    strcpy(fn, "!%*29DLUfr");
    for(voice = 0; voice < 4; ++ voice)
        note[voice] = fn[rnd(10)];
    /* Set up graphics */
    graphics(24);
    color(1);
    setcolor(1, 8, 0);
    setcolor(2, 8, 12);
    /* Play Music */
    while (TRUE) {
        for (voice = 0; voice < 4; ++ voice)
            play(voice);
        for (tempo = voss(9, 6); tempo > 0; -- tempo);
        if (!rnd(8)) {
            plot(x = voss(10, 2), y = voss(11, 3));
            drawto(191, peek(RAND)&0xC0);
            drawto(319-(x / 2), y);
        }
    }
}
play(v)
char v; /* voice index */
{
    /* if volume is not 0, play voice
    and decrement volume. Otherwise,
    pick a new starting volume and a new note.
    */
    if (vol[v])
        sound(v, note[v], 10, vol[v]--);
    else {
        vol[v] = 3 + voss(v, 31);
        note[v] = fn[voss(v + 4.28)];
    }
}
/* Voss' 1/f noise algorithm */
voss(p,r)
char p; /* parameter number */
char r; /* range (divisor) */
{
    return((d[p]  = (peek(RAND)& + + f[p])) / r);
}

Not sure about that strcpy() being correct, but the only way to ensure that it is correct is to check against the original article.

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites
Posted (edited)
5 hours ago, DjayBee said:

Your code looks right.

 

This screenshot was taken from https://archive.org/details/Softline_Magazine_Issue_3.2:

grafik.png.217aab3b90a20eb9132aed084da6c74e.png

Cool, thanks for checking.

 

[EDIT] Just realised after looking at the article (which I didn't do beforehand because I didn't know where to look) that the source actually has $( and $) instead of { and }. After a quick search I found that the former notation was used in BCPL (https://sigkill.dk/writings/braces.html). So in the above post you can simply search for { and replace with $(  (and $) with }) to get closer to the original listing. TIL!

Edited by ggn

Share this post


Link to post
Share on other sites

Always loved Bill Williams - the water and the kiss in Salmon Run impressed me, but the cat and dog sounds in Alley Cat were over the top.  I assumed the grunting people noise was a digitized sound, but the other stuff seemed to be generated...not sure.  Cool nonetheless, he's a legend to me!!

 

  • Like 1

Share this post


Link to post
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...