Skip to content
This repository was archived by the owner on Dec 15, 2025. It is now read-only.

Commit 181673e

Browse files
author
Amsakan Bavan
committed
Removed the Player module, implemented FFT based lowpass filter and implemented FileWriter to write out filtered audio file.
1 parent 0725065 commit 181673e

File tree

15 files changed

+127
-172
lines changed

15 files changed

+127
-172
lines changed

.idea/vcs.xml

Lines changed: 1 addition & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CMakeLists.txt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,12 @@ project(simpleFilter)
44
set(CMAKE_CXX_STANDARD 23)
55
set(CMAKE_CXX_STANDARD_REQUIRED ON)
66

7-
87
if(MSVC)
9-
add_compile_options(/std:c++17)
8+
add_compile_options(/Zc:__cplusplus)
109
endif()
1110

12-
1311
include(FetchContent)
1412

15-
FetchContent_Declare(
16-
portaudio
17-
GIT_REPOSITORY https://github.com/PortAudio/portaudio
18-
GIT_TAG master
19-
)
20-
FetchContent_MakeAvailable(portaudio)
21-
2213
FetchContent_Declare(
2314
sndfile
2415
GIT_REPOSITORY https://github.com/libsndfile/libsndfile
@@ -33,7 +24,16 @@ FetchContent_Declare(
3324
)
3425
FetchContent_MakeAvailable(abseil-cpp)
3526

27+
FetchContent_Declare(
28+
fftw3
29+
URL https://www.fftw.org/fftw-3.3.10.tar.gz
30+
URL_HASH MD5=8ccbf6a5ea78a16dbc3e1306e234cc5c
31+
)
32+
set(ENABLE_FLOAT ON CACHE BOOL "Enable single precision" FORCE)
33+
FetchContent_MakeAvailable(fftw3)
34+
3635

36+
include_directories("${fftw3_SOURCE_DIR}/api")
3737
include_directories("${CMAKE_SOURCE_DIR}/include")
3838

3939
add_subdirectory(src)

include/FileWriter.hh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//
2+
// Created by abav on 01.08.2025.
3+
//
4+
5+
#ifndef FILEWRITER_HH
6+
#define FILEWRITER_HH
7+
#include <string>
8+
#include <vector>
9+
10+
namespace FileWriter {
11+
void writeFile(std::string fileName, std::vector<float> audioData);
12+
};
13+
#endif //FILEWRITER_HH

include/Filter.hh

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
//
2-
// Created by abav on 17.07.2025.
2+
// Created by abav on 01.08.2025.
33
//
44

55
#ifndef FILTER_HH
66
#define FILTER_HH
7+
#include <fftw3.h>
78
#include <vector>
89

9-
namespace Filter {
10-
void filter(std::vector<float>& audio, float filterFrequency);
11-
}
10+
class Filter {
11+
int N; // Signal length
12+
float* input; // Input buffer
13+
fftwf_complex* fft_data; // FFT output buffer
14+
float* output; // Output buffer (filtered signal)
15+
fftwf_plan forward_plan; // Forward FFT plan
16+
fftwf_plan inverse_plan; // Inverse FFT plan
17+
18+
public:
19+
Filter(int signal_length);
20+
~Filter();
21+
void filter(std::vector<float>& signal, double cutoff_freq, double sample_rate = 44100);
22+
};
1223
#endif //FILTER_HH

src/CLI/CLI.cc

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
1-
//
2-
// Created by abav on 17.07.2025.
3-
//
41
#include "CLI/CLI.hh"
52
#include "CLI/Arguments.hh"
63

7-
#include <iostream>
84
#include <vector>
95
#include <absl/strings/str_split.h>
106

11-
#include "FileReader.hh"
127
#include "Filter.hh"
13-
#include "Player.hh"
8+
#include "FileReader.hh"
9+
#include "FileWriter.hh"
10+
1411

1512
void CLI::run(int argc, char** argv) {
1613
Arguments::CLIArguments arguments = Arguments::parseArguments(argc, argv);
1714
std::vector<float> audio = FileReader::readFile(arguments.fileName);
18-
/*
19-
std::cout << "Doing filtering..\n";
20-
Filter::filter(audio, arguments.filterFrequency);
21-
std::cout << "Done.\n";
22-
*/
23-
Player::play(audio);
24-
};
15+
Filter filter(audio.size());
16+
filter.filter(audio, arguments.filterFrequency);
17+
FileWriter::writeFile("filtered.wav", audio);
18+
}

src/CLI/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ add_library(CLI
55

66
target_link_libraries(CLI
77
FileReader
8+
FileWriter
89
Filter
9-
Player
1010
absl::strings
1111
)

src/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
add_subdirectory(CLI)
2-
add_subdirectory(FileReader)
32
add_subdirectory(Filter)
4-
add_subdirectory(Main)
5-
add_subdirectory(Player)
3+
add_subdirectory(FileReader)
4+
add_subdirectory(FileWriter)
5+
add_subdirectory(Main)

src/FileReader/FileReader.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
//
44
#include "FileReader.hh"
55

6+
#include <iostream>
67
#include <sndfile.h>
78

89
std::vector<float> FileReader::readFile(std::string filePath) {
910
SF_INFO fileInfo;
1011
SNDFILE* audioFile = sf_open(filePath.c_str(), SFM_READ, &fileInfo);
12+
1113
const auto fileAudio = new float[fileInfo.frames];
1214
sf_read_float(audioFile, fileAudio, fileInfo.frames);
1315
sf_close(audioFile);

src/FileWriter/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
add_library(FileWriter
2+
FileWriter.cc
3+
)
4+
5+
target_link_libraries(FileWriter
6+
sndfile
7+
)

src/FileWriter/FileWriter.cc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//
2+
// Created by abav on 01.08.2025.
3+
//
4+
#include "FileWriter.hh"
5+
#include <iostream>
6+
#include <sndfile.h>
7+
8+
void FileWriter::writeFile(std::string fileName, std::vector<float> audioData) {
9+
SF_INFO sfInfo;
10+
sfInfo.channels = 1;
11+
sfInfo.samplerate = 44100;
12+
sfInfo.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT;
13+
14+
SNDFILE* audioFile = sf_open(fileName.c_str(), SFM_WRITE, &sfInfo);
15+
std::cout << "Writing audio files..." << std::endl;
16+
sf_write_float(audioFile, audioData.data(), audioData.size());
17+
sf_close(audioFile);
18+
}

0 commit comments

Comments
 (0)