SDL无法打开音频设备的问题:Couldn‘t open audio/video device: No available audio/video device

2023-11-19

解决中标麒麟下SDL无法打开音频设备的问题:

root登录

首先就是一定要用root登录,这个可能是权限问题,否则后面实验不能成功

安装ALSA库

首先下载alsa-lib:https://www.alsa-project.org/main/index.php/Main_Page
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
tar -jxvf alsa-lib-1.1.2.tar.bz2
cd alsa-lib-1.1.2
./configure
make && make install
这样alsa-lib库就安装好了,不需要去管安装到哪里,系统自动安装了,测试时发现使用此版本库在播放音频时会出现:ALSA lib pcm.c:8251:(snd_pcm_recover) underrun occurred
此时音频播放会断断续续,怀疑是安装alsa-lib的版本太低了,于是换到了alsa-lib-1.2.2,就可以正常播放了

测试

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "SDL2/SDL.h"
static unsigned char *pAudio_chunk;
static unsigned int audio_len;
static unsigned char *pAudio_pos;
void fill_audio_buffer(void *userdata, Uint8 * stream, int len)
{
    SDL_memset(stream, 0, len);
    // 判断是否有读到数据
    if (audio_len == 0)
        return;
    len = (len > audio_len ? audio_len : len);
    SDL_MixAudio(stream, pAudio_pos, len, SDL_MIX_MAXVOLUME);
    pAudio_pos += len;
    audio_len -= len;
}
int main(int argc, char *argv[])
{
	if (SDL_Init(SDL_INIT_AUDIO | SDL_INIT_TIMER))
    {
        printf("Initialize SDL failed: %s\n", SDL_GetError());
        return -1;
    }
    /*** 初始化初始化SDL_AudioSpec结构体 ***/
    SDL_AudioSpec audioSpec;
    audioSpec.freq = 44100;                     // 音频数据的采样率。常用的有48000,44100等
    audioSpec.format = AUDIO_S16SYS;            // 音频数据的格式
    audioSpec.channels = 2;                     // 声道数。例如单声道取值为1,立体声取值为2
    audioSpec.silence = 0;                      // 设置静音的值
    audioSpec.samples = 1024;                   // 音频缓冲区中的采样个数,要求必须是2的n次方
    audioSpec.callback = fill_audio_buffer;     // 填充音频缓冲区的回调函数
    // 打开音频设备
    if (SDL_OpenAudio(&audioSpec, NULL) < 0)
    {
        printf("Can not open audio!");
        return -1;
    }
    printf("Open audio success!\n");
	return 0;
}

MakeFile

############################################################
# main makefile
############################################################

############################################################
# Target setting
############################################################

TARGET_DEMO = sdl_test

TOP_DIR = .
BIN_DIR = $(TOP_DIR)/.bin
OBJ_DIR = $(TOP_DIR)/.obj
SRC_DIR = $(TOP_DIR)
TPARTY_DIR = $(TOP_DIR)/../install/x86/SDL2/lib
INC_DIR = $(TOP_DIR)/../install/x86/SDL2/include

############################################################
# Project options
############################################################

INCLUDES += \
	-I$(INC_DIR)
	
LIBINCLUDES += \
	-L$(TPARTY_DIR)

LINK_LIBRARIES += \
	-lSDL2 -lm -ldl -lpthread -lrt

VPATH := \
		./
	
SRCS_CPP := 
		
SRCS_C := 

SRCS_DEMO_CPP := \
		$(SRCS_CPP)

SRCS_DEMO_C := \
		$(SRCS_C) \
		main.c
		
############################################################
# Compiler
############################################################

CXX = g++
CC = gcc
LINKXX = g++
LINK = gcc
AR = $(CROSS_PREFIX)ar -r
AS = $(CROSS_PREFIX)as
LD = $(CROSS_PREFIX)ld
MAKE = make 
SUBMAKE = $(MAKE) --no-print-directory -f
PY = python
SED = sed
MKDIR = mkdir -p
CP = cp
RM = rm -f
MV = mv
ECHO = echo

CXXFLAGS += -O3 -Wall -std=c++11
CFLAGS   += -O3 -Wall

############################################################
# build rules
############################################################

CC_TITLE   = @$(ECHO) "==> Compiling $@ "
LINK_TITLE = @$(ECHO) "==> Linking $(BIN_DIR)/$@ "

CXXFLAGS += $(INCLUDES)
CFLAGS   += $(INCLUDES)

define MK_OBJ_DIR
	if test ! -d $(OBJ_DIR); then $(MKDIR) $(OBJ_DIR); fi
endef

define MK_BIN_DIR
	if test ! -d $(BIN_DIR); then $(MKDIR) $(BIN_DIR); fi
