File size: 2,517 Bytes
d7e88bd
8c2ce4e
 
 
 
cf54dc1
 
 
 
 
8c2ce4e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
const BASE_URL = "https://anabaena-vaaksiddhi.hf.space";

export async function inputWord({ text, audio, character = "BOLT", language = "english", mood = "instruction" }) {
  const form = new FormData();
  if (text) form.append("text", text);
  if (audio) {
    // Convert blob to wav file for backend
    const wavBlob = new Blob([audio], { type: "audio/webm" });
    form.append("audio", wavBlob, "recording.webm");
  }
  form.append("character", character);
  form.append("language", language);
  form.append("mood", mood);

  const res = await fetch(`${BASE_URL}/input-word`, { method: "POST", body: form });
  return res.json();
}

export async function evaluateAttempt({ audio, targetWord, character, language, condition, attemptNumber, sessionId, childId, attemptHistory }) {
  const form = new FormData();
  form.append("audio", audio, "recording.wav");
  form.append("target_word", targetWord);
  form.append("character", character || "BOLT");
  form.append("language", language || "english");
  form.append("condition", condition || "autism");
  form.append("attempt_number", attemptNumber || 1);
  if (sessionId) form.append("session_id", sessionId);
  if (childId) form.append("child_id", childId);
  form.append("attempt_history", JSON.stringify(attemptHistory || []));

  const res = await fetch(`${BASE_URL}/evaluate`, { method: "POST", body: form });
  return res.json();
}

export async function getPhonemeCard(phoneme) {
  const res = await fetch(`${BASE_URL}/phoneme-card/${phoneme}`);
  return res.json();
}

export async function getCharacters() {
  const res = await fetch(`${BASE_URL}/characters`);
  return res.json();
}

export async function playbackCompare({ childAudio, targetWord, character, language }) {
  const form = new FormData();
  form.append("child_audio", childAudio, "recording.wav");
  form.append("target_word", targetWord);
  form.append("character", character || "BOLT");
  form.append("language", language || "english");

  const res = await fetch(`${BASE_URL}/playback-compare`, { method: "POST", body: form });
  return res.json();
}

export function base64ToBlob(base64, mime = "audio/wav") {
  const bytes = atob(base64);
  const arr = new Uint8Array(bytes.length);
  for (let i = 0; i < bytes.length; i++) arr[i] = bytes.charCodeAt(i);
  return new Blob([arr], { type: mime });
}

export function playBase64Audio(base64) {
  const blob = base64ToBlob(base64);
  const url = URL.createObjectURL(blob);
  const audio = new Audio(url);
  audio.play();
  return audio;
}