首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法设置SDL2以在Linuxubuntu20.04上使用conan运行音频(alsa)

无法设置SDL2以在Linuxubuntu20.04上使用conan运行音频(alsa)
EN

Stack Overflow用户
提问于 2020-11-05 22:30:57
回答 1查看 996关注 0票数 0

取决于我做了什么

“没有这样的音频设备”

如果我让SDL2来决定我的音频设备,或者

加载libasound.a: /home/aypahyo/.conan/data/libalsa/1.2.4///package/d48130e0dd76369b1338deb3b2372c5a649f9f2d/lib/libasound.a:无效的ELF标头失败

当我设置SDL_AUDIODRIVER=alsa时。(错误消息实际上被切断了,我在结尾添加了一个r)。

下面是一个显示错误的实现:

代码语言:javascript
复制
#include <SDL.h>
#include <iostream>

void SetupWant(SDL_AudioSpec * want);
void PrintError(std::string source);

void run()
{
  //https://wiki.libsdl.org/FAQUsingSDL
  putenv((char *)"SDL_AUDIODRIVER=alsa");

  if(0 != SDL_Init(SDL_INIT_AUDIO)) PrintError("SDL_Init");

  SDL_AudioSpec want, have;
  SDL_AudioDeviceID dev;

  SetupWant(&want);
  dev = SDL_OpenAudioDevice(NULL, 0, &want, &have, SDL_AUDIO_ALLOW_FORMAT_CHANGE);
  if (0 == dev) PrintError("SDL_OpenAudioDevice");
}

void SetupWant(SDL_AudioSpec * want)
{
  SDL_memset(want, 0, sizeof(SDL_AudioSpec));
  want->freq = 48000;
  want->format = AUDIO_F32;
  want->channels = 2;
  want->samples = 4096;
}

void PrintError(std::string source)
{
  std::cout << "error " << source << ": " << SDL_GetError() << "\n";
}

我使用conan在我的CMake项目中安装了依赖项。以下是conan文件:

代码语言:javascript
复制
[requires]
sdl2/2.0.12@bincrafters/stable
sdl2_image/2.0.5@bincrafters/stable
sdl2_mixer/2.0.4@bincrafters/stable
flac/1.3.2@bincrafters/stable
glib/2.64.0@bincrafters/stable
boost/1.71.0@conan/stable
zlib/1.2.11@conan/stable
bzip2/1.0.8@conan/stable
gtest/1.10.0
glm/0.9.9.8
libmpg123/1.25.13@bincrafters/stable
libalsa/1.2.4

[generators]
cmake

依赖项sdl2/2.0.12@bincrafters/stable不附带源文件夹,但是我可以使用sdl2/2.0.10@bincrafters/stable包运行sdl2 ./配置。

以下是总结:

代码语言:javascript
复制
SDL2 Configure Summary:
Building Shared Libraries
Building Static Libraries
Enabled modules : atomic audio video render events joystick haptic sensor power filesystem threads timers file loadso cpuinfo assembly
Assembly Math   : mmx 3dnow sse sse2 sse3
Audio drivers   : disk dummy oss alsa(dynamic) pulse(dynamic) jack(dynamic) nas(dynamic)
Video drivers   : dummy x11(dynamic) opengl opengl_es2 vulkan
X11 libraries   : xcursor xdbe xinerama xinput2 xinput2_multitouch xrandr xscrnsaver xshape xvidmode
Input drivers   : linuxev linuxkd
Using libsamplerate : NO
Using libudev       : NO
Using dbus          : YES
Using ime           : YES
Using ibus          : NO
Using fcitx         : NO

大多数google结果基本上都给出了应该安装的包名,然后需要重建sdl2。我对任何图书馆都是这样做的。

我发现的唯一其他技巧是明确设置音频驱动程序,这就是导致ELF头问题的原因。

我对linux以及conan和cmake都很陌生。我很难确定还有什么能被打破。

这可能是我的机器的本地问题,但从我在网上找到的点击率来判断,我认为这个一般性的问题是更广泛的兴趣。

我的问题是,我的设置有什么问题,以及如何修复它?

编辑:

我转储了libasound.a文件,下面是前几位:

代码语言:javascript
复制
00000000: 21 3C 61 72 63 68 3E 0A 2F 20 20 20 20 20 20 20    !<arch>./.......
00000010: 20 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20    ........0.......
00000020: 20 20 20 20 30 20 20 20 20 20 30 20 20 20 20 20    ....0.....0.....
00000030: 30 20 20 20 20 20 20 20 36 33 33 30 32 20 20 20    0.......63302...

阅读ELF,这看起来不像一个精灵文件,这将解释为什么加载它在假设它是一个精灵文件将失败。所以也许这就是我不兼容的原因。

编辑1:我在libsdl.org上发表了一篇文章。

编辑2:我在诱捕者/社区上写了一篇文章

Eidt #3: Eric创建了一个拉请求,它似乎是解决方案的一部分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-19 21:13:54

问题解决了,问题中的痕迹说明了如何解决问题。

最终是几个分层的问题。

  • libalsa/1.2.4需要对共享库进行修复,我不得不将该选项添加到conan文件中。
  • 我不得不插入我的盒子,因为默认设备是我通常不使用的通道。
  • 最终,我需要在我的系统上正确地设置声音。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64706266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档