树莓派 python 录音_使用Python代码进行树莓派上的麦阵列声源定位

偶然发现seeedstudio更新了他们的英文版说明书,然而中文版还没更新[捂脸]。关于DOA的部分,除了原来的使用ODAS Studio的方法以外,又多加了一些使用Python代码直接进行DOA的章节。

0 安装驱动

别忘了用source activate doa切到专门的环境里,或者conda create -n doa python=3.6现造一个环境。

安装驱动:

1

2

3

4proxychains4 git clone https://github.com/respeaker/seeed-voicecard.git

cd seeed-voicecard

sudo proxychains4 ./install.sh

sudo reboot -h now

检查驱动:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72arecord -L # 输入驱动,即录制

null

Discard all samples (playback) or generate zero samples (capture)

default

ac108

dmixer

ac101

sysdefault:CARD=seeed8micvoicec

seeed-8mic-voicecard,

Default Audio Device

dmix:CARD=seeed8micvoicec,DEV=0

seeed-8mic-voicecard,

Direct sample mixing device

dsnoop:CARD=seeed8micvoicec,DEV=0

seeed-8mic-voicecard,

Direct sample snooping device

hw:CARD=seeed8micvoicec,DEV=0

seeed-8mic-voicecard,

Direct hardware device without any conversions

plughw:CARD=seeed8micvoicec,DEV=0

seeed-8mic-voicecard,

Hardware device with all software conversions

aplay -L # 输出驱动,即播放

null

Discard all samples (playback) or generate zero samples (capture)

default

ac108

dmixer

ac101

sysdefault:CARD=ALSA

bcm2835 ALSA, bcm2835 ALSA

Default Audio Device

dmix:CARD=ALSA,DEV=0

bcm2835 ALSA, bcm2835 ALSA

Direct sample mixing device

dmix:CARD=ALSA,DEV=1

bcm2835 ALSA, bcm2835 IEC958/HDMI

Direct sample mixing device

dsnoop:CARD=ALSA,DEV=0

bcm2835 ALSA, bcm2835 ALSA

Direct sample snooping device

dsnoop:CARD=ALSA,DEV=1

bcm2835 ALSA, bcm2835 IEC958/HDMI

Direct sample snooping device

hw:CARD=ALSA,DEV=0

bcm2835 ALSA, bcm2835 ALSA

Direct hardware device without any conversions

hw:CARD=ALSA,DEV=1

bcm2835 ALSA, bcm2835 IEC958/HDMI

Direct hardware device without any conversions

plughw:CARD=ALSA,DEV=0

bcm2835 ALSA, bcm2835 ALSA

Hardware device with all software conversions

plughw:CARD=ALSA,DEV=1

bcm2835 ALSA, bcm2835 IEC958/HDMI

Hardware device with all software conversions

sysdefault:CARD=seeed8micvoicec

seeed-8mic-voicecard,

Default Audio Device

dmix:CARD=seeed8micvoicec,DEV=0

seeed-8mic-voicecard,

Direct sample mixing device

dsnoop:CARD=seeed8micvoicec,DEV=0

seeed-8mic-voicecard,

Direct sample snooping device

hw:CARD=seeed8micvoicec,DEV=0

seeed-8mic-voicecard,

Direct hardware device without any conversions

plughw:CARD=seeed8micvoicec,DEV=0

seeed-8mic-voicecard,

Hardware device with all software conversions

1 测试LED

说实话,自打买了这个麦阵列,我还从来没试过这12个LED灯[捂脸],试试吧要不感觉对不起这个板子,另外,运行demo需要gpiozero、spidev、pyusb。

1

2

3

4

5proxychains4 git clone --depth 1 https://github.com/respeaker/pixel_ring.git

cd pixel_ring

proxychains4 pip install -U -e .

proxychains4 pip install gpiozero RPi.GPIO

python examples/respeaker_4mic_array.py

控制LED的主要代码其实就在函数show(),直接在Python交互环境中输入下面的代码,就可以打开12点方向的灯,并渲染为白色,也就是ARGB(0, 64, 64, 64)。

1

2

3

4

5

6

7

8from pixel_ring import pixel_ring

from gpiozero import LED

power = LED(5)

power.on()

pixel_ring.set_brightness(10) # 0-100,其实会被转换为`APA102.dev.global_brightness`的0-31

pixel_ring.pattern.show([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64])

用于控制的数组是一个48位的list,从1点钟方向开始,到12点钟方向结束,每四位控制一个LED灯,非常好操作。

2 装DOA相关库

添加seeed提供的apt源。(靠谱的公司啊)

1

2

3echo "deb https://seeed-studio.github.io/pi_repo/ stretch main" | sudo tee /etc/apt/sources.list.d/seeed.list

proxychains4 curl https://seeed-studio.github.io/pi_repo/public.key | sudo apt-key add -

proxychains4 sudo apt update

安装numpy和pyaudio:

1

2

3proxychains4 conda install -y numpy

proxychains4 sudo apt-get install -y portaudio19-dev

proxychains4 pip install pyaudio

安装编译工具:

1sudo proxychains4 apt-get install -y swig python-dev libatlas-base-dev build-essential make

安装snowboy(热词检测DOA):

1

2

3

4

5proxychains4 git clone --depth 1 https://github.com/Kitt-AI/snowboy.git

cd snowboy

python setup.py build

python setup.py bdist_wheel

pip install dist/snowboy*.whl

安装seeed的voice-engin:

1

2

3

4proxychains4 git clone https://github.com/voice-engine/voice-engine.git

cd voice-engine

python setup.py bdist_wheel

pip install dist/*.whl

测试ok~:

1python ~/doa/voice-engine/examples/respeaker_6mic_array_for_pi/kws_doa.py

如果只是想用DOA功能,可以试试seeed的老项目mic_array:

1

2proxychains4 git clone https://github.com/respeaker/mic_array.git

python ./mic_array/mic_array.py

对比了一下,跟人家introlab/odas项目差的还是比较远的。直观上看就是我们简单的靠fft实现的DOA仅仅能做到平面范围内的方位判断,仅输出一个角度(平面offset),速度慢且不支持声源跟踪等功能。而odas的声源定位项目输出两个值,一个平面offset一个法向offset,还能进行声源分辨,多声源跟踪跟踪。odas项目的理论收录在Lightweight and Optimized Sound Source Localization and Tracking Methods for Opened and Closed Microphone Array Configurations中,值得一读。

你可能感兴趣的:(树莓派,python,录音)