ALSA:Linux下声卡编程

1.ALSA:Linux下声卡编程【正常操作,一次性就ok的】

先安装库文件(需要联网下载500k)

apt-get install libasound2-dev

(centos 需换一个包:yum install alsa-lib-devel)

若提示资源暂时不可用,执行语句

ps aux | grep “apt-get”,查询进程号,根据进程号kill该进程,再安装(如还不行,先更新包,再重做:apt-get update)

(2)编译(jd.wav文件和play.c都放到/root下)

gcc –o play play.c –lasound

执行时也需要添加播放路径和文件名

./play jd.wav

2.自己的操作步骤:

1.先将c文件和wav文件放到root文件下

切换root模式

cd /root

ls

就可以查看root目录下的文件了。

再安装,apt-get install libasound2-dev

 你若是不安装则会,【当然粗心命令也写欠了-lasound,但结果一样的啦】

尝试按提示的版本来

 尝试sudo apt -get update,失败

 

 尝试修复安装,sudo apt-get -f install ,但是对于我来说没用。

 

 apt-cache madison package-name搜索软件有那些可用版本

尝试,apt-cache madison libasound2-dev

 

信息没用。。。

再尝试下载,依旧失败

接着,上面的报错解决方法,借鉴https://blog.csdn.net/u011170540/article/details/83693568

2.降级!【可以直接跳到这里,前面都是试错】

 找不到命令就下载

sudo aptitude install libasound2-dev

 

 

然后就OK啦

接着,完成安装就进行编译

gcc -o play play.c -lasound

./play jd.wav

 

 编译时忘记写-lasound会报错的,注意踩坑!

 

主要是,

libasound2-dev : 依赖: libasound2 (= 1.1.3-5)

E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

刚刚好时同一个软件,故只能降级处理

所以,若是这个原因就直接跳过前面的步骤,直接来到“降级”这一步,节约时间!!!

 

 

 

 

 

 

 

 shell代码写着,

  1 ac@ac-virtual-machine:~$ sudo su
  2 [sudo] ac 的密码:
  3 root@ac-virtual-machine:/home/ac# cp play.c /root
  4 root@ac-virtual-machine:/home/ac# cp jd.wav /root
  5 root@ac-virtual-machine:/home/ac# apt-get install libasound2-dev
  6 正在读取软件包列表... 完成
  7 正在分析软件包的依赖关系树
  8 正在读取状态信息... 完成
  9 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
 10 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
 11 包尚未被创建或是它们已被从新到(Incoming)目录移出。
 12 下列信息可能会对解决问题有所帮助:
 13 
 14 下列软件包有未满足的依赖关系:
 15  libasound2-dev : 依赖: libasound2 (= 1.1.3-5)
 16 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
 17 root@ac-virtual-machine:/home/ac# cd ..
 18 root@ac-virtual-machine:/home# cd ..
 19 root@ac-virtual-machine:/# ls
 20 bin    dev   initrd.img      lib64       mnt   root  snap  tmp  vmlinuz
 21 boot   etc   initrd.img.old  lost+found  opt   run   srv   usr
 22 cdrom  home  lib             media       proc  sbin  sys   var
 23 root@ac-virtual-machine:/# cd root
 24 root@ac-virtual-machine:~# ls
 25 jd.wav  play.c
 26 root@ac-virtual-machine:~# gcc -o play play.c
 27 play.c:4:10: fatal error: alsa/asoundlib.h: 没有那个文件或目录
 28  #include <alsa/asoundlib.h>
 29           ^~~~~~~~~~~~~~~~~~
 30 compilation terminated.
 31 root@ac-virtual-machine:~# sudo apt-get update
 32 命中:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
 33 命中:2 http://cn.archive.ubuntu.com/ubuntu bionic InRelease
 34 正在读取软件包列表... 完成
 35 root@ac-virtual-machine:~# apt-get install libasound2-dev
 36 正在读取软件包列表... 完成
 37 正在分析软件包的依赖关系树
 38 正在读取状态信息... 完成
 39 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
 40 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
 41 包尚未被创建或是它们已被从新到(Incoming)目录移出。
 42 下列信息可能会对解决问题有所帮助:
 43 
 44 下列软件包有未满足的依赖关系:
 45  libasound2-dev : 依赖: libasound2 (= 1.1.3-5)
 46 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
 47 root@ac-virtual-machine:~# sudo apt-get update
 48 命中:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
 49 命中:2 http://cn.archive.ubuntu.com/ubuntu bionic InRelease
 50 正在读取软件包列表... 完成
 51 root@ac-virtual-machine:~# apt-get install libasound2-dev
 52 正在读取软件包列表... 完成
 53 正在分析软件包的依赖关系树
 54 正在读取状态信息... 完成
 55 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
 56 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
 57 包尚未被创建或是它们已被从新到(Incoming)目录移出。
 58 下列信息可能会对解决问题有所帮助:
 59 
 60 下列软件包有未满足的依赖关系:
 61  libasound2-dev : 依赖: libasound2 (= 1.1.3-5)
 62 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
 63 root@ac-virtual-machine:~# sudo apt-get update
 64 获取:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
 65 获取:2 http://security.ubuntu.com/ubuntu bionic-security/main amd64 DEP-11 Metadata [40.7 kB]
 66 获取:3 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 DEP-11 Metadata [42.1 kB]
 67 获取:4 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 DEP-11 Metadata [2,464 B]
 68 命中:5 http://cn.archive.ubuntu.com/ubuntu bionic InRelease
 69 已下载 174 kB,耗时 10秒 (17.2 kB/s)
 70 
 71 正在读取软件包列表... 完成
 72 root@ac-virtual-machine:~#
 73 root@ac-virtual-machine:~# apt-get install libasound2-dev
 74 正在读取软件包列表... 完成
 75 正在分析软件包的依赖关系树
 76 正在读取状态信息... 完成
 77 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
 78 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
 79 包尚未被创建或是它们已被从新到(Incoming)目录移出。
 80 下列信息可能会对解决问题有所帮助:
 81 
 82 下列软件包有未满足的依赖关系:
 83  libasound2-dev : 依赖: libasound2 (= 1.1.3-5)
 84 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
 85 root@ac-virtual-machine:~# sudo aptitude install libasound2-dev
 86 sudo: aptitude:找不到命令
 87 root@ac-virtual-machine:~# sudo apt-get -f install
 88 正在读取软件包列表... 完成
 89 正在分析软件包的依赖关系树
 90 正在读取状态信息... 完成
 91 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 369 个软件包未被升级。
 92 root@ac-virtual-machine:~# sudo aptitude install libasound2-dev
 93 sudo: aptitude:找不到命令
 94 root@ac-virtual-machine:~# apt-get install libasound2-dev
 95 正在读取软件包列表... 完成
 96 正在分析软件包的依赖关系树
 97 正在读取状态信息... 完成
 98 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
 99 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
