AGI Sound Situation

sonneveld Heya,

I'm sure most of you guys aren't interested or are getting sick of all these sound threads.. but it's what I'm working on at the moment and I wanted some input.

What exactly is missing for AGI sound?  Here's a list of all the agi and related tools I could find looking at the Ultimate AGI/SCI site:

- AGI Play
- AGI to MIDI converter
- IT to AGI converter
- MIDI to ROL converter
- ROL to AGI converter
- Merge Sound
- Visual AGI (later version only works in win98+)

So using all these tools together, we've got:

- An AGI Sound player
- An interactive sound editor through midi, rol, IT editors and Visual AGI
- Ability to edit AGI in other games

So what's missing?  why do people have trouble adding sound to games?

Is it because:

- the fact that you can't play sounds in AGI Studio?  that you have to manually extract them and play them in another player?
- Sierra's games have too many sounds and it's hard to go through them all?
- there's no actual way of creating sounds with noise (except through extraction)?
- the original interpreter only plays on channel anyway?
- too many tools, makes it complicated?
- converted songs are too big?
- lack of interest?

I'd like to know.. I want to fix this problem.  I don't want people getting frustrated with AGI because of the difficulty of getting sounds into games.  If we get all the problems out on the table.. we could work out a solution together.. or at least map it out so somebody has all the information when they go ahead to write a tool.

- Nick
AGI1122 Making sounds is very hard. I tried all of these tools and most of them don't work well anyway. The only three I ever use is midi2rol, rol2snd, and visual AGI, and yet still I can't make any sounds. Another thing that sucks is it won't make noise channel sound either. The only real sounds I could ever make were made by converting midi's from sites I found.

Here is a few things that we need in a tool.

1. Easy to use interface.
2. Windows support since most people will be using AGI Studio which is in windows.
3. Ability to make noise channel sounds.

I will help in anyway possible.
sonneveld Well, for one thing, I think AGI Studio's integration of everything is a bad idea.  I think things like the editors and compilers should be separate programs.. like UNIX.. a small tool for everything.  That way people wouldn't feel so overwhelmed.. they could just make a small tool and add it to the collection.

Anyway.. so the tools don't work.. Do they almost work?  Have you had any success?  You've got some songs working in V as I understand it.  Is there source available?

---

I had an idea, but I'm still looking into how it would be implemented.  The way I'm thinking is something like this:

- a bunch of small tools
- an interactive editor gui thingy that uses these tools together

The tools you would need are:

- agi player
- midi, rol, it, whatever, converters
- compiler (from scripts)
- decompiler (to scripts for editing)

The way I see it, if it's all little pieces like this, it would make it easier to implement the whole thing.  People could work on whatever piece they wanted, without having to break something else.

Instead of starting out with an interactive editor.. I was thinking about implementing just a script compiler.  You could lay out your songs in a script and compile it into an agi sound later on.  That way you could copy/paste, add comments and edit with whatever editor you wanted.

There's a few music compilers out there, I've just discovered but the one which looks tidy and very simple is this language:

ABC
http://www.gre.ac.uk/~c.walshaw/abc/

scores are written as letters.  Instead of worrying about the length of each note, you just set a tempo at the start of the file:

M:6/8
K:D
dff cee|def gfe|dff cee|dfe dBA|dff cee|def gfe|faf gfe|1 dfe dBA:|2 dfe dcB||
~A3 B3|gfe fdB|AFA B2c|dfe dcB|~A3 ~B3|efe efg|faf gfe|1 dfe dcB:|2 dfe dBA||


We could use this language for defining the note channels, and then use a different syntax for the noise channels.  I thought a script that looked like this would be great, where the format for the tones/noises will go like this:
tone: freq/note, volume, duration
noise: type, freq/note, volume, duration

# the first channel.  the only channel heard on sierra's pc interpreter
tone
250, 5, 10
345, 3, 7
120, 1, 3

