UNPKG

mstf-kit

Version:

一个现代化的 JavaScript/TypeScript 工具库,提供了丰富的常用工具函数

239 lines (238 loc) 6.52 kB
/** * 非流式音频处理工具 * 用于处理非流式接口返回的音频数据,支持多种数据格式和字段路径提取 */ /** * 音频数据类型 */ export type AudioDataType = 'base64' | 'blob' | 'arraybuffer' | 'file'; /** * 非流式音频处理选项 */ export interface NonStreamAudioOptions { /** * 音频数据字段路径 * 例如:'data.audio' 或 'audio' 或 'result.voice.content' * 支持嵌套路径,用点号分隔 */ audioField?: string; /** * 音频数据类型 * - 'base64': Base64编码的字符串 * - 'blob': Blob对象 * - 'arraybuffer': ArrayBuffer对象 * - 'file': File对象或服务端返回的文件响应 * 如果不指定,会自动检测 */ dataType?: AudioDataType; /** * MIME类型 * 默认为 'audio/mpeg' */ mimeType?: string; /** * 是否自动播放 * 默认为 false */ autoPlay?: boolean; /** * 是否启用调试日志 * 默认为 false */ debug?: boolean; /** * 音频数据回调 * 当成功提取并转换音频数据时触发 */ onAudioData?: (blob: Blob) => void; /** * 错误回调 * 当处理过程中发生错误时触发 */ onError?: (error: Error) => void; /** * 完成回调 * 当处理完成时触发(无论成功或失败) */ onComplete?: (blob?: Blob) => void; } /** * 非流式音频处理结果 */ export interface NonStreamAudioResult { /** 音频Blob对象 */ blob: Blob; /** 音频URL(可用于audio标签的src) */ url: string; /** 音频大小(字节) */ size: number; /** 音频MIME类型 */ mimeType: string; /** 播放控制(如果启用了自动播放) */ audio?: HTMLAudioElement; } /** * 处理非流式音频响应 * * @param response 响应数据,可以是: * - 完整的响应对象(如 axios response) * - 纯数据对象(如 { msg: "123", code: "asd", data: { audio: "base64..." } }) * - 直接的音频数据(Base64字符串、Blob、ArrayBuffer等) * @param options 处理选项 * @returns Promise<NonStreamAudioResult> 处理结果 * * @example * ```typescript * // 示例1: 处理嵌套字段的Base64数据 * const response = { * msg: "success", * code: 200, * data: { * audio: "UklGRiQAAABXQVZFZm10..." // Base64音频数据 * } * }; * * const result = await processNonStreamAudio(response, { * audioField: 'data.audio', * dataType: 'base64', * mimeType: 'audio/wav', * autoPlay: true * }); * * console.log('音频URL:', result.url); * console.log('音频大小:', result.size); * * // 示例2: 处理直接字段的Base64数据 * const response2 = { * msg: "success", * audio: "UklGRiQAAABXQVZFZm10..." // Base64音频数据 * }; * * const result2 = await processNonStreamAudio(response2, { * audioField: 'audio', * autoPlay: true * }); * * // 示例3: 处理ArrayBuffer响应 * const response3 = await axios.get('/api/audio', { * responseType: 'arraybuffer' * }); * * const result3 = await processNonStreamAudio(response3.data, { * dataType: 'arraybuffer', * mimeType: 'audio/mp3' * }); * * // 示例4: 处理Blob响应 * const response4 = await fetch('/api/audio'); * const blob = await response4.blob(); * * const result4 = await processNonStreamAudio(blob, { * dataType: 'blob' * }); * * // 示例5: 自动检测数据类型 * const result5 = await processNonStreamAudio(response, { * audioField: 'data.audio', * // 不指定dataType,会自动检测 * onAudioData: (blob) => { * console.log('收到音频数据:', blob.size); * }, * onComplete: (blob) => { * console.log('处理完成'); * } * }); * ``` */ export declare function processNonStreamAudio(response: any, options?: NonStreamAudioOptions): Promise<NonStreamAudioResult>; /** * 批量处理多个非流式音频响应 * * @param responses 响应数据数组 * @param options 处理选项 * @returns Promise<NonStreamAudioResult[]> 处理结果数组 * * @example * ```typescript * const responses = [ * { data: { audio: "base64data1..." } }, * { data: { audio: "base64data2..." } }, * { data: { audio: "base64data3..." } } * ]; * * const results = await processBatchNonStreamAudio(responses, { * audioField: 'data.audio', * dataType: 'base64', * mimeType: 'audio/wav' * }); * * results.forEach((result, index) => { * console.log(`音频${index + 1} URL:`, result.url); * }); * ``` */ export declare function processBatchNonStreamAudio(responses: any[], options?: NonStreamAudioOptions): Promise<NonStreamAudioResult[]>; /** * 简化版的音频处理函数,直接返回Blob * * @param response 响应数据 * @param audioField 音频字段路径(可选) * @param dataType 数据类型(可选,不指定则自动检测) * @returns Promise<Blob> 音频Blob对象 * * @example * ```typescript * // 快速提取音频Blob * const blob = await getAudioBlob(response, 'data.audio', 'base64'); * * // 使用Blob * const url = URL.createObjectURL(blob); * audioElement.src = url; * ``` */ export declare function getAudioBlob(response: any, audioField?: string, dataType?: AudioDataType): Promise<Blob>; /** * 创建音频URL(用于audio标签的src) * * @param response 响应数据 * @param options 处理选项 * @returns Promise<string> 音频URL * * @example * ```typescript * const url = await createAudioUrl(response, { * audioField: 'data.audio', * dataType: 'base64' * }); * * audioElement.src = url; * ``` */ export declare function createAudioUrl(response: any, options?: NonStreamAudioOptions): Promise<string>; /** * 下载音频文件 * * @param response 响应数据 * @param filename 文件名 * @param options 处理选项 * * @example * ```typescript * await downloadAudio(response, 'audio.mp3', { * audioField: 'data.audio', * dataType: 'base64' * }); * ``` */ export declare function downloadAudio(response: any, filename: string, options?: NonStreamAudioOptions): Promise<void>; /** * 导出所有函数 */ declare const _default: { processNonStreamAudio: typeof processNonStreamAudio; processBatchNonStreamAudio: typeof processBatchNonStreamAudio; getAudioBlob: typeof getAudioBlob; createAudioUrl: typeof createAudioUrl; downloadAudio: typeof downloadAudio; }; export default _default;