⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mixer.c

📁 操作系统源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
               {                 device++;                 if (device == Mic && input_pos > 8) input_pos = 8;               }               else                {                  device = Cd;                  output_scr = 1;                  input_scr = 0;                  output_pos = 0;                }             }           }           else            {             if (device != Mic && device != Speaker)  right = 1;             else { device++; right = 0; }           }          };break;          case UP:           {           if (output_scr)            {             if (device > Cd) device--;             else              {               device = Mic;                output_scr = 0;               input_scr = 1;             }           }           else if (!right || input_scr)           {             if (input_scr)             {               if (device > Fm) device--;               else                {                 input_scr = 0;                 device = Bass;                 right = 1;               }             }             else              {               if (device > Master)                {                 device--;                          if (device != Mic && device != Speaker) right = 1;               }             }           }           else              right = 0;          };break;          case RIGHT:           {            if (output_scr)             {              if (output_pos < 8 && device != Mic) output_pos = 8;            }            else if (!input_scr)            {              if (device < Speaker) max_level = 31;              else if (device > Speaker) max_level = 15;              else max_level = 4;              if (!right)               {                if (levels[device].left < max_level) levels[device].left+=                  (device < Speaker ? 2 : 1);              }              else              {                if (levels[device].right < max_level) levels[device].right+=                  (device < Speaker ? 2 : 1);              }              ioctl(fd, MIXIOSETVOLUME, &levels[device]);               ioctl(fd, MIXIOGETVOLUME, &levels[device]);               create_slider(1 + (device < Treble ? 0 : 39),                             (device - (device < Treble ? 0 : Treble))*3 +                            (device != Speaker ? 2 : 1), device);            }            else            {              if ((device != Mic && input_pos < 12) ||                  (device == Mic && input_pos < 8))                input_pos += (4 + (device == Mic ? 4 : 0));            }          };break;          case LEFT:           {            if (output_scr)            {              if (output_pos > 0) output_pos = 0;            }            else if (!input_scr)            {              if (!right)              {                if (levels[device].left > 0) levels[device].left-=                  (device < Speaker ? 2 : 1);              }              else              {                if (levels[device].right > 0) levels[device].right-=                  (device < Speaker ? 2 : 1);              }              ioctl(fd, MIXIOSETVOLUME, &levels[device]);               ioctl(fd, MIXIOGETVOLUME, &levels[device]);               create_slider(1 + (device < Treble ? 0 : 39),                             (device - (device < Treble ? 0 : Treble))*3 +                            (device != Speaker ? 2 : 1), device);            }            else            {              if (input_pos > 0)                 input_pos -= (4 + (device == Mic ? 4 : 0));            }           };break;        }       };break;    case SPACE:      {        if (output_scr)        {          switch(output_pos)          {            case 0:            case 4:            {              outputs[device].left =                (outputs[device].left == ON ? OFF : ON);              ioctl(fd, MIXIOSETOUTPUT, &outputs[device]);            };break;            case 8:            {              outputs[device].right =                (outputs[device].right == ON ? OFF : ON);              ioctl(fd, MIXIOSETOUTPUT, &outputs[device]);            };break;          }          ioctl(fd, MIXIOGETOUTPUT, &outputs[device]);          show_outputs(41,16);        }        else if (input_scr)        {           switch(input_pos)          {            case 0:            {              inputs_left[device].left =                (inputs_left[device].left == ON ? OFF : ON);              ioctl(fd, MIXIOSETINPUTLEFT, &inputs_left[device]);            };break;            case 4:            {              inputs_left[device].right =                (inputs_left[device].right == ON ? OFF : ON);              ioctl(fd, MIXIOSETINPUTLEFT, &inputs_left[device]);            };break;            case 8:            {              inputs_right[device].left =                (inputs_right[device].left == ON ? OFF : ON);              ioctl(fd, MIXIOSETINPUTRIGHT, &inputs_right[device]);            };break;            case 12:            {              inputs_right[device].right =                (inputs_right[device].right == ON ? OFF : ON);              ioctl(fd, MIXIOSETINPUTRIGHT, &inputs_right[device]);            };break;          }          ioctl(fd, MIXIOGETINPUTLEFT, &inputs_left[device]);          ioctl(fd, MIXIOGETINPUTRIGHT, &inputs_right[device]);          show_inputs(41,8);        }      };break;      case 's':      {        if (write_settings())            mvwprintw(main_win,22,28, "mixer settings saved");        else          mvwprintw(main_win,22,28, "error: file not saved");        wrefresh(main_win);        sleep(1);        mvwprintw(main_win,22,28, "                           ");      };break;      case 'r':      {        if (read_settings())          mvwprintw(main_win,22,28, "mixer settings restored");        else          mvwprintw(main_win,22,28, "error: could not open");        wrefresh(main_win);        sleep(1);        setup_screen();      };break;      case 'e': terminate(1);    }  } }char *d_name(device, name)enum Device device;char *name;{  /* Convert the device number to a name */  switch (device)  {    case Master:	strncpy(name, "Master  \0", 9);break;    case Dac:		strncpy(name, "Dac     \0", 9);break;    case Fm:		strncpy(name, "Fm      \0", 9);break;    case Cd:		strncpy(name, "CD      \0", 9);break;    case Line:		strncpy(name, "Line    \0", 9);break;    case Mic:		strncpy(name, "Mic     \0", 9);break;    case Speaker:	strncpy(name, "Speaker \0", 9);break;    case Treble:	strncpy(name, "Treble  \0", 9);break;    case Bass:		strncpy(name, "Bass    \0", 9);break;  }  return name;}void create_slider(x, y, device)int x;int y;enum Device device;{  /* Create a slider on the screen */  int left;  int right;  int i;  mvwprintw(main_win,y,x, "%s", d_name(device, name));  left = levels[device].left / (device < Speaker ? 2 : 1);   right = levels[device].right / (device < Speaker ? 2 : 1);   for (i = 0; i < 16; i++)  {    if (device != Speaker || i < 4)      mvwprintw(main_win,y,x+i+8, (i == left ? "*" : "-"));    if (device < Mic || device > Speaker)       mvwprintw(main_win,y+1,x+i+8, (i == right ? "*" : "-"));  }  if (device < Mic || device > Speaker)  {    mvwprintw(main_win,y,x+i+10, "left");    mvwprintw(main_win,y+1,x+i+10, "right");  }  wrefresh(main_win);}   void show_inputs(x,y)int x;int y;{  /* Show the input settings */  int i;  mvwprintw(main_win,y,x,  "             Rec-In  ");  mvwprintw(main_win,y+1,x,"          left    right");  mvwprintw(main_win,y+2,x,"          l   r   l   r");  for (i = Fm; i <= Line; i++)  {    mvwprintw(main_win,y+i+1,x,  "%s  %d   %d   %d   %d",       d_name(i, (char *)name),      (inputs_left[i].left == ON ? 1 : 0),      (inputs_left[i].right == ON ? 1 : 0),      (inputs_right[i].left == ON ? 1 : 0),      (inputs_right[i].right == ON ? 1 : 0));  }  mvwprintw(main_win,y+i+1,x,  "%s    %d       %d",     d_name(Mic, (char *)name),    (inputs_left[Mic].left == ON ? 1 : 0),    (inputs_right[Mic].left == ON ? 1 : 0));  wrefresh(main_win);}void show_outputs(x,y)int x;int y;{  /* Show the output settings */  int i;  mvwprintw(main_win,y,x,      "            Mix-Out  ");  mvwprintw(main_win,y+1,x,    "          left    right");  for (i = Cd; i <= Line; i++)  {    mvwprintw(main_win,y+i-1,x,"%s    %d       %d",       d_name(i, (char *)name),      (outputs[i].left == ON ? 1 : 0),      (outputs[i].right == ON ? 1 : 0));  }  mvwprintw(main_win,y+i-1,x,"%s        %d",     d_name(Mic, (char *)name),    (outputs[Mic].left == ON ? 1 : 0));  wrefresh(main_win);}void setup_screen(){  int i;  wclear(main_win);  mvwprintw(main_win,0,23,"------- Mixer Controls -------");  wrefresh(main_win);   for(i = 0; i <= Speaker; i++)   create_slider(1, i*3+(i <= Mic ? 2 : 1), i);   create_slider(40, 2, Treble);   create_slider(40, 5, Bass);    show_inputs(41,8);   show_outputs(41,16);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -