Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from cycfi:master #8

Open
wants to merge 533 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
533 commits
Select commit Hold shift + click to select a range
03d132b
ring buffer doc
djowel Apr 15, 2023
4dea2df
fractional_ring_buffer doc
djowel Apr 15, 2023
3a08bb8
Delay documentation
djowel Apr 16, 2023
67cf86a
renamed "Instance" to "Object"
djowel Apr 16, 2023
57c34a2
- Added moving sum docs
djowel Apr 19, 2023
f87b9d0
Update README.md
alperc84 Apr 24, 2023
bc65642
Added missing typedefs
djowel Apr 20, 2023
77f2281
fix document for include moving_average.hpp
alperc84 Apr 26, 2023
24d5d8e
Merge pull request #60 from alperc84/patch-1
djowel Apr 24, 2023
c8ba4d5
Merge pull request #61 from alperc84/patch-1
djowel Apr 26, 2023
b982eb2
doc updates
djowel Apr 26, 2023
0095851
Update README.md
djowel Apr 26, 2023
48e54d0
renamed header files for documentation
djowel Apr 26, 2023
9247b32
Synthesizers and generators update
djowel Apr 26, 2023
7d79381
update to latest VS2022
djowel Apr 28, 2023
1745fed
- remove redundant "length" member function (prefer width)
djowel Apr 29, 2023
4e24e4e
needs to be inline
djowel Apr 29, 2023
5a7250d
Added exponential generator
djowel Apr 26, 2023
f0028a7
updates
djowel Apr 28, 2023
d743492
- Added ramp up and down variants
djowel Apr 29, 2023
0cb9867
added ramp-gen and adsr-like envelope generator example
djowel Apr 29, 2023
efdb7b2
Added hold-line generator
djowel Apr 30, 2023
f75509f
Made the offset/scale parameters external to the ramp-gen.
djowel May 6, 2023
88e56bf
renaming old envelope_gen for removal
djowel May 6, 2023
a235520
now we have a cool envelope generator!
djowel May 6, 2023
b18424e
Let the user choose the MIDI device
djowel May 7, 2023
8f4646a
Expired the old envelope gen, replaced with new exp_envelope_gen.
djowel May 7, 2023
05de5bd
Allow exponential curve to be adjustable
djowel May 7, 2023
202e813
more synth docs
djowel May 11, 2023
2a1e07f
Start using C++ concepts
djowel May 11, 2023
c8f03e2
Use constrained auto syntax
djowel May 11, 2023
af214a9
Use c++ concepts
djowel May 11, 2023
8473317
note on term scaler
djowel May 12, 2023
b635a76
sin_cos_gen
djowel May 12, 2023
ac05b0d
- Add noise gen test
djowel May 12, 2023
ea019c6
Starting documentation of generators
djowel May 12, 2023
4083b72
Update main.yml
djowel May 12, 2023
28f9983
Added more generators and window tapers, etc.
djowel May 13, 2023
65c3198
renaming "synth" or "synthesizer" and variations to "oscillator"
djowel May 12, 2023
62ab5b3
fix for msvc error
djowel May 12, 2023
e737264
place Q concepts in namespace q::concepts
djowel May 14, 2023
ef56a00
Added plots
djowel May 12, 2023
3b5d3e1
We now require C++20 with concepts support
djowel May 12, 2023
77da1a2
use vector instead of list
djowel May 17, 2023
de1895e
cleaning up the concepts:
djowel May 14, 2023
5b8b49b
added sin-cos generator docs
djowel May 12, 2023
391f4b8
correct fix for msvc
djowel May 12, 2023
a804893
doc updates
djowel May 17, 2023
ad21094
Doc updates. Preparing for documentation of envelope_gen.
djowel May 15, 2023
94f2f76
refining concepts
djowel May 14, 2023
310a275
Merge branch 'docs-dev' into develop
djowel May 12, 2023
da3b635
place some private stuff in detail
djowel May 17, 2023
d8e6370
added sopcumentation for hold_line_gen.
djowel May 15, 2023
ea077de
Renamed "value" to "unit" as it should be
djowel May 15, 2023
5b6a196
Update README.md
djowel May 14, 2023
bfc7516
envelope gen doc updates
djowel May 17, 2023
32a6511
WIP envelope_gen documentation
djowel May 15, 2023
21777d0
Doc updates + tightening concepts
djowel May 15, 2023
dbf22c5
Update README.md
djowel May 14, 2023
7ab384a
Phases and transitions doc for the env gen.
djowel May 18, 2023
66a9d4e
Major change:
djowel May 16, 2023
617fbaf
removing deprecated member functions
djowel May 15, 2023
748f1ec
Update README.md
djowel May 14, 2023
c6c966d
Envelope generator doc updates
djowel May 18, 2023
5c1cbc6
- Adjust doc to the latest API changes
djowel May 16, 2023
64469e1
removed intermediate parents
djowel May 15, 2023
1c862e2
Update README.md
djowel May 14, 2023
aeba3fa
renaming exp_envelope_gen to adsr_envelope_gen
djowel May 18, 2023
dc5b216
renamed lin2db to lin_to_db and frac2phase to frac_to_phase.
djowel May 16, 2023
07e0f48
Merge branch 'docs-dev' into develop
djowel May 15, 2023
9751dd6
adsr_envelope_gen documentation
djowel May 20, 2023
54bca8c
documented other necessary envelope_segment member functions
djowel May 18, 2023
b4a213a
Merge branch 'docs-dev' into develop
djowel May 16, 2023
576acfd
Provide a mechanism for backward compatibility of decibel and phase.
djowel May 20, 2023
d889dbf
Merge branch 'docs-dev' into develop
djowel May 18, 2023
726636f
Merge branch 'docs-dev' into develop
djowel May 20, 2023
b242458
tighten API design (possible fix for gcc and msvc compile errors)
djowel May 20, 2023
e13e19e
Update README.md
djowel May 20, 2023
38989f3
reintegrated intervals and pitch
djowel May 21, 2023
2279517
- changed: pitch is just a typedef to an interval plus special functi…
djowel May 21, 2023
7d12255
Revert "- changed: pitch is just a typedef to an interval plus specia…
djowel May 21, 2023
bf97948
Allow mixed unit type operation as long as they are of the same kind …
djowel May 21, 2023
41b24d3
fix: API update
djowel May 21, 2023
6fd4da8
Documentation updates
djowel May 21, 2023
b15c0ba
Tighten the promote_unit semantics
djowel May 22, 2023
0ecf63c
Make decibel(doiuble) deleted for now, to avoid confusion. Note in co…
djowel May 22, 2023
3a827d7
Merge branch 'develop'
djowel Mar 11, 2023
6677586
Fundamentals documentation
djowel Mar 30, 2023
e5c6746
Biquad documentation
djowel Apr 1, 2023
fdc337c
Dynamics documentation
djowel Apr 10, 2023
4c030dc
Merge branch 'develop'
djowel May 22, 2023
787f79a
mark the version as develop-0.99
djowel May 22, 2023
d295125
Update README.md
djowel May 22, 2023
8a257a8
Update README.md
djowel May 22, 2023
e29e059
Update README.md
djowel May 22, 2023
fad283f
Wrong audio device ID
djowel May 22, 2023
958ed3d
fix wrong URL
djowel May 25, 2023
0efa8a9
Doc refinements
djowel May 27, 2023
20c6fbd
Separating onset_gate from noise_gate
djowel May 27, 2023
efac2e4
Reorganizing stuff around
djowel May 27, 2023
e5744eb
Noise gate documentation
djowel May 27, 2023
eb0c660
Doc updates + added Onset Gate
djowel May 27, 2023
496dac5
small tweak
djowel May 27, 2023
e37d0b6
DC Block documentation
djowel May 27, 2023
3b5c9b7
fixed doc mistake
djowel May 27, 2023
5a97a6a
Added one-pole-lowpass
djowel May 27, 2023
94d6301
Added Literals section
djowel May 28, 2023
f455069
- rearranging
djowel May 28, 2023
c8174a0
sync to infra update
djowel Jun 2, 2023
42a11aa
multi-buffer API refinements + docs
djowel May 29, 2023
1c43e1a
Added basic_concepts documentation.
djowel May 31, 2023
c171604
refining the basic concepts
djowel Jun 2, 2023
dfb16b3
Multi-buffer documentation
djowel Jun 2, 2023
01afa11
rearranging presentation
djowel Jun 2, 2023
165b433
dc_block, fix type mismatch in operator = function
propeller3D Jun 2, 2023
352d292
Fix concept declaration for return types
djowel Jun 2, 2023
8e8b0a0
Merge remote-tracking branch 'upstream/develop' into develop
propeller3D Jun 3, 2023
38df92d
Changed the = operator to accept a float parameter
propeller3D Jun 3, 2023
b33f503
Changed parameter bool to float in operator =
propeller3D Jun 3, 2023
1e71828
Merge pull request #64 from propeller3D/develop
djowel Jun 3, 2023
c0aa7be
- Documentation for audio_stream
djowel Jun 3, 2023
5bec0b0
doc updates; more MIDI prep.
djowel Jun 3, 2023
85b176f
Minor tweaks
djowel Jun 3, 2023
6cc1bf1
MIDI messages documentation
djowel Jun 4, 2023
7842d02
Added MIDI processor documentation
djowel Jun 4, 2023
d7a70bb
Refining the concept language and terms
djowel Jun 4, 2023
3d56bb3
WIP q_io documentation
djowel Jun 4, 2023
ffb44c5
q_io documentation refinements (still WIP).
djowel Jun 4, 2023
0d56ceb
* audio_device documentation
djowel Jun 6, 2023
cb778bc
change sampling rate to double (from integer)
djowel Jun 6, 2023
3e14734
Added example
djowel Jun 6, 2023
882081c
minor API changes
djowel Jun 7, 2023
2953edc
- audio_file documentation WIP.
djowel Jun 8, 2023
d0d1f61
Update main.yml
djowel Jun 8, 2023
9fea808
Just use our own concepts!
djowel Jun 8, 2023
10204e6
- Deprecated wav_memory
djowel Jun 9, 2023
4d38380
rename *note* to *pitch*
djowel Jun 11, 2023
8165e1c
renamed "note" to "pitch"
djowel Jun 11, 2023
5c59831
rename *note* to *pitch*
djowel Jun 11, 2023
c78b69c
Just use pi
djowel Jun 11, 2023
93c0920
Simplify; use std::pair.
djowel Jun 12, 2023
aaed007
audio_stream documentation
djowel Jun 14, 2023
efbef4c
More docs. Ready for v1.0?
djowel Jun 18, 2023
1481eb9
Some more last-minute tweaks
djowel Jun 18, 2023
2614ab0
Update v1.0 Beta
djowel Jun 18, 2023
6a7eaf8
This will now be true develop branch
djowel Jun 18, 2023
e4ca3ea
Update README.md
djowel Jun 18, 2023
60f4394
Point to latest version v1.0_beta
djowel Jun 18, 2023
1da7940
Missed this one.
djowel Jun 18, 2023
7a9c6e4
Update README.md
djowel Jun 18, 2023
e5acdf9
Point to latest version v1.0_beta
djowel Jun 18, 2023
e3a6360
Missed this one.
djowel Jun 18, 2023
15d1a9c
fix missing "inline" in dynamic.hpp for android ndk-build
alperc84 Jun 19, 2023
cd1fca5
Merge pull request #65 from alperc84/develop
djowel Jun 20, 2023
f294933
typo fix.
djowel Jun 23, 2023
b3cfdd5
Added from_unsigned_float and to_unsigned_float converters
djowel Jul 6, 2023
3255b80
submodule update
djowel Jul 6, 2023
951dc80
submodule update
djowel Jul 6, 2023
2a3a026
- Updated to latest API changes
djowel Jul 10, 2023
02c5dd1
Fix member initialization order
schult Aug 18, 2023
fdd55f7
Fix comparisons between signed and unsigned
schult Aug 18, 2023
2c6ddda
Don't use exceptions if they are disabled
schult Aug 18, 2023
43d4b9c
Merge pull request #66 from schult/warning-fixes
djowel Aug 18, 2023
f34e927
Fix member initialization order
schult Sep 1, 2023
ce4e18b
Merge pull request #67 from schult/warning-fixes
djowel Sep 2, 2023
e5f981f
Cleanup, bump copyright date
djowel Sep 10, 2023
5eb2cb2
submodule update
djowel Sep 10, 2023
182fce4
format fix
djowel Sep 18, 2023
bfc63ef
Correct implementation
djowel Sep 27, 2023
00aeca7
Fixes deprecated-literal-operator (e.g. space between "" and _Hz)
djowel Oct 11, 2023
2c2c6ab
Bump copyright date
djowel Oct 22, 2023
f14d5ff
remove unused file
djowel Apr 15, 2024
dee0ca6
Remove extra heading
djowel Aug 21, 2024
d0b5c98
Merge branch 'develop'
djowel Aug 21, 2024
7396a24
Merge branch 'v1.0_beta'
djowel Aug 21, 2024
8a15112
Is the name relevant?
djowel Aug 21, 2024
d9fd5e1
Merge branch 'develop'
djowel Aug 21, 2024
7c92b75
Version 1.0
djowel Aug 21, 2024
9fc5811
We start versioning
djowel Aug 21, 2024
71bd777
Reclaiming master
djowel Aug 21, 2024
03bda30
Starting v1.5
djowel Aug 21, 2024
051dbd1
Fix wrong version
djowel Aug 21, 2024
e559878
Merge branch 'v1.0'
djowel Aug 21, 2024
cc04404
Comma at the end on expressions
djowel Aug 21, 2024
41e44cb
Merge branch 'v1.0'
djowel Aug 21, 2024
542d964
Update README.md
djowel Aug 21, 2024
4996590
Update README for v1.0 release.
djowel Aug 21, 2024
cd771d8
Use cmake FetchContent instead of GIT submodules
djowel Aug 21, 2024
81568cf
Use exact versions of portaudio and portmidi
djowel Aug 21, 2024
c91f853
- Portaudio builds only with master
djowel Aug 21, 2024
8005284
Merge branch 'master' into v1.0
djowel Aug 21, 2024
9e09ab6
Correct version
djowel Aug 21, 2024
ba00790
Update README.md
djowel Aug 21, 2024
f90cf5d
Update README.md
djowel Aug 21, 2024
5f6415a
Merge branch 'v1.0'
djowel Aug 21, 2024
1451f68
Readme updates
djowel Aug 21, 2024
8af02b4
Setup guide update
djowel Aug 22, 2024
8e534b2
Decrease gate attack threshold
djowel Aug 23, 2024
87c6c88
Merge branch 'develop'
djowel Aug 23, 2024
82a59ff
Added test for compressor/expander concatenation
djowel Aug 23, 2024
5c7483d
Smooth the envelope with another envelope follower to nasty avoid wav…
djowel Aug 24, 2024
b183aba
Update LICENSE
djowel Aug 27, 2024
e8155c2
Some cleanup
djowel Aug 28, 2024
1fac53b
Added inverse FFT
djowel Aug 29, 2024
a016bcb
various refinements
djowel Aug 29, 2024
b5de104
Using concepts to templatize the floating point type
djowel Aug 29, 2024
6dee9ee
Increase compile time sin computation accuracy
djowel Aug 30, 2024
0d25623
FFT regression testing
djowel Aug 30, 2024
d8a352e
Add testing to CI
djowel Aug 30, 2024
063a20e
Enable the tests!
djowel Aug 30, 2024
145bfea
Include all tests thus far
djowel Aug 30, 2024
3240008
Add magnitude_spectrum function
djowel Aug 30, 2024
d953af2
Doxygenize
djowel Aug 30, 2024
f31bdf5
Fingerprinter prototype (WIP untested)
djowel Aug 30, 2024
c18dd8a
shorter name for magnitude spectrum
djowel Aug 30, 2024
05d1663
Adding exact wav compare tests with "golden" files
djowel Aug 31, 2024
30ea25d
Retroactively adding the tests for CI
djowel Sep 1, 2024
a3404b4
Missed adding some tests to CTest
djowel Sep 1, 2024
4ec41e0
Report the mismatch
djowel Sep 1, 2024
4601e51
Increase the floating point comparison tolerance
djowel Sep 1, 2024
d18474b
Increase tolerance selectively
djowel Sep 1, 2024
395ce65
Missed one test
djowel Sep 1, 2024
85bdcbf
This one too
djowel Sep 1, 2024
e1b751e
This one too
djowel Sep 1, 2024
b9d6aa0
Merge branch 'master' of github.com:cycfi/q
djowel Sep 1, 2024
7d065b3
Use vector to prevent stack overlow!
djowel Sep 1, 2024
bc6cdd9
Merge branch 'master' of github.com:cycfi/q
djowel Sep 1, 2024
9385b8c
typo
djowel Sep 1, 2024
6e25290
Bump copyright date
djowel Sep 1, 2024
d458886
Remove unused file
djowel Sep 1, 2024
9eb3174
- Added limiter and compressor limiter tests
djowel Sep 3, 2024
cc788de
Added dynamic_smoother doc
djowel Sep 11, 2024
337bb55
Added schmitt_trigger doc
djowel Sep 13, 2024
3eac7ed
Remove wrong expression
djowel Sep 13, 2024
fd57b93
Ah one more thing
djowel Sep 13, 2024
a2ea01b
Fix github actions error
djowel Sep 13, 2024
e808ceb
Improved schmitt_trigger doc
djowel Sep 13, 2024
8b6aa04
peak documentation
djowel Sep 14, 2024
2bf0021
Updated SVG
djowel Sep 14, 2024
721c318
Doc updates
djowel Sep 15, 2024
13c058e
Dynamic smoother doc
djowel Sep 15, 2024
91860e7
small doc tweak
djowel Sep 15, 2024
be9979a
fix math
djowel Sep 15, 2024
870ffc1
Update README.md
djowel Sep 17, 2024
cb46c97
Update README.md
djowel Sep 17, 2024
73d2b93
Added Slide G test
djowel Sep 18, 2024
7d16ab6
dynamic_smoother: Fix extra cycle of latency
thirtythreeforty Sep 29, 2024
146fec8
Merge pull request #75 from thirtythreeforty/fix-dynamic-smoother-lat…
djowel Sep 29, 2024
c09fda1
Untested, unverified. Let's revisit this later
djowel Oct 22, 2024
e0f5835
Add operator= to dynamic_smoother
djowel Oct 27, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 8 additions & 3 deletions .github/workflows/main.yml → .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ jobs:
os: windows-latest
cc: "cl"
cxx: "cl"
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars32.bat"
environment_script: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
- name: "Ubuntu Latest GCC"
os: ubuntu-latest
cc: "gcc-9"
cxx: "g++-9"
cc: "gcc-10"
cxx: "g++-10"
- name: "macOS Latest Clang"
os: macos-latest
cpp_version: 20
cc: "clang"
cxx: "clang++"
steps:
Expand Down Expand Up @@ -101,3 +102,7 @@ jobs:
if (NOT result EQUAL 0)
message(FATAL_ERROR "Could not run with ${CMAKE_COMMAND}: Got ${error_message} - ${result}")
endif()

