Мне нужно собрать голосовые фрагменты из непрерывного аудиопотока.Мне нужно позже обработать голосовой фрагмент пользователя, который только что сказал (не для распознавания речи).Я сосредотачиваюсь только на сегментации голоса на основе его громкости.
Если после хотя бы 1 секунды молчания его голос на некоторое время становится достаточно громким, а затем снова молчит в течение как минимум 1 секунды, яскажем, это предложение, и голос должен быть сегментирован здесь.
Я просто знаю, что могу получить необработанные аудиоданные из AudioClip
, созданного Microphone.Start()
.Я хочу написать некоторый код, подобный этому:
void Start()
{
audio = Microphone.Start(deviceName, true, 10, 16000);
}
void Update()
{
audio.GetData(fdata, 0);
for(int i = 0; i < fdata.Length; i++) {
u16data[i] = Convert.ToUInt16(fdata[i] * 65535);
}
// ... Process u16data
}
Но я не уверен, что это:
Каждый кадр, когда я звоню audio.GetData(fdata, 0)
, что яget - это последние 10 секунд звуковых данных, если fdata
достаточно большой или короче, чем 10 секунд, если fdata
не достаточно большой, верно?
fdata
- массив с плавающей запятой, и мне нужен 16-битный 16-битный PCM-буфер 16 кГц.Правильно ли конвертировать данные, например: u16data[i] = fdata[i] * 65535
?
Как правильно определять громкие и тихие моменты в fdata
?