Skip to content
Open

Main #13

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 22 additions & 44 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,33 +1,12 @@
cmake_minimum_required(VERSION 3.15)
project(AudioCapture VERSION 1.0.0 LANGUAGES CXX)
project(AudioCaptureCLI VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Output directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

# Find packages
find_package(Opus CONFIG REQUIRED)
find_package(Ogg CONFIG REQUIRED)
find_package(FLAC CONFIG REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)

# Source files
set(SOURCES
src/main.cpp
src/AudioCapture.cpp
src/ProcessEnumerator.cpp
src/WavWriter.cpp
src/Mp3Encoder.cpp
src/OpusEncoder.cpp
src/FlacEncoder.cpp
src/CaptureManager.cpp
src/AudioDeviceEnumerator.cpp
src/AudioMixer.cpp
resource.rc
)

set(HEADERS
include/AudioCapture.h
include/ProcessEnumerator.h
Expand All @@ -40,54 +19,53 @@ set(HEADERS
include/AudioMixer.h
include/resource.h
)
# Note: The full GUI `AudioCapture` target was removed; only CLI kept below.
# ============================================
# Command-line version (AudioCaptureCLI)
# ============================================
set(CLI_SOURCES
src/main_cli.cpp
src/AudioCapture.cpp
src/WavWriter.cpp
)

# Create executable
add_executable(AudioCapture WIN32 ${SOURCES} ${HEADERS})
# Create CLI executable (console application)
add_executable(AudioCaptureCLI ${CLI_SOURCES} ${HEADERS})

# Include directories
target_include_directories(AudioCapture PRIVATE
target_include_directories(AudioCaptureCLI PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include
)

# Link Windows libraries and third-party libraries
target_link_libraries(AudioCapture PRIVATE
# Link Windows libraries only (no third-party dependencies for CLI)
target_link_libraries(AudioCaptureCLI PRIVATE
Avrt.lib
Mmdevapi.lib
Ksuser.lib
Mfplat.lib
Mfreadwrite.lib
Mfuuid.lib
Ole32.lib
Shell32.lib
Comctl32.lib
Shlwapi.lib
Propsys.lib
RuntimeObject.lib
Delayimp.lib
Opus::opus
Ogg::ogg
FLAC::FLAC FLAC::FLAC++
nlohmann_json::nlohmann_json
)

# Enable Windows subsystem and static runtime
set_target_properties(AudioCapture PROPERTIES
WIN32_EXECUTABLE TRUE
# Enable console subsystem and static runtime
set_target_properties(AudioCaptureCLI PROPERTIES
WIN32_EXECUTABLE FALSE
LINK_FLAGS "/DELAYLOAD:api-ms-win-core-winrt-l1-1-0.dll"
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
)

# Add compile definitions
target_compile_definitions(AudioCapture PRIVATE
target_compile_definitions(AudioCaptureCLI PRIVATE
UNICODE
_UNICODE
WIN32_LEAN_AND_MEAN
NOMINMAX
)

# Enable warnings
# Enable warnings for CLI
if(MSVC)
target_compile_options(AudioCapture PRIVATE /W4)
target_compile_options(AudioCaptureCLI PRIVATE /W4)
else()
target_compile_options(AudioCapture PRIVATE -Wall -Wextra)
target_compile_options(AudioCaptureCLI PRIVATE -Wall -Wextra)
endif()
7 changes: 7 additions & 0 deletions include/AudioCapture.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ class AudioCapture {
// Check if currently paused
bool IsPaused() const { return m_isPaused; }

// Check if using process-specific capture (vs system-wide)
bool IsProcessSpecific() const { return m_isProcessSpecific; }

// Get last error message (for debugging)
const std::wstring& GetLastError() const { return m_lastError; }

// Get audio format information
WAVEFORMATEX* GetFormat() const { return m_waveFormat; }

Expand Down Expand Up @@ -82,6 +88,7 @@ class AudioCapture {
float m_volumeMultiplier;
bool m_isProcessSpecific;
bool m_isInputDevice; // True if capturing from input device (mic), false if loopback
std::wstring m_lastError; // Last error message for debugging

// Passthrough/monitor members
bool m_passthroughEnabled;
Expand Down
Loading