- name: Test
run: ctest --verbose --test-dir build
shell: bash
23 changes: 23 additions & 0 deletions .github/workflows/site.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Publish to GitHub Pages with Lunr Search Extension
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install Node.js
uses: actions/setup-node@v2
with:
node-version: '18'
- name: Install Antora and the Antora Lunr Extension
run: npm i antora @antora/lunr-extension
- name: Generate Site
run: npx antora docs/antora/antora-playbook.yml
- name: Publish to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: www
publish_dir: docs/antora/build/site

8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
.DS_Store
.idea
.vscode
/_site/
/cmake-build-debug/
/cmake-build-release/
/build/
/x64/
/.vs
/docs/antora/build/
/docs/antora/node_modules/
/docs/antora/package-lock.json
/docs/antora/package.json
/docs/antora_local/
/python/2023/
9 changes: 0 additions & 9 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,9 +0,0 @@
[submodule "q_io/external/portaudio"]
path = q_io/external/portaudio
url = https://github.com/PortAudio/portaudio
[submodule "q_io/external/portmidi"]
path = q_io/external/portmidi
url = https://github.com/cycfi/portmidi.git
[submodule "infra"]
path = infra
url = https://github.com/cycfi/infra.git
37 changes: 28 additions & 9 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,35 +1,54 @@
###############################################################################
# Copyright (c) 2016-2021 Joel de Guzman. All rights reserved.
# Copyright (c) 2016-2023 Joel de Guzman. All rights reserved.
#
# Distributed under the MIT License (https://opensource.org/licenses/MIT)
###############################################################################
cmake_minimum_required(VERSION 3.5.1)

