[BACK]Return to dev.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / sndiod

Diff for /src/usr.bin/sndiod/dev.c between version 1.69 and 1.70

version 1.69, 2020/04/16 12:23:53 version 1.70, 2020/04/16 12:26:55
Line 348 
Line 348 
 void  void
 dev_midi_master(struct dev *d)  dev_midi_master(struct dev *d)
 {  {
           struct ctl *c;
           unsigned int master, v;
         struct sysex x;          struct sysex x;
   
           if (d->master_enabled)
                   master = d->master;
           else {
                   master = 0;
                   for (c = d->ctl_list; c != NULL; c = c->next) {
                           if (c->type != CTL_NUM ||
                               strcmp(c->group, "") != 0 ||
                               strcmp(c->node0.name, "output") != 0 ||
                               strcmp(c->func, "level") != 0)
                                   continue;
                           v = (c->curval * 127 + c->maxval / 2) / c->maxval;
                           if (master < v)
                                   master = v;
                   }
           }
   
         memset(&x, 0, sizeof(struct sysex));          memset(&x, 0, sizeof(struct sysex));
         x.start = SYSEX_START;          x.start = SYSEX_START;
         x.type = SYSEX_TYPE_RT;          x.type = SYSEX_TYPE_RT;
Line 357 
Line 375 
         x.id0 = SYSEX_CONTROL;          x.id0 = SYSEX_CONTROL;
         x.id1 = SYSEX_MASTER;          x.id1 = SYSEX_MASTER;
         x.u.master.fine = 0;          x.u.master.fine = 0;
         x.u.master.coarse = d->master;          x.u.master.coarse = master;
         x.u.master.end = SYSEX_END;          x.u.master.end = SYSEX_END;
         midi_send(d->midi, (unsigned char *)&x, SYSEX_SIZE(master));          midi_send(d->midi, (unsigned char *)&x, SYSEX_SIZE(master));
 }  }
Line 441 
Line 459 
                 if (x->id0 == SYSEX_CONTROL && x->id1 == SYSEX_MASTER) {                  if (x->id0 == SYSEX_CONTROL && x->id1 == SYSEX_MASTER) {
                         if (len == SYSEX_SIZE(master)) {                          if (len == SYSEX_SIZE(master)) {
                                 dev_master(d, x->u.master.coarse);                                  dev_master(d, x->u.master.coarse);
                                 dev_onval(d, CTLADDR_MASTER,                                  if (d->master_enabled) {
                                     x->u.master.coarse);                                          dev_onval(d, CTLADDR_MASTER,
                                              x->u.master.coarse);
                                   }
                         }                          }
                         return;                          return;
                 }                  }
Line 654 
Line 674 
                 }                  }
                 if (weight > i->opt->maxweight)                  if (weight > i->opt->maxweight)
                         weight = i->opt->maxweight;                          weight = i->opt->maxweight;
                 i->mix.weight = ADATA_MUL(weight, MIDI_TO_ADATA(d->master));                  i->mix.weight = d->master_enabled ?
                       ADATA_MUL(weight, MIDI_TO_ADATA(d->master)) : weight;
 #ifdef DEBUG  #ifdef DEBUG
                 if (log_level >= 3) {                  if (log_level >= 3) {
                         slot_log(i);                          slot_log(i);
Line 945 
Line 966 
 void  void
 dev_master(struct dev *d, unsigned int master)  dev_master(struct dev *d, unsigned int master)
 {  {
           struct ctl *c;
           unsigned int v;
   
         if (log_level >= 2) {          if (log_level >= 2) {
                 dev_log(d);                  dev_log(d);
                 log_puts(": master volume set to ");                  log_puts(": master volume set to ");
                 log_putu(master);                  log_putu(master);
                 log_puts("\n");                  log_puts("\n");
         }          }
         d->master = master;          if (d->master_enabled) {
         if (d->mode & MODE_PLAY)                  d->master = master;
                 dev_mix_adjvol(d);                  if (d->mode & MODE_PLAY)
                           dev_mix_adjvol(d);
           } else {
                   for (c = d->ctl_list; c != NULL; c = c->next) {
                           if (c->type != CTL_NUM ||
                               strcmp(c->group, "") != 0 ||
                               strcmp(c->node0.name, "output") != 0 ||
                               strcmp(c->func, "level") != 0)
                                   continue;
                           v = (master * c->maxval + 64) / 127;
                           dev_setctl(d, c->addr, v);
                   }
           }
 }  }
   
 /*  /*
Line 1120 
Line 1156 
         int i;          int i;
         char name[CTL_NAMEMAX];          char name[CTL_NAMEMAX];
   
           d->master_enabled = 0;
         d->mode = d->reqmode;          d->mode = d->reqmode;
         d->round = d->reqround;          d->round = d->reqround;
         d->bufsz = d->reqbufsz;          d->bufsz = d->reqbufsz;
Line 1150 
Line 1187 
                     name, -1, "level",                      name, -1, "level",
                     NULL, -1, 127, d->slot[i].vol);                      NULL, -1, 127, d->slot[i].vol);
         }          }
         dev_addctl(d, "", CTL_NUM,  
             CTLADDR_MASTER, "output", -1, "level", NULL, -1, 127, d->master);  
   
         d->pstate = DEV_INIT;          d->pstate = DEV_INIT;
         return 1;          return 1;
Line 2343 
Line 2378 
 void  void
 dev_ctlsync(struct dev *d)  dev_ctlsync(struct dev *d)
 {  {
           struct ctl *c;
         struct ctlslot *s;          struct ctlslot *s;
         int i;          int found, i;
   
           found = 0;
           for (c = d->ctl_list; c != NULL; c = c->next) {
                   if (c->addr != CTLADDR_MASTER &&
                       c->type == CTL_NUM &&
                       strcmp(c->group, "") == 0 &&
                       strcmp(c->node0.name, "output") == 0 &&
                       strcmp(c->func, "level") == 0)
                           found = 1;
           }
   
           if (d->master_enabled && found) {
                   if (log_level >= 2) {
                           dev_log(d);
                           log_puts(": software master level control disabled\n");
                   }
                   d->master_enabled = 0;
                   dev_rmctl(d, CTLADDR_MASTER);
           } else if (!d->master_enabled && !found) {
                   if (log_level >= 2) {
                           dev_log(d);
                           log_puts(": software master level control enabled\n");
                   }
                   d->master_enabled = 1;
                   dev_addctl(d, "", CTL_NUM, CTLADDR_MASTER,
                       "output", -1, "level", NULL, -1, 127, d->master);
           }
   
         for (s = d->ctlslot, i = DEV_NCTLSLOT; i > 0; i--, s++) {          for (s = d->ctlslot, i = DEV_NCTLSLOT; i > 0; i--, s++) {
                 if (s->ops)                  if (s->ops)
                         s->ops->sync(s->arg);                          s->ops->sync(s->arg);
Line 2398 
Line 2461 
                 dev_ref(d);                  dev_ref(d);
         } else {          } else {
                 if (addr == CTLADDR_MASTER) {                  if (addr == CTLADDR_MASTER) {
                         dev_master(d, val);                          if (d->master_enabled) {
                         dev_midi_master(d);                                  dev_master(d, val);
                                   dev_midi_master(d);
                           }
                 } else {                  } else {
                         num = addr - CTLADDR_SLOT_LEVEL(0);                          num = addr - CTLADDR_SLOT_LEVEL(0);
                         slot_setvol(d->slot + num, val);                          slot_setvol(d->slot + num, val);

Legend:
Removed from v.1.69  
changed lines
  Added in v.1.70