Recorder
Recorder copied to clipboard
为库添加ts类型
由于详细的文档没有,我得在大篇幅的readme和示例里面找东西,如果有类型提示就好很多了,这是我用ai去生成的类型,可以参考一下
// Recorder Core 类型定义
/** 录音配置选项 */
export interface RecorderOptions {
/** 输出类型,如 "mp3" | "wav" */
type?: string;
/** 比特率,wav: 16或8位,MP3: 8kbps等 */
bitRate?: number;
/** 采样率 */
sampleRate?: number;
/** 实时处理回调函数 */
onProcess?: (
buffers: Int16Array[],
powerLevel: number,
bufferDuration: number,
bufferSampleRate: number,
newBufferIdx: number,
asyncEnd: () => void,
) => boolean | void;
/** 可选直接提供一个媒体流 */
sourceStream?: MediaStream;
/** 可选提供一个 running 状态的 AudioContext */
runningContext?: AudioContext;
/** 音频轨道设置 */
audioTrackSet?: MediaTrackConstraints;
/** 视频轨道设置 */
videoTrackSet?: MediaTrackConstraints;
/** 禁用设备卡顿时音频输入丢失补偿功能 */
disableEnvInFix?: boolean;
/** 实时编码环境下接管编码器输出 */
takeoffEncodeChunk?: (chunkBytes: Uint8Array) => void;
}
/** 录音器实例接口 */
export interface RecorderInstance {
/** 录音器实例 ID */
id: number;
/** 录音配置 */
set: RecorderOptions;
/** 运行状态 0:未录音 1:录音中 2:暂停 3:等待ctx激活 */
state: number;
/** 原始采样率 */
srcSampleRate?: number;
/** 是否为模拟录音 */
isMock?: number;
/** 模拟环境信息 */
mockEnvInfo?: Record<string, unknown>;
/** 数据缓冲 */
buffers?: Int16Array[];
/** 数据大小 */
recSize?: number;
/** 数据类型 */
dataType?: 'blob' | 'arraybuffer';
/** 打开录音资源 */
open(success?: () => void, fail?: (msg: string, isUserNotAllow?: boolean) => void): void;
/** 关闭释放录音资源 */
close(callback?: () => void): void;
/** 开始录音 */
start(): void;
/** 暂停录音 */
pause(): void;
/** 恢复录音 */
resume(): void;
/** 停止录音并返回数据 */
stop(
success?: (blob: Blob | ArrayBuffer, duration: number, mime: string) => void,
fail?: (msg: string) => void,
autoClose?: boolean,
): void;
/** 模拟录音数据 */
mock(pcmData: Int16Array, pcmSampleRate: number): RecorderInstance;
/** 环境检查 */
envCheck(envInfo?: EnvInfo): string;
/** 日志输出 */
CLog(msg: string, type?: number, ...args: unknown[]): void;
}
/** 环境信息接口 */
export interface EnvInfo {
/** 环境名称 */
envName?: string;
/** 是否可以实时处理 */
canProcess?: boolean;
}
/** 采样数据转换选项 */
export interface SampleDataOption {
/** 帧大小 */
frameSize?: number;
/** 帧类型 */
frameType?: string;
/** 内部使用的 sum 选项 */
_sum?: boolean;
}
/** 采样数据块信息 */
export interface ChunkInfo {
/** 已处理到的索引 */
index: number;
/** 已处理到的偏移位置 */
offset: number;
/** 提升采样率时的前一个采样值 */
raisePrev: number | null;
/** 滤波配置 */
filter: FilterConfig | null;
/** 下一帧的部分数据 */
frameNext: Int16Array | null;
/** 结果采样率 */
sampleRate: number;
/** 转换后的PCM结果 */
data: Int16Array;
/** 内部使用的 sum 值 */
_sum?: number;
}
/** 滤波配置接口 */
export interface FilterConfig {
/** 滤波函数 */
fn?: ((sample: number) => number) | null;
/** 原始采样率 */
sr?: number;
/** 新采样率 */
srn?: number;
}
/** IIR滤波器嵌入配置 */
export interface IIRFilterEmbed {
x1: number;
x2: number;
y1: number;
y2: number;
b0: number;
b1: number;
a1: number;
a2: number;
}
/** IIR滤波器函数接口 */
export interface IIRFilterFunction {
(x: number): number;
Embed: IIRFilterEmbed;
}
/** 录音器静态方法接口 */
declare interface RecorderStatic {
/** 版本信息 */
LM: string;
/** 缓冲大小 */
BufferSize: number;
/** 是否启用 WebM PCM 连接 */
ConnectEnableWebM: boolean;
/** 是否启用 AudioWorklet 连接 */
ConnectEnableWorklet: boolean;
/** 默认数据类型 */
DefaultDataType?: 'blob' | 'arraybuffer';
/** 流量统计图片URL */
TrafficImgUrl: string;
/** 创建录音器实例 */
new (options?: RecorderOptions): RecorderInstance;
/** 判断是否已打开全局麦克风 */
IsOpen(): boolean;
/** 销毁全局资源 */
Destroy(): void;
/** 绑定销毁处理方法 */
BindDestroy(key: string, callback: () => void): void;
/** 判断浏览器是否支持录音 */
Support(): boolean;
/** 获取 AudioContext */
GetContext(tryNew?: boolean): AudioContext | null;
/** 关闭新创建的 AudioContext */
CloseNewCtx(ctx: AudioContext): void;
/** 恢复 AudioContext 状态 */
ResumeCtx(
ctx: AudioContext,
check: (count: number) => boolean,
success: (count: number) => void,
fail: (err: string) => void,
): void;
/** 对PCM数据进行采样率转换 */
SampleData(
pcmDatas: (Int16Array | Float32Array)[],
pcmSampleRate: number,
newSampleRate: number,
prevChunkInfo?: ChunkInfo,
option?: SampleDataOption,
): ChunkInfo;
/** IIR低通、高通滤波 */
IIRFilter(useLowPass: boolean, sampleRate: number, freq: number): IIRFilterFunction;
/** 计算音量百分比 */
PowerLevel(pcmAbsSum: number, pcmLength: number): number;
/** 计算音量 dBFS */
PowerDBFS(maxSample: number): number;
/** 日志输出 */
CLog(msg: string, type?: number, ...args: unknown[]): void;
/** 关闭音频流 */
StopS_(stream: MediaStream): void;
/** 流量统计 */
Traffic(report?: string): void;
}
/** 全局 Recorder 声明 */
declare const Recorder: RecorderStatic;
/** 模块声明 */
declare module 'recorder-core' {
const Recorder: RecorderStatic;
export = Recorder;
}
大佬,有没有TS调用的示例啊?
在tsconfig里面包含相关类型文件就行了,自动就有 @SheepYang1993