Не работает микрофон в WSL2

Я пользователь Windows, но мне крайне нравится Linux, поэтому я использую WSL2. Хотел написать своего голосового ассистента, но столкнулся с проблемой, что в WSL у меня просто не распознается микрофон. В то же время если я не в WSL, то все работает корректно. Есть способ решить? Пробовал установить PulseAudio, но не помогло.


Ответы (1 шт):

Автор решения: Pak Uula

В WSL аудио из Windows заведено как сервер Pulse.

Проверьте у себя:

echo $PULSE_SERVER

должно быть unix:/mnt/wslg/PulseServer

Проверьте права:

$ ls -l  /mnt/wslg/PulseServer
srwxrwxrwx 1 user user 0 Feb 16 13:22 /mnt/wslg/PulseServer

Проверьте наличие устройств:

pactl list sources

Должно быть что-то вроде

Source #1
        State: SUSPENDED
        Name: RDPSink.monitor
        Description: Monitor of RDP Sink
        Driver: module-rdp-sink.c
        Sample Specification: s16le 2ch 44100Hz
        Channel Map: front-left,front-right
        Owner Module: 19
        Mute: no
        Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
                balance 0.00
        Base Volume: 65536 / 100% / 0.00 dB
        Monitor of Sink: RDPSink
        Latency: 0 usec, configured 0 usec
        Flags: DECIBEL_VOLUME LATENCY
        Properties:
                device.description = "Monitor of RDP Sink"
                device.class = "monitor"
                device.icon_name = "audio-input-microphone"
        Formats:
                pcm

Source #2
        State: SUSPENDED
        Name: RDPSource
        Description: RDP Source
        Driver: module-rdp-source.c
        Sample Specification: s16le 1ch 44100Hz
        Channel Map: mono
        Owner Module: 20
        Mute: no
        Volume: mono: 65536 / 100% / 0.00 dB
                balance 0.00
        Base Volume: 65536 / 100% / 0.00 dB
        Monitor of Sink: n/a
        Latency: 0 usec, configured 0 usec
        Flags: DECIBEL_VOLUME LATENCY
        Properties:
                device.description = "RDP Source"
                device.class = "abstract"
                device.icon_name = "audio-input-microphone"
        Formats:
                pcm

Проверьте, что микрофон действительно доступен:

$ winuser=`cmd.exe /c "echo %USERNAME%" 2>/dev/null| tr -d '\r\n'`
$ ffmpeg -f pulse -i default /mnt/c/Users/$winuser/Desktop/mic.wav

Дожно получиться что-то вроде

ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  configuration: --prefix=/usr ...
  libavutil      56. 70.100 / 56. 70.100
  ...
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, pulse, from 'default':
  Duration: N/A, start: 1740068198.479169, bitrate: 1536 kb/s
  Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to '/mnt/c/Users/User/Desktop/mic.wav':
  Metadata:
    ISFT            : Lavf58.76.100
  Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s
    Metadata:
      encoder         : Lavc58.134.100 pcm_s16le
size=     936kB time=00:00:04.98 bitrate=1537.9kbits/s speed=0.994x
video:0kB audio:936kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.008142%

На рабочем столе должен появиться файл mic.wav. Прослушайте его.

→ Ссылка