Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/midiplay if just parsing don't try to read the unini...



details:   https://anonhg.NetBSD.org/src/rev/427ad5355bf5
branches:  trunk
changeset: 832198:427ad5355bf5
user:      mrg <mrg%NetBSD.org@localhost>
date:      Thu May 03 01:12:57 2018 +0000

description:
if just parsing don't try to read the uninitialised device name,
or display the unit number.

add a "-s" option that sends an ALL_SOUNDS_OFF midi event.  very
useful after an interrupted midiplay leaves notes on.

diffstat:

 usr.bin/midiplay/midiplay.1 |  16 ++++++++++++++--
 usr.bin/midiplay/midiplay.c |  32 +++++++++++++++++++++++++-------
 2 files changed, 39 insertions(+), 9 deletions(-)

diffs (143 lines):

diff -r 32af636d20d9 -r 427ad5355bf5 usr.bin/midiplay/midiplay.1
--- a/usr.bin/midiplay/midiplay.1       Thu May 03 01:12:26 2018 +0000
+++ b/usr.bin/midiplay/midiplay.1       Thu May 03 01:12:57 2018 +0000
@@ -1,4 +1,5 @@
-.\" $NetBSD: midiplay.1,v 1.19 2010/01/16 08:50:29 mbalmer Exp $
+.\" $NetBSD: midiplay.1,v 1.20 2018/05/03 01:12:57 mrg Exp $
+.\"
 .\" Copyright (c) 1998 The NetBSD Foundation, Inc.
 .\" All rights reserved.
 .\"
@@ -25,7 +26,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd January 16, 2010
+.Dd May 2, 2018
 .Dt MIDIPLAY 1
 .Os
 .Sh NAME
@@ -39,6 +40,7 @@
 .Op Fl m
 .Op Fl p Ar pgm
 .Op Fl q
+.Op Fl s
 .Op Fl t Ar tempo
 .Op Fl v
 .Op Fl x
@@ -86,6 +88,11 @@
 selectively map channels or instruments.
 .It Fl q
 specifies that the MIDI file should not be played, just parsed.
+.It Fl s
+send an
+.Dq ALL SOUNDS OFF
+MIDI event.
+Useful if an interrupted MIDI file left notes playing.
 .It Fl t Ar tempo-adjust
 specifies an adjustment (in percent) to the tempi recorded in the file.
 The default of 100 plays as specified in the file, 50 halves every tempo,
@@ -123,3 +130,8 @@
 .Nm
 is interrupted, as the data already buffered in the sequencer will contain
 timing events.
+Use
+.Nm
+with the
+.Fl s
+option to silence any sounds left after an interrupted call.
diff -r 32af636d20d9 -r 427ad5355bf5 usr.bin/midiplay/midiplay.c
--- a/usr.bin/midiplay/midiplay.c       Thu May 03 01:12:26 2018 +0000
+++ b/usr.bin/midiplay/midiplay.c       Thu May 03 01:12:57 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: midiplay.c,v 1.30 2015/03/22 22:47:43 mrg Exp $        */
+/*     $NetBSD: midiplay.c,v 1.31 2018/05/03 01:12:57 mrg Exp $        */
 
 /*
  * Copyright (c) 1998, 2002 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: midiplay.c,v 1.30 2015/03/22 22:47:43 mrg Exp $");
+__RCSID("$NetBSD: midiplay.c,v 1.31 2018/05/03 01:12:57 mrg Exp $");
 #endif
 
 
@@ -128,6 +128,13 @@
 #undef E
 #undef F
 
+static u_char silence_sample[] = {
+       'M', 'T', 'h', 'd',  0, 0, 0, 6,  0, 1,  0, 1,  0, 8,
+       'M', 'T', 'r', 'k',  0, 0, 0, 8,
+       0, 0xb0, 0x78, 0x00, 
+       0, 0xff, 0x2f, 0
+};
+
 #define MARK_HEADER "MThd"
 #define MARK_TRACK "MTrk"
 #define MARK_LEN 4
@@ -149,7 +156,7 @@
 usage(void)
 {
        fprintf(stderr, "usage: %s [-d unit] [-f file] [-l] [-m] [-p pgm] [-q] "
-              "[-t %%tempo] [-v] [-x] [file ...]\n",
+              "[-t %%tempo] [-v] [-x] [-s] [file ...]\n",
                getprogname());
        exit(1);
 }
@@ -408,9 +415,12 @@
                err(1, "ioctl(SEQUENCER_INFO) failed");
 
        end = buf + tot;
-       if (verbose)
-               printf("Playing %s (%d bytes) on %s (unit %d)... \n",
-                   name, tot, info.name, info.device);
+       if (verbose) {
+               printf("Playing %s (%d bytes)", name, tot);
+               if (play)
+                       printf(" on %s (unit %d)...", info.name, info.device);
+               puts("\n");
+       }
 
        if (tot < MARK_LEN + 4) {
                warnx("Not a MIDI file, too short");
@@ -716,6 +726,7 @@
        int ch;
        int listdevs = 0;
        int example = 0;
+       int silence = 0;
        int nmidi;
        const char *file = DEVMUSIC;
        const char *sunit;
@@ -725,7 +736,7 @@
        if ((sunit = getenv("MIDIUNIT")))
                unit = parse_unit(sunit);
 
-       while ((ch = getopt(argc, argv, "?d:f:lmp:qt:vx")) != -1) {
+       while ((ch = getopt(argc, argv, "?d:f:lmp:qst:vx")) != -1) {
                switch(ch) {
                case 'd':
                        unit = parse_unit(optarg);
@@ -745,6 +756,9 @@
                case 'q':
                        play = 0;
                        break;
+               case 's':
+                       silence++;
+                       break;
                case 't':
                        ttempo = atoi(optarg);
                        break;
@@ -785,6 +799,10 @@
        if (example)
                while (example--)
                        playdata(sample, sizeof sample, "<Gubben Noa>");
+       else if (silence)
+               while (silence--)
+                       playdata(silence_sample, sizeof silence_sample,
+                                "<Silence>");
        else if (argc == 0)
                playfile(stdin, "<stdin>");
        else



Home | Main Index | Thread Index | Old Index