@juspay/neurolink
Version:
Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applicatio
136 lines (135 loc) • 4.57 kB
TypeScript
/**
* Audio Utilities for Voice Module
*
* Provides audio format conversion, duration calculation, and buffer utilities.
*
* @module voice/audio-utils
*/
import type { TTSAudioFormat } from "../types/index.js";
/**
* Detect audio format from buffer
*
* @param buffer - Audio data buffer
* @returns Detected audio format or null
*/
export declare function detectAudioFormat(buffer: Buffer): TTSAudioFormat | null;
/**
* Get MIME type for audio format
*
* @param format - Audio format
* @returns MIME type string
*/
export declare function getMimeType(format: TTSAudioFormat): string;
/**
* Get file extension for audio format
*
* @param format - Audio format
* @returns File extension with dot
*/
export declare function getFileExtension(format: TTSAudioFormat): string;
/**
* Calculate audio duration from buffer
*
* @param buffer - Audio data buffer
* @param format - Audio format (optional, will be detected if not provided)
* @param sampleRate - Sample rate in Hz (optional, will be extracted if possible)
* @returns Duration in seconds, or undefined if cannot be calculated
*/
export declare function calculateDuration(buffer: Buffer, format?: TTSAudioFormat, sampleRate?: number): number | undefined;
/**
* Convert audio format (basic conversion)
*
* Note: For full format conversion, external tools like ffmpeg would be needed.
* This provides basic PCM resampling only.
*
* @param buffer - Input audio buffer
* @param fromFormat - Source format
* @param toFormat - Target format
* @param options - Conversion options
* @returns Converted audio buffer
*/
export declare function convertAudioFormat(buffer: Buffer, fromFormat: TTSAudioFormat, toFormat: TTSAudioFormat, _options?: Record<string, unknown>): Promise<Buffer>;
/**
* Create PCM audio buffer from raw samples
*
* @param samples - Array of sample values (-1 to 1)
* @param sampleRate - Sample rate in Hz
* @param bitDepth - Bit depth (8, 16, 24, or 32)
* @returns PCM audio buffer
*/
export declare function createPcmBuffer(samples: number[], _sampleRate?: number, bitDepth?: 8 | 16 | 24 | 32): Buffer;
/**
* Extract PCM samples from buffer
*
* @param buffer - PCM audio buffer
* @param bitDepth - Bit depth (8, 16, 24, or 32)
* @returns Array of sample values (-1 to 1)
*/
export declare function extractPcmSamples(buffer: Buffer, bitDepth?: 8 | 16 | 24 | 32): number[];
/**
* Resample PCM audio
*
* @param samples - Input samples
* @param fromSampleRate - Source sample rate
* @param toSampleRate - Target sample rate
* @returns Resampled samples
*/
export declare function resamplePcm(samples: number[], fromSampleRate: number, toSampleRate: number): number[];
/**
* Normalize audio levels
*
* @param samples - Input samples
* @param targetPeak - Target peak level (0 to 1)
* @returns Normalized samples
*/
export declare function normalizeAudio(samples: number[], targetPeak?: number): number[];
/**
* Create a WAV header
*
* @param dataSize - Size of audio data in bytes
* @param sampleRate - Sample rate in Hz
* @param channels - Number of channels
* @param bitDepth - Bit depth
* @returns WAV header buffer
*/
export declare function createWavHeader(dataSize: number, sampleRate?: number, channels?: number, bitDepth?: number): Buffer;
/**
* Create a complete WAV file from PCM data
*
* @param pcmData - PCM audio data
* @param sampleRate - Sample rate in Hz
* @param channels - Number of channels
* @param bitDepth - Bit depth
* @returns Complete WAV file buffer
*/
export declare function createWavFile(pcmData: Buffer, sampleRate?: number, channels?: number, bitDepth?: number): Buffer;
/**
* Split audio buffer into chunks
*
* @param buffer - Audio buffer to split
* @param chunkDurationMs - Duration of each chunk in milliseconds
* @param sampleRate - Sample rate in Hz
* @param bytesPerSample - Bytes per sample (channels * bitDepth / 8)
* @returns Array of audio chunks
*/
export declare function splitIntoChunks(buffer: Buffer, chunkDurationMs: number, sampleRate?: number, bytesPerSample?: number): Buffer[];
/**
* Audio format signatures for detection
*/
export declare const AUDIO_SIGNATURES: {
readonly wav: Buffer<ArrayBuffer>;
readonly mp3: {
readonly id3: Buffer<ArrayBuffer>;
readonly frameSync: Buffer<ArrayBuffer>;
};
readonly ogg: Buffer<ArrayBuffer>;
};
/**
* MIME types for audio formats
*/
export declare const MIME_TYPES: {
readonly wav: "audio/wav";
readonly mp3: "audio/mpeg";
readonly ogg: "audio/ogg";
readonly opus: "audio/opus";
};