Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Linux 异步回调_Linux_Asynchronous_Resume_Alsa - Fatal编程技术网

Linux 异步回调

Linux 异步回调,linux,asynchronous,resume,alsa,Linux,Asynchronous,Resume,Alsa,我试图使用ALSA的异步回调功能,以便在应用程序级别提供暂停和恢复功能。但是函数async\u add\u pcm\u handler()返回一个错误(更具体地说,返回-38) 上面是我正在使用的一段代码,定义了MyCallback函数。你能指出可能的错误吗。我的问题与你的症状完全相同,所以我希望解决方法是相同的 我的解决方案是直接打开音频设备,而不是打开“默认”设备。这是一个名为“hw:someName”的音频设备。 我相信最初的问题是“默认”设备是一个与pulseAudio声音服务器接口的虚

我试图使用ALSA的异步回调功能,以便在应用程序级别提供暂停和恢复功能。但是函数
async\u add\u pcm\u handler()
返回一个错误(更具体地说,返回-38)


上面是我正在使用的一段代码,定义了MyCallback函数。你能指出可能的错误吗。

我的问题与你的症状完全相同,所以我希望解决方法是相同的

我的解决方案是直接打开音频设备,而不是打开“默认”设备。这是一个名为“hw:someName”的音频设备。 我相信最初的问题是“默认”设备是一个与pulseAudio声音服务器接口的虚拟设备——在我的Ubuntu linux上无论如何都是这样。由于pulseAudio声音服务器不支持完整的ALSA API,因此会出现“函数未实现”错误

要澄清解决方案,请替换

rc = snd_pcm_open(&handle, (char*)"default",SND_PCM_STREAM_PLAYBACK, 0);


您可以调用const char*snd_strerror(int errnum)从错误代码中获取消息,这可能有助于()@JoachimIsaksson描述为“函数未实现”。在中使用异步alsa回调的任何方式都不推荐用于移植等。有没有其他方法可以让我在应用程序级别实现暂停/恢复功能。因为我需要的是暂停/播放功能,所以我最终将PCM数据分成小块并逐个写入alsa。如果调用Pause(),那么我将停止编写这些块。
rc = snd_pcm_open(&handle, (char*)"default",SND_PCM_STREAM_PLAYBACK, 0);
rc = snd_pcm_open(&handle, (char*)"hw:someName",SND_PCM_STREAM_PLAYBACK, 0);