繁体   English   中英

如何在Raspberry Pi上使用c ++ / libao / alsa通过USB声卡播放音频?

[英]How to play audio via a USB sound card using c++/libao/alsa on Raspberry Pi?

我从aplay -l, lsusb得到以下内容:

pi@raspberrypi:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Device_1 [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
pi@raspberrypi:~ $ lsusb
Bus 001 Device 005: ID 046d:c31c Logitech, Inc. Keyboard K120 for Business
Bus 001 Device 008: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller
Bus 001 Device 007: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller
Bus 001 Device 006: ID 05e3:0606 Genesys Logic, Inc. USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub
Bus 001 Device 004: ID 1bcf:0005 Sunplus Innovation Technology Inc. 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

我想通过带宝的CM108音频控制器播放MP3。 我尝试了这些:

ao_initialize();
ao_option aoption;
ao_option *poption;
poption = &aoption;
poption->key = (char*)"dev";
poption->value = (char*)"hw:0";
dev = ao_open_live(driver, &format, poption); 
    while (mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK)
        ao_play(dev, (char *)buffer, done);

因此,声音可以通过Pi成功播放。 我知道hw:0是Pi的声卡。 如果要通过第一个或第二个CM108音频控制器播放,应该使用什么代替hw:0? 我已经尝试了hw:1和hw:2,但它不起作用。

尝试执行以下步骤,首先使用alsa从rpi的USB声音适配器启用音频录制和回放。 有了它,您可以测试您的USB声音适配器是否可以作为输入和输出模块正常工作。我还没有测试过带有上述C ++代码库的用例,请尽快尝试一下。 如果可以,请稍后在C ++代码中尝试引用“ hw:1”。

步骤:1.1)创建/编辑文件.asoundrc

$vim .asoundrc

如果文件不存在,请创建它;

$ touch .asoundrc

$vim .asoundrc 
pcm.!default {
        type asym
        playback.pcm "hw:1,0"
        capture.pcm "hw:1,0"
}

ctl.!default {
        type hw
        card 1
}

1.2)在文件alsa.conf中编辑以下行;

$sudo vim /usr/share/alsa/alsa.conf
defaults.ctl.card 0
defaults.pcm.card 0

$sudo vim /usr/share/alsa/alsa.conf
defaults.ctl.card 1
defaults.pcm.card 1

1.3)使用alsamixer实用程序更改音频电平/设置

$alsamixer

1.4)录制音频的命令

$arecord -D plughw:1 -f S16_LE -r 48000 -d 5 ./testSound.wav

1.5)播放录音的命令

$aplay --device=plughw:1,0 ./testSound.wav

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM