WSL使用电脑自带声卡录制、播放声音尝试

试验过程记录

做linux环境下的开发时暂时用Windows子系统替代了一下,希望实现ubuntu18.04子系统使用电脑声卡进行录音功能。但是尝试多次无果。

尝试过程:

1. 以为是驱动问题,但是不是。

2. 使用以下命令查看声卡,没有反应或者返回no soundcard。

$ arecord -l
$ aplay -l
$ spci | grep Audio

并且

$ sudo modprobe snd_aloop
执行后出现
modprobe: FATAL: Module snd_aloop not found in directory /lib/modules/5.10.16.3-microsoft-standard-WSL2

 根据 Ubuntu 18.04 解决no soundcards found情况下没有声音的问题_xhyglh的博客-CSDN博客 的启发,觉得可能是内核有东西缺失,便参照其过程安装linux-modules-extra的generic

3. 下载指定版本generic后无果,直接输入

$ sudo apt install linux-image-generic

  妄想下载一个默认版本来得到正确的linux-modules-extra(

  但是召唤出所有内核版本后发现,这个wsl默认的同之前闷头乱撞下载的generic和按照上面链接指引下载的结果不同。版本号的格式都不同。所以应该不是上面的方法可以解决的问题。

~$ dpkg --list | grep linux-image
ii  linux-image-4.15.0-191-generic         4.15.0-191.202                                  amd64        Signed kernel image generic
ii  linux-image-4.15.0-39-generic          4.15.0-39.42                                    amd64        Signed kernel image generic
ii  linux-image-5.0.0-16-generic           5.0.0-16.17~18.04.1                             amd64        Signed kernel image generic
ii  linux-image-generic                    4.15.0.191.176                                  amd64        Generic Linux kernel image

4. 直到大海捞针捞到这篇帖子

    Add the ability for WSL to have a soundcard driver

    然后才发现WSL目前还没有升级到可以支持声音设备,可以用pulseaudio服务连回windows使用电脑自带的声卡来录音、公放。所以需要下载Pulseaudio来完成这一步

    PulseAudio version 1.1 是很老的一个版本,但是可以用于windows10上,可以暂且原谅它的老旧,下载连接:https://www.freedesktop.org/wiki/Software/PulseAudio/Ports/Windows/Support/

    下载后解压,这一步我没成功,因为我解压出来的文件和这个指引下的文件不一致:Enabling sound in WSL / Ubuntu - Let It Sing! - X410.dev,于是没用这个方法,初步设想是在PulseAudio的版本中找到一个符合其描述的来下载。但我还没尝试。

    完成后可以用以下代码测试。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Time-stamp: "2022-05-05 02:21:23 (ywatanabe)"

import soundcard as sc
import numpy as np

# get a list of all speakers:
speakers = sc.all_speakers()
# get the current default speaker on your system:
default_speaker = sc.default_speaker()
# get a list of all microphones:
mics = sc.all_microphones()
# get the current default microphone on your system:
default_mic = sc.default_microphone()

print(default_speaker)
print(default_mic)


# record and play back one second of audio:
fs = 48000
rec_sec = 5

data = default_mic.record(samplerate=fs, numframes=fs*rec_sec)
default_speaker.play(data/np.max(data), samplerate=fs)

# alternatively, get a `Recorder` and `Player` object
# and play or record continuously:
with default_mic.recorder(samplerate=fs) as mic, \
      default_speaker.player(samplerate=fs) as sp:
    for _ in range(100):
        data = mic.record(numframes=1024)
        sp.play(data)

## EOF

5. 另一种下载PulseAudio version 5.0的方法

    Streaming audio from Linux to Windows

    待我研究一下

credit to @xhyglh, @tomjepp, X41O

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值