# autosample

Graphical interface for automatically recording samples from existing analog audio hardware.

## Build

Requires MSVC (Visual Studio or Build Tools) with the Windows SDK.

Open a Developer Command Prompt, then:

```
cl /nologo nob.c
nob.exe
build\autosample.exe
```

The first command is a one-time bootstrap. After that, `nob.exe` detects changes to `nob.c` and rebuilds itself automatically.

## Project structure

```
nob.c                              Build script (compiled to nob.exe)
nob.h                              nob build system (vendored, single-header)
src/
  main.cpp                         Entry point and main loop
  platform/
    platform.h                     Window management API (platform-agnostic)
    platform_win32.cpp             Win32 implementation
  renderer/
    renderer.h                     Renderer API (graphics-agnostic)
    renderer_dx12.cpp              DirectX 12 implementation + Dear ImGui backend
vendor/
  imgui/                           Dear ImGui (vendored source)
    backends/                      Platform and renderer backends (Win32, DX12)
```

The platform and renderer layers are C-style APIs with opaque handles. `platform.h` abstracts window creation so other backends can be added without touching the rest of the code. `renderer.h` abstracts graphics initialization and frame management.

## Code style

This project is written in C-style C++. We use `.cpp` files and a small subset of C++ features (default struct values, function overloading, namespaces where useful) but avoid the rest. No classes, no inheritance, limit templates, no exceptions, no RAII, avoid STL containers or algorithms. Data is plain structs. Functions operate on those structs, or pointers to them.

Memory is managed with arena allocators where possible rather than individual `malloc`/`free` or `new`/`delete` calls. Arenas make allocation fast, avoid fragmentation, and simplify cleanup.

## Dependencies

All dependencies are vendored as source. Nothing to download or install beyond the Windows SDK.

- [nob.h](https://github.com/tsoding/nob.h) - build system
- [Dear ImGui](https://github.com/ocornut/imgui) - GUI
