Hi all,
I have done some modifications to the current v4.2 hg version.
MIDI
-------
First of all MIDI support is no enabled (by default). However it can be
disabled by using the --config-midi=NO parameter when running the
configure script. This means that the /dev/midi## devices are now
functional up to some degree. However everything is still undocumented
and some functionality is unimplemented.
There is no /dev/sequencer (/dev/music) interface/device any more.
Instead all /dev/midi## devices can be used in two modes. The first one
is the usual "raw" MIDI port mode that has been in OSS since year 0.
Bytes written to the device file will be sent out as quickly as
possible. All received bytes will be passed to the application. However
active sensing (0xfe) will be stripped.
The second mode is some kind of timed/cooked mode that can be turned on
by calling SNDCTL_MIDI_SETMODE. There are two variants that differ in
timing. In MIDI_MODE_TIMED all times are relative to the previous time
stamp written to the device. In MIDI_MODE_TIMED_ABS all times are
absolute (relative to the moment when the device was started).
In timed mode the applications write/read data organized in records.
Each record has a 32 byte header (midi_packet_header_t) that contains
everything timing related. Bytes contained in the payload will be
delayed until the right moment of time and sent to the device only after
that. Times can be in microseconds or in MIDI ticks.
Currently timing is based on the system timer but in the future devices
that have a hardware timer can be used instead. Each /dev/midi## device
uses it's private timer instance so each /dev/midi## device can be used
independently with different timing. In the future it will be possible
to slave several /dev/midi## devices with the same timer (for example a
sequencer program can support multiple MIDI devices in this way).
There are two known bugs related with MIDI. First of all some drivers
that use the uart401 MIDI driver may be unstable if they have not been
modified to use mutexes in proper way (most drivers have not been
fixed). The second problem is that (in timed mode) some MIDI bytes may
get lost which will cause hanging notes.
To play with MIDI you may compile the ossmplay utility
(tutorials/sndkit/ossmplay). It takes two command line arguments which
are the /dev/midi## device name and the MIDI file.
The oss_midiloop driver might be good tool for testing. You can use
ossmplay to play to the client side device and redirect the server side
device to a disk file (or to some software synth program).
Code optimizations
-------------------------
In addition to MIDI I have done some modifications to the code that
handles audio format/rate conversions. It's now faster than in earlier
version that performed the conversions with too short chunks (increased
call/setup overhead). In particular there is significant improvement
under Solaris because I added proper compiler flags for better code
optimization (this cause problems earlier and it's possible that the
optimized code crashes in some cases).
osspartysh
-------------
Final addition was an utility called osspartysh. It's kind of reverse
telnet program with stereoids. It doesn't actually belong to OSS but I
wanted to include it because it may appear to be useful. This program
can be used when some user wants to help some other user who has
problems with his OSS installation. It can also be used when two persons
want to hack on some part of OSS at the same time. See man osspartysh
for details. However in short the program can be used in the following way:
1) The person who gives support doesn't ask the "customer" to open ssh
access for root. Instead he launches the terminal side program in his
computer and opens the firewall/NAT settings if necessary. The terminal
side listens to a TCP port for the customer to call.
osspartysh -d -p <free TCP port number>
2) The customer doesn't need to anything. He just runs osspartysh in
shell mode (osspartysh -h<IP/name of the terminal host> -p<terminal
port>). After that osspartysh opens a TCP connection to the terminal
"server" and starts a bash shell.
3) After that both users will see the same shell prompt. They can both
type commands and they will see all the output. It is possible to run
commands like vi (there may be some hiccup).
At this moment osspartysh has only been tested under Linux. It may also
work under FreeBSD. It doesn't work under Solaris and SCO. I don't know
about Haiku.
Best regards,
Hannu
_______________________________________________
oss-devel mailing list
[email protected]
http://mailman.opensound.com/mailman/listinfo/oss-devel