if(POLICY CMP0990)
cmake_policy(SET CMP0077 NEW)
endif()
cmake_minimum_required(VERSION 3.16.0)

project(q)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(FetchContent)

option(Q_BUILD_EXAMPLES "build Q library examples" ON)
option(Q_BUILD_TEST "build Q library examples" ON)
option(Q_BUILD_TEST "build Q library tests" ON)
option(Q_BUILD_IO "build Q IO library" ON)

###############################################################################
# Cycfi Infra

FetchContent_Declare(
cycfi_infra
GIT_REPOSITORY https://github.com/cycfi/infra.git
GIT_TAG 2024_MAY
GIT_SUBMODULES_RECURSE ON
)

FetchContent_MakeAvailable(cycfi_infra)

###############################################################################
# q_lib

add_subdirectory(q_lib)
add_subdirectory(infra)

###############################################################################
# q_io

if (Q_BUILD_IO)
add_subdirectory(q_io)
endif()

###############################################################################
# Examples and Tests

if (Q_BUILD_EXAMPLES)
add_subdirectory(example)
endif()

if (Q_BUILD_TEST)
add_subdirectory(test)
enable_testing()
endif()

2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2014-2021 Joel de Guzman
Copyright (c) 2014-2024 Joel de Guzman

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
130 changes: 55 additions & 75 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,75 +1,54 @@
# ![Q-Logo](docs/assets/images/q-logo-small.png) Audio DSP Library
# ![Q-Logo](docs/modules/ROOT/images/q-logo-small.png) Audio DSP Library

