@dr.pogodin/react-native-audio

中文文档
1.20.2发布于 2026/10/26MITTypeScriptCommonJS近 30 天下载 9932

React 本地: 访问音频输入流

中文使用文档
文档目录20 节
  1. 赞助人:
  2. 贡献者
  3. 内容
  4. 安装
  5. 开始
  6. API 参考
  7. 类
  8. 输入音频结构
  9. 样本显示器
  10. 常数
  11. 审计( F)
  12. 审计来源
  13. 章 次 页 次
  14. (简体中文)
  15. 职能
  16. 配置审计系统( C)
  17. 可输入( A)
  18. 类型
  19. 弹簧听器
  20. 错误收听器

反应原声

Latest NPM Release NPM Downloads CircleCI GitHub Repo stars Dr. Pogodin Studio

反应原生(RN)Android、iOS和macOS(Catalyst)平台的音频库,支持 新设 财务报告和审定财务报表 旧 RN建筑. 它涵盖:

  • 输入音频流(麦克风)收听/录音.
  • 音频样本回放.
  • 音频系统管理实用功能.
  • 还有东西要来.

Sponsor

赞助人:

贡献者

内容

安装

  • 安装软件包及其对等依赖

    npx install-peerdeps @dr.pogodin/react-native-audio
    
  • 跟随 反应-内在-允许 用于设置您的应用程序的文档 用于 记录-审计 (Android)和(或) 麦克风 (iOS)权限. 反应 - 内生 - 音频 库将自动请求这些权限, 如果需要, 当流出时 开始( ) 如果应用程序有 已正确配置以要求它们.

开始

一个更好的 开始 教程将被写入, 但是主要的想法 这是:

import {
  AUDIO_FORMATS,
  AUDIO_SOURCES,
  CHANNEL_CONFIGS,
  InputAudioStream,
} from "@dr.pogodin/react-native-audio";

function createAndStartAudioStream() {
  const stream = new InputAudioStream(
    AUDIO_SOURCES.RAW,
    44100, // Sample rate in Hz.
    CHANNEL_CONFIGS.MONO,
    AUDIO_FORMATS.PCM_16BIT,
    4096, // Sampling size.
  );

  stream.addErrorListener((error: Error) => {
    // Do something with a stream error.
  });

  stream.addChunkListener((chunkId: number) => {
    // You may pause the stream for chunk processing - this way you will not
    // receive new chunk events until stream.unmute() is called. Note, `chunkId`
    // argument is just a sequential chunk number, thus you may judge by it,
    // whether any chunks have been skipped between this callback calls.
    stream.mute();

    const chunk: ArrayBuffer = stream.getChunk(chunkId);

    // .getChunk(chunkId) returns "null" if `chunkId` value does not match ID
    // of the latest chunk in the stream. This way, starting with v1.20.0 of
    // the library, it will not crash with out-of-memory error even if you do
    // not use stream.mute() - the native layer only keeps the latest chunk
    // data, thus not consuming too much memory if your chunk processing is
    // slower then generation of the chunks.
    if (chunk) {
      // Do something with the chunk.
    }

    // Resumes the stream.
    stream.unmute();
  });

  stream.start();

  // Call stream.destroy() to stop the stream and release any associated
  // resources. If you need to temporarily stop and then resume the stream,
  // use .mute() and .unmute() methods instead.
}

除此之外,图书馆还将包括其他辅助方法 到音频输入和输出.

API 参考

类

输入音频结构

class InputAudioStream;

这个 输入音频结构 类,如其名称所示,代表个人输入 从指定格式获取音频数据 音频源.

构造器( )

const stream = new InputAudioStream(
  audioSource: AUDIO_SOURCES,
  sampleRate: number,
  channelConfig: CHANNEL_CONFIGS,
  audioFormat: AUDIO_FORMATS,
  samplingSize: number,
  stopInBackground: boolean = true,
);

创建新 输入音频结构 举个例子 新创建的流不 记录音频,在本地方不会消耗资源,直到其 开始( ) 方法被称为.

  • audioSource —— 说 审计来源 - 音频源此流 我会听。 目前,它仅为Android所支持;在iOS上,此值 被忽略,该流从默认输入中获取音频数据 设备的来源.
  • sampleRate —— 说 编号 - 抽样率[赫兹[ [ ] [ ] ]. ]. 44100赫兹是建议值,因为它是唯一的 保证在所有Android(和其他许多)装置上工作.
  • channelConfig —— 说 章 次 页 次 —— 说 单曲 或者说 立体声 流线 模式.
  • audioFormat —— 说 审计( F) ——音频格式.
  • samplingSize —— 说 编号 取样(数据块)大小, 以块中每个通道的样本数量表示.
  • stopInBackground —— 说 布尔 - 可选的。 这个 真实 (默认) 当应用程序离开前景时,流会自动暂停, 当应用程序返回时,该流会自动恢复 预想.

