我有一个test.wav
文件,想使用 ALSA 通过扬声器播放。我的系统上还安装了 sox。所有声卡均已正确安装。aplay -L
并arecord -L
返回正确的值。
然而我没能玩这个test.wav
。
aplay -c1 -r 48000 -f S16_LE test.wav
$ Playing WAVE 'test.wav': Signed 16 bit Little Endian, Rate 48000 Hz, Mono
aplay: set_params:1345: Channels count non available
但是当我使用sox时,系统没有问题,并且显示该文件确实是16位的1通道
$ Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 48000Hz
我真的不知道原因是什么。任何帮助表示赞赏!提前谢谢你们了!
编辑:
当我手动输入终端中打印的消息时,我犯了一个错误,当我使用 SoX 时,它确实是 1@16 位。
.asoundrc
pcm.!default {
type hw
card 0
}
ctl.!default {
type hw
card 0
}
- 当我使用时
arecord
,我需要指定通道数:arecord -c 2 -r 48000 -f S16_LE test.wav
否则它将返回与上面相同的错误。但是test.wav
如果使用 录制的话我播放就没有问题了arecord
。奇怪的是,test.wav
如果是从其他地方导入的,我就无法播放。
答案1
通过更改用户pi
使用hw
设备的配置,您已禁用所有自动样本格式转换。
要仅设置卡号,请使用:
defaults.pcm.card 0
defaults.ctl.card 0
要为所有用户更改此设置,请将其放入/etc/asound.conf
.
答案2
我能够通过执行以下操作解决我的 sudo 权限问题:
sudo nano /root/.asoundrc
pcm.!default {
type hw
card 0
}
ctl.!default {
type hw
card 0
}
然后我.asoundrc
在主目录和asound.conf
.现在我可以在 wav 文件上使用aplay
和arecord
而无需指定选项。
解决方案来自alsa-项目网站。