Overview
Data structures
emu8000_t
emu8000_voice_t
Soundfont structures
Patch loading
I also did not want to have to write a sfxload type
utility, so I decided to use the existing one and use exactly the
same scheme for loading patches.
The only difference that instead of using
/dev/sequencer
it uses
/proc/asound/0/patch0
(assuming AWE64 is card 0).
The sfxload program uses some ioctls which have to be removed.
The code for loading Soundfont patches is separated out into a separate module that could be shared by any driver that uses the soundfont2 format.
Synth
emu8000_synth.cProc filesystem support
emu8000_proc.c- patch0 This is used for loading patches and also, at present for some debugging and setup procedures.
- ram0 This is an image of the on board RAM. You can only read it at present. It is mainly for debugging, I don't expect this will be used as a way of loading patches!
- rom0 This is an image of the on board ROM samples. Again mainly for debugging, and because you can.
Sequencer linking
- A kernel sequencer client is created with ID 21.
- This subscribes to the mpu401 client already in the kernel.
- It should also allow user land clients to attach, so that midi files can be played.
This all needs improving.
Locking
Acknowledgements
Jaroslav Kysela wrote the ALSA core with Frank Van de Pol contributing the sequencer. I want to say what a great system this is, because everything just fell into place and worked almost first time.