diff --git a/lib/utils.py b/lib/utils.py
index f9e5284936d026377fef38579e5a59f406dbebd6..ca78692f5db51fbc04ae33796a8ae02b4f1c5ed5 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -38,7 +38,7 @@ def cmd(command: str, check=True, capture_output=False) -> CompletedProcess:
return ret
def clean_text_for_comparison_zh(text):
- symbol_pattern = "[ ,。、!?\n]"
+ symbol_pattern = "[ ,。、!?::‘’-《》!?;,\n]"
to = ""
return re.sub(symbol_pattern, to, text).lower()
diff --git a/scripts/asr_utils.py b/scripts/asr_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..58888c58fb8085cd9b4459bacadbd5d19f8655f4
--- /dev/null
+++ b/scripts/asr_utils.py
@@ -0,0 +1,81 @@
+import os
+import csv
+import wave
+import re
+
+def add_text_index():
+ text_file = '/Users/jeqin/work/code/TestTranslator/tests/test_data/text/test_asr_zh.txt'
+ index = 1
+ with open(text_file, encoding='utf-8') as f:
+ for line in f:
+ line = line.strip()
+ # print(line)
+ if not line:
+ continue
+ if line.startswith('#'):
+ # print(line)
+ continue
+ line = f"{index}. {line}"
+ print(line)
+ index += 1
+
+def get_lines_with_index(filepath):
+ with open(filepath, encoding='utf-8') as f:
+ for line in f:
+ line = line.strip()
+ m = re.match(r'^(\d+)\.\s*(.*)', line)
+ if m:
+ yield m.group(1), m.group(2)
+
+def get_wav_length(wav_path):
+ try:
+ with wave.open(wav_path, 'rb') as wf:
+ frames = wf.getnframes()
+ rate = wf.getframerate()
+ duration = frames / float(rate)
+ return duration
+ except Exception as e:
+ print(f"Error reading {wav_path}: {e}")
+ return 0
+
+def write_csv(rows, output_csv):
+ with open(output_csv, 'w', newline='', encoding='utf-8') as csvfile:
+ writer = csv.writer(csvfile)
+ writer.writerow(['序号', '文本', '音频长度(秒)'])
+ writer.writerows(rows)
+
+def print_text_and_audio_length():
+ text_file = '/Users/jeqin/work/code/TestTranslator/tests/test_data/text/test_asr_zh_with_index.txt'
+ audio_folder = '/Users/jeqin/work/code/TestTranslator/tests/test_data/recordings'
+ output_csv = '/Users/jeqin/work/code/TestTranslator/scripts/csv/text_audio_length.csv'
+ rows = []
+ for idx, text in get_lines_with_index(text_file):
+ # print(idx)
+ # print(text)
+ audio_path = os.path.join(audio_folder, f"{idx}.wav")
+ audio_length = get_wav_length(audio_path)
+ audio_length = round(audio_length, 2) if audio_length is not None else None
+ # print(audio_length)
+ rows.append([idx, text, round(audio_length,2)])
+ write_csv(rows, output_csv)
+
+def get_text_distance(text1, text2):
+ from lib.utils import run_textdistance, clean_text_for_comparison_zh, highlight_diff
+ text1_clean = clean_text_for_comparison_zh(text1)
+ text2_clean = clean_text_for_comparison_zh(text2)
+ d, nd = run_textdistance(text1_clean, text2_clean)
+ diff = highlight_diff(text1_clean, text2_clean, spliter="")
+ return d, nd, diff
+
+def get_origin_text_dict():
+ text_file = '/Users/jeqin/work/code/TestTranslator/tests/test_data/text/test_asr_zh_with_index.txt'
+ text_dict = {}
+ for idx, text in get_lines_with_index(text_file):
+ text_dict[idx] = text
+ return text_dict
+
+
+if __name__ == '__main__':
+ # add_text_index()
+ # print_text_and_audio_length()
+ pass
\ No newline at end of file
diff --git a/scripts/infer_finetuned_whisper.py b/scripts/infer_finetuned_whisper.py
index b43fe0c0eaf3ad341bae391cae3ffdff62879cea..a8c2f0ef09869ebeb38af3df7e68836bd1b60237 100644
--- a/scripts/infer_finetuned_whisper.py
+++ b/scripts/infer_finetuned_whisper.py
@@ -112,9 +112,10 @@ def main():
print(f"{p.name} -> {text}; time cost: {t1-t0}")
except Exception as e:
print(f"{p.name} -> 失败: {e}")
-def run():
+
+def load_model():
model_path = "/Users/jeqin/Downloads/whisper-large-v3-turbo-finetune-0901"
- lang = "en"
+ lang = "zh"
t0 = time.time()
processor = WhisperProcessor.from_pretrained(
model_path,
@@ -133,9 +134,11 @@ def run():
model.generation_config.language = lang.lower()
model.generation_config.forced_decoder_ids = None
model.eval()
-
-
print("load model time: ", time.time() - t0)
+ return model, processor
+
+def run_test_audios():
+ model, processor = load_model()
audios = Path("/Users/jeqin/work/code/TestTranslator/tests/test_data/test_audios/")
rows = [["file_name", "inference_time", "inference_result"]]
for audio in sorted(audios.glob("*en-ac1-16k/*.wav")): # *s/randomforest*.wav"
@@ -152,6 +155,27 @@ def run():
print(f"{audio.name} -> 失败: {e}")
save_csv("csv/fine-tune_whisper-0901.csv", rows)
+def run_recordings():
+ from scripts.asr_utils import get_origin_text_dict, get_text_distance
+ model, processor = load_model()
+ audios = Path("/Users/jeqin/work/code/TestTranslator/tests/test_data/recordings/")
+ rows = [["file_name", "time", "inference_result"]]
+ original = get_origin_text_dict()
+ for audio in sorted(audios.glob("*.wav"), key=lambda x: int(x.stem)):
+ print(audio)
+ try:
+ t0 = time.time()
+ text = transcribe_file(
+ str(audio), model, processor
+ )
+ t = time.time()-t0
+ print(text)
+ print("inference time:", t)
+ d, nd, diff = get_text_distance(original[audio.stem], text)
+ rows.append([audio.name, round(t, 3), text, d, round(nd,3), diff])
+ except Exception as e:
+ print(f"{audio.name} -> 失败: {e}")
+ save_csv("csv/fine-tune_whisper.csv", rows)
if __name__ == "__main__":
# main()
- run()
+ run_recordings()
diff --git a/scripts/recorder.py b/scripts/recorder.py
new file mode 100644
index 0000000000000000000000000000000000000000..50fadd0642af7c6f1928916878501051bedee7d4
--- /dev/null
+++ b/scripts/recorder.py
@@ -0,0 +1,56 @@
+import sounddevice as sd
+import soundfile as sf
+import sys
+import re
+
+TEXT_FILE = '/Users/jeqin/work/code/TestTranslator/tests/test_data/text/test_asr_zh_with_index.txt'
+AUDIO_FOLDER= '/Users/jeqin/work/code/TestTranslator/tests/test_data/recordings'
+SAMPLE_RATE = 16000
+CHANNELS = 1
+
+def get_lines_with_index(filepath):
+ with open(filepath, encoding='utf-8') as f:
+ for line in f:
+ line = line.strip()
+ m = re.match(r'^(\d+)\.\s*(.*)', line)
+ if m:
+ yield m.group(1), m.group(2)
+
+def record_audio(filename):
+ import numpy as np
+ def callback(indata, frames, time, status):
+ recording.append(indata.copy())
+
+ while True:
+ print("按回车开始录音...")
+ input()
+ print("正在录音,按回车结束录音,或输入 q 回车重新录音。")
+ recording = []
+ stop = False
+
+ with sd.InputStream(samplerate=SAMPLE_RATE, channels=CHANNELS, dtype='float32', callback=callback):
+ user_input = input()
+ if user_input.strip().lower() == 'q':
+ print("重新录音...")
+ stop = False
+ continue # 跳出 with,重新录音
+ else:
+ stop = True
+
+ if stop:
+ audio_np = np.concatenate(recording, axis=0)
+ max_val = np.max(np.abs(audio_np))
+ if max_val > 0:
+ audio_np = audio_np * (0.99 / max_val)
+ sf.write(f"{AUDIO_FOLDER}/{filename}", audio_np, SAMPLE_RATE)
+ print(f"已保存: {filename}")
+ break
+
+def main():
+ for idx, text in get_lines_with_index(TEXT_FILE):
+ print(f"{idx}. {text}")
+ if int(idx)==52:
+ record_audio(f"{idx}.wav")
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/scripts/run_funasr.py b/scripts/run_funasr.py
index f552077a228e2beeb9a50d4111164571758f0465..db399f2ca8ac46a56c809a6cce3d487acef2902e 100644
--- a/scripts/run_funasr.py
+++ b/scripts/run_funasr.py
@@ -27,7 +27,7 @@ def main():
print("load model: ", t1 - t0)
audios = Path("/Users/jeqin/work/code/TestTranslator/tests/test_data/test_audios/")
rows = [["file_name", "inference_time", "inference_result"]]
- for audio in sorted(audios.glob("*ac1-16k/Chinese*")):
+ for audio in sorted(audios.glob("*mix/*")):
print(audio)
t1 = time.time()
try:
diff --git a/scripts/run_funasr_quant.py b/scripts/run_funasr_quant.py
new file mode 100644
index 0000000000000000000000000000000000000000..64d5b135cfc275e0c0bc321e840c3e65665dff4e
--- /dev/null
+++ b/scripts/run_funasr_quant.py
@@ -0,0 +1,74 @@
+from pathlib import Path
+import time
+import csv
+from funasr_onnx import SeacoParaformer, CT_Transformer, Fsmn_vad
+from scripts.asr_utils import get_origin_text_dict, get_text_distance
+
+def save_csv(file_path, rows):
+ with open(file_path, "w", encoding="utf-8") as f:
+ writer = csv.writer(f)
+ writer.writerows(rows)
+ print(f"write csv to {file_path}")
+
+def load_model(quantize=True):
+ model_dir = Path("/Users/jeqin/work/code/Translator/python_server/moyoyo_asr_models")
+
+ asr_model_path = model_dir / 'speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch'
+ vad_model_path = model_dir / 'speech_fsmn_vad_zh-cn-16k-common-pytorch'
+ punc_model_path = model_dir / 'punc_ct-transformer_cn-en-common-vocab471067-large'
+ t0 = time.time()
+ quantize = True
+ vad_model = Fsmn_vad(vad_model_path, quantize=quantize)
+ asr_model = SeacoParaformer(asr_model_path, quantize=quantize)
+ punc_model = CT_Transformer(punc_model_path, quantize=quantize)
+ t1 = time.time()
+ print("load model time:", t1 - t0)
+ return vad_model, asr_model, punc_model
+
+def inference(vad_model, asr_model, punc_model, audio:Path):
+ print(audio.name)
+ t1 = time.time()
+ vad_res = vad_model(str(audio))
+ t2 = time.time()
+ # print("vad time:", t2-t1)
+ asr_res = asr_model(str(audio), hotwords="")
+ asr_text = asr_res[0]["preds"]
+ t3 = time.time()
+ # print("asr time:", t3-t2)
+ # print("asr text:", asr_text)
+ result = punc_model(asr_text)
+ text = result[0]
+ t4 = time.time()
+ # print("punc time:", t4-t3)
+ # print("punc text:", text)
+ print(text)
+ t = t4-t1
+ print("inference:", t)
+ return text, t
+
+def run_recordings():
+ quantize = True
+ vad_model, asr_model, punc_model = load_model(quantize)
+ audios = Path("/Users/jeqin/work/code/TestTranslator/tests/test_data/recordings/")
+ rows = [["file_name", "time", "inference_result"]]
+ original = get_origin_text_dict()
+ for audio in sorted(audios.glob("*.wav"), key=lambda x: int(x.stem)):
+ text, t = inference(vad_model, asr_model, punc_model, audio)
+ d, nd, diff = get_text_distance(original[audio.stem], text)
+ rows.append([audio.name, round(t, 3), text, d, round(nd,3), diff]) # f"{audio.parent.name}/{audio.name}"
+ file_name = "csv/funasr_quant.csv" if quantize else "funasr_onnx.csv"
+ save_csv(file_name, rows)
+
+def run_test_audios():
+ quantize = True
+ vad_model, asr_model, punc_model = load_model(quantize)
+ audios = Path("/Users/jeqin/work/code/TestTranslator/tests/test_data/test_audios/")
+ rows = [["file_name", "time", "inference_result"]]
+ for audio in sorted(audios.glob("*s/zh*.wav")):
+ text, t = inference(vad_model, asr_model, punc_model, audio)
+ rows.append([f"{audio.parent.name}/{audio.name}", round(t, 3), text])
+ file_name = "csv/funasr_quant.csv" if quantize else "funasr_onnx.csv"
+ save_csv(file_name, rows)
+
+if __name__ == '__main__':
+ run_recordings()
diff --git a/scripts/run_quant.py b/scripts/run_quant.py
deleted file mode 100644
index e82c9934369da54dbfc5eaba105832838cc6ebdd..0000000000000000000000000000000000000000
--- a/scripts/run_quant.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from pathlib import Path
-import time
-import csv
-from funasr_onnx import SeacoParaformer, CT_Transformer, Fsmn_vad
-
-def save_csv(file_path, rows):
- with open(file_path, "w", encoding="utf-8") as f:
- writer = csv.writer(f)
- writer.writerows(rows)
- print(f"write csv to {file_path}")
-def main():
- model_dir = Path("/Users/jeqin/work/code/Translator/python_server/moyoyo_asr_models")
-
- asr_model_path = model_dir / 'speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch'
- vad_model_path = model_dir / 'speech_fsmn_vad_zh-cn-16k-common-pytorch'
- punc_model_path = model_dir / 'punc_ct-transformer_cn-en-common-vocab471067-large'
- t0 = time.time()
- quantize = True
- vad_model = Fsmn_vad(vad_model_path, quantize=quantize)
- asr_model = SeacoParaformer(asr_model_path, quantize=quantize)
- punc_model = CT_Transformer(punc_model_path, quantize=quantize)
- t1 = time.time()
- print("load model time:", t1 - t0)
- audios = Path("/Users/jeqin/work/code/TestTranslator/tests/test_data/test_audios/")
- rows = [["file_name", "inference_time", "inference_result"]]
- for audio in sorted(audios.glob("*s/randomforest*.wav")):
- t1 = time.time()
- vad_res = vad_model(str(audio))
- t2 = time.time()
- print("vad time:", t2-t1)
- asr_res = asr_model(str(audio), hotwords="")
- asr_text = asr_res[0]["preds"]
- t3 = time.time()
- print("asr time:", t3-t2)
- print("asr text:", asr_text)
- result = punc_model(asr_text)
- text = result[0]
- t4 = time.time()
- print("punc time:", t4-t3)
- print("punc text:", text)
- # print(text)
- # vad_res = vad_model(str(audio))
- # t5 = time.time()
- # print("vad time:", t5 - t4)
- t = t4-t1
- print("inference:", t)
- rows.append([f"{audio.parent.name}/{audio.name}", t, text])
- file_name = "csv/quant.csv" if quantize else "run_onnx.csv"
- save_csv(file_name, rows)
-if __name__ == '__main__':
- main()
diff --git a/scripts/run_whisper.py b/scripts/run_whisper.py
index 4a3736fe1bf318b53b54eab377b6ee45cdb1f741..da6a29a12a078bbaf8a2f3d62b2d90b5210a3f2c 100644
--- a/scripts/run_whisper.py
+++ b/scripts/run_whisper.py
@@ -4,7 +4,7 @@ import time
import csv
from silero_vad.utils_vad import languages
-
+from scripts.asr_utils import get_origin_text_dict, get_text_distance
def save_csv(file_path, rows):
with open(file_path, "w", encoding="utf-8") as f:
@@ -12,7 +12,7 @@ def save_csv(file_path, rows):
writer.writerows(rows)
print(f"write csv to {file_path}")
-def main():
+def load_model():
models_dir = Path("/Users/jeqin/work/code/Translator/python_server/moyoyo_asr_models")
whisper_model = 'large-v3-turbo-q5_0'
t0 = time.time()
@@ -28,18 +28,40 @@ def main():
no_context=True
)
print("load model time: ", time.time()-t0)
- audios = Path("/Users/jeqin/work/code/TestTranslator/tests/test_data/test_audios/")
- rows = [["file_name", "inference_time", "inference_result"]]
- for audio in sorted(audios.glob("*-mix/randomforest*.wav")):
+ return model
+
+def run_recordings():
+ model = load_model()
+ audios = Path("/Users/jeqin/work/code/TestTranslator/tests/test_data/recordings/")
+ rows = [["file_name", "time", "inference_result"]]
+ original = get_origin_text_dict()
+ for audio in sorted(audios.glob("*.wav"), key=lambda x: int(x.stem)):
print(audio)
t1 = time.time()
- output = model.transcribe(str(audio), language="zh")#, language="zh", initial_prompt="这是一段中文的会议内容。")# initial_prompt="这是一段中文的会议内容。"
+ output = model.transcribe(str(audio), language="zh", initial_prompt="以下是普通话句子,这是一段会议内容。")# initial_prompt="这是一段中文的会议内容。"
t = time.time() - t1
print("inference time:", t)
text = " ".join([a.text for a in output])
print(text)
- rows.append([f"{audio.parent.name}/{audio.name}", t, text])
- # save_csv("csv/whisper.csv", rows)
+ d, nd, diff = get_text_distance(original[audio.stem], text)
+ rows.append([audio.name, round(t, 3), text, d, round(nd,3), diff])
+ save_csv("csv/whisper.csv", rows)
+
+def run_test_audios():
+ model = load_model()
+ lang = "zh"
+ audios = Path("/Users/jeqin/work/code/TestTranslator/tests/test_data/test_audios/")
+ rows = [["file_name", "time", "inference_result"]]
+ for audio in sorted(audios.glob(f"*{lang}*/*.wav")):
+ print(audio)
+ t1 = time.time()
+ output = model.transcribe(str(audio), language=lang, initial_prompt="以下是普通话句子,这是一段会议内容。")# initial_prompt="这是一段中文的会议内容。"
+ t = time.time() - t1
+ print("inference time:", t)
+ text = " ".join([a.text for a in output])
+ print(text)
+ rows.append([f"{audio.parent.name}/{audio.name}", round(t, 3), text])
+ save_csv("csv/whisper.csv", rows)
if __name__ == '__main__':
- main()
\ No newline at end of file
+ run_recordings()
\ No newline at end of file
diff --git a/temp.py b/temp.py
index bdf4888e7f4d5f0fa7f186a37452cc49d7261147..6d25f69fb7562ac081eb12edba145613f4888191 100644
--- a/temp.py
+++ b/temp.py
@@ -1,4 +1,14 @@
-text ="""
-{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {{- messages[0].content + '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within XML tags:\\n\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n\\n\\nFor each function call, return a json object with function name and arguments within XML tags:\\n\\n{\\\"name\\\": , \\\"arguments\\\": }\\n<|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0].content + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" and message.content is string and not(message.content.startswith('') and message.content.endswith('')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if message.content is string %}\n {%- set content = message.content %}\n {%- else %}\n {%- set content = '' %}\n {%- endif %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '' in content %}\n {%- set reasoning_content = content.split('')[0].rstrip('\\n').split('')[-1].lstrip('\\n') %}\n {%- set content = content.split('')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if loop.index0 > ns.last_query_index %}\n {%- if loop.last or (not loop.last and reasoning_content) %}\n {{- '<|im_start|>' + message.role + '\\n\\n' + reasoning_content.strip('\\n') + '\\n\\n\\n' + content.lstrip('\\n') }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}\n {{- '\\n' }}\n {%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- content }}\n {{- '\\n' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n{%- endif %}
-"""
-print(text)
\ No newline at end of file
+TEXT_FILE = '/Users/jeqin/work/code/TestTranslator/tests/test_data/text/test_asr_zh.txt'
+index = 1
+with open(TEXT_FILE, encoding='utf-8') as f:
+ for line in f:
+ line = line.strip()
+ # print(line)
+ if not line:
+ continue
+ if line.startswith('#'):
+ # print(line)
+ continue
+ line = f"{index}. {line}"
+ print(line)
+ index += 1
\ No newline at end of file
diff --git a/tests/test_data/recordings/1.wav b/tests/test_data/recordings/1.wav
new file mode 100644
index 0000000000000000000000000000000000000000..1dbc2fa4282f7211bedaca22a91308683c039f2d
--- /dev/null
+++ b/tests/test_data/recordings/1.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:77f6f1006e789f69f30f9047d5d93f2cbc58012f1a41a21ebfc12b93c2de7d89
+size 141854
diff --git a/tests/test_data/recordings/10.wav b/tests/test_data/recordings/10.wav
new file mode 100644
index 0000000000000000000000000000000000000000..3082357be73324efdf561f53a12192115e7f3ce6
--- /dev/null
+++ b/tests/test_data/recordings/10.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5ce3be6f2ae27a19ee56eafb95ac3ca62b7946c4733e8aa542e74f36d06b036b
+size 184664
diff --git a/tests/test_data/recordings/11.wav b/tests/test_data/recordings/11.wav
new file mode 100644
index 0000000000000000000000000000000000000000..d3a3096fb81fe7b14133a0252064e75a1aa15c4b
--- /dev/null
+++ b/tests/test_data/recordings/11.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6720957bd8bcba4515cc3e416d9898c38f2dbdb377697ef69a528e621e11d0a1
+size 158234
diff --git a/tests/test_data/recordings/12.wav b/tests/test_data/recordings/12.wav
new file mode 100644
index 0000000000000000000000000000000000000000..ab56124957c02fc7b5bacaf91bbd8de4fbbf2c15
--- /dev/null
+++ b/tests/test_data/recordings/12.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c686cd5322384e36747647f228cd023a77bc323cc26fab9f7fcd351f93019dc3
+size 201614
diff --git a/tests/test_data/recordings/13.wav b/tests/test_data/recordings/13.wav
new file mode 100644
index 0000000000000000000000000000000000000000..022152782c6a221fa9818cc8b12117717c721aac
--- /dev/null
+++ b/tests/test_data/recordings/13.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:baf0c19d4729ecba8057a2292cdb117ec9c4836aaa5aabbb9def63ef1d7ffbb3
+size 201674
diff --git a/tests/test_data/recordings/14.wav b/tests/test_data/recordings/14.wav
new file mode 100644
index 0000000000000000000000000000000000000000..580b9ada4913bc990fbd851b82be91f15f139945
--- /dev/null
+++ b/tests/test_data/recordings/14.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44baf4bdd176224377b4318400d5ac8a4947517fe09b0e16619d63d77b18a631
+size 321194
diff --git a/tests/test_data/recordings/15.wav b/tests/test_data/recordings/15.wav
new file mode 100644
index 0000000000000000000000000000000000000000..628ba5aa532510eda4d0591607e015b21fb5da1e
--- /dev/null
+++ b/tests/test_data/recordings/15.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5abf82f0fa3ce6737f7cdae83931b78295bf2adc48f394d1fa6c7193c76e879
+size 252284
diff --git a/tests/test_data/recordings/16.wav b/tests/test_data/recordings/16.wav
new file mode 100644
index 0000000000000000000000000000000000000000..4b0a6de255bd9606c49837e9aaf56c7b277ad7f5
--- /dev/null
+++ b/tests/test_data/recordings/16.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3323eeefe1f1219cf2db94a41e0370f699f66e495c390b5d0a8576748955a220
+size 278594
diff --git a/tests/test_data/recordings/17.wav b/tests/test_data/recordings/17.wav
new file mode 100644
index 0000000000000000000000000000000000000000..a00a495462488b92b5ed9adb3f7dead29c806064
--- /dev/null
+++ b/tests/test_data/recordings/17.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8654234ed4a01ef2b0b32779757da30c5c6929325977c0d7640d40216d12abd5
+size 381464
diff --git a/tests/test_data/recordings/18.wav b/tests/test_data/recordings/18.wav
new file mode 100644
index 0000000000000000000000000000000000000000..4a9da8344aed3313d6fb776cf1c420f8a1c827fc
--- /dev/null
+++ b/tests/test_data/recordings/18.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7ece527a8f191c88bda2800715898ae5e3c2ec13b86d43467ec9e37a53b8e77c
+size 284024
diff --git a/tests/test_data/recordings/19.wav b/tests/test_data/recordings/19.wav
new file mode 100644
index 0000000000000000000000000000000000000000..38e6b0b3cddba2f33bd5da19eca091f5f56566e6
--- /dev/null
+++ b/tests/test_data/recordings/19.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d5d57a7b312033cc19cc7f7a6db06b01b6d37e191a58588b9b32a7ab98032aa3
+size 367964
diff --git a/tests/test_data/recordings/2.wav b/tests/test_data/recordings/2.wav
new file mode 100644
index 0000000000000000000000000000000000000000..db41aee37d59821ad7e4f785dd7abc1dfd188ddc
--- /dev/null
+++ b/tests/test_data/recordings/2.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:31be8ce54c599118787494d88e481e511dab05d45d1a7383710ceecf3db7569d
+size 149924
diff --git a/tests/test_data/recordings/20.wav b/tests/test_data/recordings/20.wav
new file mode 100644
index 0000000000000000000000000000000000000000..148e3e233d17e43dba1b754e8c53043e78b193e2
--- /dev/null
+++ b/tests/test_data/recordings/20.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76acbe509263e26fd076bab325cde6b45c52d792a562180ddb9b5a4da62beec7
+size 274964
diff --git a/tests/test_data/recordings/21.wav b/tests/test_data/recordings/21.wav
new file mode 100644
index 0000000000000000000000000000000000000000..a65566e1248e3e7b7644c77153c01febadbe024b
--- /dev/null
+++ b/tests/test_data/recordings/21.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e143f1d398c8f144324767474805d69b9a1f285734f354d1ff10824f4f869b70
+size 313754
diff --git a/tests/test_data/recordings/22.wav b/tests/test_data/recordings/22.wav
new file mode 100644
index 0000000000000000000000000000000000000000..a4ef2f8e5831a497fe7615a49c44377ec91ea231
--- /dev/null
+++ b/tests/test_data/recordings/22.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf10a0bd8f9b202a5fc32f467d7a55c4029675a28f428970a2149f50a315f112
+size 272714
diff --git a/tests/test_data/recordings/23.wav b/tests/test_data/recordings/23.wav
new file mode 100644
index 0000000000000000000000000000000000000000..5af3a0dbc177279045efbfce36a4123826334292
--- /dev/null
+++ b/tests/test_data/recordings/23.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c17c5316b39779bcb84d0aa1593c05fc22907697f6d6c7236c7a7260166e406b
+size 266204
diff --git a/tests/test_data/recordings/24.wav b/tests/test_data/recordings/24.wav
new file mode 100644
index 0000000000000000000000000000000000000000..56d25b593218af841134d7e95f6a5ca0df62915f
--- /dev/null
+++ b/tests/test_data/recordings/24.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb1dba9272cd68902b20e705ce687b6cce5e6ef79a5427b7a1bcbb0532137227
+size 297314
diff --git a/tests/test_data/recordings/25.wav b/tests/test_data/recordings/25.wav
new file mode 100644
index 0000000000000000000000000000000000000000..29b0746c889f676fce86434da88d79bbae838a0f
--- /dev/null
+++ b/tests/test_data/recordings/25.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b89d3440b113f0db28ec55776d3ca97cdc430ea9d1a13023bfec0d5aba5cabe9
+size 270434
diff --git a/tests/test_data/recordings/26.wav b/tests/test_data/recordings/26.wav
new file mode 100644
index 0000000000000000000000000000000000000000..0e82c6ecc8c958f082f2867e194f67960f4ab809
--- /dev/null
+++ b/tests/test_data/recordings/26.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a08d7996a8485369483e7e6f2e19e7c21dbdec91df3bae74a4cba360eb80d9e4
+size 150704
diff --git a/tests/test_data/recordings/27.wav b/tests/test_data/recordings/27.wav
new file mode 100644
index 0000000000000000000000000000000000000000..463e8f73635d824418a5b544b25be12824d96b20
--- /dev/null
+++ b/tests/test_data/recordings/27.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ae80a1a961185e18c9b93216b3ce1a5baee9e3aee0fbcf4114a0319c9fce556a
+size 174524
diff --git a/tests/test_data/recordings/28.wav b/tests/test_data/recordings/28.wav
new file mode 100644
index 0000000000000000000000000000000000000000..0e280c4fbdc151f687220e04b5be8dd9b24ca333
--- /dev/null
+++ b/tests/test_data/recordings/28.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9293d2d95d78ce9392fd49e220798eb2ef79a7b361e5c9aaa00451125d79c721
+size 183014
diff --git a/tests/test_data/recordings/29.wav b/tests/test_data/recordings/29.wav
new file mode 100644
index 0000000000000000000000000000000000000000..4888cbc9683669fe73ae386d0993ec95406862e5
--- /dev/null
+++ b/tests/test_data/recordings/29.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0a9f941054691b17c3d6320b1bd4ae0468ab4f335d667d87ae25ef2b4ba251f1
+size 196994
diff --git a/tests/test_data/recordings/3.wav b/tests/test_data/recordings/3.wav
new file mode 100644
index 0000000000000000000000000000000000000000..73d5ea11d8c40e50fc29e2c5b2794efe4f1948bf
--- /dev/null
+++ b/tests/test_data/recordings/3.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:78c500e9787d1882bde1e3d7fe5ab48bffebc69a503e99f0f6ba7d011941e687
+size 242084
diff --git a/tests/test_data/recordings/30.wav b/tests/test_data/recordings/30.wav
new file mode 100644
index 0000000000000000000000000000000000000000..533fb72dc39f406b357fe904891666ee2ecdb4e8
--- /dev/null
+++ b/tests/test_data/recordings/30.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32fbcac1e31b4fbec5a758a40ac01c477b3d79b79c78195134d17f51ebaf5023
+size 162194
diff --git a/tests/test_data/recordings/31.wav b/tests/test_data/recordings/31.wav
new file mode 100644
index 0000000000000000000000000000000000000000..a5b2606a920123029887eb2835095a29c84267a3
--- /dev/null
+++ b/tests/test_data/recordings/31.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e4bb89d406d30a1cc77aea7f7d2162fc9db33b33c6f4d6258b09c0018c2b3e37
+size 190634
diff --git a/tests/test_data/recordings/32.wav b/tests/test_data/recordings/32.wav
new file mode 100644
index 0000000000000000000000000000000000000000..fdbae81077d53a8c643b8bb4c4f2218436de3c27
--- /dev/null
+++ b/tests/test_data/recordings/32.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3632d894647cdae67fecb4703fcf7ce1030cd905580e20fbeca5cc51d2b0e40c
+size 268694
diff --git a/tests/test_data/recordings/33.wav b/tests/test_data/recordings/33.wav
new file mode 100644
index 0000000000000000000000000000000000000000..cece492d8cf94b9a3719316b86c05d7ec775126e
--- /dev/null
+++ b/tests/test_data/recordings/33.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e52805deabef8843e1f75ac8ae651f766dd5e0225981a8b843109e73b0f522db
+size 247094
diff --git a/tests/test_data/recordings/34.wav b/tests/test_data/recordings/34.wav
new file mode 100644
index 0000000000000000000000000000000000000000..818dabea978ef3ccfc630b9ff0de2d8ced0f20ce
--- /dev/null
+++ b/tests/test_data/recordings/34.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a9008cf27e698797c14dc9f5594952a8a84007c8a6f2f674dbf69bed276d392a
+size 248234
diff --git a/tests/test_data/recordings/35.wav b/tests/test_data/recordings/35.wav
new file mode 100644
index 0000000000000000000000000000000000000000..9219af1bcfcf9ef0f2a2467709c6bf8a8ddae354
--- /dev/null
+++ b/tests/test_data/recordings/35.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e15a82a43aa78ab86983c85883ed49ffbb99fc87cccf33022eb6bcb8d9eea88c
+size 257864
diff --git a/tests/test_data/recordings/36.wav b/tests/test_data/recordings/36.wav
new file mode 100644
index 0000000000000000000000000000000000000000..65192fbcda019be2be8f9f86840be899738d791b
--- /dev/null
+++ b/tests/test_data/recordings/36.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:020ed5cb9eb3a00e4fdb9408783d36cc758534e0c3263a0896995faebdcf5535
+size 274394
diff --git a/tests/test_data/recordings/37.wav b/tests/test_data/recordings/37.wav
new file mode 100644
index 0000000000000000000000000000000000000000..53692189fcafb2afc6f37467bf95a8101e15e541
--- /dev/null
+++ b/tests/test_data/recordings/37.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0f4d2d0f66885e6bee03bf4806cd2cf760ebec7b120bdbcb49ac46c849e0c1a4
+size 295964
diff --git a/tests/test_data/recordings/38.wav b/tests/test_data/recordings/38.wav
new file mode 100644
index 0000000000000000000000000000000000000000..107678ad71c7e849976ac530b95ba1486ec573e1
--- /dev/null
+++ b/tests/test_data/recordings/38.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a54649f65aabfdd20fe2df2c4b1f6e294e773540cb63b65503c0d1732c990319
+size 277334
diff --git a/tests/test_data/recordings/39.wav b/tests/test_data/recordings/39.wav
new file mode 100644
index 0000000000000000000000000000000000000000..7aac40ae2a8ae5035f3083ec72b3fcffd4e3cb09
--- /dev/null
+++ b/tests/test_data/recordings/39.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ae68f060247ea11ee422bffa01d1e444fa323b7e2105a63079ca49cf2d9e0df7
+size 347624
diff --git a/tests/test_data/recordings/4.wav b/tests/test_data/recordings/4.wav
new file mode 100644
index 0000000000000000000000000000000000000000..ae168b08af47d34d01e853b1e84a59a88f8956d8
--- /dev/null
+++ b/tests/test_data/recordings/4.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:113d7173b16bd2d921d0e63b8a1f39fae1450da68b4b6e835d8f6bea405bf25e
+size 227264
diff --git a/tests/test_data/recordings/40.wav b/tests/test_data/recordings/40.wav
new file mode 100644
index 0000000000000000000000000000000000000000..4d9f1de64d59f8365377096420f8cb894f560366
--- /dev/null
+++ b/tests/test_data/recordings/40.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fb33cf5324157fcc1a81398f467c75ca0c31a697b0eb378cfef37c237af3e875
+size 277994
diff --git a/tests/test_data/recordings/41.wav b/tests/test_data/recordings/41.wav
new file mode 100644
index 0000000000000000000000000000000000000000..546307a28e647487db0c6ae745592bf2ca1e8706
--- /dev/null
+++ b/tests/test_data/recordings/41.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cc3ef23125d4c5246ad4bd3e41b4f842356ecfd186ff6112b1f12a2474e912ec
+size 258284
diff --git a/tests/test_data/recordings/42.wav b/tests/test_data/recordings/42.wav
new file mode 100644
index 0000000000000000000000000000000000000000..36da2437afe475e5fdcb24cdce131ee1a7d1b354
--- /dev/null
+++ b/tests/test_data/recordings/42.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9efd63be189ba2eb143ad8cabb03c1088f113e3b25bd586f5998669bca2acb10
+size 159404
diff --git a/tests/test_data/recordings/43.wav b/tests/test_data/recordings/43.wav
new file mode 100644
index 0000000000000000000000000000000000000000..7585629306d4a72cbda267a740e51b384a5daf4c
--- /dev/null
+++ b/tests/test_data/recordings/43.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:343c18a93f85637f7872953f98d1fc5a03d37c2271b147b53a4f68f0126d2fad
+size 556814
diff --git a/tests/test_data/recordings/44.wav b/tests/test_data/recordings/44.wav
new file mode 100644
index 0000000000000000000000000000000000000000..ff5a618465a0d0c567d049e879e097125cb8ce42
--- /dev/null
+++ b/tests/test_data/recordings/44.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3f52275b9d21e17e527a9dff2e7f102210764d1f305e269a1f336c2ddb80fcf9
+size 246134
diff --git a/tests/test_data/recordings/45.wav b/tests/test_data/recordings/45.wav
new file mode 100644
index 0000000000000000000000000000000000000000..cd190d228011f6cf4e8b9cb9bab55f070eb0278e
--- /dev/null
+++ b/tests/test_data/recordings/45.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5fe73673d6d8ed05031ffdaac3015419ee3a495022d515e0161867fe49da139b
+size 296894
diff --git a/tests/test_data/recordings/46.wav b/tests/test_data/recordings/46.wav
new file mode 100644
index 0000000000000000000000000000000000000000..56f95239453cc5ad0313cf789038a68b117f91f2
--- /dev/null
+++ b/tests/test_data/recordings/46.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:716f798077ff25b2f8bc7620ba70b45f6a51152b70079688eaa6dae18b90f464
+size 279404
diff --git a/tests/test_data/recordings/47.wav b/tests/test_data/recordings/47.wav
new file mode 100644
index 0000000000000000000000000000000000000000..728738e36e6a3e4408b5f955b6bf7b54e34f715b
--- /dev/null
+++ b/tests/test_data/recordings/47.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:66866edef043eedf895fdeac5ea025291be2e68e64819355b56c6588a51bb136
+size 285074
diff --git a/tests/test_data/recordings/48.wav b/tests/test_data/recordings/48.wav
new file mode 100644
index 0000000000000000000000000000000000000000..32317d27dcdadd0dd3927e36a4a5ea0b17a90add
--- /dev/null
+++ b/tests/test_data/recordings/48.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c4369c456ec468adaccc60ef259499c0ed488999e6b97f316d364cdc4117ab8
+size 236324
diff --git a/tests/test_data/recordings/49.wav b/tests/test_data/recordings/49.wav
new file mode 100644
index 0000000000000000000000000000000000000000..0c865b94848f2ff3408c279293227dd830d26821
--- /dev/null
+++ b/tests/test_data/recordings/49.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1e727d5a540a3066c4f998ed6102dba9d8e1c436b26f6032e87f4386cfe2d0e
+size 329414
diff --git a/tests/test_data/recordings/5.wav b/tests/test_data/recordings/5.wav
new file mode 100644
index 0000000000000000000000000000000000000000..439668876ee66a84be61052ba3b872c3e14b6988
--- /dev/null
+++ b/tests/test_data/recordings/5.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5cb2d2183c48fe093f5d8e20523623e0ba147a19babf77af3b93d797964ffe08
+size 146894
diff --git a/tests/test_data/recordings/50.wav b/tests/test_data/recordings/50.wav
new file mode 100644
index 0000000000000000000000000000000000000000..113423169693010d245034a1f4fe968750fac74c
--- /dev/null
+++ b/tests/test_data/recordings/50.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aefbf0390f3d573e0dc40c0b1a18a578f277f6370fa3a76f91c9fc1ec6a91140
+size 256214
diff --git a/tests/test_data/recordings/51.wav b/tests/test_data/recordings/51.wav
new file mode 100644
index 0000000000000000000000000000000000000000..fdc7ebf86685f16a80bf31bcc4ec57fec7482711
--- /dev/null
+++ b/tests/test_data/recordings/51.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9a97fe248bd4a2db2a4e400836acf0acfd0b75e6c8efebd42e5ea6c2943bf886
+size 425444
diff --git a/tests/test_data/recordings/52.wav b/tests/test_data/recordings/52.wav
new file mode 100644
index 0000000000000000000000000000000000000000..c257e93d6937dd4839b435a57372072ea6523139
--- /dev/null
+++ b/tests/test_data/recordings/52.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c5ab10a4d8862a70321fb7d214a1ed3f14a52cca5272b8f22e7d08aa45065c55
+size 225944
diff --git a/tests/test_data/recordings/53.wav b/tests/test_data/recordings/53.wav
new file mode 100644
index 0000000000000000000000000000000000000000..d41ffe935d372d6c2f1d9cd86766f4750b7c992a
--- /dev/null
+++ b/tests/test_data/recordings/53.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:420c278bf354f5a23e96728e24ad8912ffe5562575527105fa5829905c40add3
+size 222224
diff --git a/tests/test_data/recordings/54.wav b/tests/test_data/recordings/54.wav
new file mode 100644
index 0000000000000000000000000000000000000000..d118f349d1797c9328c63756251bd81f05beec81
--- /dev/null
+++ b/tests/test_data/recordings/54.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:802ba957b1d83892a003faaa277951a799f3bf027085da019aff34c7f3199992
+size 248144
diff --git a/tests/test_data/recordings/55.wav b/tests/test_data/recordings/55.wav
new file mode 100644
index 0000000000000000000000000000000000000000..c401255c10f4e7917d84bcc5f3977433a85ed9ec
--- /dev/null
+++ b/tests/test_data/recordings/55.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:07f5ff61710c84461096bb3250d429c1ec514e20c69c795c411c4d3f9c3343e9
+size 242354
diff --git a/tests/test_data/recordings/56.wav b/tests/test_data/recordings/56.wav
new file mode 100644
index 0000000000000000000000000000000000000000..d7683f85ca6652144e1e89be0696c88be7fa883b
--- /dev/null
+++ b/tests/test_data/recordings/56.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:84a25772e4731e7237b127880e15b1e650591e35da994ce4cf896f0c6086dc23
+size 278774
diff --git a/tests/test_data/recordings/57.wav b/tests/test_data/recordings/57.wav
new file mode 100644
index 0000000000000000000000000000000000000000..f49f8423d0bc376c6345fbb1356a916f8209a269
--- /dev/null
+++ b/tests/test_data/recordings/57.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d419d4e0a14bb428c8b44e24053ad348686272521c2c4835369f052e83753669
+size 262184
diff --git a/tests/test_data/recordings/58.wav b/tests/test_data/recordings/58.wav
new file mode 100644
index 0000000000000000000000000000000000000000..da6b996f29413ebdac2379ad1d162ac41ea4ce74
--- /dev/null
+++ b/tests/test_data/recordings/58.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fd2a871236c3380c9b4980ceb07796249f8dfc59c2b6fd285dda4bf63baa897e
+size 225464
diff --git a/tests/test_data/recordings/59.wav b/tests/test_data/recordings/59.wav
new file mode 100644
index 0000000000000000000000000000000000000000..f4094529da5fec2ac1e9fcfe8a114463a2ba3f30
--- /dev/null
+++ b/tests/test_data/recordings/59.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0db0455545dc5751d2d137fc6235ba17d57e0dcf660dcbc8c43ae69b2619758a
+size 233594
diff --git a/tests/test_data/recordings/6.wav b/tests/test_data/recordings/6.wav
new file mode 100644
index 0000000000000000000000000000000000000000..a124a2305a6ec9bcc9e3046208ee5c2c4573901d
--- /dev/null
+++ b/tests/test_data/recordings/6.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7634d416a7f0a73ef18ab4b585a24e7fd91a7a9e82b185899ee67fb4e5ea69b3
+size 122834
diff --git a/tests/test_data/recordings/60.wav b/tests/test_data/recordings/60.wav
new file mode 100644
index 0000000000000000000000000000000000000000..69e3e2f78028b67d861d07a878b21a7c4cf5055d
--- /dev/null
+++ b/tests/test_data/recordings/60.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c0e995e9203442d4cc5734bc449436e6c53425ad29b9d6ab9264d47509d7c3b7
+size 258644
diff --git a/tests/test_data/recordings/61.wav b/tests/test_data/recordings/61.wav
new file mode 100644
index 0000000000000000000000000000000000000000..15aaa6fccc751259b0374bcb93110d1003feea17
--- /dev/null
+++ b/tests/test_data/recordings/61.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d258cbb09f9da741c56ce111439b1e5ce68cdeef96cc8952212fd040e29d8800
+size 145214
diff --git a/tests/test_data/recordings/62.wav b/tests/test_data/recordings/62.wav
new file mode 100644
index 0000000000000000000000000000000000000000..1d59f832643036475c10ca93d65c8fffd333022c
--- /dev/null
+++ b/tests/test_data/recordings/62.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b911f7a4259e7ff22af79377c1c8ee7d1cd935355572bb21efe34e2a9561b438
+size 175814
diff --git a/tests/test_data/recordings/63.wav b/tests/test_data/recordings/63.wav
new file mode 100644
index 0000000000000000000000000000000000000000..81025fc43ee69ae52bbc61df0a23985438eab6f7
--- /dev/null
+++ b/tests/test_data/recordings/63.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1c13536287fd69d9df66c078c1ba69c05c00053c97aacbfb96449bb4a20d1618
+size 119294
diff --git a/tests/test_data/recordings/64.wav b/tests/test_data/recordings/64.wav
new file mode 100644
index 0000000000000000000000000000000000000000..c3a0b46a3821472ec07d061a14acf0590405fbf6
--- /dev/null
+++ b/tests/test_data/recordings/64.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cd052d87c2bd386406e3b4821c726a218260194165ea8479370a569744826a2e
+size 150134
diff --git a/tests/test_data/recordings/65.wav b/tests/test_data/recordings/65.wav
new file mode 100644
index 0000000000000000000000000000000000000000..fe9a7ecce1033db1b87d0f0b747e3dc622520433
--- /dev/null
+++ b/tests/test_data/recordings/65.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c113047e0651cc7a5349f4f2274888ed4bdc7c42e2decd3b9d654303477166d6
+size 137774
diff --git a/tests/test_data/recordings/66.wav b/tests/test_data/recordings/66.wav
new file mode 100644
index 0000000000000000000000000000000000000000..c521706d60ed5c59a49d7334bf933dfe3866912a
--- /dev/null
+++ b/tests/test_data/recordings/66.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4587043f48aa6fd7b8f44a497f53d3de80fc1555e77dce1ee9e42bc27b9ce3d
+size 174644
diff --git a/tests/test_data/recordings/67.wav b/tests/test_data/recordings/67.wav
new file mode 100644
index 0000000000000000000000000000000000000000..83a1a3687437d95595201432290d5d948da27ecf
--- /dev/null
+++ b/tests/test_data/recordings/67.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:65fbf827d399c0ba0c9dc875bd82aa5b3468eb4837ac10390482a4e750a28b73
+size 148184
diff --git a/tests/test_data/recordings/68.wav b/tests/test_data/recordings/68.wav
new file mode 100644
index 0000000000000000000000000000000000000000..4ff1d172f79e3d15d1089ade5bfca1a391ed0ada
--- /dev/null
+++ b/tests/test_data/recordings/68.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a1dfa6c3ca47e70df360e2b89d94d37b7daafcc29df6b5e46ff113bb183206b5
+size 369644
diff --git a/tests/test_data/recordings/69.wav b/tests/test_data/recordings/69.wav
new file mode 100644
index 0000000000000000000000000000000000000000..c21261778f272ea2e6dc657e4ec201ac7f387b29
--- /dev/null
+++ b/tests/test_data/recordings/69.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0266fa8532497359f25956c48e958a561981b0f1fd230d84f8edab6545a1ae03
+size 210404
diff --git a/tests/test_data/recordings/7.wav b/tests/test_data/recordings/7.wav
new file mode 100644
index 0000000000000000000000000000000000000000..0480d5b1905fa6da739e901323b0774150d50658
--- /dev/null
+++ b/tests/test_data/recordings/7.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aa46eade7366c0540f948d15111d2216ee07fad633172ac8f99072fe0e7006d7
+size 124184
diff --git a/tests/test_data/recordings/70.wav b/tests/test_data/recordings/70.wav
new file mode 100644
index 0000000000000000000000000000000000000000..bfa42464d62657077378aa55da4b6c90640db5ff
--- /dev/null
+++ b/tests/test_data/recordings/70.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:368f6995a668ed366a0243c2d21f576e7060e0e2539aebbc5be98875595666f0
+size 253184
diff --git a/tests/test_data/recordings/71.wav b/tests/test_data/recordings/71.wav
new file mode 100644
index 0000000000000000000000000000000000000000..2907fa2c22a19c907ff285e24ead507d461b58b0
--- /dev/null
+++ b/tests/test_data/recordings/71.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53f99e03ef9ebdb7566f5bc16c9e3ecd9774e3b2502ed6b8df084aabf17fb6e9
+size 322604
diff --git a/tests/test_data/recordings/72.wav b/tests/test_data/recordings/72.wav
new file mode 100644
index 0000000000000000000000000000000000000000..9042c78b0b764fa2755870638fe90e58db398808
--- /dev/null
+++ b/tests/test_data/recordings/72.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6c520935e3a67461f32585dae477cd82a7b3a988f51a5cb0b6faeaa93901bdb7
+size 373844
diff --git a/tests/test_data/recordings/73.wav b/tests/test_data/recordings/73.wav
new file mode 100644
index 0000000000000000000000000000000000000000..cbe8cb86ef216a87b64b3e290f7fe6c6584a4195
--- /dev/null
+++ b/tests/test_data/recordings/73.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:67baa468534b6114b4b5674a8a3bd79983974ddeebfecd282f814a8795e408d3
+size 440894
diff --git a/tests/test_data/recordings/74.wav b/tests/test_data/recordings/74.wav
new file mode 100644
index 0000000000000000000000000000000000000000..3cb23207f8ab3949322afda18492043eb8f152c3
--- /dev/null
+++ b/tests/test_data/recordings/74.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3bf12d7ca9e64aa7c36b1a7cac7bcd1da686121bf49aadbf8aedf0bc9217262b
+size 337214
diff --git a/tests/test_data/recordings/75.wav b/tests/test_data/recordings/75.wav
new file mode 100644
index 0000000000000000000000000000000000000000..5426c334a66b74a039b5c57470adb398faa0c02c
--- /dev/null
+++ b/tests/test_data/recordings/75.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:edc993377a286b66a62ca70bbb139f05a2ecb5e776e59f9390ce992f09efa0f2
+size 506534
diff --git a/tests/test_data/recordings/76.wav b/tests/test_data/recordings/76.wav
new file mode 100644
index 0000000000000000000000000000000000000000..ec5c70556557402a5493858c9a6152e4b36134aa
--- /dev/null
+++ b/tests/test_data/recordings/76.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c8b0ca082156cc080e5530863ef7556eb32e477132658221968e935a4676711a
+size 401384
diff --git a/tests/test_data/recordings/77.wav b/tests/test_data/recordings/77.wav
new file mode 100644
index 0000000000000000000000000000000000000000..2e4bd9a2cf22dc4bb1d905e6526485c230307f5d
--- /dev/null
+++ b/tests/test_data/recordings/77.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:68fc0a11765ab8cf34c108b423452e33f685483cfa11b9c7bf1cbef0d42dc941
+size 92894
diff --git a/tests/test_data/recordings/78.wav b/tests/test_data/recordings/78.wav
new file mode 100644
index 0000000000000000000000000000000000000000..32f901cff2610347a4d25c9b0e10fb95696f325a
--- /dev/null
+++ b/tests/test_data/recordings/78.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ecb019db2f220ada18f871057a74244abb341c2626f892255a8c610f73d5be1c
+size 89864
diff --git a/tests/test_data/recordings/79.wav b/tests/test_data/recordings/79.wav
new file mode 100644
index 0000000000000000000000000000000000000000..149390f5776e3a6564b50a75aa732bc04023d856
--- /dev/null
+++ b/tests/test_data/recordings/79.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:657fdbbd1e3d7504402a4560067edb7290844aa583a0927e8e435c05521ececb
+size 140534
diff --git a/tests/test_data/recordings/8.wav b/tests/test_data/recordings/8.wav
new file mode 100644
index 0000000000000000000000000000000000000000..909f1775072f362ea28d61f2e0988cb9fc74df42
--- /dev/null
+++ b/tests/test_data/recordings/8.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6936dcbf6f6f88d3e8e857b5a9d75c95ad1937bfce91732ca9f03082cb6b7e73
+size 223904
diff --git a/tests/test_data/recordings/80.wav b/tests/test_data/recordings/80.wav
new file mode 100644
index 0000000000000000000000000000000000000000..b8dcbd024e8355141bb462e21ad7ffb191fd89fc
--- /dev/null
+++ b/tests/test_data/recordings/80.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0406388e9370c4e03835a7ee375df029906c4d9af7127ebe0de60982c4d492b9
+size 141284
diff --git a/tests/test_data/recordings/81.wav b/tests/test_data/recordings/81.wav
new file mode 100644
index 0000000000000000000000000000000000000000..f8c654a79c9a7ca546bb5090858ab29bb8958052
--- /dev/null
+++ b/tests/test_data/recordings/81.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:93b70f6807db9122bf46dc5f6f5eaafcdf5cbd02efaf3234c95d94cc23f574bf
+size 138254
diff --git a/tests/test_data/recordings/82.wav b/tests/test_data/recordings/82.wav
new file mode 100644
index 0000000000000000000000000000000000000000..ada2aff1092e4f6143378a67f60b54ca4d6ea4bd
--- /dev/null
+++ b/tests/test_data/recordings/82.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f6621462baf069628c5c5a19e61bf01a599dd1d291353469eae50ae221f78f0e
+size 339914
diff --git a/tests/test_data/recordings/83.wav b/tests/test_data/recordings/83.wav
new file mode 100644
index 0000000000000000000000000000000000000000..4164bc3a01853752d9aa8f28a29e33ceabb36af1
--- /dev/null
+++ b/tests/test_data/recordings/83.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:87fcb33836336490df29a3c63702ad963ade3f86b668f6f473d13af80a6c8cf4
+size 304334
diff --git a/tests/test_data/recordings/84.wav b/tests/test_data/recordings/84.wav
new file mode 100644
index 0000000000000000000000000000000000000000..c76f95a9b2f5acc7058aa62bed04cb0e84b7da4d
--- /dev/null
+++ b/tests/test_data/recordings/84.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f4cf836c2fb9539a2ae75d483c2a434a9b0d82996ce304c9cd79e1c6aa43d955
+size 434924
diff --git a/tests/test_data/recordings/85.wav b/tests/test_data/recordings/85.wav
new file mode 100644
index 0000000000000000000000000000000000000000..dc9b08d336d81a07f7d9f36dfa77d2c3b458bb55
--- /dev/null
+++ b/tests/test_data/recordings/85.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f3f55ee13df89a27541c26ac931ff5462d2a9ce3bbe2a4790d0855cac53d3c79
+size 256544
diff --git a/tests/test_data/recordings/9.wav b/tests/test_data/recordings/9.wav
new file mode 100644
index 0000000000000000000000000000000000000000..d977dfe7ec417b53f2aac04134572d05153aa95c
--- /dev/null
+++ b/tests/test_data/recordings/9.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1ecd4a11855a62fb051faa301aebd30be7afa91191bffafb2db5228d76b00eba
+size 237494
diff --git a/tests/test_data/test_audios.zip b/tests/test_data/test_audios.zip
index 9051f7e3cae14fe1cda5b7eea1ffdb518d9b379c..97b42bc702d06ebb34da42f1dab548cb34a333b6 100644
--- a/tests/test_data/test_audios.zip
+++ b/tests/test_data/test_audios.zip
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4b3832d0c066ab144e2cda7e37df5144922dbceb0ae2605134eada3c866b0d43
-size 83025760
+oid sha256:af5f8aa677a62c660889fdcf24931f3965ab1a62b6e7cffc93504406371daf62
+size 83026694
diff --git a/tests/test_data/text/test_asr_zh.txt b/tests/test_data/text/test_asr_zh.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e37714da8a3c4a7ca220da9ed36807923c95d41e
--- /dev/null
+++ b/tests/test_data/text/test_asr_zh.txt
@@ -0,0 +1,98 @@
+# 测试日常用语
+您这车开得真够稳的,蜗牛都超车了。
+你可真是个天才,把这么简单的事情都搞砸了。
+因网络问题,远程讲者音频中断,我们切到备用方案共享幻灯片。
+这就好比‘用大炮打蚊子’,资源分配严重不均衡,需要细粒度调度。
+言归正传,我们来讨论一下核心问题。
+这有点超出了我们今天讨论的范围。
+他的年收入约为一百万人民币。
+下一位演讲者是来自斯坦福大学计算机科学系的张明教授
+请各位将手机调至静音模式,演讲结束后有十五分钟提问时间
+茶歇将在十点三十分开始,地点在二楼休息区
+本合同自双方签字盖章之日起生效。
+政府正在采取措施刺激经济增长和创造就业机会。
+今天中午我们点外卖吧,我想吃宫保鸡丁和麻婆豆腐。
+医生建议我多吃粗粮,比如燕麦和紫薯,少吃高油高糖的油炸食品,像炸鸡和甜甜圈。
+
+# 测试计算机专业术语
+本方案采用异构计算架构,结合GPU与FPGA加速张量运算。
+推理延迟稳定在5毫秒以内,吞吐量提升40%,功耗降低1.8瓦。
+相比SOTA模型,我们的方法在小样本场景下召回率高出12个百分点,且参数量仅为其三分之一。
+当节点并发数超过10,000时,内存带宽会成瓶颈,导致尾延迟急剧上升。
+请看图3:蓝色柱是基线模型,红色线是我们的优化结果,交叉点表明在第15轮迭代后优势显著。
+您提到模型泛化性提升,是否在跨模态数据上验证过?量化指标是多少?
+容我追问一点:如果输入数据存在对抗样本,您方案的鲁棒性如何保证?失效概率有测试吗?
+抱歉打断,您说的‘动态剪枝’是指训练中还是推理中?阈值是自适应的吗?
+成本效益是否可行?部署这种定制芯片需要流片费用,中小客户怎么承担?
+我补充一个角度:隐私计算领域也在用类似思路,是否可能跨领域合作?
+端到端优化流水线涵盖数据清洗特征工程模型压缩部署监控。
+请检查代码库中的依赖项冲突问题。
+这个电路板集成了微控制器、传感器和无线通信模块。
+区块链技术的核心在于去中心化和加密安全性。
+需符合等保三级要求,数据出境要走安全评估。
+最新数据显示,消费者信心指数有所回升。
+专家预测,新能源汽车市场将迎来爆发式增长。
+多模态大模型能够同时处理文本、图像和音频信号,实现真正的跨模态理解
+联邦学习可以在保护用户隐私的前提下,实现分布式模型的协同训练
+我们研发的五十量子比特处理器在特定算法上展现出了量子优越性
+变分量子本征值求解器在化学模拟中显示出巨大潜力
+边缘AI推理的延迟已经可以控制在十毫秒以内,满足实时应用需求
+我们设计的新型神经网络压缩算法在保持精度的同时将模型大小减少了百分之七十
+损失函数结合了交叉熵损失和对比损失,权重系数设置为零点三和零点七
+在五个标准数据集上的实验结果表明,我们的方法平均比现有最佳方法提升了二点三个百分点
+消融实验证实了每个模块的有效性,移除注意力机制会导致性能下降百分之四点六
+模型的参数量为一点二亿,在八张A100显卡上训练了七十二小时
+总之,搞定了数据倾斜,性能就上去了。
+
+# 测试中英文混合
+openai-whisper 需要 ffmpeg 的环境,ffmpeg 是一个开源的跨平台音视频处理工具和框架,可以用来录制、转换和流式传输音视频内容 。
+采用 Transformer 序列到序列模型可以实现针对不同的语言处理任务。
+Transformer架构在自然语言处理中的成功应用已经彻底改变了预训练模型的范式
+请大家注意,Workshop材料已经上传至会议系统,代码仓库链接在附录页。
+别造轮子了!直接调用yolov5开源库的预训练权重,快速迭代才是王道。
+请确保您的设备已连接到5GHz Wi-Fi频段以获得最佳性能。
+我们提出了一种基于对比学习的自监督方法,在ImageNet数据集上达到了百分之九十二点五的准确率
+GPT-4在代码生成和多步推理任务上展现出令人印象深刻的能力
+若在高并发场景下未启用我们的动态缓存机制,即使用RDMA网络,延迟也可能因CPU调度争抢而恶化。
+准确说,峰值算力是200 TOPS,不是刚才说的150。
+
+# 测试专有名词:人名/地名/文化典故
+秦始皇嬴政书同文,车同轨,奠定了中国大一统的基础。
+诸葛亮在《出师表》中写道‘鞠躬尽瘁,死而后已’,成为后世臣子的楷模。
+李白的‘举头望明月,低头思故乡’是连三岁孩童都能背诵的诗句。
+孔子曾说‘己所不欲,勿施于人’,这简单的八个字构成了儒家伦理的基石。
+王羲之被后人尊为‘书圣’,其代表作《兰亭集序》被誉为天下第一行书。
+我们要学习庖丁解牛的精神,掌握事物的客观规律,才能游刃有余。
+项羽在鸿门宴上优柔寡断,放走了刘邦,最终兵败乌江自刎。
+在杭州西湖畔,人们总会想起苏轼治理西湖、修筑苏堤的往事。
+我计划去埃菲尔铁塔和卢浮宫参观。
+莎士比亚的戏剧深刻地探讨了人性的复杂性。
+这个消息让他丈二和尚摸不着头脑。
+画龙点睛之笔,让整个设计焕然一新。
+这是卡脖子技术,必须自主研发!
+这幅画作以其独特的色彩运用和构图技巧而闻名。
+
+# 测试其他领域专业术语
+患者主诉间歇性胸痛,放射至左臂。
+患者有冠状动脉粥样硬化性心脏病病史十年,慢性阻塞性肺疾病病史五年
+建议行冠状动脉造影检查,必要时植入支架
+患者需低盐低脂糖尿病饮食,监测血压、血糖变化
+胸部CT平扫显示:双肺散在磨玻璃样密度影,以胸膜下分布为主
+知识产权归属约定:乙方在履行本合同过程中所产生的全部智力成果,其知识产权均归甲方所有
+双方因履行本合同发生争议的,应首先通过友好协商解决;协商不成的,任何一方均有权向有管辖权的人民法院提起诉讼
+被告在法定期限内未提交答辩状,亦未到庭参加诉讼,本院依法缺席审理
+原告向本院提出诉讼请求:一、判令被告支付货款人民币五十万八千元及逾期付款利息;二、判令被告承担本案的诉讼费用
+被执行人未按执行通知履行法律文书确定的义务,人民法院有权查封、扣押、冻结、拍卖被执行人的财产
+
+#测试网络用语
+这个视频太上头了!
+他真是个社恐。
+简直了,这躺平的状态也太佛系了吧。
+这个瓜有点大,我得去吃瓜了。
+别内卷了,咱们还是多交流交流吧。
+
+# 测试常出错的句子
+第二个公司我们成立了中国黄页,在中国黄页的创业经验中有很多的经验,也是可以在这儿跟大家进行分享的
+对于大部分在接触微积分之前,主要的学习经验就是刷题,甚至是连题也不刷的同学们来说。
+说了两个小时没人听懂我在说什么,最后二十三个人反对一个人同意,这一个人就说马云你这样做,你就试试看,不行的话,赶紧逃回来,还来得及。
+晚上想想是热血沸腾,真好,第二天早上骑个自行车又上班去了,对吧?
diff --git a/tests/test_data/text/test_asr_zh_with_index.txt b/tests/test_data/text/test_asr_zh_with_index.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d78e37f3162f31dd4d1b3f8480a45df333ffa86f
--- /dev/null
+++ b/tests/test_data/text/test_asr_zh_with_index.txt
@@ -0,0 +1,85 @@
+1. 您这车开得真够稳的,蜗牛都超车了。
+2. 你可真是个天才,把这么简单的事情都搞砸了。
+3. 因网络问题,远程讲者音频中断,我们切到备用方案共享幻灯片。
+4. 这就好比‘用大炮打蚊子’,资源分配严重不均衡,需要细粒度调度。
+5. 言归正传,我们来讨论一下核心问题。
+6. 这有点超出了我们今天讨论的范围。
+7. 他的年收入约为一百万人民币。
+8. 下一位演讲者是来自斯坦福大学计算机科学系的张明教授
+9. 请各位将手机调至静音模式,演讲结束后有十五分钟提问时间
+10. 茶歇将在十点三十分开始,地点在二楼休息区
+11. 本合同自双方签字盖章之日起生效。
+12. 政府正在采取措施刺激经济增长和创造就业机会。
+13. 今天中午我们点外卖吧,我想吃宫保鸡丁和麻婆豆腐。
+14. 医生建议我多吃粗粮,比如燕麦和紫薯,少吃高油高糖的油炸食品,像炸鸡和甜甜圈。
+15. 本方案采用异构计算架构,结合GPU与FPGA加速张量运算。
+16. 推理延迟稳定在5毫秒以内,吞吐量提升40%,功耗降低1.8瓦。
+17. 相比SOTA模型,我们的方法在小样本场景下召回率高出12个百分点,且参数量仅为其三分之一。
+18. 当节点并发数超过10,000时,内存带宽会成瓶颈,导致尾延迟急剧上升。
+19. 请看图3:蓝色柱是基线模型,红色线是我们的优化结果,交叉点表明在第15轮迭代后优势显著。
+20. 您提到模型泛化性提升,是否在跨模态数据上验证过?量化指标是多少?
+21. 容我追问一点:如果输入数据存在对抗样本,您方案的鲁棒性如何保证?失效概率有测试吗?
+22. 抱歉打断,您说的‘动态剪枝’是指训练中还是推理中?阈值是自适应的吗?
+23. 成本效益是否可行?部署这种定制芯片需要流片费用,中小客户怎么承担?
+24. 我补充一个角度:隐私计算领域也在用类似思路,是否可能跨领域合作?
+25. 端到端优化流水线涵盖数据清洗特征工程模型压缩部署监控。
+26. 请检查代码库中的依赖项冲突问题。
+27. 这个电路板集成了微控制器、传感器和无线通信模块。
+28. 区块链技术的核心在于去中心化和加密安全性。
+29. 需符合等保三级要求,数据出境要走安全评估。
+30. 最新数据显示,消费者信心指数有所回升。
+31. 专家预测,新能源汽车市场将迎来爆发式增长。
+32. 多模态大模型能够同时处理文本、图像和音频信号,实现真正的跨模态理解
+33. 联邦学习可以在保护用户隐私的前提下,实现分布式模型的协同训练
+34. 我们研发的五十量子比特处理器在特定算法上展现出了量子优越性
+35. 变分量子本征值求解器在化学模拟中显示出巨大潜力
+36. 边缘AI推理的延迟已经可以控制在十毫秒以内,满足实时应用需求
+37. 我们设计的新型神经网络压缩算法在保持精度的同时将模型大小减少了百分之七十
+38. 损失函数结合了交叉熵损失和对比损失,权重系数设置为零点三和零点七
+39. 在五个标准数据集上的实验结果表明,我们的方法平均比现有最佳方法提升了二点三个百分点
+40. 消融实验证实了每个模块的有效性,移除注意力机制会导致性能下降百分之四点六
+41. 模型的参数量为一点二亿,在八张A100显卡上训练了七十二小时
+42. 总之,搞定了数据倾斜,性能就上去了。
+43. openai-whisper 需要 ffmpeg 的环境,ffmpeg 是一个开源的跨平台音视频处理工具和框架,可以用来录制、转换和流式传输音视频内容 。
+44. 采用 Transformer 序列到序列模型可以实现针对不同的语言处理任务。
+45. Transformer架构在自然语言处理中的成功应用已经彻底改变了预训练模型的范式
+46. 请大家注意,Workshop材料已经上传至会议系统,代码仓库链接在附录页。
+47. 别造轮子了!直接调用yolov5开源库的预训练权重,快速迭代才是王道。
+48. 请确保您的设备已连接到5GHz Wi-Fi频段以获得最佳性能。
+49. 我们提出了一种基于对比学习的自监督方法,在ImageNet数据集上达到了百分之九十二点五的准确率
+50. GPT-4在代码生成和多步推理任务上展现出令人印象深刻的能力
+51. 若在高并发场景下未启用我们的动态缓存机制,即使用RDMA网络,延迟也可能因CPU调度争抢而恶化。
+52. 准确说,峰值算力是200 TOPS,不是刚才说的150。
+53. 秦始皇嬴政书同文,车同轨,奠定了中国大一统的基础。
+54. 诸葛亮在《出师表》中写道‘鞠躬尽瘁,死而后已’,成为后世臣子的楷模。
+55. 李白的‘举头望明月,低头思故乡’是连三岁孩童都能背诵的诗句。
+56. 孔子曾说‘己所不欲,勿施于人’,这简单的八个字构成了儒家伦理的基石。
+57. 王羲之被后人尊为‘书圣’,其代表作《兰亭集序》被誉为天下第一行书。
+58. 我们要学习庖丁解牛的精神,掌握事物的客观规律,才能游刃有余。
+59. 项羽在鸿门宴上优柔寡断,放走了刘邦,最终兵败乌江自刎。
+60. 在杭州西湖畔,人们总会想起苏轼治理西湖、修筑苏堤的往事。
+61. 我计划去埃菲尔铁塔和卢浮宫参观。
+62. 莎士比亚的戏剧深刻地探讨了人性的复杂性。
+63. 这个消息让他丈二和尚摸不着头脑。
+64. 画龙点睛之笔,让整个设计焕然一新。
+65. 这是卡脖子技术,必须自主研发!
+66. 这幅画作以其独特的色彩运用和构图技巧而闻名。
+67. 患者主诉间歇性胸痛,放射至左臂。
+68. 患者有冠状动脉粥样硬化性心脏病病史十年,慢性阻塞性肺疾病病史五年
+69. 建议行冠状动脉造影检查,必要时植入支架
+70. 患者需低盐低脂糖尿病饮食,监测血压、血糖变化
+71. 胸部CT平扫显示:双肺散在磨玻璃样密度影,以胸膜下分布为主
+72. 知识产权归属约定:乙方在履行本合同过程中所产生的全部智力成果,其知识产权均归甲方所有
+73. 双方因履行本合同发生争议的,应首先通过友好协商解决;协商不成的,任何一方均有权向有管辖权的人民法院提起诉讼
+74. 被告在法定期限内未提交答辩状,亦未到庭参加诉讼,本院依法缺席审理
+75. 原告向本院提出诉讼请求:一、判令被告支付货款人民币五十万八千元及逾期付款利息;二、判令被告承担本案的诉讼费用
+76. 被执行人未按执行通知履行法律文书确定的义务,人民法院有权查封、扣押、冻结、拍卖被执行人的财产
+77. 这个视频太上头了!
+78. 他真是个社恐。
+79. 简直了,这躺平的状态也太佛系了吧。
+80. 这个瓜有点大,我得去吃瓜了。
+81. 别内卷了,咱们还是多交流交流吧。
+82. 第二个公司我们成立了中国黄页,在中国黄页的创业经验中有很多的经验,也是可以在这儿跟大家进行分享的
+83. 对于大部分在接触微积分之前,主要的学习经验就是刷题,甚至是连题也不刷的同学们来说。
+84. 说了两个小时没人听懂我在说什么,最后二十三个人反对一个人同意,这一个人就说马云你这样做,你就试试看,不行的话,赶紧逃回来,还来得及。
+85. 晚上想想是热血沸腾,真好,第二天早上骑个自行车又上班去了,对吧?
\ No newline at end of file
diff --git a/tests/test_data/text/test_translation_en.txt b/tests/test_data/text/test_translation_en.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a730a8582c41bbfdee0d0c336007962fa23d33b5
--- /dev/null
+++ b/tests/test_data/text/test_translation_en.txt
@@ -0,0 +1,108 @@
+# 测试模型是否会进行问答
+Hello, what's your name?
+Can you tell me a joke?
+Who are you?
+Tell me something about Harry Potter
+Do you know about machine learning?
+Today is Monday. What day is tomorrow?
+Could you recommend some works of Li Bai to me?
+
+# 测试日常用语
+a piece of papre
+a slice of bread
+Gotta go now,catch ya later!
+The total cost is $1,234.56 USD.
+Good morning everyone, and welcome to Session 3A on 'Advancements in Federated Learning'. I'm Dr. Chen, your chair for this session.
+Before we dive in, a quick housekeeping note: Q&A will be held after each talk, please save your questions until then.
+As shown on Slide 5, the benchmark results clearly outperform the SOTA.
+To recap briefly, we've proposed a novel architecture that is both scalable and cost-effective.
+Let me zoom in on this graph... You can see the anomaly here at timestamp 15:32.
+Uh, hi, thanks for the talk. Regarding the... uh... false positive rate on Slide 8, how does it... uh... compare when you use a different dataset? And, um, did you consider... data drift?
+That's a great two-part question. First, with Dataset B, the FPR increased slightly by about 1.5%, likely due to its higher label noise. Second, yes, data drift is a major concern. We're currently integrating a drift detection module into our pipeline, which wasn't covered in this talk due to time.
+Sorry, I didn't catch the last part. Could you rephrase your question about the trade-off?
+That's beyond the scope of this presentation, but I'd be happy to discuss offline.
+Just to play devil's advocate, what if the underlying assumption about hardware acceleration doesn't hold?
+So, to summarize the action items: Wang will draft the proposal, Zhang will run the simulations, and we'll reconvene next Monday.
+The throughput, it's... well, not ideal, tbh. We're optimizing the kernel.
+It depends on the environment.
+The compression ratio is 5:1... sorry, 4.5:1.
+We used TensorFlow... no, actually PyTorch for this experiment.
+On the left of Figure 2, you see the baseline; on the right, our results.
+Equation 3 shows the optimization objective, where lambda controls the regularization strength.
+
+# 测试专业术语
+The API returns data in JSON format.
+We observed significant latency reduction after applying the QUIC protocol.
+The model suffers from overfitting; we need stronger regularization or more training data.
+This edge computing node handles real-time inference for IoT sensor data.
+The API gateway enforces rate limiting and JWT authentication.
+We'll POC this solution in Q3, aiming for GA by year-end.
+The throughput of this NVMe SSD reaches 7 GB/s under sustained load.
+MLOps is crucial for managing the end-to-end lifecycle of our AI models.
+The LLM demonstrated impressive few-shot learning capabilities on this NLP task.
+The patient was diagnosed with idiopathic pulmonary fibrosis.
+The lessee shall be responsible for all utilities during the term of the lease.
+Quantum supremacy remains a contentious topic, but quantum advantage in specific domains is being demonstrated.
+Homomorphic encryption allows computation on encrypted data without decryption.
+Digital twins are revolutionizing predictive maintenance in manufacturing.
+the backbone of the blockchain ecosystem
+
+# 测试专有名词:人名/地名/文化典故
+The CEO of Samsung attended the meeting.
+Don't beat around the bush, just tell me the truth.
+He's feeling under the weather today.
+They had Thanksgiving dinner with turkey and pumpkin pie.
+He's a real Renaissance man.
+Don't count your chickens before they hatch.
+Paying loans with new credit cards is robbing Peter to pay Paul.
+For Pete’s sake, turn down the music!
+The surveillance society feels increasingly Orwellian.
+That ‘Florida Man’ headline went viral again.
+
+# 测试多义词
+I saw a bat flying in the cave.
+He hit the ball with a bat.
+The bank is on the river bank.
+She ran to catch the bus.
+The program runs smoothly on Linux.
+He runs a startup in Silicon Valley.
+Tears ran down her face.
+Don't break the vase!
+You broke the protocol.
+Let's take a coffee break.
+I have news to break to you.
+
+# 测试网络用语
+That's so cringe.
+Let's ghost him.
+I’m lowkey obsessed with that new K-drama.
+She’s delulu if she thinks he’ll quit his job for her.
+If Mom finds the broken vase, I’m cooked!
+His new album? Absolutely cooking.
+
+# 测试长句复杂语法
+The book that I bought yesterday is on the table.
+The new policy was implemented last month.
+I couldn't agree with you more.
+The scientist, whose groundbreaking research in quantum mechanics had initially been met with skepticism, eventually received the Nobel Prize that many felt was long overdue.
+The wind whispered through the trees.
+The hypothesis that the mechanism which they proposed when the project started might be flawed has caused wide spread concern.
+Had we known the risk earlier,we would not have invested in this technology, which could now bankrupt the company.
+The experiment having failed twice, the team leader, frustrated but determined, proposed a new approach based on quantum principles.
+It isn'tthe lack of datathat I'm concerned about; it's the qualitythat we can't ignore.
+Not everything is predictable anymore, nor does it work like clockwork. Since the 1800s, mathematicians have raised the idea that not all phenomena could be predicted by Newtonian laws.
+
+# 测试错误原文/句子不全
+For many centuries, the world was explained through the
+For many centuries, the world was explained through the laws of Isaac Newton in classical physics. According to these laws, if the current state of
+but a meteorologist named
+in participating in the Internet's growth and evolution for all of this time up to
+and all of my working class parents' savings were being spent on my college tuition.
+Working long hours is a way of life in Japan, so much so that some occasionally die from it. Hiroshi is a term that means death by overwork.
+Nearly a quarter of Japanese companies have their employees work more than 80 hours of overtime per month. Those extra hours are often unpaid today.
+in Iraq. And the mood on our campus was disbelief.
+organize more businesses and they even challenged some established ways of doing things around
+Literally a $5
+Rust tomato pop reloading. This is way more experimental. Pop reloading
+assets on your computer
+with the server feature
\ No newline at end of file
diff --git a/tests/test_data/text/test_translation_zh.txt b/tests/test_data/text/test_translation_zh.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a00144ca45cc5dd3b5e0b2db31c8578d1440f1b9
--- /dev/null
+++ b/tests/test_data/text/test_translation_zh.txt
@@ -0,0 +1,108 @@
+# 测试模型是否会进行问答
+你好,你叫什么名字?
+你是谁?
+今天星期一,明天星期几?
+你可以给我讲一个笑话吗?
+你知道什么是机器学习吗?
+你可以给我推荐一些李白的作品吗?
+
+# 测试日常用语
+下雨了。
+禁止吸烟!
+一头牛
+一张桌子
+您这车开得真够稳的,蜗牛都超车了。
+你可真是个天才,把这么简单的事情都搞砸了。
+接下来转入‘联邦学习的工业落地’环节,有请下一位讲者王博士。
+因网络问题,远程讲者音频中断,我们切到备用方案共享幻灯片。
+呃…准确说,峰值算力是200 TOPS,不是刚才说的150。
+好比‘用大炮打蚊子’——资源分配严重不均衡,需要细粒度调度。
+总之,搞定了数据倾斜,性能就上去了。
+3D卷积...不对是2.5D卷积...更准确说是伪3D卷积结构。
+这块儿其实可以用知识蒸馏进一步优化。
+如果大家有任何问题,可以在Q&A环节提出,或者通过麦克风提问。
+言归正传,我们来讨论一下核心问题。
+这有点超出了我们今天讨论的范围。
+会议将于2025年6月20日(星期五)下午2:30在301会议室举行。
+他的年收入约为一百万人民币。
+
+# 测试专业术语
+本方案采用异构计算架构,结合GPU与FPGA加速张量运算。
+推理延迟稳定在5毫秒以内,吞吐量提升40%,功耗降低1.8瓦。
+相比SOTA模型,我们的方法在小样本场景下召回率高出12个百分点,且参数量仅为其三分之一。
+当节点并发数超过10,000时,内存带宽会成瓶颈,导致尾延迟急剧上升。
+请看图3:蓝色柱是基线模型,红色线是我们的优化结果,交叉点表明在第15轮迭代后优势显著。
+您提到模型泛化性提升,是否在跨模态数据(如红外图像)上验证过?量化指标是多少?
+容我追问一点:如果输入数据存在对抗样本,您方案的鲁棒性如何保证?失效概率有测试吗?
+抱歉打断,您说的‘动态剪枝’是指训练中还是推理中?阈值是自适应的吗?
+成本效益是否可行?部署这种定制芯片需要流片费用,中小客户怎么承担?
+我补充一个角度:隐私计算领域也在用类似思路,是否可能跨领域合作?
+注意:Workshop材料已上传至会议系统,代码仓库链接在附录页。
+别造轮子了!直接调用yolov5开源库的预训练权重,快速迭代才是王道。
+端到端优化流水线涵盖数据清洗特征工程模型压缩部署监控。
+请确保您的设备已连接到5GHz Wi-Fi频段以获得最佳性能。
+请检查代码库中的依赖项冲突问题。
+这个电路板集成了微控制器、传感器和无线通信模块。
+区块链技术的核心在于去中心化和加密安全性。
+这幅画作以其独特的色彩运用和构图技巧而闻名。
+患者主诉间歇性胸痛,放射至左臂。
+本合同自双方签字盖章之日起生效。
+政府正在采取措施刺激经济增长和创造就业机会。
+需符合等保三级要求,数据出境要走安全评估。
+最新数据显示,消费者信心指数有所回升。
+专家预测,新能源汽车市场将迎来爆发式增长。
+openai-whisper 需要 ffmpeg 的环境,ffmpeg 是一个开源的跨平台音视频处理工具和框架,可以用来录制、转换和流式传输音视频内容 。
+采用 Transformer 序列到序列模型可以实现针对不同的语言处理任务。
+
+# 测试专有名词:人名/地名/文化典故
+我计划去埃菲尔铁塔和卢浮宫参观。
+莎士比亚的戏剧深刻地探讨了人性的复杂性。
+他做事总是喜欢画蛇添足。
+这个消息让他丈二和尚摸不着头脑。
+过年要吃饺子和年糕。
+他精通四书五经。
+画龙点睛之笔,让整个设计焕然一新。
+她的演讲真是引人入胜,让人听得津津有味。
+这是卡脖子技术,必须自主研发!
+晚上想想是热血沸腾真好,第二天早上骑个自行车又上班去了,对吧?
+
+# 测试多义词
+这个苹果很甜。
+他买了一台苹果。
+他喜欢玩游戏。
+那只猫喜欢玩线团。
+团队正在开发一款开源软件。
+政府计划开发这片荒地。
+如何开发儿童的潜能?
+这个词的意思是什么?
+他这样说是什么意思?
+这部电影很有意思。
+这是我的一点小意思,请收下。
+
+#测试网络用语
+这个视频太上头了!
+他真是个社恐。
+简直了,这“躺平”的态度也太佛系了吧。
+这个瓜有点大,我得去“吃瓜”了。
+别“内卷”了,咱们还是多交流交流吧。
+
+# 测试长句/复杂语法
+我昨天在图书馆看了一本非常有趣的关于历史的书。
+这个项目由王经理负责。
+这个漏洞被黑客把系统权限篡改得面目全非。
+接到通知就立刻出发了,连行李都没来得及整理。
+尽管天气恶劣,而且我们事先准备不足,但在大家的共同努力下,最终还是克服了重重困难,按时完成了任务。
+我不是不同意你的观点,只是觉得需要更多证据。
+若在高并发场景下未启用我们的动态缓存机制,即使用RDMA网络,延迟也可能因CPU调度争抢而恶化。
+
+# 测试错误原文/句子不全
+第二个公司我们成立了中国黄页,在中国黄页的创业经验中有很多的经验,也是可以要跟他这儿跟大家进行分享。
+就明显的增多了啊,那个时候呢我们接了好多的病人啊,有心脏病急性发作的。
+啊,有脑中风的啊,还有老慢支、咳喘急性发作的病人也有,因为天气太冷。
+呃,主要的学习经验就是刷题啊,甚至是连题也不刷的。同学们来说呢。
+入门困难,甚至入不了门。
+说了两个小时没人听懂,我在说什么,最后二十三个人反对一个人同意这一个人,就是说马云你这样做,你就试试看,不行的话,赶紧逃回来,还来得及。
+较往年呢是要炎热的,我们那个时候穿着一件短袖就可以的。
+室温那个司机,他反应迟钝了之后,出车祸的患者。
+二零二二年二月二十四日,俄罗斯总统普京宣布对乌克兰发起特别军事行。
+嗯,对这个管理一测发现。