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

Android tinyalsa库函数剖析

1. PCM 流控制函数

打开、关闭及状态检查

  • pcm_open(unsigned int card, unsigned int device, unsigned int flags, struct pcm_config *config)
    打开指定声卡(card)和设备(device)的 PCM 流。

    • flags 参数确定流的方向:例如 PCM_IN(录音)或 PCM_OUT(回放)。
    • config 参数为一个结构体,内含通道数、采样率、数据格式、周期大小与周期数等设置。
    • 成功后返回一个 struct pcm * 句柄,用于后续的数据传输操作。
  • pcm_close(struct pcm *pcm)
    关闭之前通过 pcm_open() 打开的 PCM 句柄,释放资源。

  • pcm_is_ready(struct pcm *pcm)
    判断 PCM 流是否已成功打开并处于可用状态。返回非零表示出错或不可用,通常在打开后立即检查以确保后续操作是安全的。


2. PCM 参数管理函数

为了判断硬件支持哪些采样参数,你可以获取 PCM 的能力信息:

  • pcm_params_get(unsigned int card, unsigned int device, unsigned int flags)
    获取指定 PCM 设备的参数集合,返回一个 struct pcm_params *。该结构体中包含了硬件支持的采样率、格式、周期大小等参数范围。

  • pcm_params_free(struct pcm_params *pcm_params)
    释放由 pcm_params_get() 分配的参数信息结构体。

  • 参数查询和设置函数:

    • pcm_params_get_mask(struct pcm_params *pcm_params, enum pcm_param param)
      获取某个参数(如采样率、格式)的支持情况(一个 bit mask)。
    • pcm_params_get_min() / pcm_params_get_max()
      分别获取某个参数所支持的最小或最大值。
    • pcm_params_set_min() / pcm_params_set_max()
      为参数设置新的最小或最大值(一般用于定制或者限制范围)。
  • pcm_params_to_string(struct pcm_params *params, char *string, unsigned int size)
    将参数信息转换为人类可读的字符串,便于调试或者日志输出。返回填充字符串的长度或所需的长度。

  • pcm_params_format_test(struct pcm_params *params, enum pcm_format format)
    检查特定的 PCM 格式(例如 PCM_FORMAT_S16_LE)是否在支持的格式中,返回 1 表示支持,0 表示不支持。


3. PCM 配置操作

有时需要在流打开后获取或调整当前使用的配置:

  • pcm_get_config(struct pcm *pcm, struct pcm_config *config)
    从已打开的 PCM 流中获取当前的配置信息(例如实际启用的通道数、采样率、缓冲区设置等)。

  • pcm_set_config(struct pcm *pcm, struct pcm_config *config)
    修改已经打开的 PCM 流的配置(如果硬件和驱动支持动态调整的话)。


4. 错误信息、格式转换及辅助函数

  • pcm_get_error(struct pcm *pcm)
    返回一个字符串,描述最近一次调用出错时的错误原因,用于调试和错误处理。

  • pcm_format_to_bits(enum pcm_format format)
    返回所使用 PCM 格式的存储位数。例如,对于 PCM_FORMAT_S24_LE,可能返回 32,因为实际存储 32 位数据(尽管只有 24 位有效)。

  • 缓冲区大小转换函数:

    • pcm_get_buffer_size(struct pcm *pcm)
      得到当前 PCM 流推荐使用的总缓冲区大小(单位:帧)。通常总帧数 = period_size * period_count
    • pcm_frames_to_bytes(struct pcm *pcm, unsigned int frames)
      将帧数转换为字节数(考虑到每帧的采样数据大小,依赖通道数和采样格式)。
    • pcm_bytes_to_frames(struct pcm *pcm, unsigned int bytes)
      将字节数转换回帧数。
  • pcm_get_latency(struct pcm *pcm)
    返回当前 PCM 流的延迟(以毫秒为单位)。延迟值与缓冲区配置(总大小、采样率等)直接相关。

  • pcm_get_htimestamp(struct pcm *pcm, unsigned int *avail, struct timespec *tstamp)
    获取当前缓冲区状态——返回流中可用帧数以及与之关联的时间戳。

    • 对于输入流,这表示可供应用读取的帧数。
    • 对于输出流,这表示还空闲(可写)的帧数。
  • pcm_get_subdevice(struct pcm *pcm)
    返回实际打开时使用的子设备编号,有些硬件可能提供多个子设备用于并发操作。


