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

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

相关推荐
浮梦终焉14 天前
_使用CLion的Vcpkg安装SDL2,添加至CMakelists时报错,编译报错
报错·c/c++·sdl2
事后不诸葛25 天前
安卓音频之dumpsys audio
framework·安卓·audio
桃园码工1 个月前
13_HTML5 Audio(音频) --[HTML5 API 学习之旅]
音视频·html5·audio
小李飞刀李寻欢3 个月前
ffmpeg 提取mp4文件中的音频文件并保存
ffmpeg·音视频·音频·视频·audio
Tinghua_M3 个月前
基于Android11简单分析audio_policy_configuration.xml
音视频·audio
Eric.Lee20213 个月前
音频文件重采样 - python 实现
人工智能·python·深度学习·算法·audio·音频重采样
程序员黄老师4 个月前
Windows下SDL2创建最简单的一个窗口
c++·windows·sdl·sdl2
小李飞刀李寻欢4 个月前
gradio音频的初步处理函数
人工智能·音视频·gradio·audio
小李飞刀李寻欢5 个月前
ffmpeg获得视频的音频文件
ffmpeg·音视频·video·audio