Skip to content

Commit 3500bbe

Browse files
committed
Clean code a bit
1 parent 746c07d commit 3500bbe

File tree

4 files changed

+23
-39
lines changed

4 files changed

+23
-39
lines changed

sound-recorder-n-spectrum-analyzer/src/main/java/by/andd3dfx/capturesound/AudioCaptureApp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public AudioCaptureApp() {
8888

8989

9090
double frequency = frequencyScanner.detectFrequency(audioData, (int) audioFormat.getSampleRate())
91-
.getMaxFrequency();
91+
.maxFrequency();
9292
System.out.println("Freq=" + frequency);
9393

9494
AudioInputStream audioInputStream = new AudioInputStream(

sound-recorder-n-spectrum-analyzer/src/main/java/by/andd3dfx/capturesound/ShowRealTimeSpectrumApp.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ public static void main(String[] args) throws LineUnavailableException {
4242
byteArrayOutputStream.reset();
4343

4444
FrequencyInfoContainer frequencyInfoContainer = frequencyScanner.detectFrequency(audioData, (int) audioFormat.getSampleRate());
45-
double[] frequencies = frequencyInfoContainer.getFrequencies();
46-
double[] magnitudes = frequencyInfoContainer.getMagnitudes();
45+
double[] frequencies = frequencyInfoContainer.frequencies();
46+
double[] magnitudes = frequencyInfoContainer.magnitudes();
4747

4848
int N = 1_000;
4949
double[] xData = new double[N];
@@ -55,9 +55,9 @@ public static void main(String[] args) throws LineUnavailableException {
5555
yData[bucketIndex] += magnitudes[bucketIndex * magnitudes.length / N + i];
5656
}
5757
}
58-
int maxFrequency = (int) frequencyInfoContainer.getMaxFrequency();
58+
var maxFrequency = frequencyInfoContainer.maxFrequency();
5959

60-
String title = String.format("%d Hz", maxFrequency);
60+
String title = String.format("%1$.0f Hz", maxFrequency);
6161
chartContainer.update(xData, yData, title);
6262
}
6363
}
Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,7 @@
11
package by.andd3dfx.capturesound.dto;
22

3-
public class FrequencyInfoContainer {
4-
5-
private final double[] frequencies;
6-
private final double[] magnitudes;
7-
private final double maxFrequency;
8-
9-
public FrequencyInfoContainer(double[] frequencies, double[] magnitudes, double maxFrequency) {
10-
this.frequencies = frequencies;
11-
this.magnitudes = magnitudes;
12-
this.maxFrequency = maxFrequency;
13-
}
14-
15-
public double[] getFrequencies() {
16-
return frequencies;
17-
}
18-
19-
public double[] getMagnitudes() {
20-
return magnitudes;
21-
}
22-
23-
public double getMaxFrequency() {
24-
return maxFrequency;
25-
}
3+
public record FrequencyInfoContainer(
4+
double[] frequencies,
5+
double[] magnitudes,
6+
double maxFrequency) {
267
}

sound-recorder-n-spectrum-analyzer/src/main/java/by/andd3dfx/capturesound/fft/FrequencyScanner.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,32 +30,34 @@ public FrequencyInfoContainer detectFrequency(byte[] audioData, int sampleRate)
3030
*/
3131
public FrequencyInfoContainer extractFrequencyInfo(short[] sampleData, int sampleRate) {
3232
/* sampleData + zero padding */
33-
DoubleFFT_1D fft = new DoubleFFT_1D(sampleData.length + 24 * sampleData.length);
34-
double[] a = new double[(sampleData.length + 24 * sampleData.length) * 2];
33+
final int sampleRateLen = sampleData.length;
34+
final int aLen_2 = sampleRateLen + 24 * sampleRateLen;
35+
double[] a = new double[aLen_2 * 2];
36+
var fft = new DoubleFFT_1D(aLen_2);
3537

36-
System.arraycopy(applyWindow(sampleData), 0, a, 0, sampleData.length);
38+
System.arraycopy(applyWindow(sampleData), 0, a, 0, sampleRateLen);
3739
fft.realForward(a);
3840

39-
double frequencies[] = new double[a.length / 2];
40-
double magnitudes[] = new double[a.length / 2];
41+
double[] frequencies = new double[aLen_2];
42+
double[] magnitudes = new double[aLen_2];
4143

4244
/* find the peak magnitude and it's index */
4345
double maxMag = Double.NEGATIVE_INFINITY;
4446
int maxInd = -1;
4547

46-
for (int i = 0; i < a.length / 2; ++i) {
48+
for (int i = 0; i < aLen_2; ++i) {
4749
double re = a[2 * i];
4850
double im = a[2 * i + 1];
4951
double mag = Math.sqrt(re * re + im * im);
50-
frequencies[i] = (double) sampleRate * i / (a.length / 2);
52+
frequencies[i] = (double) sampleRate * i / aLen_2;
5153
magnitudes[i] = mag;
5254

5355
if (mag > maxMag) {
5456
maxMag = mag;
5557
maxInd = i;
5658
}
5759
}
58-
double maxFrequency = (double) sampleRate * maxInd / (a.length / 2);
60+
double maxFrequency = (double) sampleRate * maxInd / aLen_2;
5961
return new FrequencyInfoContainer(frequencies, magnitudes, maxFrequency);
6062
}
6163

@@ -83,10 +85,11 @@ private void buildHammingWindow(int size) {
8385
* @return a double array containing the filtered data
8486
*/
8587
private double[] applyWindow(short[] input) {
86-
double[] res = new double[input.length];
88+
var len = input.length;
89+
double[] res = new double[len];
8790

88-
buildHammingWindow(input.length);
89-
for (int i = 0; i < input.length; ++i) {
91+
buildHammingWindow(len);
92+
for (int i = 0; i < len; ++i) {
9093
res[i] = (double) input[i] * windowFilter[i];
9194
}
9295
return res;

0 commit comments

Comments
 (0)