5. 数据传输操作

标准读写接口

  • pcm_read(struct pcm *pcm, void *data, unsigned int count)
    从 PCM 输入流(或录音设备)中读取数据。

    • count 参数通常是以字节为单位,读取的数据量应与 pcm_frames_to_bytes() 计算出的单个周期数据一致。
    • 返回值为 0 表示成功,否则返回负值错误码。
  • pcm_write(struct pcm *pcm, const void *data, unsigned int count)
    将数据写入 PCM 输出流(或播放设备):

    • 类似于 pcm_read()count 表示写入的数据量(单位:字节)。
    • 写入操作会触发硬件播放,如果处于中断恢复状态时(例如 FIFO underrun 后)可能会重新启动播放。

内存映射(mmap)接口

直接使用内存映射技术可以降低数据传输的延迟和 CPU 占用:

  • pcm_mmap_begin(struct pcm *pcm, void **areas, unsigned int *offset, unsigned int *frames)
    获取 PCM 设备内存映射缓冲区的起始地址、当前偏移量以及可操作的帧数。
  • pcm_mmap_commit(struct pcm *pcm, unsigned int offset, unsigned int frames)
    提交写入或读取的数据,更新缓冲区状态。
  • pcm_mmap_write()pcm_mmap_read()
    分别用于直接向缓冲区写数据或从缓冲区读取数据,代替标准的 pcm_write()pcm_read()
  • pcm_mmap_avail(struct pcm *pcm)
    返回当前缓冲区中可供写入或读取的帧数。
  • pcm_mmap_get_hw_ptr(struct pcm* pcm, unsigned int *hw_ptr, struct timespec *tstamp)
    获取当前硬件指针的位置以及它所对应的时间戳,用于同步时钟或进一步的数据处理。

6. 流状态控制和事件接口

  • pcm_prepare(struct pcm *pcm)
    准备 PCM 子流,使其处于可触发状态。常用于在播放或录音前执行预处理(例如重置缓冲区)。

  • pcm_start(struct pcm *pcm)
    启动 PCM 子流进行数据传输,适用于那些不自动启动数据传输的设备或在调用 pcm_write()/pcm_read() 之前要明确启动的数据流。

  • pcm_stop(struct pcm *pcm)
    停止 PCM 子流的数据传输,常用于结束一段播放或录音过程。

  • pcm_ioctl(struct pcm *pcm, int request, ...)
    通过 ioctl 调用发送控制命令给 PCM 驱动,允许更底层的控制和调整,这是更底层的设备操作接口。

  • 事件与等待相关:

    • pcm_wait(struct pcm *pcm, int timeout)
      等待 PCM 设备准备好数据(例如,等待缓冲区有足够数据可读或者有足够空闲帧可写)。
    • pcm_get_poll_fd(struct pcm *pcm)
      得到可以用于 poll()select() 的文件描述符,以便与其他事件循环集成。
    • pcm_set_avail_min(struct pcm *pcm, int avail_min)
      修改在触发 PCM 数据传输前,缓冲区最小应达到的帧数。如果使用 MMAP 模式而且禁用了 IRQ,此设置尤其重要用于降低延迟。

7. Mixer(混音器)控制接口

TinyALSA 同时提供了对硬件混音器的基本控制接口,用于调整音量、开关、通道切换等。

打开、关闭及 Mixer 信息

  • mixer_open(unsigned int card)
    打开指定声卡的混音器设备,返回表示 mixer 的句柄结构。
  • mixer_close(struct mixer *mixer)
    关闭并释放混音器资源。
  • mixer_get_name(struct mixer *mixer)
    获取混音器的名称,通常用于调试或显示硬件信息。

获取混音器控制(Control)

  • mixer_get_num_ctls(struct mixer *mixer)
    返回混音器中包含多少个可控的控件。
  • mixer_get_ctl(struct mixer *mixer, unsigned int id)mixer_get_ctl_by_name(struct mixer *mixer, const char *name)
    通过控件的索引或名称获取某个具体的混音器控制对象。
  • mixer_ctl_get_name(struct mixer_ctl *ctl)
    获取某个混音器控制项的名称。

