📄 mixer.c
字号:
{ 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 + -