TeaSpeak-Client/native/serverconnection/exports/exports.d.ts

376 lines
13 KiB
TypeScript

export enum ServerType {
UNKNOWN,
TEASPEAK,
TEAMSPEAK
}
export enum PlayerState {
BUFFERING,
PLAYING,
STOPPING,
STOPPED
}
export interface NativeVoiceClient {
client_id: number;
callback_playback: () => any;
callback_stopped: () => any;
callback_state_changed: (new_state: PlayerState) => any;
get_state() : PlayerState;
get_volume() : number;
set_volume(volume: number) : void;
abort_replay();
get_stream() : audio.playback.AudioOutputStream;
}
export interface NativeVoiceConnection {
register_client(client_id: number) : NativeVoiceClient;
available_clients() : NativeVoiceClient[];
unregister_client(client_id: number);
audio_source() : audio.record.AudioConsumer;
set_audio_source(consumer: audio.record.AudioConsumer | undefined);
decoding_supported(codec: number) : boolean;
encoding_supported(codec: number) : boolean;
get_encoder_codec() : number;
set_encoder_codec(codec: number);
/* could may throw an exception when the underlying voice sender has been deallocated */
enable_voice_send(flag: boolean);
}
export interface NativeServerConnection {
callback_voice_data: (buffer: Uint8Array, client_id: number, codec_id: number, flag_head: boolean, packet_id: number) => any;
callback_command: (command: string, arguments: any, switches: string[]) => any;
callback_disconnect: (reason?: string) => any;
_voice_connection: NativeVoiceConnection;
server_type: ServerType;
connected(): boolean;
connect(properties: {
remote_host: string,
remote_port: number,
timeout: number,
callback: (error: number) => any,
identity_key: string | undefined, /* if identity_key empty, then an ephemeral license will be created */
teamspeak: boolean
});
disconnect(reason: string | undefined, callback: (error: number) => any) : boolean;
error_message(id: number) : string;
send_command(command: string, arguments: any[], switches: string[]);
send_voice_data(buffer: Uint8Array, codec_id: number, header: boolean);
send_voice_data_raw(buffer: Float32Array, channels: number, sample_rate: number, header: boolean);
/* ping in microseconds */
current_ping() : number;
statistics() : { voice_bytes_received: number, voice_bytes_send: number, control_bytes_received: number, control_bytes_send } | undefined
}
export function spawn_server_connection() : NativeServerConnection;
export function destroy_server_connection(connection: NativeServerConnection);
export namespace ft {
export interface TransferObject {
name: string;
direction: "upload" | "download";
}
export interface FileTransferSource extends TransferObject {
total_size: number;
}
export interface FileTransferTarget extends TransferObject {
expected_size: number;
}
export interface NativeFileTransfer {
handle: TransferObject;
callback_finished: (aborted?: boolean) => any;
callback_start: () => any;
callback_progress: (current: number, max: number) => any;
callback_failed: (message: string) => any;
/**
* @return true if the connect method has been executed successfully
* false if the connect fails, callback_failed will be called with the exact reason
*/
start() : boolean;
}
export interface TransferOptions {
remote_address: string;
remote_port: number;
transfer_key: string;
client_transfer_id: number;
server_transfer_id: number;
object: TransferObject;
}
export function upload_transfer_object_from_file(path: string, name: string) : FileTransferSource;
export function upload_transfer_object_from_buffer(buffer: ArrayBuffer) : FileTransferSource;
export function download_transfer_object_from_buffer(target_buffer: ArrayBuffer) : FileTransferTarget;
export function download_transfer_object_from_file(path: string, name: string, expectedSize: number) : FileTransferTarget;
export function destroy_connection(connection: NativeFileTransfer);
export function spawn_connection(transfer: TransferOptions) : NativeFileTransfer;
}
export namespace audio {
export interface AudioDevice {
name: string;
driver: string;
device_id: string;
input_supported: boolean;
output_supported: boolean;
input_default: boolean;
output_default: boolean;
}
export namespace playback {
export interface AudioOutputStream {
sample_rate: number;
channels: number;
get_buffer_latency() : number;
set_buffer_latency(value: number);
get_buffer_max_latency() : number;
set_buffer_max_latency(value: number);
flush_buffer();
}
export interface OwnedAudioOutputStream extends AudioOutputStream {
callback_underflow: () => any;
callback_overflow: () => any;
clear();
write_data(buffer: ArrayBuffer, interleaved: boolean);
write_data_rated(buffer: ArrayBuffer, interleaved: boolean, sample_rate: number);
deleted() : boolean;
delete();
}
export function set_device(device_id: string);
export function current_device() : string;
export function create_stream() : OwnedAudioOutputStream;
export function get_master_volume() : number;
export function set_master_volume(volume: number);
}
export namespace record {
enum FilterMode {
Bypass,
Filter,
Block
}
export interface ConsumeFilter {
get_name() : string;
}
export interface MarginedFilter {
/* in seconds */
get_margin_time() : number;
set_margin_time(value: number);
}
export interface VADConsumeFilter extends ConsumeFilter, MarginedFilter {
get_level() : number;
}
export interface ThresholdConsumeFilter extends ConsumeFilter, MarginedFilter {
get_threshold() : number;
set_threshold(value: number);
get_attack_smooth() : number;
set_attack_smooth(value: number);
get_release_smooth() : number;
set_release_smooth(value: number);
set_analyze_filter(callback: (value: number) => any);
}
export interface StateConsumeFilter extends ConsumeFilter {
is_consuming() : boolean;
set_consuming(flag: boolean);
}
export interface AudioConsumer {
readonly sampleRate: number;
readonly channelCount: number;
get_filters() : ConsumeFilter[];
unregister_filter(filter: ConsumeFilter);
create_filter_vad(level: number) : VADConsumeFilter;
create_filter_threshold(threshold: number) : ThresholdConsumeFilter;
create_filter_state() : StateConsumeFilter;
set_filter_mode(mode: FilterMode);
get_filter_mode() : FilterMode;
callback_data: (buffer: Float32Array) => any;
callback_ended: () => any;
callback_started: () => any;
}
export interface AudioProcessorConfig {
"pipeline.maximum_internal_processing_rate": number,
"pipeline.multi_channel_render": boolean,
"pipeline.multi_channel_capture": boolean,
"pre_amplifier.enabled": boolean,
"pre_amplifier.fixed_gain_factor": number,
"high_pass_filter.enabled": boolean,
"high_pass_filter.apply_in_full_band": boolean,
"echo_canceller.enabled": boolean,
"echo_canceller.mobile_mode": boolean,
"echo_canceller.export_linear_aec_output": boolean,
"echo_canceller.enforce_high_pass_filtering": boolean,
"noise_suppression.enabled": boolean,
"noise_suppression.level": "low" | "moderate" | "high" | "very-high",
"noise_suppression.analyze_linear_aec_output_when_available": boolean,
"transient_suppression.enabled": boolean,
"voice_detection.enabled": boolean,
"gain_controller1.enabled": boolean,
"gain_controller1.mode": "adaptive-analog" | "adaptive-digital" | "fixed-digital",
"gain_controller1.target_level_dbfs": number,
"gain_controller1.compression_gain_db": number,
"gain_controller1.enable_limiter": boolean,
"gain_controller1.analog_level_minimum": number,
"gain_controller1.analog_level_maximum": number,
"gain_controller1.analog_gain_controller.enabled": boolean,
"gain_controller1.analog_gain_controller.startup_min_volume": number,
"gain_controller1.analog_gain_controller.clipped_level_min": number,
"gain_controller1.analog_gain_controller.enable_agc2_level_estimator": boolean,
"gain_controller1.analog_gain_controller.enable_digital_adaptive": boolean,
"gain_controller2.enabled": boolean,
"gain_controller2.fixed_digital.gain_db": number,
"gain_controller2.adaptive_digital.enabled": boolean,
"gain_controller2.adaptive_digital.vad_probability_attack": number,
"gain_controller2.adaptive_digital.level_estimator": "rms" | "peak",
"gain_controller2.adaptive_digital.level_estimator_adjacent_speech_frames_threshold": number,
"gain_controller2.adaptive_digital.use_saturation_protector": boolean,
"gain_controller2.adaptive_digital.initial_saturation_margin_db": number,
"gain_controller2.adaptive_digital.extra_saturation_margin_db": number,
"gain_controller2.adaptive_digital.gain_applier_adjacent_speech_frames_threshold": number,
"gain_controller2.adaptive_digital.max_gain_change_db_per_second": number,
"gain_controller2.adaptive_digital.max_output_noise_level_dbfs": number,
"residual_echo_detector.enabled": boolean,
"level_estimation.enabled": boolean,
"rnnoise.enabled": boolean
}
export interface AudioProcessorStatistics {
output_rms_dbfs: number | undefined,
voice_detected: number | undefined,
echo_return_loss: number | undefined,
echo_return_loss_enhancement: number | undefined,
divergent_filter_fraction: number | undefined,
delay_median_ms: number | undefined,
delay_standard_deviation_ms: number | undefined,
residual_echo_likelihood: number | undefined,
residual_echo_likelihood_recent_max: number | undefined,
delay_ms: number | undefined,
rnnoise_volume: number | undefined
}
export interface AudioProcessor {
get_config() : AudioProcessorConfig;
apply_config(config: Partial<AudioProcessorConfig>);
get_statistics() : AudioProcessorStatistics;
}
export type DeviceSetResult = "success" | "invalid-device";
export interface AudioRecorder {
get_device() : string;
set_device(deviceId: string, callback: (result: DeviceSetResult) => void); /* Recorder needs to be started afterwards */
start(callback: (result: boolean | string) => void);
started() : boolean;
stop();
get_volume() : number;
set_volume(volume: number);
create_consumer() : AudioConsumer;
get_consumers() : AudioConsumer[];
delete_consumer(consumer: AudioConsumer);
get_audio_processor() : AudioProcessor | undefined;
create_level_meter(mode: "pre-process" | "post-process") : AudioLevelMeter;
}
export interface AudioLevelMeter {
start(callback: (error?: string) => void);
running() : boolean;
stop();
set_callback(callback: (level: number) => void, updateInterval?: number);
}
export function create_device_level_meter(targetDeviceId: string) : AudioLevelMeter;
export function create_recorder() : AudioRecorder;
}
export namespace sounds {
export enum PlaybackResult {
SUCCEEDED,
CANCELED,
SOUND_NOT_INITIALIZED,
FILE_OPEN_ERROR,
PLAYBACK_ERROR
}
export interface PlaybackSettings {
file: string;
volume?: number;
callback?: (result: PlaybackResult, message: string) => void;
}
export function playback_sound(settings: PlaybackSettings) : number;
export function cancel_playback(playback: number);
}
export function initialize(callback: () => any);
export function initialized() : boolean;
export function available_devices() : AudioDevice[];
}