- Вопрос или проблема
- 1. Откройте alsamixer
- 2. Выберите вашу звуковую карту
- 3. Активируйте ‘Capture’ для ‘Line In’ и ‘External Mic’
- 4. Настройте PCM Capture Source
- 5. Запишите WAV файл, чтобы протестировать микрофон
- 6. Воспроизведите WAV файл
- 7. Сделайте изменения постоянными (не удалось)
- Создайте скрипт для настройки микрофона
- Сделайте его исполняемым
- Добавьте правило udev для автоматического выполнения при подключении USB
- Создайте программу для сброса USB-устройства
- Скомпилируйте скрипт и переместите его в правильное место
- Добавьте скрипт в sudoers
- Создайте скрипт сброса
- Создайте автозапуск для скрипта сброса
- Перезагрузите, чтобы проверить, работает ли это
- Устранение неполадок
- Ответ или решение
- Шаг 1: Установите необходимые инструменты
- Шаг 2: Запустите alsamixer
- Шаг 3: Выбор звуковой карты
- Шаг 4: Активация входов
- Шаг 5: Настройка источника записи
- Шаг 6: Тестирование микрофона
- Шаг 7: Создание сценария для автоматизации
- Шаг 8: Настройка udev правил для автоматизации
- Шаг 9: Компиляция и установка программы для сброса USB
- Шаг 10: Настройка автозагрузки
- Заключение
Вопрос или проблема
Я надеялся, что кто-то сможет помочь мне с моей звуковой картой. У меня есть Soundblaster G6, работающий на 18.10. Всё, похоже, работает, кроме входа для микрофона. Я понимаю, что Creative Labs официально не поддерживает Linux, но так как всё остальное работает, мне интересно, можно ли сделать что-то, чтобы я мог использовать микрофон на наушниках.
Кто-нибудь может указать мне правильное направление?
Я нашёл простое решение. Проверено на Ubuntu 20.04.1 (и Fedora 31).
1. Откройте alsamixer
alsamixer
2. Выберите вашу звуковую карту
F6
Sound BlasterX G6
Нажмите Enter, чтобы выбрать карту
3. Активируйте ‘Capture’ для ‘Line In’ и ‘External Mic’
F4
Используйте стрелки влево-вправо, чтобы перейти к 'Line In'.
Используйте Space, чтобы активировать 'Capture'
Используйте стрелки влево-вправо, чтобы перейти к 'External Mic'
Используйте Space, чтобы активировать 'Capture'
4. Настройте PCM Capture Source
F3
Используйте стрелки влево-вправо, чтобы перейти к 'PCM Capture Source'
Используйте стрелки вверх-вниз, чтобы выбрать 'External Mic'
Нажмите ESC для сохранения
5. Запишите WAV файл, чтобы протестировать микрофон
arecord -f dat -d 2 /tmp/test-mic.wav -vvv
6. Воспроизведите WAV файл
aplay /tmp/test-mic.wav
7. Сделайте изменения постоянными (не удалось)
После перезагрузки ‘PCM Capture Source’ снова переходил на ‘Line In’. Я пробовал файл юнита systemd (After=sound.target dbus.service) или скрипт автозагрузки в .zprofile
… ничего не сработало. Я думаю, это связано с тем, что карта требует времени для старта. Поэтому я придумал такой обходной путь:
vim ~/bin/setmic
И добавьте это:
#!/usr/bin/env bash
cardNumber=$(aplay -l|grep 'Sound BlasterX G6'|cut -d' ' -f 2 |tr -d ':')
amixer -c "$cardNumber" -q set "PCM Capture Source" "External Mic"
if [ $? -eq 0 ]; then
echo "PCM Capture Source успешно изменен на 'External Mic'"
else
echo "Не удалось настроить PCM Capture source для Sound BlasterX G6"
fi
amixer -c "$cardNumber" -q sset 'Input Gain Control' 3
if [ $? -eq 0 ]; then
echo "Input Gain Control установлен на 3"
else
echo "Не удалось активировать усиление микрофона для Sound BlasterX G6"
fi
~/bin в моем PATH:
chmod u+x ~/bin/setmic
setmic
> PCM Capture Source успешно изменен на 'External Mic'
> Input Gain Control установлен на 3
Это мой глупый и чрезвычайно хакерский способ сделать это. Открыт для улучшений.
Создайте скрипт для настройки микрофона
sudo nano /usr/local/bin/setmic.sh
#!/usr/bin/env bash
exec >> /tmp/setmic.log 2>&1
echo "Скрипт запущен в $(date)"
cardNumber=$(aplay -l|grep 'Sound BlasterX G6'|cut -d' ' -f 2 |tr -d ':')
amixer -c "$cardNumber" -q set "PCM Capture Source" "External Mic"
if [ $? -eq 0 ]; then
echo "PCM Capture Source успешно изменен на 'External Mic'"
else
echo "Не удалось настроить PCM Capture source для Sound BlasterX G6"
fi
amixer -c "$cardNumber" -q sset 'Input Gain Control' 3
if [ $? -eq 0 ]; then
echo "Input Gain Control установлен на 3"
else
echo "Не удалось активировать усиление микрофона для Sound BlasterX G6"
fi
Сделайте его исполняемым
sudo chmod +x /usr/local/bin/setmic.sh
Добавьте правило udev для автоматического выполнения при подключении USB
sudo nano /etc/udev/rules.d/99-sound-blaster.rules
SUBSYSTEM=="sound", ACTION=="add", ATTRS{idVendor}=="041e", ATTRS{idProduct}=="3256", RUN+="/bin/bash -c 'sleep 5; /usr/bin/setmic.sh", OPTIONS+="watch"
sudo udevadm control --reload
sudo udevadm trigger
Создайте программу для сброса USB-устройства
nano ~/usbreset.c
Добавьте следующий код:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>
int main(int argc, char **argv)
{
const char *filename;
int fd;
int rc;
if (argc != 2) {
fprintf(stderr, "Использование: usbreset device-filename\n");
return 1;
}
filename = argv[1];
fd = open(filename, O_WRONLY);
if (fd < 0) {
perror("Ошибка открытия выходного файла");
return 1;
}
printf("Сброс USB устройства %s\n", filename);
rc = ioctl(fd, USBDEVFS_RESET, 0);
if (rc < 0) {
perror("Ошибка в ioctl");
return 1;
}
printf("Сброс успешен\n");
close(fd);
return 0;
}
Скомпилируйте скрипт и переместите его в правильное место
cc usbreset.c -o usbreset
mv usbreset /usr/local/bin
# Обеспечьте безопасность файла, чтобы избежать эксплойтов
sudo chown root:root /usr/local/bin/usbreset
sudo chmod 755 /usr/local/bin/usbreset
Добавьте скрипт в sudoers
Это сделано, чтобы избежать запроса пароля в фоновом режиме при автозапуске
sudo nano /etc/sudoers
# /etc/sudoers
ваш_логин_здесь ALL=(root) NOPASSWD: /usr/local/bin/usbreset /dev/bus/usb/*/*
Создайте скрипт сброса
Этот скрипт сбросит USB-устройство, чтобы правила udev сработали (например, при входе в систему)
sudo nano ~/bin/reset_soundcard.sh
#!/bin/bash
echo "$(date): Запуск сброса Sound BlasterX G6" >> /tmp/reset_soundcard.log
DEVICE=$(lsusb | grep 'Sound BlasterX G6' | awk '{print "/dev/bus/usb/" $2 "/" substr($4, 1, length($4)-1)}')
if [ -n "$DEVICE" ]; then
echo "Устройство найдено: $DEVICE" >> /tmp/reset_soundcard.log
/usr/local/bin/usbreset "$DEVICE" >> /tmp/reset_soundcard.log 2>&1
else
echo "Sound BlasterX G6 не найден" >> /tmp/reset_soundcard.log
fi
Сделайте его исполняемым
chmod +x ~/bin/reset_soundcard.sh
Создайте автозапуск для скрипта сброса
Чтобы не пришлось снова подключать устройство после загрузки
nano ~/.config/autostart/reset_soundcard.desktop
Я предполагаю, что вам нужно будет изменить это, если вы не используете Gnome.
[Desktop Entry]
Type=Application
Exec=~/bin/reset_soundcard.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Сбросить Sound BlasterX G6
Comment=Сбросить звуковую карту при входе в систему
Перезагрузите, чтобы проверить, работает ли это
reboot
Устранение неполадок
Вы можете использовать сгенерированные логи для устранения неполадок и понять, где всё пошло не так. Вы также можете вручную запустить скрипты, где это необходимо.
Ответ или решение
Проблема с микрофонным входом Soundblaster G6 на Linux
Если у вас возникли трудности с использованием микрофона через звуковую карту Soundblaster G6 на операционной системе Linux, особенно в контексте Ubuntu 18.10, не переживайте – это распространённая проблема. Несмотря на ограниченную официальную поддержку от Creative Labs для Linux, есть ряд шагов, которые вы можете выполнить, чтобы решить эту проблему.
Шаг 1: Установите необходимые инструменты
Во-первых, убедитесь, что у вас установлены нужные утилиты для работы со звуковыми устройствами. Для начала, вам понадобится alsamixer и arecord. Вы можете установить их, выполнив команду:
sudo apt install alsa-utils
Шаг 2: Запустите alsamixer
Откройте alsamixer, введя в терминале:
alsamixer
Здесь вы сможете управлять уровнями громкости и включать нужные входы.
Шаг 3: Выбор звуковой карты
Нажмите F6
, чтобы выбрать вашу звуковую карту. В вашем случае это будет Sound BlasterX G6. Нажмите Enter
, чтобы подтвердить выбор.
Шаг 4: Активация входов
Чтобы активировать микрофон, выполните следующие действия:
- Нажмите
F4
, чтобы перейти к параметрам записи. - Используйте клавиши стрелок влево-вправо, чтобы выбрать ‘Line In’ и ‘External Mic’.
- Нажмите
Space
, чтобы активировать ‘Capture’ для каждого из них.
Шаг 5: Настройка источника записи
Для настройки источника записи:
- Нажмите
F3
. - Перейдите к ‘PCM Capture Source’ с помощью стрелок и выберите ‘External Mic’.
Шаг 6: Тестирование микрофона
Для проверки работы микрофона, запишите короткий тестовый файл WAV:
arecord -f dat -d 2 /tmp/test-mic.wav -vvv
После небольшой записи прослушайте её:
aplay /tmp/test-mic.wav
Шаг 7: Создание сценария для автоматизации
Поскольку после перезагрузки настройки могут сбрасываться, вы можете создать bash-скрипт для автоматической настройки:
- Создайте файл:
vim ~/bin/setmic
- Вставьте следующий код:
#!/usr/bin/env bash
cardNumber=$(aplay -l|grep 'Sound BlasterX G6'|cut -d' ' -f 2 |tr -d ':')
amixer -c "$cardNumber" -q set "PCM Capture Source" "External Mic"
if [ $? -eq 0 ]; then
echo "PCM Capture Source успешно установлен на 'External Mic'"
else
echo "Ошибка настройки PCM Capture source для Sound BlasterX G6"
fi
amixer -c "$cardNumber" -q sset 'Input Gain Control' 3
if [ $? -eq 0 ]; then
echo "Input Gain Control установлен на 3"
else
echo "Ошибка при активации микрофонного усиления для Sound BlasterX G6"
fi
- Сделайте скрипт исполняемым:
chmod u+x ~/bin/setmic
Шаг 8: Настройка udev правил для автоматизации
Если хотите, чтобы скрипт запускался автоматически при подключении устройства, создайте правило udev:
sudo nano /etc/udev/rules.d/99-sound-blaster.rules
Добавьте следующую строку:
SUBSYSTEM=="sound", ACTION=="add", ATTRS{idVendor}=="041e", ATTRS{idProduct}=="3256", RUN+="/bin/bash -c 'sleep 5; /usr/bin/setmic.sh", OPTIONS+="watch"
Шаг 9: Компиляция и установка программы для сброса USB
Создайте и скомпилируйте программу на C для сброса USB, чтобы она помогла вашей системе обнаружить устройство:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>
int main(int argc, char **argv) {
// Логика сброса устройства
// ...
}
Скомпилируйте программу и установите её в /usr/local/bin
.
Шаг 10: Настройка автозагрузки
Добавьте ваш сброс скрипт в автозагрузку, чтобы он запускался при входе в систему.
Заключение
Следуя вышеуказанным шагам, вы сможете настроить микрофон на Soundblaster G6 под Linux. Обратите внимание, что некоторые действия могут требовать административных прав и должны выполняться осторожно. Если у вас возникли дополнительные вопросы или трудности, пожалуйста, не стесняйтесь обращаться за помощью.