using AliParaformerAsr.Model;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace AliParaformerAsr.Utils
|
{
|
internal static class PadHelper
|
{
|
public static float[] PadSequence(List<OfflineInputEntity> modelInputs)
|
{
|
int max_speech_length = modelInputs.Max(x => x.SpeechLength);
|
int speech_length = max_speech_length * modelInputs.Count;
|
float[] speech = new float[speech_length];
|
float[,] xxx = new float[modelInputs.Count, max_speech_length];
|
for (int i = 0; i < modelInputs.Count; i++)
|
{
|
if (max_speech_length == modelInputs[i].SpeechLength)
|
{
|
for (int j = 0; j < xxx.GetLength(1); j++)
|
{
|
#pragma warning disable CS8602 // 解引用可能出现空引用。
|
xxx[i, j] = modelInputs[i].Speech[j];
|
#pragma warning restore CS8602 // 解引用可能出现空引用。
|
}
|
continue;
|
}
|
float[] nullspeech = new float[max_speech_length - modelInputs[i].SpeechLength];
|
float[]? curr_speech = modelInputs[i].Speech;
|
float[] padspeech = new float[max_speech_length];
|
Array.Copy(curr_speech, 0, padspeech, 0, curr_speech.Length);
|
for (int j = 0; j < padspeech.Length; j++)
|
{
|
#pragma warning disable CS8602 // 解引用可能出现空引用。
|
xxx[i, j] = padspeech[j];
|
#pragma warning restore CS8602 // 解引用可能出现空引用。
|
}
|
|
}
|
int s = 0;
|
for (int i = 0; i < xxx.GetLength(0); i++)
|
{
|
for (int j = 0; j < xxx.GetLength(1); j++)
|
{
|
speech[s] = xxx[i, j];
|
s++;
|
}
|
}
|
speech = speech.Select(x => x == 0 ? -23.025850929940457F * 32768 : x).ToArray();
|
return speech;
|
}
|
}
|
}
|