driechers 2025-01-01 22:14:18 +00:00 zatwierdzone przez GitHub
commit a9b94c8b92
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
1 zmienionych plików z 42 dodań i 12 usunięć

Wyświetl plik

@ -8,7 +8,7 @@
<?php <?php
// Get all the available controls // Get all the available controls
$output = shell_exec("sudo amixer scontrols"); $output = shell_exec("sudo amixer -M scontrols");
preg_match_all('/\'.*\'/', $output, $scontrols); preg_match_all('/\'.*\'/', $output, $scontrols);
// Handle POST // Handle POST
@ -20,15 +20,19 @@ if (isset($_POST["audio"])) {
$phpname = str_replace(" ", "_", $name); $phpname = str_replace(" ", "_", $name);
$plevel = $_POST["pl$phpname"]; $plevel = $_POST["pl$phpname"];
$clevel = $_POST["cl$phpname"]; $clevel = $_POST["cl$phpname"];
$eselect = $_POST["e$phpname"];
$mute = 'mute'; $mute = 'mute';
$cap = 'nocap'; $cap = 'nocap';
if($_POST["ps$phpname"] == 'on') if($_POST["ps$phpname"] == 'on')
$mute = 'unmute'; $mute = 'unmute';
if($_POST["cs$phpname"] == 'on') if($_POST["cs$phpname"] == 'on')
$cap = 'cap'; $cap = 'cap';
shell_exec("sudo amixer set $scontrol $mute playback $plevel% capture $clevel% $cap"); if($eselect)
shell_exec("sudo amixer -M set $scontrol $eselect");
else
shell_exec("sudo amixer -M set $scontrol $mute playback $plevel% capture $clevel% $cap");
} }
} }
} }
@ -42,7 +46,7 @@ foreach ($scontrols[0] as $scontrol) {
$name = substr($scontrol, 1, -1); $name = substr($scontrol, 1, -1);
// Get the current control settings and capabilties // Get the current control settings and capabilties
$output = shell_exec("sudo amixer get $scontrol"); $output = shell_exec("sudo amixer -M get $scontrol");
$checked = 0; $checked = 0;
foreach(preg_split("/((\r?\n)|(\r\n?))/", $output) as $line) { foreach(preg_split("/((\r?\n)|(\r\n?))/", $output) as $line) {
@ -51,8 +55,6 @@ foreach ($scontrols[0] as $scontrol) {
} }
if (preg_match_all('/Capabilities:.*pvolume/', $output)) { if (preg_match_all('/Capabilities:.*pvolume/', $output)) {
//$level = $level_match[1];
// Grab the first level. Not supporting stereo. // Grab the first level. Not supporting stereo.
preg_match_all('/Playback [0-9]+ \[([0-9]+)%\]/', $output, $levels); preg_match_all('/Playback [0-9]+ \[([0-9]+)%\]/', $output, $levels);
$level = $levels[1][0]; $level = $levels[1][0];
@ -67,6 +69,8 @@ foreach ($scontrols[0] as $scontrol) {
echo " checked"; echo " checked";
echo "></td>"; echo "></td>";
} }
else
echo "<td></td>";
echo "</tr>"; echo "</tr>";
} }
elseif (preg_match_all('/Capabilities:.*pswitch/', $output)) { elseif (preg_match_all('/Capabilities:.*pswitch/', $output)) {
@ -79,6 +83,25 @@ foreach ($scontrols[0] as $scontrol) {
echo "></td>"; echo "></td>";
echo "</tr>"; echo "</tr>";
} }
elseif (preg_match_all('/Capabilities:.*enum/', $output)) {
preg_match_all('/Items: (.*)/', $output, $sitems);
$items = preg_split("/('[^']*')|\h+/", $sitems[1][0], -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
preg_match_all('/Item0: (.*)/', $output, $mitem0);
$item0 = $mitem0[1][0];
echo "<tr>";
echo "<td>$name</td><td></td><td></td>";
echo "<td><select name='e$name'>";
foreach($items as $item) {
$itemname = substr($item, 1, -1);
echo '<option value="'.$item.'"';
if($item0 == $item)
echo 'selected';
echo '>'.$itemname.'</option>';
}
echo "</select></td>";
echo "</tr>";
}
} }
// Create the Capture sliders // Create the Capture sliders
@ -88,7 +111,7 @@ foreach ($scontrols[0] as $scontrol) {
$name = substr($scontrol, 1, -1); $name = substr($scontrol, 1, -1);
// Get the current control settings and capabilties // Get the current control settings and capabilties
$output = shell_exec("sudo amixer get $scontrol"); $output = shell_exec("sudo amixer -M get $scontrol");
$checked = 0; $checked = 0;
foreach(preg_split("/((\r?\n)|(\r\n?))/", $output) as $line) { foreach(preg_split("/((\r?\n)|(\r\n?))/", $output) as $line) {
@ -96,12 +119,17 @@ foreach ($scontrols[0] as $scontrol) {
$checked = 1; $checked = 1;
} }
if (preg_match_all('/Capabilities:.*cvolume/', $output)) { if (preg_match_all('/Capabilities:.*[c ]volume/', $output)) {
//$level = $level_match[1]; $level = 0;
// Grab the first level. Not supporting stereo. // Grab the first level. Not supporting stereo.
preg_match_all('/Capture [0-9]+ \[([0-9]+)%\]/', $output, $levels); if(preg_match_all('/Capture [0-9]+ \[([0-9]+)%\]/', $output, $levels))
$level = $levels[1][0]; $level = $levels[1][0];
else {
// Handle generic volume control as capture device
preg_match_all('/ [0-9]+ \[([0-9]+)%\]/', $output, $levels);
$level = $levels[1][0];
}
echo "<tr>"; echo "<tr>";
echo "<td>$name</td>"; echo "<td>$name</td>";
@ -113,10 +141,12 @@ foreach ($scontrols[0] as $scontrol) {
echo " checked"; echo " checked";
echo "></td>"; echo "></td>";
} }
else
echo "<td></td>";
echo "</tr>"; echo "</tr>";
} }
elseif (preg_match_all('/Capabilities:.*cswitch/', $output)) { elseif (preg_match_all('/Capabilities:.*cswitch/', $output)) {
$checked = preg_match_all('/Playback.*\[on\]/', $output); $checked = preg_match_all('/Capture.*\[on\]/', $output);
echo "<tr>"; echo "<tr>";
echo "<td>$name</td><td></td><td></td>"; echo "<td>$name</td><td></td><td></td>";
echo "<td><input type='checkbox' name='cs$name'"; echo "<td><input type='checkbox' name='cs$name'";