问题标签 [alsa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ALSA:打开和关闭 PCM On-The-Fly
我有一个执行以下操作的程序:
- 使用snd_pcm_open()函数打开默认 PCM
- 发送样本以播放声音
- 使用snd_pcm_close()函数关闭 PCM
该程序将定期播放它收到的任何声音请求,但偶尔打开会失败并返回“设备或资源繁忙”错误。这通常发生在有大量声音文件时。但是,关闭电话总是成功的。我假设如果关闭成功,那么 PCM 将立即可供其他任何人使用。我还应该补充一点,系统上没有其他使用声音的东西。
ALSA 是否有可能在收盘后仍需要清理一些资源?PCM接口不是设计成经常打开和关闭的吗?Internet 上的大多数示例在启动时打开 PCM 流并在关闭时关闭它。
ruby - 使用 ruby-alsa
我终于得到了引用 ruby-alsa library 的代码,但我又被卡住了。最终,当从客户端调用操作时,我希望在服务器上播放音频文件。因此,我的控制器中有以下代码:
通过阅读ALSA 库的 RDoc,我得到的印象是我应该使用 ALSA::PCM::Playback 类中的write_in_background 方法。不幸的是,我无法获得正确的语法来使此方法起作用。为了简单地验证我的 ALSA 是否正常工作,我尝试使用 Playback.write 方法(请注意上面的代码)。上面的代码在语法上是正确的;但是,它只播放一微秒的声音,然后停止。我的猜测是请求结束得太快了,它没有足够的时间播放任何可识别的东西。
如前所述,我的最终目标是让最终用户调用一个在服务器上播放音频的操作。该文件不应在 HTTP 请求结束时停止播放——它应该继续播放,直到调用另一个停止播放的操作。知道这一点,有人可以帮助我获得正确的语法和参数来调用 write_in_background 方法吗?恐怕我此时拥有的ruby-alsa 文档对我没有足够的帮助(作为 Ruby 的一个完整的新手)。
更新:如果我将上面对 write 方法的调用替换为对 write_to_background 方法的调用,则会出现以下运行时错误:无法添加 pcm 处理程序(未实现功能)
更新 2:我尝试使用不同的 WAV 文件和以下代码,它以扭曲速度播放。
看来这里可能会发生一些事情。我相信第一个是参考采样率(长度 == 44100,即 CD 质量)。我将不得不研究如何以不同的速率播放音频文件。然而,除此之外,我仍然坚持如何让它在后台播放。虽然睡眠证明 ALSA 正在工作,但它在现实世界的场景中并不能很好地工作。
更新 3:让采样率位工作,即使它暂时依赖于一个幻数:
此时,我的 ruby 代码通过 ALSA 播放音频,但我不确定如何让它在后台连续播放而不需要睡眠。
linux - 模拟麦克风(虚拟麦克风)
我遇到了需要“模拟”麦克风输出的问题。
数据将通过网络传输,解码为 PCM,基本上需要写入麦克风 - 然后其他程序可以读取/记录/任何内容。
我一直在阅读 alsa,但信息非常稀少。文件插件似乎很有希望 - 我正在考虑将命名管道作为“infile”,然后我可以从我的应用程序向其传递数据。但是我无法让它工作(vlc/audacity 只是段错误)。
有没有更好的方法来做到这一点?关于 alsa 插件(尤其是文件插件)的任何建议?
python - PyAudio 尝试使用 JACK
我在 Python 2.6.6 下运行 PyAudio,并希望它使用 ALSA 而不是 JACK。
android - 我可以在 android 模拟器中使用 alsa 运行应用程序吗?
我正在制作自己的图像以在 Android 模拟器上运行。在这张图片中,我有一个想要使用 alsa 来播放声音的应用程序。Android模拟器可以做到吗?
使用 adb push 我发送了 aplay。使用 aplay -l 我会收到一条消息,指出没有可用的声音设备。
知道我该怎么做吗?
python - Windows Gstreamer ALSA 替代方案?
有谁知道可以在 Windows 上使用 gstreamer 的 ALSA 替代品,以及如何安装它,以及在哪里可以找到 Python 绑定(如果需要)?谢谢xxx
linux - 多线程游戏程序突然锁定在 glXSwapBuffers
我正在完善自己编写的 Linux 游戏程序,玩了大约 10 分钟后,它突然减速到每 30 秒左右 1 帧左右,整个系统也变慢了。即使在中断该过程之后,系统仍会持续缓慢大约一分钟。
在多个测试中,当减速发生时,我中断了 GDB 中的进程,并且它始终处于调用glXSwapBuffers
.
无论游戏状态或输入如何,它都会发生。唯一阻止它的是不在单独的线程中开始播放重复的音乐曲目:线程仍在运行,但它不会不断地写入声卡缓冲区。我已确保正确锁定了两个共享列表。
有没有人遇到过glXSwapBuffers
其他看似不相关的线程的问题?
操作系统是 Ubuntu 9,使用 OpenGL 的 Mesa 7.6.0 实现和 ALSA libasound2 1.0.20-3。今天早上我更新了我的 GeForce 6800 显卡的 NVIDIA 驱动程序,但无济于事。
(相关?)代码如下。
显示功能:
回放线程函数:
android - Android AudioRecord - 不会第二次初始化
嘿,我目前正试图让 AudioRecord 工作。因为我在一个更大的项目中需要它。但它似乎搞砸了很多。我一直在尝试很多东西,所以当我追踪这个错误时,我回到了基础。我正在使用我的三星 Galaxy S 作为我的调试设备。
我的问题是,第一次重新启动设备后,我可以毫无问题地初始化我创建的 AudioRecord 对象。但是我第二次运行它时,它不会初始化 AudioRecord 对象。我已经尝试了几个频率,仅供参考。
这是我的代码:
在查看 logcat 信息几个小时后,我发现了这个事件
这似乎“释放了对 AudioRecord 的本地保留。所以我尝试用我的 Audiorecord object.release() 覆盖 finalize。但这没有用.. 有人知道吗?
c - ALSA:全双工 C 示例?
是否有 C 语言中全双工 ALSA 连接的示例?我已经读到它是受支持的,但是我看到的所有介绍性示例都记录或播放了声音样本,但我希望有一个处理程序可以为我的 VoIP 应用程序做这两者。
非常感谢您的帮助,延斯
android - AudioHardwareALSA::getInputBufferSize(...) 中的缓冲区计算
我正在查看 AudioHardwareALSA.cpp 中的 getInputBufferSize(...) 函数,它返回硬编码的值 320。我的问题是:这个值是如何计算的?
我已经做了一些 pre-cals,但仍然有一些问题。
我在代码中找不到 period_time,所以一个问题是:它是在哪里定义的还是只是一个粗略的计算?
我也在尝试添加更多的采样率,即 16000 和 32000(以后可能会更多)。如何计算正确的最小缓冲区大小?所有采样率的延迟是否总是 10 毫秒?
任何帮助表示赞赏。