[![CMake Build Matrix](https://github.com/cycfi/q/workflows/Build/badge.svg)](https://github.com/cycfi/q/actions?query=workflow%3ABuild)

## Introduction

Q is a cross-platform C++ library for Audio Digital Signal Processing. Aptly
named after the "Q factor", a dimensionless parameter that describes the
quality of a resonant circuit, the Q DSP Library is designed to be simple and
elegant, as the simplicity of its name suggests, and efficient enough to run
on small microcontrollers.

Q leverages the power of modern C++ and efficient use of functional
programming techniques, especially function composition using fine-grained
and reusable function objects (both stateless and stateful), to simplify
complex DSP programming tasks without sacrificing readability.

Q is the host of some experimental Music related DSP facilities such as
[Virtual Pickups](http://tinyurl.com/y8cqt8jr) (Virtual pickup placement
simulator) and [Bitstream Autocorrelation](http://tinyurl.com/yb49zlld) (An
extremely fast and efficient pitch detection scheme) [the author](#jdeguzman)
has accumulated over the years as part of research and development, and will
continue to evolve to accommodate more facilities necessary for the
fulfillment of various Music related projects.

The library is Open Source and released under the very liberal [MIT
license](http://tinyurl.com/p6pekvo).

## Announcement

2021 is a year of rethinking. In March, this year, I thought about closing
the source code of some of my Open-Source libraries in the first
“[Rethinking Open Source][9]” post. Now, I think it is a mistake. At the
very least, the pitch-detection code should remain open. And indeed, while
I said that the pitch-detection source code will be closed by mid-April, it
never happened. It is my gift to the world, and it shall remain open.

Please follow this link for more info: [Keeping it Open: Rethinking Open Source Part 2][10].

## News

- 20 Octpber 2021: BACF is not going away: See announcement above.
- 14 April 2021: Q v1.0 beta is released: https://github.com/cycfi/q/tree/v1.0_beta
- 11 March 2021: BACF pitch detection is going away. See announcement above.
- 4 February 2021: Posted [Fast and Efficient Pitch Detection: Power of Two][7].
Bitstream Autocorrelation (BACF) is fast and accurate. What can be better? Well,
two BACFs in parallel!
- 6 July 2020: Posted [Fast and Efficient Pitch Detection: Revisited][1].
A long overdue article about the technical details of BACF.
- 25 June 2020: Pitch/period detection improvements now in master branch.
- 19 June 2020: Pitch/period detection improvements in develop branch (for
now until it becomes stable). Mostly bug fixes; esp. the ability to handle
higher frequencies and bigger low-high ranges.
- 18 May 2020: We're getting closer to a 1.0 release. Busy working on the
docs, including small improvements on the example code.

[1]: https://www.cycfi.com/2020/07/fast-and-efficient-pitch-detection-revisited
Q is a cross-platform C++ library for audio digital signal processing. Q is named after the "Q factor," a dimensionless parameter that describes the quality of a resonant circuit. The Q DSP Library is designed to be simple and elegant, as the simplicity of its name suggests, and efficient enough to run on small microcontrollers.

## Discord
Q simplifies complex DSP programming tasks without sacrificing readability by leveraging the power of modern C++ and efficient use of functional programming techniques, especially function composition using fine-grained and reusable function objects (both stateless and stateful).

Feel free to join the [discord channel](https://discord.gg/4MymV4EaY5) for
discussion and chat with the developer.
Q is the host of some experimental Music related DSP facilities [the author](#jdeguzman) has accumulated over the years as part of research and development, and will continue to evolve to accommodate more facilities necessary for the fulfillment of various Music related projects.

## Documentation
The library is Open Source and released under the very liberal [MIT license](http://tinyurl.com/p6pekvo).

> **NOTE:** The library has now reached version 1.0 and has stabilized. The documentation is in sync with the code in the master branch. Any future changes will be developed in feature branches and merged incrementally to the master branch. The develop branch will cease to exist. The API is now stable, and any changes will be documented accordingly.
>
> Versions will be in separate branches. The master branch will target the latest version. Currently, it targets v1.5, which will be a significant departure from v1.0, when completed. This update includes the retirement of the BACF (bitstream autocorrelation) based pitch detector and the introduction of a new, much better pitch detection algorithm with integrated onset detection.

**Update:** We're closing in towards v1.5. The Hz pitch detection system is presented in this article series: [Pitch Perfect: Enhanced Pitch Detection Techniques (Part 1)
](https://www.cycfi.com/2024/09/pitch-perfect-enhanced-pitch-detection-techniques-part-1/)

## Overview

The Q library comprises of two layers:

<p align="center">
<img src="https://cycfi.github.io/q/q/v1.5-dev/_images/q-layers.svg" width="50%">
</p>

1. q_io: Audio and MIDI I/O layer. The q_io layer provides cross-platform audio and MIDI host connectivity straight out of the box. The q_io layer is optional. The q_lib layer is usable without it.

2. q_lib: The core DSP library, q_lib is a no-frills, lightweight, header-only library.

### Dependencies
The dependencies are determined by the arrows.

Documentation is work in progress. Stay tuned...
* q_io has very minimal dependencies ([portaudio](http://www.portaudio.com/) and
[portmidi](http://portmedia.sourceforge.net/portmidi/)) with very loose coupling via thin wrappers that are easy to transplant and port to a host, with or without an operating system, such as an audio plugin or direct to hardware ADC and DAC.

1. [Design and Architecture](https://cycfi.github.io/q/design)
2. [Setup and Installation](https://cycfi.github.io/q/setup)
3. [Hello, World](https://cycfi.github.io/q/hello_world)
4. [Hello, Universe](https://cycfi.github.io/q/hello_universe)
5. [Fundamentals](https://cycfi.github.io/q/fundamentals)
* q_io is used in the tests and examples, but can be easily replaced by other mechanisms in an application. DAW (digital audio workstations), for example, have their own audio and MIDI I/O mechanisms.

* q_lib has no dependencies except the standard c++ library.

The *q_io* layer provides cross-platform audio and MIDI host connectivity straight out of the box. The *q_io* layer is optional. The *q_lib* layer is usable without it. *q_io* is used in the tests and examples, but can be easily replaced by other mechanisms in an application.

## Documentation

* [Setup and Installation](https://cycfi.github.io/q/q/v1.5-dev/setup.html)
* [Quick Start](https://cycfi.github.io/q/q/v1.5-dev/quick_start.html)
* [Fundamentals](https://cycfi.github.io/q/q/v1.5-dev/fundamentals.html)
* [Reference](https://cycfi.github.io/q/q/v1.5-dev/index.html)

## <a name="jdeguzman"></a>About the Author

Expand All @@ -79,27 +58,28 @@ Since then, he builds his own guitars, effect boxes and synths. He enjoys
playing distortion-laden rock guitar, composes and produces his own music in
his home studio.

Joel de Guzman is the principal architect and engineer at [Cycfi Research][1]
and a consultant at [Ciere Consulting][2]. He is a software engineer
specializing in advanced C++ and an advocate of Open Source. He has authored
a number of highly successful Open Source projects such as [Boost.Spirit][3],
[Boost.Phoenix][4] and [Boost.Fusion][5]. These libraries are all part of the
[Boost Libraries][6], a well respected, peer-reviewed, Open Source,
collaborative development effort.
Joel de Guzman is the principal architect and engineer at [Cycfi
Research][1]. He is a software engineer specializing in advanced C++ and an
advocate of Open Source. He has authored a number of highly successful Open
Source projects such as [Boost.Spirit][3], [Boost.Phoenix][4] and
[Boost.Fusion][5]. These libraries are all part of the [Boost Libraries][6],
a well respected, peer-reviewed, Open Source, collaborative development
effort.

[1]: https://www.cycfi.com/
[2]: https://ciere.com/
[3]: http://tinyurl.com/ydhotlaf
[4]: http://tinyurl.com/y6vkeo5t
[5]: http://tinyurl.com/ybn5oq9v
[6]: http://tinyurl.com/jubgged
[7]: https://bit.ly/3cFkR8E
[8]: https://www.boost.org/
[9]: https://www.cycfi.com/2021/03/rethinking-open-source/
[10]: https://www.cycfi.com/2021/10/keeping-it-open-rethinking-open-source-part-2/

---
## Discord

Feel free to join the [discord channel](https://discord.gg/4MymV4EaY5) for
discussion and chat with the developer.

*Copyright (c) 2014-2020 Joel de Guzman. All rights reserved.*
*Copyright (c) 2014-2024 Joel de Guzman. All rights reserved.*
*Distributed under the [MIT License](https://opensource.org/licenses/MIT)*



14 changes: 14 additions & 0 deletions docs/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# See https://help.github.com/en/articles/dealing-with-line-endings

# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
* text eol=lf

# Denote all files that are truly binary and should not be modified.
*.gif binary
*.ico binary
*.jpg binary
*.mp3 binary
*.mp4 binary
*.pdf binary
*.png binary
1 change: 0 additions & 1 deletion docs/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
/_site/
24 changes: 0 additions & 24 deletions docs/404.html

This file was deleted.

33 changes: 0 additions & 33 deletions docs/Gemfile

This file was deleted.

Loading