100 包尚未被创建或是它们已被从新到(Incoming)目录移出。
101 下列信息可能会对解决问题有所帮助:
102 
103 下列软件包有未满足的依赖关系:
104  libasound2-dev : 依赖: libasound2 (= 1.1.3-5)
105 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
106 root@ac-virtual-machine:~# sudo apt-get -f install
107 正在读取软件包列表... 完成
108 正在分析软件包的依赖关系树
109 正在读取状态信息... 完成
110 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 369 个软件包未被升级。
111 root@ac-virtual-machine:~# apt-get install libasound2-dev (=1.1.3-5)
112 bash: 未预期的符号 `(' 附近有语法错误
113 root@ac-virtual-machine:~# apt-get install libasound2=1.1.3-5
114 正在读取软件包列表... 完成
115 正在分析软件包的依赖关系树
116 正在读取状态信息... 完成
117 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
118 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
119 包尚未被创建或是它们已被从新到(Incoming)目录移出。
120 下列信息可能会对解决问题有所帮助:
121 
122 下列软件包有未满足的依赖关系:
123  libasound2 : 依赖: libasound2-data (>= 1.1.3-5) 但是它将不会被安装
124 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
125 root@ac-virtual-machine:~# sudo apt-get install libasound2
126 正在读取软件包列表... 完成
127 正在分析软件包的依赖关系树
128 正在读取状态信息... 完成
129 libasound2 已经是最新版 (1.1.3-5ubuntu0.1)。
130 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 369 个软件包未被升级。
131 root@ac-virtual-machine:~# apt-get install libasound2=1.1.3-5
132 正在读取软件包列表... 完成
133 正在分析软件包的依赖关系树
134 正在读取状态信息... 完成
135 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
136 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
137 包尚未被创建或是它们已被从新到(Incoming)目录移出。
138 下列信息可能会对解决问题有所帮助:
139 
140 下列软件包有未满足的依赖关系:
141  libasound2 : 依赖: libasound2-data (>= 1.1.3-5) 但是它将不会被安装
142 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
143 root@ac-virtual-machine:~# apt-get install libasound2-dev
144 正在读取软件包列表... 完成
145 正在分析软件包的依赖关系树
146 正在读取状态信息... 完成
147 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
148 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
149 包尚未被创建或是它们已被从新到(Incoming)目录移出。
150 下列信息可能会对解决问题有所帮助:
151 
152 下列软件包有未满足的依赖关系:
153  libasound2-dev : 依赖: libasound2 (= 1.1.3-5)
154 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
155 root@ac-virtual-machine:~# apt-cache madison libasound2-dev
156 libasound2-dev |    1.1.3-5 | http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
157 root@ac-virtual-machine:~# apt-get install libasound2-dev
158 正在读取软件包列表... 完成
159 正在分析软件包的依赖关系树
160 正在读取状态信息... 完成
161 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
162 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
163 包尚未被创建或是它们已被从新到(Incoming)目录移出。
164 下列信息可能会对解决问题有所帮助:
165 
166 下列软件包有未满足的依赖关系:
167  libasound2-dev : 依赖: libasound2 (= 1.1.3-5)
168 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
169 root@ac-virtual-machine:~# sudo aptitude install libasound2-dev
170 sudo: aptitude:找不到命令
171 root@ac-virtual-machine:~# apt-get install aptitude
172 正在读取软件包列表... 完成
173 正在分析软件包的依赖关系树
174 正在读取状态信息... 完成
175 将会同时安装下列软件:
176   aptitude-common libcwidget3v5 libsigc++-2.0-0v5
177 建议安装:
178   aptitude-doc-en | aptitude-doc apt-xapian-index debtags tasksel
179   libcwidget-dev
180 下列【新】软件包将被安装:
181   aptitude aptitude-common libcwidget3v5 libsigc++-2.0-0v5
182 升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 365 个软件包未被升级。
183 需要下载 2,580 kB 的归档。
184 解压缩后会消耗 10.9 MB 的额外空间。
185 您希望继续执行吗? [Y/n] Y
186 获取:1 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 aptitude-common all 0.8.10-6ubuntu1 [1,014 kB]
187 获取:2 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 libsigc++-2.0-0v5 amd64 2.10.0-2 [10.9 kB]
188 获取:3 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 libcwidget3v5 amd64 0.5.17-7 [286 kB]
189 获取:4 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 aptitude amd64 0.8.10-6ubuntu1 [1,269 kB]
190 已下载 2,580 kB,耗时 60秒 (43.2 kB/s)
191 正在选中未选择的软件包 aptitude-common。
192 (正在读取数据库 ... 系统当前共安装有 120154 个文件和目录。)
193 正准备解包 .../aptitude-common_0.8.10-6ubuntu1_all.deb  ...
194 正在解包 aptitude-common (0.8.10-6ubuntu1) ...
195 正在选中未选择的软件包 libsigc++-2.0-0v5:amd64。
196 正准备解包 .../libsigc++-2.0-0v5_2.10.0-2_amd64.deb  ...
197 正在解包 libsigc++-2.0-0v5:amd64 (2.10.0-2) ...
198 正在选中未选择的软件包 libcwidget3v5:amd64。
199 正准备解包 .../libcwidget3v5_0.5.17-7_amd64.deb  ...
200 正在解包 libcwidget3v5:amd64 (0.5.17-7) ...
201 正在选中未选择的软件包 aptitude。
202 正准备解包 .../aptitude_0.8.10-6ubuntu1_amd64.deb  ...
203 正在解包 aptitude (0.8.10-6ubuntu1) ...
204 正在设置 aptitude-common (0.8.10-6ubuntu1) ...
205 正在处理用于 libc-bin (2.27-3ubuntu1) 的触发器 ...
206 正在处理用于 man-db (2.8.3-2) 的触发器 ...
207 正在设置 libsigc++-2.0-0v5:amd64 (2.10.0-2) ...
208 正在设置 libcwidget3v5:amd64 (0.5.17-7) ...
209 正在设置 aptitude (0.8.10-6ubuntu1) ...
210 update-alternatives: 使用 /usr/bin/aptitude-curses 来在自动模式中提供 /usr/bin/aptitude (aptitude)
211 正在处理用于 libc-bin (2.27-3ubuntu1) 的触发器 ...
212 root@ac-virtual-machine:~# sudo aptitude install libasound2-dev
213 下列“新”软件包将被安装。
214   libasound2-dev{b}
215 0 个软件包被升级,新安装 1 个, 0 个将被删除, 同时 365 个将不升级。
216 需要获取 123 kB 的存档。 解包后将要使用 664 kB。
217 下列软件包存在未满足的依赖关系:
218  libasound2-dev : 依赖: libasound2 (= 1.1.3-5) but 1.1.3-5ubuntu0.1 is installed
219 下列动作将解决这些依赖关系:
220 
221      保持 下列软件包于其当前版本:
222 1)     libasound2-dev [未安装的]
223 
224 
225 
226 是否接受该解决方案?[Y/n/q/?] n
227 下列动作将解决这些依赖关系:
228 
229      降级 下列软件包:
230 1)     libasound2 [1.1.3-5ubuntu0.1 (now) -> 1.1.3-5 (bionic)]
231 2)     libasound2-data [1.1.3-5ubuntu0.1 (now) -> 1.1.3-5 (bionic)]
232 
233 
234 
235 是否接受该解决方案?[Y/n/q/?] Y
236 下列软件包将被“降级”:
237   libasound2 libasound2-data
238 下列“新”软件包将被安装。
239   libasound2-dev
240 0 个软件包被升级,新安装 1 个, 2 个被降级, 0 个将被删除, 同时 365 个将不升级。
241 需要获取 516 kB 的存档。 解包后将要使用 667 kB。
242 您要继续吗?[Y/n/?] Y
243 读取: 1 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 libasound2 amd64 1.1.3-5 [357 kB]
244 读取: 2 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 libasound2-data all 1.1.3-5 [36.1 kB]
245 读取: 3 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 libasound2-dev amd64 1.1.3-5 [123 kB]
246 已下载 516 kB,耗时 33秒 (15.5 kB/s)
247 dpkg: 警告: 即将把 libasound2:amd64 从 1.1.3-5ubuntu0.1 降级到 1.1.3-5
248 (正在读取数据库 ... 系统当前共安装有 120293 个文件和目录。)
249 正准备解包 .../libasound2_1.1.3-5_amd64.deb  ...
250 正在将 libasound2:amd64 (1.1.3-5) 解包到 (1.1.3-5ubuntu0.1) 上 ...
251 dpkg: 警告: 即将把 libasound2-data 从 1.1.3-5ubuntu0.1 降级到 1.1.3-5
252 正准备解包 .../libasound2-data_1.1.3-5_all.deb  ...
253 正在将 libasound2-data (1.1.3-5) 解包到 (1.1.3-5ubuntu0.1) 上 ...
254 正在选中未选择的软件包 libasound2-dev:amd64。
255 正准备解包 .../libasound2-dev_1.1.3-5_amd64.deb  ...
256 正在解包 libasound2-dev:amd64 (1.1.3-5) ...
257 正在设置 libasound2-data (1.1.3-5) ...
258 正在设置 libasound2:amd64 (1.1.3-5) ...
259 正在处理用于 libc-bin (2.27-3ubuntu1) 的触发器 ...
260 正在设置 libasound2-dev:amd64 (1.1.3-5) ...
261 
262 root@ac-virtual-machine:~# gcc -o play play.c
263 /tmp/cceFEA9O.o:在函数‘set_pcm_play’中:
264 play.c:(.text+0x1ad):对‘snd_pcm_open’未定义的引用
265 play.c:(.text+0x1d7):对‘snd_pcm_hw_params_sizeof’未定义的引用
266 play.c:(.text+0x216):对‘snd_pcm_hw_params_sizeof’未定义的引用
267 play.c:(.text+0x265):对‘snd_pcm_hw_params_any’未定义的引用
268 play.c:(.text+0x2a8):对‘snd_pcm_hw_params_set_access’未定义的引用
269 play.c:(.text+0x30b):对‘snd_pcm_hw_params_set_format’未定义的引用
270 play.c:(.text+0x32b):对‘snd_pcm_hw_params_set_format’未定义的引用
271 play.c:(.text+0x34b):对‘snd_pcm_hw_params_set_format’未定义的引用
272 play.c:(.text+0x36b):对‘snd_pcm_hw_params_set_channels’未定义的引用
273 play.c:(.text+0x3c0):对‘snd_pcm_hw_params_set_rate_near’未定义的引用
274 play.c:(.text+0x3fe):对‘snd_pcm_hw_params’未定义的引用
275 play.c:(.text+0x440):对‘snd_pcm_hw_params_get_period_size’未定义的引用
276 play.c:(.text+0x50f):对‘snd_pcm_drain’未定义的引用
277 play.c:(.text+0x51e):对‘snd_pcm_close’未定义的引用
278 play.c:(.text+0x589):对‘snd_pcm_prepare’未定义的引用
279 play.c:(.text+0x5a1):对‘snd_strerror’未定义的引用
280 play.c:(.text+0x5d9):对‘snd_pcm_writei’未定义的引用
281 collect2: error: ld returned 1 exit status
282 root@ac-virtual-machine:~# apt-get install libasound2-dev
283 正在读取软件包列表... 完成
284 正在分析软件包的依赖关系树
285 正在读取状态信息... 完成
286 libasound2-dev 已经是最新版 (1.1.3-5)。
287 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 365 个软件包未被升级。
288 root@ac-virtual-machine:~# gcc -o play play.c -lasound
289 root@ac-virtual-machine:~# ./play jd.wav
290 nread=44
291 文件大小rLen:485896
292 声道数:1
293 采样频率:8000
294 采样的位数:8
295 wSampleLength=485860
296 歌曲写入结束
297 root@ac-virtual-machine:~#
View Code

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/jiuzhen/p/12941014.html