最近在一个项目中需要使用到服务器上的声卡,当然也不是需要真的物理声卡(真有物理声卡,服务器在机房中播放音乐,放电影?)。我们需要的是虚拟语音声卡,能处理客户端到服务器的语音流,不需要真正的播放。
我们需要的这个虚拟声卡,在linux中作为一个内核模块存在、运行,snd-dummy。
默认的snd-dummy模块的声道数是8,远少于项目需要的声道数,现在试着将其改到128.
这个模块现在已经包含在内核模块中,但它是从alsa-driver包中提取出来的,与其同步,与其重新编译内核,不如使用alsa-driver包编译这个模块。
下载解压alsa-driver-1.0.23.tar.bz2,转到alsa-driver-1.0.23/alsa-kernel/drivers,修改dummy.c源文件,第66行,将赋值的8改为128,
static int pcm_substreams[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 128};
转到源码根目录,cd alsa-driver-1.0.23,执行configure脚本,
./configure --with-cards=dummy,usb-audio,hda-intel,hrtimer,rtctimer --with-card-options=all
make
find -name *.ko
./pci/hda/snd-hda-codec-intelhdmi.ko
./pci/hda/snd-hda-codec-nvhdmi.ko
./pci/hda/snd-hda-codec-realtek.ko
./pci/hda/snd-hda-codec-idt.ko
./pci/hda/snd-hda-intel.ko
./pci/hda/snd-hda-codec-ca0110.ko
./pci/hda/snd-hda-codec-via.ko
./pci/hda/snd-hda-codec-atihdmi.ko
./pci/hda/snd-hda-codec-conexant.ko
./pci/hda/snd-hda-codec.ko
./pci/hda/snd-hda-codec-cirrus.ko
./pci/hda/snd-hda-codec-si3054.ko
./pci/hda/snd-hda-codec-analog.ko
./pci/hda/snd-hda-codec-cmedia.ko
./usb/snd-usb-audio.ko
./usb/snd-usbmidi-lib.ko
./acore/oss/snd-mixer-oss.ko
./acore/oss/snd-pcm-oss.ko
./acore/seq/oss/snd-seq-oss.ko
./acore/seq/snd-seq-midi.ko
./acore/seq/snd-seq-midi-event.ko
./acore/seq/snd-seq.ko
./acore/seq/snd-seq-d