# freq counts or notes should be available
tone
M:6/8
dff cee|def gfe|dff cee

noise
# white noise going up in frequency
w, 0, 3, 4
w, 1, 3, 4
w, 2, 3, 4

# periodic noise getting quieter
p, 2, 3, 2
p, 2, 7, 2
p, 2, 14, 2



Anyway.. I really would like other people to comment.

- Nick
AGI1122 Wouldn't this be kind of hard for most people to understand this would still be hard to make sounds with.

As for the V sounds. I was only able to get about 1/10 of the midi's I tried to work with it. I got a few good songs but mostly could not get what I wanted. The converter complained about notes being to high or too low. It tried to shift them down a notch but still after that it would not accept it.

rol2snd has source included but the midi2rol does not. I also have the source for the sound players.
sonneveld Well, it'd be a start.. in the end you could have a special editor for all this.  Actually being able to fiddle around with sounds would be good.  At the very least, you could crop songs that were too long.

Have you tried any midi, rol, it editors?

- Nick
AGI1122 I have not tried a rol editor. I tried using a midi editor but could not get it to work. I have not tried using any other midi editor either.
sonneveld Have you tried impulse tracker?  That's similar to Visual AGI in operation but it works at least.  I believe Nat Budin used it to make music for the Operation: Recon game.  He made IT files and converted them to AGI.

If we can use an available frontend.. that would be great.

- Nick
AGI1122 No I never tried impulse tracker. I think I will have a look into that.
Joel I think making sounds is currently one of the most painful aspects of making an AGI game.

I personally think that the more integrated the development environment, the better. Having a bunch of separate utilities to do all this stuff is annoying. The process of creating an AGI sound goes something like this:

1. Get the notes into a midi editor (not fun) using musical notation (staff and notes, not pitch values and duration counts)
2. Convert the midi to an rol
3. Convert the rol to a snd (2 and 3 are steps that could at least easily be rolled into one -- I made a .bat file for this purpose)
4. Get the sound resource into the game
5. Run the game

What I would like to see is the elimination of steps 2-4 as something that I have to do manually. I want the steps to look more like this (similar to the steps for getting a View resource into the game):

1. Get the notes into a sound resource editor (preferably using musical notation)
2. Run the game

At the very least I would like to see this (similar to the steps for getting a Picture resource into the game):

1. Get the notes into a sound resource editor
2. Get the resource into the game
3. Run the game

The conversion is the worst part, I'd say. Another bad aspect of the current approach is that midi can do things that AGI sound resources cannot. That adds a level of difficulty that proobably doesn't need to be there.
sonneveld I know you don't want more steps.. but the plan I had was to make up little tools and then create some gui or something that wraps it all up.

.. ie press a button and it will convert midi to rol to agi.  if you want to edit it.. it will convert it to whatever format the editor uses and open the editor  if you want to play it, it calls the player.  If you want to replace the player.. just put in a different exe.. you don't have to change the gui.

- Nick
Joel What I'm saying is that I think an editor that creates sound resources directly rather than doing any conversion is best because that editor would know the limitations of AGI sound and could give the user feedback about those limitations while the user is editing the sound file. I think it is preferable if that editor is integrated with AGI Studio, because although I can tolerate the PicEdit way of doing things, it's still inconvenient.

Psychologically, I want to feel like I'm editing an AGI Sound Resource, not editing a midi file or whatever that's going to be conveted to an AGI Sound Resource. How exactly you do that doesn't really matter to me.
sonneveld I realise this, but what I was trying to point out was that there still isn't a proper agi sound editor around.. despite lots of people saying they'll make one.  I just wanted to create some handy tools that people could use to edit with a text editor or with the midi/rol/it editor and then wrap all these tools up around a gui.  

I agree though, an entirely integrated suite for agi would be terrific.. but i don't think it's going to happen unless we start small.

- Nick
sonneveld I just thought if we could make it easier to use other editors.. people would have something to use until a proper editor comes out (if ever)

