ten / demo /src /common /utils.ts
3v324v23's picture
Зафиксирована рабочая версия TEN-Agent для HuggingFace Space
87337b1
raw
history blame contribute delete
1.99 kB
import { LanguageOptionItem } from "@/types"
export const genRandomString = (length: number = 10) => {
let result = '';
const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
const charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
export const getRandomUserId = (): number => {
return Math.floor(Math.random() * 99999) + 100000
}
export const getRandomChannel = (number = 6) => {
return "agora_" + genRandomString(number)
}
export const sleep = (ms: number) => {
return new Promise(resolve => setTimeout(resolve, ms));
}
export const normalizeFrequencies = (frequencies: Float32Array) => {
const normalizeDb = (value: number) => {
const minDb = -100;
const maxDb = -10;
let db = 1 - (Math.max(minDb, Math.min(maxDb, value)) * -1) / 100;
db = Math.sqrt(db);
return db;
};
// Normalize all frequency values
return frequencies.map((value) => {
if (value === -Infinity) {
return 0;
}
return normalizeDb(value);
});
};
export const genUUID = () => {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
const r = (Math.random() * 16) | 0
const v = c === "x" ? r : (r & 0x3) | 0x8
return v.toString(16)
})
}
export const isMobile = () => {
return /Mobile|iPhone|iPad|Android|Windows Phone/i.test(navigator.userAgent)
}
export const getBrowserLanguage = (): LanguageOptionItem => {
const lang = navigator.language;
switch (true) {
case lang.startsWith("zh"):
return {
label: "Chinese",
value: "zh-CN"
};
case lang.startsWith("ko"):
return {
label: "Korean",
value: "ko-KR"
};
case lang.startsWith("ja"):
return {
label: "Japanese",
value: "ja-JP"
};
default:
return {
label: "English",
value: "en-US"
};
}
};