混音器控件的属性与操作

  • 类型和枚举检查:

    • mixer_ctl_get_type() / mixer_ctl_get_type_string()
      返回控制项的数据类型(例如整数、布尔值、枚举等)。
    • mixer_ctl_get_num_values(struct mixer_ctl *ctl)
      一个控制项可能有多个值,返回值的数量。
    • mixer_ctl_get_num_enums()mixer_ctl_get_enum_string()
      针对枚举类型的控制项,获取枚举数目及对应的字符串名称。
  • 控件数据的获取与设置:

    • mixer_ctl_get_value()mixer_ctl_set_value()
      用于直接获取或设置控制项的具体值。
    • mixer_ctl_get_percent()mixer_ctl_set_percent()
      针对音量等控件,允许以百分比形式获取或设置值。
    • mixer_ctl_get_array()mixer_ctl_set_array()
      用于读取或设置控件的数组数据(适合多通道或复合控件)。
    • mixer_ctl_set_enum_by_string()
      针对枚举控件,通过输入字符串来设置控制值。
  • 范围控制:

    • mixer_ctl_get_range_min() / mixer_ctl_get_range_max()
      获取混音器控件支持的最小或最大值,这对限制控制设置非常有用。

混音器事件支持

  • mixer_subscribe_events(struct mixer *mixer, int subscribe)
    允许应用订阅或取消订阅混音器事件(例如,外部变化触发控制更新)。
  • mixer_wait_event(struct mixer *mixer, int timeout)
    等待混音器事件的发生。
  • mixer_consume_event(struct mixer *mixer)
    消费已经发生的事件,确保事件不会被重复处理。

小结

  • PCM 流相关的函数pcm_openpcm_closepcm_readpcm_write 等)主要负责数据传输的初始化、实时读写操作及状态管理。
  • 参数管理、配置和转换函数(例如 pcm_params_getpcm_frames_to_bytes 等)帮助开发者在运行时查询硬件能力、进行单位转换以及调试配置。
  • 高级数据传输接口(如 pcm_mmap_* 系列函数)提供了直接内存映射方式,可用于降低延迟和优化性能。
  • Mixer 接口 则提供了对硬件混音器(如音量、通道路由、开关等)的操作,以便对声音输入输出进行更细粒度的控制。

相关文章:

Android tinyalsa库函数剖析

1. PCM 流控制函数 打开、关闭及状态检查 pcm_open(unsigned int card, unsigned int device, unsigned int flags, struct pcm_config *config) 打开指定声卡(card)和设备(device)的 PCM 流。 flags 参数确定流的方向&#xff1…...

DFS/BFS专练-搞定图论基础!(从海岛问题过渡至图论基础应用C++/C)

:: 图论基础理论 :: 紧接着,图论基础理论中,咱们讲到,图论的遍历主要由(dfs与bfs决定) 那咱们本篇博客就来聊聊dfs与bfs。 dfs(深度优先搜索)、bfs(广度优先搜索)的区别…...

2024年RIS SCI2区:自适应天鹰算法AAO,深度解析+性能实测

目录 1.摘要2.天鹰算法AO原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 智能电网通过集成可再生能源并管理供需动态平衡来提高效率,本文提出了自适应天鹰算法(AAO),AAO使用Sigmoid因子来平衡探索和开发,根据迭…...

orcad csi 17.4 DRC规则设置及检查

rCAD绘制完原理图之后总是需要开启DRC检测,但是DRC一般都是英文版的,下面基于Cadence17.4 的orCAD16.6 对DRC的界面做简单的介绍 首先,鼠标点击原理图,然后再点击右上方的小勾图标 desine rules check option选项的界面 电气规…...

前端实战:基于 Vue 与 QRCode 库实现动态二维码合成与下载功能

在现代 Web 应用开发中,二维码的应用越来越广泛,从电子票务到信息传递,它都扮演着重要角色。本文将分享如何在 Vue 项目中,结合QRCode库实现动态二维码的生成、与背景图合成以及图片下载功能,打造一个完整且实用的二维…...

天梯赛DFS合集

1.DFS特殊输入:PTA | 程序设计类实验辅助教学平台 这题其他还是蛮容易,直接用递归即可,问题在于怎么输入,其实可以在递归到底层时输入即可,也就是边递归边输入,另外提一嘴跟这个题没什么关系的点&#xff…...