- Nick
Joel I may have misunderstood what you were asking, then. I think making the existing tools easier to use until a proper editor comes out could be a good idea, but I don't know how you might do that without going to (almost) as much trouble as it might be to write your own sound editor, because the major problem with doing AGI sounds right now is the very fact of having to do conversions after editing the files in a midi (or whatever) editor. It's also not easy to test them. A GUI wrapper that automates the steps could probably help that, though.
Nailhead I love the idea of having lots of little apps wrapped into a GUI. Much like the way AGI Studio adds a button to access PICEdit. Perhaps this would just be a toolbar that accesses lots of AGI utiltites and is interchangable and configurable according to your AGI working preferences. If we had one universal application that incorporates every aspect of AGI programming then we would need to pass the code over to whoever wants to write a utility so that he/she could add it. We would have to pass the code aound so much that we would surely have 2 or more conflicting builds at any given time without strict 'check out' rules. Another problem is that everyone would be confined to the same programming language (and hardly any of your are using pascal so that rules me out).

The audio scripting examples above is perfect! It seems like such a great idea in the sense that it would be easy to create a GUI with many different methods of outputting the code; a staff, a piano roll, or what have you. So the programming side would be easy (compiling the code is another story) and for the end user of the code would be incredibly easy to copy/paste into the Logics.

I admire your enthusiasm in organizing this AGI Sound march, Nick!
Joel This issue was of concern to us when that group of us got together a couple years ago to think about doing a new AGI Studio in C++. Obviously, the project never went anywhere, but one of the possibilities we had discussed was having a simple main application and have all the tools such as logic editor/compiler, picture editor, etc. in DLL files so that they would be interchangeable without anyone needing access to the source code for the main environment. Obviously, that adds some difficulty in developing tools since they have to be written as DLLs instead of simple applications, but it is a solution.
sonneveld I think Nailhead gets the right idea.. DLL's are nice but you'd use a different interface if you wanted to port it over to Linux or any other operating system.  I thought we could use pipes to send it from program to program.  But that's just an idea.

I think.. just like people making games, they're getting overwhelmed with all the bits 'n pieces you have to code.. so if you can break it up into little managable pieces.. it would be great.

There was this interview i read a while ago, I wish i could find the link, but basically, the guy was trying to say that you should never rewrite code.  A lot of people, with the post-story comments were ridiculing this idea but I think his idea is very intellient.

When he says rewrite, he means start from scratch and not use your original code.  He believes that if you want to majorly change the design of the code, you should do it in small bites, just enough to slowly get to your new design.. but it should always compile and still work.  That's the idea here..  We should keep the AGI Studio code, and just code in support for these little programs.

The core of my agi2scr and scr2agi are working.. I just need to code in something to read parameters (hardcoded filenames atm).  Using these tools you can decompile agi sounds to a textfile, edit the file and then compile it back up.

I tried larry's theme, decompiling and recompiling and they were an exact match.

So hopefully, if you want to write a converter, just write it to the sound script format and then use the compiler to write up an agi file.  That way you don't have to worry about registers, splitting freq_counts and stuff like that.

I'll set up a website soon with the code.

- Nick
sonneveld ok, found a link to that interview..  And a couple of articles he wrote on rewriting software

http://www.softwaremarketsolution.com/SMS%20Articles/An_Interview_with_Joel_Spolsky.htm
http://www.joelonsoftware.com/articles/fog0000000069.html
http://www.joelonsoftware.com/articles/fog0000000348.html

- Nick
Joakim

Have you tried impulse tracker?
sonneveld I didn't mean any offense.  I just meant that one game had successfully used written music using IT.

The more sound tools the better really.

- Nick
sonneveld Joel is working on a staff editor but there would be applications for either type of editor.  If we can get some editors/tools out along with a tutorial or two, it could solve the problem of having all these people ask how to add sound.

- Nick