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

PortAudio--PCM播放与采集

PortAudio 是一款跨平台音频 I/O 库,支持 Windows、Linux、macOS 等系统,其核心设计基于异步回调机制,适用于实时音频采集与播放场景。主要负责‌音频流的采集与播放‌,其原生接口仅支持‌PCM格式‌的原始音频数据处理,不包含内置的音频编码模块‌。

官网:https://www.portaudio.com/

一、核心特性

  1. 跨平台支持
    提供统一 API 接口,适配多种音频后端(如 ALSA、PulseAudio、Core Audio 等)‌。

  2. 回调驱动模型
    通过注册回调函数实现音频数据实时处理,支持非阻塞式音频流操作‌。

  3. 设备枚举与管理
    可动态获取系统音频设备列表,并指定输入/输出设备进行数据流操作‌。

二、开发流程

  1. 环境配置

    • Linux (Ubuntu)‌:直接安装开发库,或者下载源码编译。
      安装开发库 sudo apt-get install portaudio19-dev
      ‌源码编译。下载pa_stable_v190700_20210406.tgz,编译即可。
    • Windows‌:下载预编译库或源码编译,配置 Visual Studio 包含路径‌。
      下载pa_stable_v190700_20210406.tgz+ASIO SDK,编译即可。
  2. 初始化与终止

    Pa_Initialize();  // 初始化 PortAudio
    Pa_Terminate();   // 释放资源
    
  3. 音频流操作

    • 打开默认流
      Pa_OpenDefaultStream(&stream, inputChannels, outputChannels, 
                           format, sampleRate, framesPerBuffer, 
                           callback, userData);
      
    • 启动/停止流
      Pa_StartStream(stream);  // 启动音频流
      Pa_StopStream(stream);   // 停止音频流
  4. 回调函数实现

    static int callback(
        const void *inputBuffer,   // 输入音频数据(如麦克风输入)
        void *outputBuffer,        // 输出音频数据(如扬声器输出)
        unsigned long framesPerBuffer, // 每个缓冲区的帧数
        const PaStreamCallbackTimeInfo* timeInfo, // 时间信息(时间戳、缓冲区间隔等)
        PaStreamCallbackFlags statusFlags,        // 流状态标志(如缓冲区溢出/欠载)
        void *userData             // 用户自定义数据(可传递参数到回调函数)
    );
    

    ‌参数详解‌:
    ‌inputBuffer‌:输入音频数据的缓冲区指针(若流未开启输入,则为 NULL)。数据格式由 Pa_Op

相关文章:

  • 日志截断/日志中途清空/不停止程序
  • 简单c语言编程
  • 数字化攻防战场的进化论:红蓝对抗训练如何重塑网络安全范式
  • debain12.9使用gpustack部署音频模型
  • DeepSeek底层揭秘——GEMM
  • iPhone 16 Plus :凉凉了
  • 初级:I/O与NIO面试题深度剖析
  • 两周实训成果:哪吒主题网页项目实战
  • Spring Boot整合Activiti工作流详解
  • 嵌入式 python 安装
  • 基于Flask的通用登录注册模块,并代理跳转到目标网址
  • 大模型——极简LangChain智能体开发入门指南
  • WHAM 人体3d重建部署笔记 vitpose
  • Python从入门到精通2:SQLite数据库(FastAPI + SQLite全流程开发指南)
  • AI广告新时代:DeepBI如何重塑亚马逊广告投放逻辑
  • 建造者模式的优点及其在优秀框架中的实现案例
  • Jsoup解析时如何处理异常?
  • ngx_http_index_loc_conf_t
  • Elasticsearch 入门
  • Python中的集合(set)
  • 扩展名 网站/玄幻小说百度风云榜
  • java 网站开发 顺序/免费收录平台
  • java开发网站开发费用/个人在百度上发广告怎么发
  • 做挂件的网站/南通百度网站快速优化
  • 潍坊可以做网站的公司/网络推广公司排名
  • 国外做的比较的ppt网站有哪些/百度竞价是什么工作