Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用c+通过USB声卡播放音频+/李宝/阿尔萨在树莓皮上?_C++_Linux_Raspberry Pi_Arm - Fatal编程技术网

C++ 如何使用c+通过USB声卡播放音频+/李宝/阿尔萨在树莓皮上?

C++ 如何使用c+通过USB声卡播放音频+/李宝/阿尔萨在树莓皮上?,c++,linux,raspberry-pi,arm,C++,Linux,Raspberry Pi,Arm,我从aplay-l,lsusb获得以下信息: pi@raspberrypi:~$aplay-l ****播放硬件设备列表**** 卡0:ALSA[bcm2835 ALSA],设备0:bcm2835 ALSA[bcm2835 ALSA] 子设备:8/8 子设备#0:子设备#0 子设备#1:子设备#1 子设备#2:子设备#2 子设备#3:子设备#3 子设备#4:子设备#4 子设备#5:子设备#5 子设备#6:子设备#6 子设备#7:子设备#7 卡0:ALSA[bcm2835 ALSA],设备1:bc

我从aplay-l,lsusb获得以下信息:

pi@raspberrypi:~$aplay-l
****播放硬件设备列表****
卡0:ALSA[bcm2835 ALSA],设备0:bcm2835 ALSA[bcm2835 ALSA]
子设备:8/8
子设备#0:子设备#0
子设备#1:子设备#1
子设备#2:子设备#2
子设备#3:子设备#3
子设备#4:子设备#4
子设备#5:子设备#5
子设备#6:子设备#6
子设备#7:子设备#7
卡0:ALSA[bcm2835 ALSA],设备1:bcm2835 ALSA[bcm2835 IEC958/HDMI]
子设备:1/1
子设备#0:子设备#0
卡1:设备[USB PnP声音设备],设备0:USB音频[USB音频]
子设备:1/1
子设备#0:子设备#0
卡2:Device_1[USB PnP声音设备],Device 0:USB音频[USB音频]
子设备:1/1
子设备#0:子设备#0
pi@raspberrypi:~$lsusb
总线001设备005:ID 046d:c31c Logitech,Inc.商用键盘K120
总线001设备008:ID 0d8c:013c C-Media Electronics,Inc.CM108音频控制器
总线001设备007:ID 0d8c:013c C-Media Electronics,Inc.CM108音频控制器
总线001设备006:ID 05e3:0606 Genesys Logic,Inc.USB 2.0集线器/D-Link DUB-H4 USB 2.0集线器
总线001设备004:ID 1bcf:0005尚普创新科技有限公司。
总线001设备003:ID 0424:ec00标准微系统公司SMSC9512/9514快速以太网适配器
总线001设备002:ID 0424:9514标准微系统公司。
总线001设备001:ID1D6B:0002 Linux基金会2根集线器
我想用libao通过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

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

你能通过aplay播放wave文件吗?试着使用这个命令aplay-D'hw:1'file.wav
$aplay --device=plughw:1,0 ./testSound.wav