ALSA 内核 API 与 asoundlib API 有什么不同?
ALSA Kernel API is different from the asoundlib API?
当我在这些内核文档中遇到 ALSA(高级 linux 声音架构)及其 api 时,我正在阅读如何从 linux 内核播放音频: https://www.kernel.org/doc/html/latest/sound/kernel-api/alsa-driver-api.html.
然而,似乎大多数尝试在 linux 中播放音频的人都使用 asound 库,通常包括在内。
#include <alsa/asoundlib.h>
但是当我在这里查看 asoundlib
api 时:https://www.alsa-project.org/alsa-doc/alsa-lib/ 它似乎没有与上面链接的内核 api 相同的功能。在这一点上我很困惑,因为我不确定在播放音频时何时调用内核 api 与 asoundlib api。
一个很好的例子是 asoundlib
api 有一个名为 snd_pcm_open
的函数来创建句柄和到音频接口的连接。我无法在内核文档中找到此功能。所以我想知道,asoundlib
调用内核 api 函数还是这两个 api 正交?如果它们是正交的,那么 asoundlib
会调用什么 kerenel?
ALSA project - the C library reference
前言部分指出:
The Advanced Linux Sound Architecture (ALSA) comes with a kernel API and a library API. ...
API 用法 部分指出:
Application programmers should use the library API rather than the kernel API. The library offers 100% of the functionality of the kernel API, but adds major improvements in usability, making the application code simpler and better looking. In addition, future fixes or compatibility code may be placed in the library code instead of the kernel driver.
当我在这些内核文档中遇到 ALSA(高级 linux 声音架构)及其 api 时,我正在阅读如何从 linux 内核播放音频: https://www.kernel.org/doc/html/latest/sound/kernel-api/alsa-driver-api.html.
然而,似乎大多数尝试在 linux 中播放音频的人都使用 asound 库,通常包括在内。
#include <alsa/asoundlib.h>
但是当我在这里查看 asoundlib
api 时:https://www.alsa-project.org/alsa-doc/alsa-lib/ 它似乎没有与上面链接的内核 api 相同的功能。在这一点上我很困惑,因为我不确定在播放音频时何时调用内核 api 与 asoundlib api。
一个很好的例子是 asoundlib
api 有一个名为 snd_pcm_open
的函数来创建句柄和到音频接口的连接。我无法在内核文档中找到此功能。所以我想知道,asoundlib
调用内核 api 函数还是这两个 api 正交?如果它们是正交的,那么 asoundlib
会调用什么 kerenel?
ALSA project - the C library reference
前言部分指出:
The Advanced Linux Sound Architecture (ALSA) comes with a kernel API and a library API. ...
API 用法 部分指出:
Application programmers should use the library API rather than the kernel API. The library offers 100% of the functionality of the kernel API, but adds major improvements in usability, making the application code simpler and better looking. In addition, future fixes or compatibility code may be placed in the library code instead of the kernel driver.