当前位置: 首页 > article >正文

SDL2:PC端编译使用

SDL2:PC端编译使用

    • 1. SDL2:PC端编译使用
      • 1.1 安装必要的依赖
      • 1.2 下载编译SDL2
      • 1.3 SDL2使用示例:Audio
      • 1.4 运行示例程序


1. SDL2:PC端编译使用

1.1 安装必要的依赖

首先,确保安装了编译SDL2所需的依赖库:

sudo apt-get update
sudo apt-get install -y autoconf automake libtool pkg-config
sudo apt-get install libx11-dev libxext-dev libxrandr-dev libxinerama-dev libxcursor-dev
sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev

1.2 下载编译SDL2

wget https://www.libsdl.org/release/SDL2-2.28.4.tar.gz
tar -zxvf SDL2-2.28.4.tar.gz

cd SDL2-2.28.4
mkdir build_pc
cd build_pc

cmake .. \
    -DCMAKE_INSTALL_PREFIX=$(pwd)/_install_pc \
    -DSDL_STATIC=ON \
    -DSDL_SHARED=OFF
      
make
make install

1.3 SDL2使用示例:Audio

(1)main.cpp示例:

  • 使用SDL2从音频设备获取输入数据,并使用printf打印相关信息。
#include <SDL2/SDL.h>
#include <stdio.h>

// 音频回调函数
void audioCallback(void* userdata, Uint8* stream, int len) {
    // 这里可以处理音频数据,例如保存到文件或进行实时处理
    // 本示例中不进行处理,仅打印信息
    printf("Captured %d bytes of audio data.\n", len);
}

int main(int argc, char* argv[]) {
    // 初始化SDL音频子系统
    if (SDL_Init(SDL_INIT_AUDIO) < 0) {
        printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
        return -1;
    }

    // 定义音频规格
    SDL_AudioSpec want, have;
    SDL_zero(want);
    want.freq = 44100;  // 采样率
    want.format = AUDIO_S16SYS;  // 采样格式
    want.channels = 2;  // 双声道
    want.samples = 1024;  // 缓冲区大小
    want.callback = audioCallback;  // 指定音频回调函数
    want.userdata = nullptr;

    // 打开音频设备
    SDL_AudioDeviceID deviceId = SDL_OpenAudioDevice(nullptr, 1, &want, &have, 0);
    if (deviceId == 0) {
        printf("SDL could not open audio device! SDL_Error: %s\n", SDL_GetError());
        SDL_Quit();
        return -1;
    }

    // 检查音频规格是否符合预期
    if (have.freq != want.freq || have.format != want.format || have.channels != want.channels) {
        printf("Audio specification mismatch.\n");
        SDL_CloseAudioDevice(deviceId);
        SDL_Quit();
        return -1;
    }

    // 播放音频
    SDL_PauseAudioDevice(deviceId, 0);

    // 持续捕获音频数据
    printf("Capturing audio... Press Enter to stop.\n");
    getchar();

    // 停止音频捕获
    SDL_PauseAudioDevice(deviceId, 1);

    // 关闭音频设备
    SDL_CloseAudioDevice(deviceId);

    // 退出SDL
    SDL_Quit();

    return 0;
}

(2)编译

使用Makefile编译:

SDL2_DIR := /home/archermind/Env/Tools/SDL2-2.28.4/build_pc/_install_pc/
SDL2_INCLUDE := \
    -I${SDL2_DIR}/include \
    -I${SDL2_DIR}/include/SDL2
SDL2_LIB := ${SDL2_DIR}/lib/

CXX := g++
LDFLAGS := -L$(SDL2_LIB) -lSDL2
CXXFLAGS := -g -O3 -fPIC -std=gnu++20

TARGET := audio_capture
$(TARGET):
    $(CXX) $(CXXFLAGS) $(SDL2_INCLUDE) -o main.cpp.o -c main.cpp
    $(CXX) $(CXXFLAGS) -o $(TARGET) main.cpp.o $(LDFLAGS)

clean:
    rm -f $(TARGET) *.o

生成audio_capture可执行文件,执行编译:make

1.4 运行示例程序

在终端中运行编译好的程序:

./audio_capture

声明:资源可能存在第三方来源,若有侵权请联系删除!


http://www.kler.cn/a/506900.html

相关文章:

  • 《Keras 3 在 TPU 上的肺炎分类》
  • 从漏洞管理到暴露管理:网络安全的新方向
  • 2023-2024 学年 广东省职业院校技能大赛(高职组)“信息安全管理与评估”赛题一
  • Web3D交互展示:重塑产品展示的新维度
  • 画流程图 代码生成流程图 流程图自动运行
  • Redis--21--大Key问题解决方案
  • dockerfile1.0
  • 【使用EasyExcel快速实现数据下载到Excel功能】
  • Vue进阶之Vue3后台系统
  • 【C#】WPF项目,项目目录文件解析、WinForms 和 WPF 的概念及其区别与联系
  • Spring boot面试题---- Spring boot项目运行原理
  • 基于Python SciPy的拥塞控制算法模拟
  • 【.net core】【sqlsugar】时间查询示例
  • tui-editor报错
  • 【数据结构练习题】栈与队列
  • ThreeJs功能演示——几何体操作导入导出
  • YOLOv8改进,YOLOv8检测头融合RFAConv卷积,并添加小目标检测层(四头检测),适合目标检测、分割等
  • Meta Quest 4:未来的虚拟现实体验
  • 数据区的内存空间
  • 海豚调度DolphinScheduler-3.1.9配置windows本地开发环境
  • “飞的”点外卖,科技新潮流来袭
  • WordPress Squirrly SEO插件存在身份认证SQL注入漏洞(CVE-2025-22783)
  • 基于SynxFlow库实现GPU加速的雨洪仿真(Python)
  • Linux 常用文件查看命令
  • android adb 无线连接 (wifi)
  • CPU负载与CPU使用率之区别