Qt中读写结构体字节数据

在Qt中读写结构体字节数据通常涉及将结构体转换为字节数组(QByteArray)或直接从内存中读写。以下是几种常见方法&#xff1a; 方法1&#xff1a;使用QDataStream读写结构体 cpp #include <QFile> #include <QDataStream>// 定义结构体 #pragma pack(push, 1) //…...

关于yarn和hadoop

1.yarn的定义&#xff1f; YARN&#xff08;Yet Another Resource Negotiator&#xff09;是 Apache Hadoop 的一个关键组件&#xff0c;它是一个资源管理平台&#xff0c;负责管理和调度计算资源。YARN 允许多个数据处理引擎&#xff08;如 MapReduce、Spark、Flink 等&#…...

【全部更新】2025妈妈杯D题1-4问mathercupD题数学建模挑战赛D题数学建模思路代码文章教学短途运输货量预测及车辆调度问题

完整内容请看文章最下面的推广群 先进行摘要和结果的展示、再给出完整的思路 问题1&#xff1a;通过时间序列或机器学习模型预测货量&#xff0c;并按历史分布拆分到10分钟颗粒度。 问题2&#xff1a;基于货量生成运输需求&#xff0c;用贪心算法或整数规划优化车辆调度。 问…...

考研408第一章计算机系统概述——1.1-1.2操作系统的基本概念与发展历程

考研408计算机系统概述——操作系统的基本概念与发展历程 一、操作系统的基本概念 1.1 操作系统的定义与功能 1.1.1 定义 操作系统(Operating System, OS)是管理计算机硬件与软件资源的程序集合,为应用程序和用户提供接口与服务。其核心功能包括: 资源管理者:处理机、…...

《从理论到实践:CRC校验的魔法之旅》

循环冗余校验&#xff08;Cyclic Redundancy Check ,CRC &#xff09;是一种用于检测数据传输或存储过程中错误的算法。他通过计算数据的校验值&#xff08;也称为CRC码&#xff09;&#xff0c;并在数据接收端验证校验值是饭否正确&#xff0c;从而检测数据是否在传输过程中被…...

【算法笔记】整除与最大公约数(GCD)专题整理

参考文章链接&#xff08;已获得作者授权&#xff09; 一、整除&#xff1a;数学中的"完美分割" 定义 若整数 a a a能整除整数 b b b&#xff08;记作 a ∣ b a\mid b a∣b&#xff09;&#xff0c;则存在整数 k k k使得 b a ⋅ k ba\cdot k ba⋅k。 通俗理解&…...

JDBC 与 MyBatis 详解:从基础到实践

目录 一、JDBC 介绍 二、使用 JDBC 查询用户信息 三、ResultSet 结果集 四、预编译 SQL - SQL 注入问题 五、预编译 SQL - 性能更高 六、JDBC 增删改操作 插入数据&#xff1a; 更新数据&#xff1a; 删除数据&#xff1a; 七、MyBatis 介绍 八、MyBatis 入门程序 引…...

虚拟机开发环境搭建与内网迁移

以下是关于在虚拟机中搭建开发环境并迁移至内网的详细步骤及注意事项&#xff0c;适用于需要在内网隔离环境中进行开发的场景&#xff08;如企业安全要求、离线开发等&#xff09;&#xff1a; ‌一、虚拟机开发环境搭建‌ ‌1. 选择虚拟机平台‌ ‌推荐工具‌&#xff1a; ‌V…...

【HFP】蓝牙HFP协议音频连接核心技术深度解析

目录 一、音频连接建立的总体要求 1.1 发起主体与时机 1.2 前提条件 1.3 同步连接的建立 1.4 通知机制 二、不同主体发起的音频连接建立流程 2.1 连接建立触发矩阵 2.2 AG 发起的音频连接建立 2.3 HF 发起的音频连接建立 三、编解码器连接建立流程 3.1 发起条件 3.…...

PowerBI 表格显示无关联的表数据

假设有两张没有建立关联的数据表: 产品表 库存表 我们将他们放入表格里显示&#xff0c;数据会出问题。 因为 [库存表] 里的数据有除 [产品表] 以外的产品的数据&#xff0c;所以PBI无法从两张表中找到一一对应的数据。 解决方法:(不建立关联关系的情况下) 新建一个度量值&a…...

