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

SDL2:PC端编译使用 -- SDL2多媒体库使用音频实例


更多内容:XiaoJ的知识星球


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/511768.html

相关文章:

  • EasyControl:首个登陆AWS Marketplace的中国MDM先锋
  • 风吹字符起,诗意Linux:一场指令与自由的浪漫邂逅(上)
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(13)网格单元分类、物理场与自由度概念
  • 基于微信小程序的安心陪诊管理系统
  • JavaFx + SpringBoot 快速开始脚手架
  • C#中System.Text.Json:从入门到精通的实用指南
  • 【Vscode】Vscode不能执行vue脚本的原因及解决方法
  • 2024年度数据科学与机器学习技术总结
  • Java 中求两个 List集合的交集元素
  • MECD+: 视频推理中事件级因果图推理--VLM长视频因果推理
  • Windows11电脑总是一闪一闪的,黑一下亮一些怎么解决
  • node.js 文件操作
  • 解决MAC安装软件时提示“xxx.app 显示已损坏”的方法
  • 抽奖系统(4——活动模块)
  • 网页固件升级界面设计
  • 【Maven】resources-plugin
  • vue3-sfc-loader 加载远程.vue文件(sfc)案例
  • React总结
  • 合合信息DocFlow产品解析与体验:人人可搭建的AI自动化单据处理工作流
  • UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理?
  • 【spring boot统一功能处理】拦截器
  • 梯度提升决策树树(GBDT)公式推导
  • 【面试题】JVM部分[2025/1/13 ~ 2025/1/19]
  • pytest+playwright落地实战大纲
  • leetcode242-有效字母异位词
  • RoCE网络及其协议栈详解(没有中间商赚差价的网络)