endef

$(OBJ_DIR)/%.o: %.cpp
	$(CC_TITLE)
	@$(MK_OBJ_DIR)
	@$(CXX) -o $@ -c $(CXXFLAGS) $<
	
$(OBJ_DIR)/%.o: %.c
	$(CC_TITLE)
	@$(MK_OBJ_DIR)
	@$(CC) -o $@ -c $(CFLAGS) $<
	
OBJS_C = $(patsubst %.c, $(OBJ_DIR)/%.o, $(SRCS_C))
OBJS_CPP = $(patsubst %.cpp, $(OBJ_DIR)/%.o, $(SRCS_CPP))
OBJS_DEMO_C = $(patsubst %.c, $(OBJ_DIR)/%.o, $(SRCS_DEMO_C))
OBJS_DEMO_CPP = $(patsubst %.cpp, $(OBJ_DIR)/%.o, $(SRCS_DEMO_CPP))

############################################################
# make target
############################################################

all: $(TARGET_DEMO)
$(TARGET_DEMO):$(OBJS_DEMO_CPP) $(OBJS_DEMO_C)
	@$(LINK_TITLE)
	@$(MK_BIN_DIR)
	@$(LINK) $^ -o $(BIN_DIR)/$(TARGET_DEMO) $(LIBINCLUDES) $(LINK_LIBRARIES)