观察者模式详解与C++实现

1. 模式定义 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;定义了对象间的一对多依赖关系。当一个对象&#xff08;被观察者/主题&#xff09;状态改变时&#xff0c;所有依赖它的对象&#xff08;观察者&#xff09;都会自动收到通知…...

用ffmpeg 实现拉取h265的flv视频转存成264的mp4 实现方案

1.需要对ffmpeg进行源码修改 这里使用 https://github.com/numberwolf/FFmpeg-QuQi-H265-FLV-RTMP 这位大神提供的源码 需要 x265_3.2.1.tar.gz last_x264.tar.bz2 fdk-aac-2.0.1.tar.gz FFmpeg-QuQi-H265-FLV-RTMP-master.zip 这些包 升级ubuntu18.04 apt update a…...

《AI赋能职场:大模型高效应用课》第8课 AI辅助职场沟通与协作

【本课目标】 掌握AI辅助邮件、沟通话术的优化技巧。学习利用AI快速生成高效的会议纪要。通过实操演练&#xff0c;提升职场沟通效率与协作能力。 【准备工具】 DeepSeek大模型&#xff08;deepseek.com&#xff09;百度文心一言&#xff08;yiyan.baidu.com&#xff09; 一…...

PowerBI下载安装教程

1、打开官方下载链接&#xff0c;或者Microsoft store里搜索下载&#xff08;通过官网下载可以选择安装路径&#xff0c;应用商店直接会安装到默认路径里&#xff09;。 2、等待下载成功后&#xff0c;直接点击【打开】即可。...

PowerBI如何钻取到明细

PowerBI如何钻取到明细 最近做项目领导提到一需求&#xff0c;在查看账龄的时候&#xff0c;还想查看到它的一个明细情况。 PowerBI如何钻取到明细&#xff0c;以一个案例分享下&#xff1a; 第一步&#xff1a;我们先查看账龄的一个分布情况&#xff1a; 第二步&#xff1a;…...

常见算法题

