Вход для микрофона Soundblaster G6 не работает.

Содержание
  1. Вопрос или проблема
  2. 1. Откройте alsamixer
  3. 2. Выберите вашу звуковую карту
  4. 3. Активируйте ‘Capture’ для ‘Line In’ и ‘External Mic’
  5. 4. Настройте PCM Capture Source
  6. 5. Запишите WAV файл, чтобы протестировать микрофон
  7. 6. Воспроизведите WAV файл
  8. 7. Сделайте изменения постоянными (не удалось)
  9. Создайте скрипт для настройки микрофона
  10. Сделайте его исполняемым
  11. Добавьте правило udev для автоматического выполнения при подключении USB
  12. Создайте программу для сброса USB-устройства
  13. Скомпилируйте скрипт и переместите его в правильное место
  14. Добавьте скрипт в sudoers
  15. Создайте скрипт сброса
  16. Создайте автозапуск для скрипта сброса
  17. Перезагрузите, чтобы проверить, работает ли это
  18. Устранение неполадок
  19. Ответ или решение
  20. Шаг 1: Установите необходимые инструменты
  21. Шаг 2: Запустите alsamixer
  22. Шаг 3: Выбор звуковой карты
  23. Шаг 4: Активация входов
  24. Шаг 5: Настройка источника записи
  25. Шаг 6: Тестирование микрофона
  26. Шаг 7: Создание сценария для автоматизации
  27. Шаг 8: Настройка udev правил для автоматизации
  28. Шаг 9: Компиляция и установка программы для сброса USB
  29. Шаг 10: Настройка автозагрузки
  30. Заключение

Вопрос или проблема

Я надеялся, что кто-то сможет помочь мне с моей звуковой картой. У меня есть 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-скрипт для автоматической настройки:

  1. Создайте файл:
vim ~/bin/setmic
  1. Вставьте следующий код:
#!/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
  1. Сделайте скрипт исполняемым:
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. Обратите внимание, что некоторые действия могут требовать административных прав и должны выполняться осторожно. Если у вас возникли дополнительные вопросы или трудности, пожалуйста, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...