mstf-kit
Version:
一个现代化的 JavaScript/TypeScript 工具库,提供了丰富的常用工具函数
239 lines (238 loc) • 6.52 kB
TypeScript
/**
* 非流式音频处理工具
* 用于处理非流式接口返回的音频数据,支持多种数据格式和字段路径提取
*/
/**
* 音频数据类型
*/
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;