.PHONY:install clean distclean
install:
	@$(MKDIR) install/$(CROSS_NAME)/include
	@$(CP) -rf include/* install/$(CROSS_NAME)/include 
	@$(MKDIR) install/$(CROSS_NAME)/lib
	@if [ -e $(BIN_DIR)/$(TARGET_SO) ];   then $(CP) -f $(BIN_DIR)/$(TARGET_SO) install/$(CROSS_NAME)/lib;fi
	@if [ -e $(BIN_DIR)/$(TARGET_A) ];    then $(CP) -f $(BIN_DIR)/$(TARGET_A) install/$(CROSS_NAME)/lib;fi
	@if [ -e $(BIN_DIR)/$(TARGET_DEMO) ]; then $(MKDIR) install/$(CROSS_NAME)/sbin; $(CP) -f $(BIN_DIR)/$(TARGET_DEMO) install/$(CROSS_NAME)/sbin; fi
	
clean:
	@$(RM) -r $(OBJ_DIR) $(BIN_DIR)
	
distclean:
	@$(RM) -r $(OBJ_DIR) $(BIN_DIR)

运行的时候一定要在前面加上SDL_AUDIODRIVER=alsa

SDL_AUDIODRIVER=alsa ./sdl_test
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SDL无法打开音频设备的问题:Couldn‘t open audio/video device: No available audio/video device 的相关文章

  • QT:删除QGridLayout中QLabel之间的空格

    我将一些具有不同颜色的 QLabels 添加到 QGridLayout 作为 QWidget 的布局 现在我在每个 Qlabel 与下一个 Qlabel 之间有一个间距 我想将其删除 我尝试将标签的边距设置为 0 将 GridLayout
  • 获取 QListView 中所有可见项目的简单方法

    我正在尝试使用 Qt Framework 开发一个图像库应用程序 应用程序从所选文件夹加载所有图像 并使用 QListView 控件显示这些图像 但现在我想通过仅加载用户可见的图像来减少内存消耗 由于没有直接函数来获取视图中的所有可见项目
  • QML 中可重用的字体属性[重复]

    这个问题在这里已经有答案了 在 QML 中 我希望能够定义一组字体属性以进行简单的语义重用 例如 代替 Text text This is a header font family Encode Sans weight Font Black
  • 将 jstring 转换为 QString

    我正在调用一个返回字符串的 Java 函数 QAndroidJniObject obj QAndroidJniObject callStaticObjectMethod
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • Mac OS X 上的 Qt 字体系列和样式

    我有一个基于 Qt PyQt 的 GUI 应用程序 在 Mac OS X 和其他平台 上运行 它允许用户选择字体并具有粗体和斜体选项的复选框 在更新到新的基于 Cocoa 的 Qt 时 用户发现QFontComboBox不再显示不同的字体样
  • 是否有 Qt 小部件可以浏览应用程序中小部件的层次结构(类似于 Spy++)?

    我们有一个具有复杂的小部件层次结构的应用程序 我希望能够以与 Spy 类似的方式浏览此层次结构 查看和编辑属性 例如大小 如果有一个小部件可以显示此信息 则它不需要在外部应用程序中运行 那么问题来了 这样的神兽存在吗 您可以使用Gammar
  • Qt 5.1.1 与 Visual Studio 2012 - 这些 QT 版本无法访问

    打开 Visual Studio 时出现此错误 我安装自http qt project org downloads http qt project org downloads 适用于 Windows 64 位的 Qt 5 1 1 VS 20
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 为什么 QT 设计器重新调整大小或不允许我缩小或展开小部件或按钮?

    很多时候 在使用 QT 设计器时 我发现自己需要通过缩小或扩展来调整事物的大小 每当我尝试这样做时 程序都不允许我这样做 而只是恢复到将对象放置在窗口中时给我的原始默认大小 无论我的布局如何 为什么要这样做 是否有可能改变这一点 以便我可以
  • 如何将 QFile 与 std::iostream 一起使用?

    是否可以像 std iostream 一样使用 QFile 我很确定那里一定有一个包装纸 问题是在哪里 我有另一个库 它需要 std istream 作为输入参数 但在我的程序中 此时我只有一个 QFile 我使用以下代码提出了自己的解决方
  • Qt 相当于 .NET 数据绑定吗?

    Qt 中是否有相当于 NET 数据绑定的功能 我想使用引用数据库中特定实体的 QString 填充一些组合框和其他小部件 但是 如果我可以将数据绑定到这些字符串 而不是基于新的组合框选择再次查询数据库 或者基于构建我自己的将使用 QStri
  • QML MouseArea 将事件传播到按钮

    我正在开发一个应用程序 其菜单类似于 Android 版 Gmail 收件箱应用程序菜单 基本上 当您按下按钮打开菜单时 它就会滑入视图 用户可以将其滑开或按菜单上的按钮 对于滑动我使用了代码SwipeArea from kovrov ht
  • 相对文件路径的区别:Qt Creator的调试模式和发布模式

    QFile file test txt if file open QIODevice ReadOnly qDebug lt lt You got me 我在用 Qt 4 8 6 与 MSVC 2010 Qt 创建者 3 1 1 Window
  • 如何安装 C++ 的 VOCE?

    我正在尝试安装 VOCE api 它是为 C 和 Java 构建的语音识别 API 这是我第二次使用外部 C 库 也是第一次使用 Java C api 语音链接 http voce sourceforge net http voce sou
  • Qt 和 Sqlite 示例

    我正在寻找一些使用 Qt 的示例代码 它是带有 Sqlite 驱动程序的 SQL 模块 我需要示例的主要原因是我之前有 Qt 数据库接口的经验 并且 Sqlite 在字段类型方面有一些奇怪的行为 类型是按字段存储的 而不是按列存储的 The
  • Qt - 添加超链接到对话框

    有没有办法在 Qt 对话框中添加可点击的超链接 IE 它应该看起来像一个超链接 蓝色文本 当您单击它时 它应该在浏览器中打开该超链接 像这样的东西 Use QLabel setOpenExternalLinks bool 并在标签上设置文本
  • PyQt:在运行时向滚动区域添加小部件

    我试图在运行时通过按下按钮来添加新的小部件 在下面的示例中我使用标签 这里是例子 import sys from PyQt4 QtCore import from PyQt4 QtGui import class Widget QWidge

随机推荐

  • Vue控制台警告: Added non-passive event listener to a scroll-blocking ‘touchmove‘ event. Consider markin

    翻译过来如下 违反 没有添加被动事件监听器来阻止 touchstart 事件 请考虑添加事件管理者 passive 以使页面更加流畅 原因是 Chrome51 版本以后 Chrome 增加了新的事件捕获机制 Passive Event Li
  • 修改vscode默认打开两个标签窗口

    vscode 默认打开两个标签窗口 设置能同时打开多个标签 打开以下这个路径C Users xx AppData Roaming Code User 在setting json中添加一行设置 workbench editor enableP
  • android获取view宽高的时机

    关键点 获取宽高应该在view的onLayout之后 这个时候 view已经确定算出宽高 error 在onCreate onResume方法中调用 用于获取TextView的宽度和高度都是0 private void getTextHei
  • 使用NDK编译C/C++文件生成在安卓中的可执行文件

    使用NDK编译C C 文件生成在安卓中的可执行文件 需求 要编译一个C文件 然后将他运行到安卓手机中 通过这个可执行文件可以获取一些硬件的参数信息 或者对已经有的信息进行修改 从而达到我们想要的效果 相关知识点记录 NDK Native D
  • HTTP POST请求json数据量过大的问题

    与第三方合作 需要提供数据上传接口给他们 联调时被他们的单条json数据量困扰到了 第三方接口联调 一条7M的json上传给我们 毫无意外的报错了 实体数据量太大 该如何修改以便适应大数据量的上传呢 在代码层面想不到解决方案 于是查看配置
  • GitHub Actions自动化部署+定时百度链接推送

    前言 最近用VuePress搭建了一个静态网站 由于是纯静态的东西 每次修改完文章都要重新打包上传很是麻烦 虽然vuepress theme vdoing主题作者提供了GitHub Actions自动化部署的教程文章 但是过于简陋且是19年
  • 在小项目中实践领域驱动设计(含详细代码和实践过程) #CSDN博文精选# #IT# #项目实践#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 为什么Java不支持多继承,却搞了个Interface出来?

    多继承的问题在于无法找到一个合理的规则去初始化基类的数据 菱形继承中 两个子类分别调用父类构造函数进行初始化时 到底该调用谁 都调用的话 谁先谁后 C 的解决方案把这个问题丢给了使用者 也就是孙类 似乎是解决了问题 可是它忽视了子类并没有虚
  • 阿里巴巴编码规范习题

    因为工作需要 公司组里要求考阿里巴巴编程规范 于是我花了一天的时间看了一遍 然后刷了一些题 终于在第三次的时候考过了 考试是基于 阿里巴巴Java开发手册 一共50道题目 包括多选和单选 题目都是选择题 目前阿里云编程规范是出到V1 5 0
  • 算法:深度优先遍历和广度优先遍历

    什么是深度 广度优先遍历 图的遍历是指 从给定图中任意指定的顶点 称为初始点 出发 按照某种搜索方法沿着图的边访问图中的所有顶点 使每个顶点仅被访问一次 这个过程称为图的遍历 遍历过程中得到的顶点序列称为图遍历序列 图的遍历过程中 根据搜索
  • 类的数组成员变量的初始化

    使用STL标准模板库之后 编程时已经很少使用数组和指针 相反 多使用序列容器vector代替之 但事实并不这么理想 在迫不得已的情况下 我们还是会选择使用数组 这里介绍一下当数组作为类的成员变量时 应该怎么对它 数组 进行初始化 在类的构造
  • 日志LOG

    一 引言 1 1 日志介绍 用于记录系统中发生的各种事件 记录的位置常见的有 控制台 磁盘文件等 1 2 日志级别 日志级别从低到高 TRACE 堆栈 DEBUG 调试期 INFO 运行期 WARN 警告 ERROR 错误 FATAL 严重
  • 微信小程序实现一个遮罩层

    微信小程序实现遮罩层 开发中 遮罩层的使用场景很多 例如 loading的时候 例如搜索的时候等 以下是一个案例 点击页面的搜索框 在页面上添加一层遮罩层 显示搜索详情页 页面搜索框如下 页面最上面有一个搜索框 下面有一些其他UI元素
  • 微软解释关于Windows 10 收集用户数据那点事

    微软 Microsoft 在周一时发布关于Win10 收集用户数据的新细节 试图停止这场争议 早前 该软件巨头确认Win10收集用户数据并发送给微软 并声称这是用于改善整体用户体验 然而 这引发了人们对用户隐私以及用何种方式收集数据的关注
  • int、long、long long取值范围

    unsigned int 0 4294967295 int 2147483648 2147483647 unsigned long 0 4294967295 long 2147483648 2147483647long long的最大值 9
  • 美团外卖推荐关于用户新颖体验优化的技术探索

    外卖场景下 用户 复购 属性强 下单频次高 既想下单老商家 也会想换换 新口味 为更好平衡用户的复购 尝新体验 外卖推荐团队从2022年起开始持续投入 构建了外卖场景新颖性推荐的体系化解决方案 截止目前 外卖首页用户曝光新颖性累计提升19
  • 安装anconda以及在pycharm使用

    安装anconda 下载安装 配置虚拟环境需要通过anaconda来完成 anaconda的下载地址为 https docs conda io en latest miniconda html windows用户下载python3 8的mi
  • 蓝牙之四-Handler

    Handler机制 Handler允许用户发送和处理Message以及线程MessageQueue相关的可运行对象 每个Handler实例都对应一个单线程以及该线程的MessageQueue 当创建新的Handler时 该Handler将被
  • Kali搭建DVWA——Web靶场

    博主主站地址 微笑涛声 www cztcms cn 一 DVWA介绍 1 DVWA简介 DVWA是一款基于PHP和MYSQL开发的web靶场练习平台 集成了常见的web漏洞如sql注入 XSS 密码破解等常见漏洞 旨在为安全专业人员测试自己
  • SDL无法打开音频设备的问题:Couldn‘t open audio/video device: No available audio/video device

    解决中标麒麟下SDL无法打开音频设备的问题 root登录 首先就是一定要用root登录 这个可能是权限问题 否则后面实验不能成功 安装ALSA库 首先下载alsa lib https www alsa project org main in