Я работаю над проектом по распознаванию аккордов. Я использую чей-то журнал в качестве ссылки, но я все еще мало разбираюсь в области DSP. В ее обращении, во-первых, мне нужно разделить сигнал из wav-файла на количество кадров. В моем случае мне нужно разделить на 65 мс каждый кадр, с 2866 выборок на кадр.
Я искал, как разделить сигнал на кадры, но я не нашел их достаточно четкими, чтобы я мог их понять.
Пока это некоторые из моих кодов в классе WavProcessing:
public void SetFileName(String fileNameWithPath) //called first in the form, to get the FileStream
{
_fileNameWithPath = fileNameWithPath;
strm = File.OpenRead(_fileNameWithPath);
}
public double getLengthTime(uint wavSize, uint sampleRate, int bitRate, int channels)
{
wavTimeLength = ((strm.Length - 44) / (sampleRate * (bitRate / 8))) / channels;
return wavTimeLength;
}
public int getNumberOfFrames() //return number of frames, I just divided total length time with interval time between frames. (in my case, 3000ms / 65 ms = 46 frames)
{
numOfFrames = (int) (wavTimeLength * 1000 / _sampleFrameTime);
return numOfFrames;
}
public int getSamplePerFrame(UInt32 sampleRate, int sampleFrameTime) // return the sample per frame value (in my case, it's 2866)
{
_sampleRate = sampleRate;
_sampleFrameTime = sampleFrameTime;
sFr = (int)(sampleRate * (sampleFrameTime / 1000.0 ));
return sFr;
}
Я просто до сих пор не понимаю, как разделить сигнал на 65 мс на кадр в C #.
Нужно ли разбивать FileStream, разбивать их на фреймы и сохранять в массив? Или что-нибудь еще?