Я пишу программу для определения частот в данном файле WAV, оптимально песню.Мне нужно разделить файл wav на куски, чтобы подать его на мой БПФ, но я не знаю, как выполнить это разделение.Я считаю, что они называются фреймами, но я довольно новичок во всем этом.
Я понятия не имею, с чего начать на самом деле - я только посмотрел онлайн и не нашел то, что хотел.У меня есть догадка, что это связано с разделением FileInputStream на куски, но я понятия не имею, как это сделать.
FileInputStream input = new FileInputStream(filelocation);
//Number of samples to take (higher number more accurate but slower
int numsamples = Constants.numsamples;
//Sample rate of the file (total frequency range is 1/samplerate)
int samplerate = Constants.samplerate;
//Puts the audio file into something readable by the FFT
WaveDecoder decoder = new WaveDecoder(input);
//Contains all the samples within the entire file
ArrayList<Float> allSamples = new ArrayList<Float>( );
//Contains the aformentioned samples, but in a format that FFT will take
float[] samples = new float[numsamples];
//Actual instance of the transform
FFT fft = new FFT(numsamples, samplerate );
//number of samples = 441000/filelength
//Copies the contents of the WaveDecoder into an array
while( decoder.readSamples( samples ) > 0 )
{
for( int i = 0; i < samples.length; i++ )
allSamples.add( samples[i] );
}
Вот ссылка на библиотеку FFT, которую я использую:
https://github.com/Uriopass/audio-analysis
Оптимально, код должен быть разделен на куски (независимо от того, разделен ли он на этапе WaveDecoder или перед) для подачи в FFT.Мне понадобится какой-то способ сказать, как далеко в аудиофайл (в секундах) находится фрагмент данных, чтобы я мог сказать, в какое время воспроизводится каждая конкретная частота.
В конце концов, это БПФ будетбыть бэкэндом программы, которая обеспечивает графическое представление того, что воспроизводится в аудиофайле;если есть какой-либо более простой способ сделать определение частоты для программы этого типа, я весь слух.Это проект для средней школы, поэтому я прошу прощения за чрезмерное количество комментариев.