Bass.dll просто спектр данных C#
Я пытаюсь создать игру, основанную на обнаружении ударов и спектра. В настоящее время я застрял на том, что моя функция возвращает не совсем то, что я хочу, потому что массив не полностью назначен. Последний заполненный элемент неверен, и я не знаю почему.
Размер массива равен 20, и этот код заполняет только 12 или даже меньше
float[] rmsData;
public void spektrsw(int barrcount, bool lefton, out float[] spectrumData)
{
spectrumData = new float[barrcount];
//defining array in which will be spectrum data
if (isPlaying) //check if sound is playing
{
int lenght = (int)Bass.BASS_ChannelSeconds2Bytes(ActiveStreamHandle, 1.0); //gets and sets lenght
int rmsDataArraySize = Math.Abs(lenght / 4);
//calculating FFT data or RMS array size
if (rmsData == null || rmsData.Length < rmsDataArraySize)
rmsData = new float[rmsDataArraySize];
//defining new array if old one has lenght smaler
lenght = Bass.BASS_ChannelGetData(ActiveStreamHandle, rmsData, lenght); //geting lenght FFT data
rmsDataArraySize = lenght / 4; //calculating FFT data or RMS array size
int times = (int)(rmsDataArraySize / (barrcount * 2)) + 1;
//calculating how many times loop will continue until the loop will go to next index
int index = 0;
// creating index variable which will point to an element in array
for (int counter = 0; counter < rmsDataArraySize; counter++)
{
if (counter % 2 == 0 || counter == 0) //For left channel
{
if(lefton) //which channel am i analysing
spectrumData[index] = spectrumData[index] + Math.Abs(rmsData[counter]);
//adding data to array
}
else
{
if (!lefton) //which channel am i analysing
spectrumData[index] = spectrumData[index] + Math.Abs(rmsData[counter]);
//adding data to array
}
if (counter == times) //check to see if index needs to be increased
{
spectrumData[index] = spectrumData[index] / times;
//this is for calculating avarege in one bar since
//I combined lots of data in one bar
spectrumData[index] = spectrumData[index] * 1000f;
index++;//increasing index
times = times + counter;
}
}
}
}
Вопросы:
- Я делаю правильно?
- Почему он не возвращает все значения?
- Какой самый простой способ получить данные мне нужны?
Спасибо за ваши ответы уже.
И я прошу прощения за мой плохой английский......
[РЕДАКТИРОВАТЬ]
Я узнал, что утверждение if или способ, которым я рассчитываю Times, неверен:-(
Поэтому, если у вас есть идея, как получить данные из массива из 4000 элементов в массив из 20, я был бы рад, если бы вы опубликовали здесь свой совет.