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

SDL2:PC端编译使用

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

1. SDL2:PC端编译使用

1.1 安装必要的依赖

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

shell 复制代码
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

shell 复制代码
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打印相关信息。
cpp 复制代码
#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编译:

shell 复制代码
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 运行示例程序

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

shell 复制代码
./audio_capture

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

相关推荐
奔跑吧 android8 天前
【车载audio开发】【Qualcomm PAL 详解 6】【PAL 总体架构与模块交互指南】
audio·aosp·pal·高通音频框架·8155·8295
奔跑吧 android8 天前
【车载audio开发】【Qualcomm PAL 详解 4】【Session 模块 介绍】
audio·aosp·高通·车载音频
千里马学框架9 天前
跟着google官方文档学习车载音频Car audio configuration
学习·configuration·音视频·aaos·安卓framework开发·audio·车机
安卓兼职framework应用工程师1 个月前
Android 10.0 按键智能机按键连续响两次的异常处理
android·audio·audioservice·按键音·按键声音
张世争1 个月前
windows 使用 cmake 方式源码编译 SDL2
windows·cmake·sdl2
张世争1 个月前
windows clion lvgl 使用 sdl2
windows·clion·sdl2
民乐团扒谱机1 个月前
【微实验】仿AU音频编辑器开发实践:从零构建音频可视化工具
算法·c#·仿真·audio·fft·频谱
张世争2 个月前
ubuntu 使用 cmake 方式源码编译 SDL2
ubuntu·源码编译·sdl2
CheungChunChiu2 个月前
[特殊字符] 嵌入式音频接口全景图解:I2S、TDM、PDM、SPDIF、AC’97 与 PCM 的关系
linux·audio·pulseaudio
千里马学框架4 个月前
音频焦点学习之AudioFocusRequest.Builder类剖析
android·面试·智能手机·车载系统·音视频·安卓framework开发·audio