addChunk 听牌( )

stream.addChunkListener(listener: ChunkListener): void;

向流中添加一个新的音频数据块听器。 见 重新移动Chunk Listener () ,然后将听众从溪流中移除.

说明: 为相同的收听者( R) 对流对多次调用是安全的 ——收听者仍不会多次被加入溪口.

  • listener —— 说 弹簧听器 - 用音频调用 数据块当它们到达.

添加错误倾听器( )

stream.addErrorListener(listener: ErrorListener): void;

向溪流添加新的错误倾听器。 见 . remove 错误倾听器( ) ,然后将听众从溪流中移除.

说明: 为相同的收听者( R) 对流对多次调用是安全的 ——收听者仍不会多次被加入溪口.

  • listener —— 说 错误收听器 ——错误调用 细节,如果在溪流中发生任何错误.

. destroy () (中文(简体) )

stream.destroy(): void;

摧毁溪流——停止录音,并释放所有相关 资源,包括本地和联署材料。 一旦一条溪被摧毁, 无法重用.

getChunk () (中文(简体) )

stream.getChunk(id: number): ArrayBuffer | null;

回返 矩阵缓冲 带有流中最新音频块的字节数据, 如果给出 id 匹配最新音频块的标识; 否则它返回 无效· ; 即说. 如果您无法及时获取音频块数据, 它的数据将被丢弃 一旦下一个块变得可用—— 这种方式,即使你是 处理音频块的速度比生成的要慢, 您不使用 .mute () (中文(简体) )编号 :.unmute () (中文(简体) ) 方法,文库不会与外出相撞 出错(和收到) 无效 从 getChunk () (中文(简体) ) 你会知道,你有 缺少一些音频块.

.mute () (中文(简体) )

stream.mute(): void;

声入溪. 一条已失声的流仍然继续捕获音频数据块 音频源,从而不断增加块ID(见 弹簧听器, (中文(简体) ), 但是它不会向 JavaScript 层发送新的块事件 .

通话 .mute () (中文(简体) ) 在哑音或非活性(非录音)音频流上 没有效果。 另见 活动, (中文(简体) ), 已安装。 。 。 .

重新移动Chunk Listener ()

stream.removeChunkListener(listener: ChunkListener): void;

从溪去去取听者. 没有操作如果给出 listener 没有 与溪相接. 见 addChunk 听牌( ) 以添加听众.

. remove 错误倾听器( )

stream.removeErrorListener(listener: ErrorListener): void;

从溪去去取听者. 没有操作如果给出 listener 没有 与溪相接. 见 添加错误倾听器( ) 连接听众.

开始( )

stream.start(): Promise<boolean>;

启动音频流记录。 这种方法实际上初始化了流 开始录音.

说明: 必要时,此方法将询问应用程序用户音频重编码 权限,使用 反应-内在-允许 图书馆.

  • 决定 布尔 价值 - 真实 如果溪流已经开始 成功且为 活动, (中文(简体) ), 虚假 否则.

. stop () (中文)

stream.stop(): Promise<void>;

拦住溪口. 与 .mute () (中文(简体) ) 方法, . stop () (中文) 实际停止 音频流并释放其资源在本土方面, 与 . destroy () (中文(简体) ) 它不释放其在联合来文中的资源 层即说. 因此,不放弃所有连接的听众的引用) 允许 开始( ) 此流实例再次出现( 技术上将 将进入一条新的溪流 在本土一侧, 但这将是不透明的到终点 联合来文一方).

  • 断取一出溪.

.unmute () (中文(简体) )

stream.unmute(): void;

取消先前的调用 已安装 流线。 如果对不活动调用则无效果 (未启动),或已经变哑的流.

活动

stream.active: boolean;

唯相读取. 真实 当溪流是 开始 和记录, 虚假 否则.

说明: 活动 将会是 真实 对于一个开始和 已安装 流线.

自动格式

stream.audioFormat: AUDIO_FORMATS;

唯相读取. 持有提供的音频格式值 输入音频结构是因为 构造器( )。 。 。 . 审计( F) enum提供有效的格式值.

.adio 来源

stream.audioSource: AUDIO_SOURCES;

