我试图修改音频文件(mp3或wav无关紧要),然后播放修改后的音频文件,首先我分析FFT的声音,然后得到保存在json文件中的不同值,现在我剪切/设置一些频率/幅度,然后我想进行逆FFT以获得数据以创建修改后的音频文件,但是我该如何做最后一部分?我如何将这个修改后的值数组设置为音频文件才能播放?我在下面提供我的代码,以了解我如何保存数据。
void rawDatas() {
values = new JSONArray();
jingle = minim.loadSample("myrecording.wav", 2048);
leftChannel = jingle.getChannel(AudioSample.LEFT);
}
void fftDatas() {
fftSize = 1024;
fftSamples = new float[fftSize];
FFT fft = new FFT( fftSize, jingle.sampleRate() );
totalChunks = (leftChannel.length / fftSize) + 1;
spectra = new float[totalChunks][fftSize/2];
JSONArray arrayIndex = new JSONArray();
JSONArray arrayVal = new JSONArray();
JSONArray arrayValdB = new JSONArray();
for (int chunkIdx = 0; chunkIdx < totalChunks; ++chunkIdx)
{
int chunkStartIndex = chunkIdx * fftSize;
int chunkSize = min( leftChannel.length - chunkStartIndex, fftSize );
System.arraycopy(leftChannel, chunkStartIndex, fftSamples, 0, chunkSize);
if ( chunkSize < fftSize )
{
java.util.Arrays.fill( fftSamples, chunkSize, fftSamples.length - 1, 0.0 );
}
fft.forward(fftSamples);
fftValdB = new FloatList();
fftVal = new FloatList();
for (int i = 0; i < fft.specSize()-1; i++) {
fftValdB.append(20*((float)Math.log10(fft.getBand(i))));
fftVal.append(fft.getBand(i));
}
for (int i = 0; i < fftVal.size(); i++) {
arrayIndex.append(i);
arrayVal.append(fftVal.get(i));
arrayValdB.append(fftValdB.get(i));
}
println(chunkIdx);
}
jingle.close();
//datas.setJSONArray("id", arrayIndex);
datas.setJSONArray("val", arrayVal);
datas.setJSONArray("valdB", arrayValdB);
saveJSONObject(datas, "data/fft.json");
//exit();
}