Re: [LAU] Command-line midi player with fast forward, pause, rewind?

From: Alexandre Ratchov <alex@email-addr-hidden>
Date: Mon Sep 07 2009 - 13:59:07 EEST

On Mon, Sep 07, 2009 at 01:57:57AM -0700, Ken Restivo wrote:
> On Fri, Aug 28, 2009 at 03:11:52PM +0200, Alexandre Ratchov wrote:
> > On Thu, Aug 27, 2009 at 11:06:51PM -0700, Ken Restivo wrote:
> > > I'd love to find a command-line MIDI file player that will
> > > use ALSA MIDI (not its own internal synth), and also will
> > > accept arrow keys or some other key commands on stdin to
> > > fastforward, rewind, pause, play, etc.
> > >
> >
> > recent midish versions can almost do that, but not with the
> > arrow keys, unfortunately. It's controlled from stdin,
> > supports start/stop and relocate (for rewind/fastforward).
> >
> > ex:
> >
> > dnew 0 "28:0" wo # use 28:0 port for output
> > import "myfile.mid" # import file to play
> > p # play
> > s # stop
> > g 17 # go to measure #17
> >
> > when you change the position, it restores the states of all
> > controllers and handles the note-off events of skipped
> > notes.
> >
>
> Thanks, I've build the latest version, and used it a bit
> so far, and I like it a lot, it does indeed do pretty much
> what I want.
>
> It looks like it could also do a lot of useful stuff, but
> I find it bewildering and the documentation not quite
> complete.
>

You mean the ``manual.html'' file ?

> A few questions, if I may?
>
> 1) How do you get it to pause? Not stop, which is "s", and
> then it resets the position back to zero, but just
> momentarily pause and keep the position at wherever it is
> at?
>

there's no pause function yet; i guess because nobody needed
this until now.

AFAICS the code to pause would be the same as the code to
stop, except that it must not restore the initial position.

> 2) How can I route output to a different channel when I'm
> *playing* a MIDI file? I found documentation on how to
> route and filter when recording, but I need to do the
> filtering/routing at playback time.
>

there are two options:

 - edit the file to change the channel of the events;
   possibly you can save the file, or apply the change
   to only a portion of the file. Ex.

        ct mytrack # set current track
        g 17 # go to measure #17
        sel 16 # select 16 measures
        tevmap {any piano} {any organ} # map piano->organ

   assuming ``piano'' and ``organ'' are channel names registered
   with ``onew'' function (you can use dev/chan numbers instead,
   though; ex ``{0 1}'' instead of ``piano'')

 - use two midish processes, one to play the file
   and one to handle the routing only, handly to experiment
   in realtime or to use other midi software.

> 3) Is there any rudimentary editing capability? i.e., cut
> the file keeping only events from range X-Y and J-K?
>

yes, example:

        ct mytrack # select track ``mytrack''
        g 17 # goto measure #17
        sel 16 # select 16 measures
        ev {note {} 60..72} # select notes 60..72
        tclr # delete them

the following functions might be useful for editting, you
could look at their description in the manual: g, sel, setq,
ev, tcopy, tpaste, tclr, tcut, tins, tquant, ttransp,
tevmap, tren, mcut, mins, mdup, mend, t, ls.

-- Alexandre
_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@email-addr-hidden
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-user
Received on Mon Sep 7 16:15:01 2009

This archive was generated by hypermail 2.1.8 : Mon Sep 07 2009 - 16:15:01 EEST