From alsa-devel-owner@alsa.jcu.cz  Thu Jul  9 23:07:02 1998
Received: from obelix.fvdpol.inter.nl.net (frank@bd99-13.Breda.NL.net [193.79.246.238])
	by marvin.jcu.cz (8.8.8/8.8.8) with ESMTP id XAA32526
	for <alsa-devel@jcu.cz>; Thu, 9 Jul 1998 23:06:59 +0200
Received: (from frank@localhost) by obelix.fvdpol.inter.nl.net (8.8.7/8.7.3) id XAA08810 for alsa-devel@jcu.cz; Thu, 9 Jul 1998 23:06:52 +0200
From: Frank van de Pol <F.K.W.van.de.Pol@Inter.NL.net>
Message-Id: <199807092106.XAA08810@obelix.fvdpol.inter.nl.net>
Subject: ALSA Sequencer
To: alsa-devel@jcu.cz (alsa)
Date: Thu, 9 Jul 1998 23:06:51 +0200 (MET DST)
Content-Type: text
Reply-To: alsa-devel@alsa.jcu.cz
Sender: alsa-devel-owner@alsa.jcu.cz
Precedence: list


For those who are interested,

I've just uploaded a new snapshot of my prototype for the ALSA sequencer.
You can find it in the download section of my web page
(http://www.inter.nl.net/users/F.K.W.van.de.Pol/alsa/). Beware that this is
no distribution, but just a tar of my development directory. I'm using it
for playing MIDI files at *this* moment though.

Regards,
Frank.

Quote from the README:

              Advanced Linux Sound Architecture (ALSA) - Sequencer
              ====================================================
              http://www.inter.nl.net/users/F.K.W.van.de.Pol/alsa/

By Frank van de Pol, F.K.W.van.de.Pol@Inter.nl.net

ALSA Sequencer 
==============

This directory contains a prototype for the ALSA Sequencer. Beware that this
is *development* code. My motivation for writing this prototype is to get a
proof of concept and feasibility for this project. The eventually
(hopefully) working prototype can be used for discussing sequencer APIs.

Current status (last updated 9 Jul 1998):
=========================================

* Allows scheduling and routing of real-time events. No support for song
  timestamps and tempos yet. There is only one timing queue.

* Both user-land and kernel clients can connect, send events, receive events
  and communicate directly with the sequencer (ioctl()). Reads and writes
  for user-land clients can be batched, blocking io and select() is
  supported. Kernel clients can directly enqueue data to the priority queue
  and use a call-back for incoming data.

* A simple timer for the system clock (100Hz) is provided. The timer is
  started and stopped by sending SND_SEQ_EVENT_START and SND_SEQ_EVENT_STOP
  messages to the timer (client 0, port 0).

* Support for fixed length events and variable length events (used for
  system exclusive data)

* proc interface (/proc/sound/sndseq) to see what clients have registered.

* Included sample clients:

  - readtime    : display current sequencer time

  - usertest1   : decoding of received events to text

  - usertest2   : a simple user-land driver that plays received events to
                  the MIDI output port (/dev/sndmidi00). It uses Round-Robin
                  scheduling to get reasonable performance. Tested with a
                  Gravis Ultrasound MAX card and external Yamaha XG 
                  synthesizer.
                  It supports the following events:
                    - SND_SEQ_EVENT_NOTEON
                    - SND_SEQ_EVENT_NOTEOFF
                    - SND_SEQ_EVENT_PGMCHANGE
                    - SND_SEQ_EVENT_PITCHBEND
                    - SND_SEQ_EVENT_CONTROLLER
                    - SND_SEQ_EVENT_START       (send real-time start)
                    - SND_SEQ_EVENT_STOP        (send real-time stop)
                    - SND_SEQ_EVENT_CONTINUE    (send real-time continue)
                    - SND_SEQ_EVENT_SYSEX

  - playmidi    : a player for standard midi files (SMF). It is based on the
                  readmidi library, so only type 0 midi files are supported. 
                  Output is send to client 1 (hard coded), so either
                  usertest1 or usertest2 should be started first.

  - kernel-client1 
                : a test for the kernel API, just bounces events to next
                  client


Installation:
=============

- edit Makefile and let TOPDIR point to the source directory of the ALSA
  driver.
- Compile the sequencer and clients: 
     $ make
- make sure ALSA is loaded
- load the sequencer (as root)
     $ insmod snd-seq.o
- load the timer (as root)
     $ insmod snd-systimer.o

- run the clients
     start our synth driver:
     $ usertest2 (preferably as root)

     and in some other session start playback of a MIDI file (make sure your
     synth gear is switched on and the faders on your mixing desk are open..)
     $ cd playfile
     $ playfile pick_up_the_pieces.mid
 
- Have fun. 
     


End of Quote

+---- --- -- -  -   -    - 
|Frank van de Pol                  -o)
|F.K.W.van.de.Pol@inter.NL.net     /\\
|                                 _\_v
|Linux - Why use Windows, since there is a door?