唯相读取. 持有提供给 输入音频结构是因为 构造器( )目前它只对Android设备有影响 为 iOS 忽略. 审计来源 enum提供有效的音频源值.

频道配置

stream.channelConfig: CHANNEL_CONFIGS;

唯相读取. 持有频道模式( R)单曲 或者说 立体声(b) 提供给 输入音频结构是因为 构造器( )。 。 。 . 章 次 页 次 enum 提供有效的 频道模式值 .

已安装

stream.muted: boolean;

唯相读取. 真实 当溪流被变音 .mute () (中文(简体) ), (中文(简体) ), 虚假 否则.

.样本

stream.sampleRate: number;

唯相读取. 持有溪流提供的样本率 构造器( ), (中文(简体) ), 在 [赫兹[ [ ] [ ] ]. ].

样本大小

stream.samplingSize: number;

唯相读取. 持有流的采样(音频数据块)大小,提供给 溪流 构造器( )。值是每个通道的样本数量, 因此,对于多通道流来说,实际块大小将是: 此数字,以及字节中的样本大小可能因不同而异 自动格式。 。 。 .

停止背景

stream.stopInBackground: boolean;

唯相读取. 真实 如果将流设置为自动 . stop () (中文) 当应用程序 叶子前景,和 开始( ) 当它回到前方时.

样本显示器

class SamplePlayer;

代表音频样本播放器 。 准备装入内存 一组简短的音频片段,然后可以按要求低调播放 长生不老.

我们在Android上使用 声音波 请检查date=中的日期值 (帮助) 细节。 特别注意到: 每个解码后的声音内部限于一个 兆字节存储,whchi在44.1Hz立体声时表示约5.6秒 (以较低的抽样率或频道口罩计算,持续时间按比例较长) (单项).

构造器( )

const player = new SamplePlayer();

创建新 样本显示器 举个例子 注意这种创建 样本显示器 实例已经在本地一侧分配了一些资源,从而释放 那些资源,你必须使用它 . destroy () (中文(简体) ) 方法 一旦不再需要这个例子.

添加错误倾听器( )

player.addErrorListener(listener: ErrorListener): void;

向玩家添加错误的收听器。 如果给出则不做 listener 实值 已添加到此玩家 .

. destroy () (中文(简体) )

player.destroy(): Promise<void>;

破坏玩家实例,释放所有相关资源. 销毁一次 无法重用玩家实例 .

  • 一旦完成就决定了.

. 载( )

player.load(sampleName: string, samplePath: string): Promise<void>;

将一个(额外)音频样本装入玩家.

  • sampleName —— 说 字符串 - 样本名称,您将参考 在其他方法中,例如 游戏( ), (中文(简体) ), 样板Player.stop (), (中文(简体) ), 财务报告和审定财务报表 . 卸载( )如果与先前装入样品的名称相匹配,则 样本将被替换 .
  • samplePath —— 说 字符串 ——设备上样本文件的路径. 目前仅支持从正则文件中装入样本(譬如说. 没有 从Android资产装入的可能性,而不首先将资产复制到 a 常规文件).
  • 一旦样品被装入并解码,即可解码,从而准备播放.

游戏( )

player.play(sampleName: string, loop: boolean): Promise<void>;

播放先前装入的音频样本 . 载( ) 方法.

注: 在目前的执行中,开始播放样本总是停止 正在播放由同一玩家(如果有的话)播放的样本. 没有任何技术障碍支持在 与此同时,它只是需要一些更多的发展努力.

注: 使用 添加错误倾听器( ) 方法 重播期间任何错误的细节。 虽然 游戏( ) 如果回放失败启动, 它本身会拒绝 提供除失败事实之外的任何细节,它也不捕捉 任何进一步的错误(因为回放本身是同步的).

  • sampleName —— 说 字符串 - 样本名称,在装入时被打乱 与 . 载( ) 方法.
  • loop —— 说 布尔 - 设定 真实 无限循环样本; 或者说 虚假 来玩一次.
  • 启动播放后决定; 如果播放失败, 拒绝播放 由于一些错误.

. remove 错误倾听器( )

player.removeErrorListener(listener: ErrorListener): void;

删除 listener 从此 player如果听者不听,则什么都不做 连接到玩家.

. stop () (中文)

player.stop(sampleName: string): Promise<void>;

停止重播样本, 如果样本未被此播放则不做任何工作 游戏机.

  • sampleName —— 说 字符串 ——样本名称.
  • 一旦完成就决定了.

. 卸载( )

player.unload(sampleName: string): Promise<void>;

