File size: 3,178 Bytes
1ffd672
f8d0565
 
ff1bae1
f8d0565
 
55c2b20
663ac44
 
 
 
 
 
 
fa6f9dd
5caf6ad
0f7a10e
df07559
 
 
 
 
 
f8d0565
 
464e88d
f8d0565
0c3b1db
464e88d
 
 
 
 
 
f8d0565
 
464e88d
 
 
 
 
 
 
 
 
f8d0565
464e88d
 
0c3b1db
f8d0565
 
 
 
1ffd672
 
464e88d
 
 
 
f8d0565
 
464e88d
 
 
 
f8d0565
5d2138a
f9db145
f083023
 
 
 
f9db145
f083023
f9db145
f083023
 
 
 
 
 
 
 
 
 
f8d0565
 
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import streamlit as st
import langcodes
from allosaurus.app import read_recognizer
from pathlib import Path

  
def get_path_to_wav_format(uploaded_file):
#  st.write(dir(uploaded_file))
#  st.write(type(uploaded_file))
#  st.write(uploaded_file)
  uploaded_bytes = uploaded_file.getvalue()
  actual_file_path = Path(uploaded_file.name)
  actual_file_path.write_bytes(uploaded_bytes)
    

  if ".wav" in uploaded_file.name:
    return Path(uploaded_file.name)
  if ".mp3" in uploaded_file.name:
    new_desired_path = actual_file_path.with_suffix(".wav")
    waveform, sample_rate = torchaudio.load(actual_file_path)
    st.info(waveform, sample_rate)
    torchaudio.save(new_desired_path, waveform, sample_rate)
    return new_desired_path


def get_langcode_for_allosaurus(input_code, model):
  langcode = "ipa" # the default allosaurus recognizer
  description = "the default universal setting, not specific to any language"
  
  if not input_code:
    return langcode, description
    


  try:
    lang = langcodes.get(input_code)
    alpha3 = lang.to_alpha3()
    if model.is_available(alpha3 ): # https://github.com/xinjli/allosaurus/blob/f5aa296dc97a90e3035f6cc0fd281cfb64536228/allosaurus/app.py#L57    
      langcode = alpha3 
      description = lang.display_name()
      st.info(f"{langcode} is supported by Allosaurus}")
    else:
#      st.info(f"Could not find supported language for {input_code}")
      st.error(f"Allosaurus doesn't recognize the language code {langcode}}. Perhaps try looking for [alternate codes](https://huggingface.co/spaces/cdleong/langcode-search). Or possibly it's just that there's no support for that particular language code. Proceeding with default setting")
    
  except langcodes.LanguageTagError as e:
    st.error(f"langcodes library could not find a 3-letter ISO code for {input_code}. It may not be a valid code, try searching for [alternate codes](https://huggingface.co/spaces/cdleong/langcode-search). Proceeding with default setting"
    
  return langcode, description 
  
  
  


if __name__ == "__main__":
  input_code = st.text_input("(optional) 2 or 3-letter ISO code for input language. 2-letter codes will be converted to 3-letter codes", max_chars=3)



  
  model = read_recognizer()
  langcode, description = get_langcode_for_allosaurus(input_code)

  st.write(f"Instructing Allosaurus to recognize using language {langcode}. That is, {description}")

  
  uploaded_files = st.file_uploader("Choose a file", type=[
                                                          ".wav", 
#                                                          ".mp3", # TODO: convert .mp3 to .wav and save
                                                          ],
                                                    accept_multiple_files=True,
                                                          )
  
  for uploaded_file in uploaded_files:
    
    if uploaded_file is not None:
  
      
      
      st.audio(uploaded_file, format='audio/wav')
      
      wav_file = get_path_to_wav_format(uploaded_file)    
      st.write(wav_file)
      result = model.recognize(wav_file, langcode)
      st.write(result)