import java.util.*;class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.right right;} }public class test_04_16 {//获取二叉…...

C语言超详细结构体知识

1.自定义类型&#xff1a;结构体的介绍 在之前的博客中&#xff0c;我们简单介绍过了关于结构体的基本知识&#xff0c;这里我们稍微复习一下。 结构体(struct)是C语言中一种重要的复合数据类型&#xff0c;它允许将不同类型的数据组合成一个整体。 1.1结构体的定义 结构体使…...

2N60-ASEMI功业控制与自动化专用2N60

编辑&#xff1a;ll 2N60-ASEMI功业控制与自动化专用2N60 型号&#xff1a;2N60 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 最大漏源电流&#xff1a;2A 漏源击穿电压&#xff1a;600V RDS&#xff08;ON&#xff09;Max&#xff1a;5.00Ω…...

发现“横”字手写有难度,对比两个“横”字

我发现手写体“横”字“好看”程度&#xff0c;难以比得上印刷体&#xff1a; 两个从方正简体启体来的“横”字&#xff1a; 哪个更好看&#xff1f;我是倾向于左边一点。 <div style"transform: rotate(180deg); display: inline-block;"> 左边是我从方正简…...

深入解析 HTML5 Web IndexedDB 数据库:构建高效离线应用的基石

摘要 在现代 Web 应用开发中,离线访问和高效处理大量结构化数据的需求日益增长。HTML5 的 IndexedDB 作为一种强大的客户端 NoSQL 数据库,为开发者提供了可靠的解决方案。本文将全面介绍 IndexedDB 的特性、语法、方法、应用实例、使用场景,以及其优势与劣势,帮助开发者深…...

17-算法打卡-哈希表-快乐数-leetcode(202)-第十七天

1 题目地址 202. 快乐数 - 力扣&#xff08;LeetCode&#xff09;202. 快乐数 - 编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为&#xff1a; * 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 * 然后重复这个过程直到这个数变为 1…...

决战浏览器渲染:减少重绘(Repaint)与重排(Reflow)的性能优化策略

在现代Web开发中&#xff0c;流畅的用户体验是衡量应用质量的关键指标之一。用户与界面的每一次交互&#xff0c;背后都牵动着浏览器复杂而精密的渲染过程。当这个过程不够高效时&#xff0c;用户就会感受到卡顿、延迟&#xff0c;甚至页面“掉帧”。在众多影响渲染性能的因素中…...

深度解析生成对抗网络:原理、应用与未来趋势

在人工智能的浩瀚星空中&#xff0c;生成对抗网络&#xff08;Generative Adversarial Networks&#xff0c;GAN&#xff09;犹如一颗璀璨的明星&#xff0c;自 2014 年由 Ian Goodfellow 等人提出以来&#xff0c;便以其独特而强大的生成能力&#xff0c;在计算机视觉、自然语…...

电能质量治理解决方案:构建高效、安全的电力系统

随着“双碳”目标的推进及新型电力系统的快速发展&#xff0c;大量电力电子设备&#xff08;如光伏逆变器、充电桩、变频器等&#xff09;接入电网&#xff0c;导致谐波畸变、无功功率激增、电压波动等问题日益突出。电能质量恶化不仅威胁设备安全&#xff0c;还影响电网稳定运…...

生态篇|多总线融合与网关设计

引言 1. 车内多总线概览 2. 主流车载总线技术对比 3. 网关设计原则与架构 4. 协议转换与映射策略 5. 安全与诊断功能集成...

热门与冷门并存,25西电—电子工程学院(考研录取情况)

1、电子工程学院各个方向 2、电子工程学院近三年复试分数线对比 学长、学姐分析 由表可看出&#xff1a; 1、电子科学与技术25年相较于24年上升20分 2、信息与通信工程、控制科学与工程、新一代电子信息技术&#xff08;专硕&#xff09;25年相较于24年下降25分 3、25vs24推…...

HDFS入门】HDFS安全与权限管理解析:从认证到加密的完整指南

目录 引言 1 认证与授权机制 1.1 Kerberos认证集成 1.2 HDFS ACL细粒度控制 2 数据加密保护 2.1 传输层加密(SSL/TLS) 2.2 静态数据加密 3 审计与监控体系 3.1 操作审计流程 3.2 安全监控指标 4 权限模型详解 4.1 用户/组权限模型 4.2 umask配置原理 5 安全最佳实…...

合成数据中的对抗样本生成与应用:让AI模型更强、更稳、更安全

目录 合成数据中的对抗样本生成与应用&#xff1a;让AI模型更强、更稳、更安全 一、什么是对抗样本&#xff1f; 二、为什么要在合成数据中引入对抗样本&#xff1f; 三、对抗样本在图像合成数据中的生成方法 ✅ 方法1&#xff1a;FGSM&#xff08;Fast Gradient Sign Met…...

考研系列-计算机网络-第二章、物理层

一、通信基础 1.物理层基本概念 2.数据通信基础知识...

uni-app 安卓10以上上传原图解决方案

在Android 10及以上版本中&#xff0c;由于系统对文件访问的限制&#xff0c;使用chooseImage并勾选原图上传后&#xff0c;返回的是图片的外部存储路径&#xff0c;如&#xff1a;file:///storage/emulated/0/DCIM/Camera/。这种外部存储路径&#xff0c;无法直接转换成所需要…...

关于element的dialog的取消(关闭弹窗)方法触发两次

在这里插入图片描述 关闭的时候加个修饰符.native close.native...

vue,uniapp解决h5跨域问题

如果有这样的跨域问题&#xff0c;解决办法&#xff1a; ✅ 第一步&#xff1a;在项目根目录下创建 vue.config.js 和 package.json 同级目录。 // vue.config.js module.exports {devServer: {proxy: {/api: {target: https://app.yycjkb.cn, // 你的后端接口地址changeOrig…...

2025-04-18 李沐深度学习3 —— 线性代数

文章目录 1 线性代数1.1 标量、向量与矩阵1.2 矩阵概念1.3 按特定轴求和 2 实战&#xff1a;线性代数2.1 标量2.2 向量2.3 矩阵2.4 张量2.5 降维2.6 点积2.7 矩阵-向量积2.8 矩阵-矩阵乘法2.9 范数2.10 练习 1 线性代数 1.1 标量、向量与矩阵 标量&#xff08;Scalar&#xff…...

2026《数据结构》考研复习笔记三(C++高级教程)

C高级教程 一、文件和流二、异常处理三、命名空间四、模板五、信号处理六、多线程 一、文件和流 iostream 用于标准输入/输出&#xff08;控制台I/O&#xff09;&#xff0c;处理与终端&#xff08;键盘输入和屏幕输出&#xff09;的交互 包含以下全局流对象&#xff1a; cin&…...

python进阶: 深入了解调试利器 Pdb

Python是一种广泛使用的编程语言&#xff0c;以其简洁和可读性著称。在开发和调试过程中&#xff0c;遇到错误和问题是不可避免的。Python为此提供了一个强大的调试工具——Pdb&#xff08;Python Debugger&#xff09;。 Pdb是Python标准库中自带的调试器&#xff0c;可以帮助…...

前端资源加载失败后重试加载(CSS,JS等引用资源)

前端资源加载失败后的重试 .前端引用资源时出现了资源加载失败(这里针对的是路径引用异常或者url解析错误时) 解决这个问题首先要明确一下几个步骤 1.什么情况或者什么时候重试 2.如何重试 3.重试过程中的边界处理 这里引入里三个测试脚本&#xff0c;分别加载里三个不同的脚…...

每日算法【双指针算法】(Day 2-复写零)

双指针算法 1.算法题目(复写零)2.讲解算法原理3.编写代码 1.算法题目(复写零) 注意&#xff1a;不要越界&#xff0c;不能开额外的数组&#xff0c;只能从现有数组上进行操作&#xff0c;没有返回值。 2.讲解算法原理 解法&#xff1a;双指针操作 先根据“异地”操作&#xf…...

【C++深入系列】:模版详解(上)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 你不需要很厉害才能开始&#xff0c;但你需要开始才能很厉害。 ★★★ 本文前置知识&#xff1a; 类和对象&#xff08;上&#xff09; …...

PyCharm Flask 使用 Tailwind CSS v3 配置

安装 Tailwind CSS 步骤 1&#xff1a;初始化项目 在 PyCharm 终端运行&#xff1a;npm init -y安装 Tailwind CSS&#xff1a;npm install -D tailwindcss3 postcss autoprefixer初始化 Tailwind 配置文件&#xff1a;npx tailwindcss init这会生成 tailwind.config.js。 步…...

设计模式每日硬核训练 Day 15:享元模式(Flyweight Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 14&#xff1a;组合模式小结 在 Day 14 中&#xff0c;我们学习了组合模式&#xff08;Composite Pattern&#xff09;&#xff1a; 适用于构建树状层级结构&#xff0c;使得“单个对象”和“对象集合”统一操作。广泛用于文件系统、UI 控件树、组织结…...

使用Service发布应用程序

使用Service发布应用程序 文章目录 使用Service发布应用程序[toc]一、什么是Service二、通过Endpoints理解Service的工作机制1.什么是Endpoints2.创建Service以验证Endpoints 三、Service的负载均衡机制四、Service的服务发现机制五、定义Service六、Service类型七、无头Servic…...

美家市场2025电视版分享码-美家市场电视直播软件分享码免费获取

美家市场2025电视版作为一款备受欢迎的应用市场&#xff0c;为用户提供了海量的电视直播软件&#xff0c;而分享码则是免费获取这些资源的重要途径。与此同时&#xff0c;乐看家桌面也是一款在智能电视领域极具特色的软件&#xff0c;它能与美家市场搭配使用&#xff0c;为用户…...

动手学深度学习:手语视频在NiN模型中的测试

前言 NiN模型是在LeNet的基础上修改&#xff0c;提出了1x1卷积层和全局平均池化层的概念&#xff0c;减少了全连接所带来的参数量很多的问题。本篇在之前代码的基础上添加了模型保存&#xff0c;loss和acc记录以及记录模型时间等功能&#xff0c;所以模型后面的代码会重新记录…...

医院数据中心智能化数据上报与调数机制设计

针对医院数据中心的智能化数据上报与调数机制设计,需兼顾数据安全性、效率性、合规性及智能化能力。以下为系统性设计方案,分为核心模块、技术架构和关键流程三部分: 一、核心模块设计 1. 数据上报模块 子模块功能描述多源接入层对接HIS/LIS/PACS/EMR等异构系统,支持API/E…...