将音频样本提前装入此播放器 .

  • sampleName —— 说 字符串 ——样本名称.
  • 一旦完成就决定了.

常数

审计( F)

enum AUDIO_FORMATS {
  PCM_8BIT: number;
  PCM_16BIT: number;
  PCM_FLOAT: number;
};

提供有效 自动格式 数值。 见 Android 文档 对于这三种格式的确切定义; 在iOS上应当相同 设备.

说明: 至少Android允许其它音频格式,我们可能包括 未来在这里.

审计来源

enum AUDIO_SOURCES {
  CAMCODER: number;
  DEFAULT: number;
  MIC: number;
  REMOTE_SUBMIX: number;
  RAW: number;
  VOICE_CALL: number;
  VOICE_COMMUNICATION: number;
  VOICE_DOWNLINK: number;
  VOICE_PERFORMANCE: number;
  VOICE_RECOGNITION: number;
  VOICE_UPLINK: number;
};

提供有效 .adio 来源 数值。 现在,它们已经对Android生效了 只有设备,而且它们代表了下列相应的值: Media Recorders. (原始内容存档于2018-10-21). 音频来源。 。 。 .

章 次 页 次

enum CHANNEL_CONFIGS {
  MONO: number;
  STEREO: number;
};

提供有效 频道配置 数值.

说明: 现在它只提供了两个价值, 蒙古语 财务报告和审定财务报表 定 约不过, 至少Android似乎支持额外的频道,这些频道可以添加到 未来,看 Android 音频格式文档。 。 。 .

(简体中文)

const IS_MAC_CATALYST: boolean;

等数 真实 如果应用程序运行在macOS(Catalyst)平台上; 虚假 否则.

职能

配置审计系统( C)

function configAudioSystem(): Promise<void>;

配置音频系统(输入输出设备).

目前它在Android上无所作为;在iOS上它(重新)配置音频 设定 播放记录( R) 分类和启动会话.

说明: 在iOS上,如果 播放记录( R) 设备中没有类别, 它设置 重播 类别;如果两个类别都没有, 函数拒绝其结果承诺。 该功能还设置如下: iOS 音频会话的选项 : 允许蓝牙, (中文(简体) ), 允许蓝牙A2DP,以及 默认语音。 。 。 .

见 iOS 文档 关于iOS音频会话和分类的进一步详情.

  • 一旦完成就决定了.

可输入( A)

function getInputAvailable(): Promise<boolean>;
  • 决定: 真实 如果设备有可用的音频输入源, 虚假 否则.

类型

弹簧听器

type ChunkListener = (chunkId: number) => void;

音频数据类型 输入音频结构 与 addChunk 听牌( ) 方法.

  • chunkId —— 说 编号 - 后续块号,交给 getChunk () (中文(简体) ) 获取块数据的方法。 当溪流是 已安装 块 对跳过音频块的数字仍在递增,因此 chunkId 可用于判断溪流失声时是否漏出任何块.

错误收听器

type ErrorListener = (error: Error) => void;

可连接到一个错误的收听器类型 输入音频结构 与 添加错误倾听器( ) 方法.

  • error —— 说 错误 ——流出错误.

版本与发布记录

@dr.pogodin/react-native-audio 共发布 62 个版本,首次发布于 2021/06/03;过去 12 个月发布了 11 个版本。

版本发布日期距今
1.20.2latest2026/10/2618 天前
1.20.12026/10/2519 天前
1.20.02026/10/2321 天前
1.19.32026/10/1924 天前
1.19.22026/10/1925 天前
1.19.12026/08/282 个月前

关于 @dr.pogodin/react-native-audio 的常见问题

@dr.pogodin/react-native-audio 是什么?

React 本地: 访问音频输入流

如何安装 @dr.pogodin/react-native-audio?

在项目目录运行 npm install @dr.pogodin/react-native-audio,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(*)、react-native(*)、react-native-permissions(>=3.8)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@dr.pogodin/react-native-audio 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dr.pogodin/react-native-audio 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@dr.pogodin/react-native-audio 可以商用吗?

@dr.pogodin/react-native-audio 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dr.pogodin/react-native-audio 的下载量有多少?

根据 npm 官方下载统计,@dr.pogodin/react-native-audio 在 2026/10/13 – 2026/11/11 这 30 天内被下载 9,932 次,日均约 331 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dr.pogodin/react-native-audio 还在维护吗?

最新版本 1.20.2 发布于 2026/10/26(18 天前);至今共发布 62 个版本,其中过去 12 个月发布了 11 个;首次发布于 2021/06/03。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。