Coder Social home page Coder Social logo

klangfalter's Introduction

KlangFalter

KlangFalter is a convolution audio plugin, e.g. for usage as convolution reverb.

I started its development a couple of time ago because I couldn't find a convolution reverb plugin which suited my needs - and because I was curious about audio DSP programming. ;-)

Features:

  • Zero-latency
  • Easy user interface
  • Support for true stereo impulse responses
  • Simple 2-band EQ (low cut/shelf and high cut/shelf)
  • Easy modifiable envelope for the impulse response
  • Basically no limit on impulse response length - as long as your computer can handle it...
  • Intuitive and flexible loading of impulse response files

Screenshot

Getting KlangFalter:

Please check the Binary folder. For installation, just download the according .zip file and extract it in your plug-in folder.

At the moment, I only build Audio Unit plugins for Mac. However, an LV2 version for Linux can be found in the really great distrho distrho project.

Very Short Tutorial:

Loading impulse responses

  • Click on the "Settings" button to adjust the folder which contains your impulse response files.
  • Click on "Show Browser" and select some impulse response files.
  • KlangFalter tries to find matching impulse response files automatically by searching for matching file names (e.g. left/right and true stereo).
  • You can load impulse response files for specific channel connections by clicking on the file name beneath the wave form display of the according tab.
  • You can clear the impulse response of a specific channel connection by clicking on the "X" button of the according tab.

KlangFalter doesn't come with any impulse respones, but you can find many free and good impulse response collections on the web. Any file format supported by JUCE should work (currently at least .wav, .mp3, .aiff, .ogg and a couple more).

Mixing dry and wet signal

  • Wet/Dry: Adjustment of the wet and dry signal.
  • Autogain: "Normalizes" the loaded impulse responses in order to achieve a consistent level.
  • Stereo Width: Adjusts the - guess what - stereo width.
  • Click on the label on top of the right level display to switch the according level measurement between "out" and "wet" mode.

Modifying the impulse response

  • Gap: Additional gap at the begin of the impulse response ("pre-delay").
  • Begin: Begin of the impulse response.
  • End: End of the impulse response
  • Stretch: Stretches the impulse response.
  • Attack Length & Shape: Modifies the front (attack) of the impulse response.
  • Decay Shape: Modifies the decay of the impulse response
  • Reverse: Reverts the impulse response for spacy effects.
  • Click on the timeline at the bottom of the waveform display to switch time measurement between time and beats-per-minute (useful e.g. for timing reverbs to the music).

EQ

  • Click on the header of the low resp. high EQ to switch between cut and shelf filter.
  • Freq: Adjusts the frequency of the according EQ.
  • Gain: EQ gain (only available if working as shelf filter).

Technical Stuff:

  • Open source (GPL license)
  • SSE optimized algorithm
  • Multithreaded convolution engine
  • Written in C++
  • Based on the great JUCE framework, updated for JUCE v5.4.4

klangfalter's People

Contributors

getdunne avatar hifi-lofi avatar trebmuh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

klangfalter's Issues

IR file not loaded after host restart

I'm hosting KlangFalter in Carla. It doesn't work after reloading the project though.
KlangFalter seems to know the sound file's name but it doesn't show the waveform, nor it produces expected audio:

selection_281

I had other problems with IR.lv2 plugin - it failed torecall the IR sample.
I'm not sure if it's a host- or plugin-related issue.

What is the whole project, BTW?

I can't hear a phone ringing on my desk, when I'm wearing headphones at work, so I'm using Carla plugin host to make my Linux machine tell me when the phone is ringing.

I have taped a mic to the phone, I recorded a sample of the phone ringtone and I'm using that with convolution reverb to detect when the phone rings. IR processing is essential to discriminate the phone ringtone among other sounds the mic picks up.

I was using IR.lv2 but recently it stopped recalling the IR file (Anchakor/ir.lv2#5), so I gave KlangFalter a shot, no luck so far though.

More detail here: https://www.linuxmusicians.com/viewtopic.php?f=11&t=16638&sid=4b6df525371a990dfa9f04ba9e937653).

PS:
Possibly related IR.lv2 issue:
Anchakor/ir.lv2#5

Huge session portability issue

When opening a project on another machine and there are different paths or missing ir files there's no warning about this, just "no file loaded" in the plugin window.
There should be at least a hint on the filename, or even better auto-search function as in most DAWs.
At the moment, even renaming the subdirectory with IRs and forgetting the previous name makes the project broken.

klangfalter isn't able to reload configuration

OS: KXstudio 64bits (tested on kubuntu 15.04 and 14.04, with kxstudio repos)

Maybe it's a compilation bug.
Klangfalter is working fine but when I reload my session (tested on Carla and Ardour4) the wave form doesn't appear. It looks like that :
klangfalter_buggy

And Plugin don't works. "Dry" is still here, and it sounds, but "wet" is absent and doesn't sound. If I change sound file, Label under wave form place change, but "wet" is still absent.
The only one solution is to remove plugin and add a Klangfalter plugin again.

Reading FLAC audio files

It seems that Klangfalter is unable to read FLAC files.
The IR plugin by Tom Shilagyli reads FLACs just fine :)

I personally store all my samples (including IR files) in FLAC. I guess I'm not the only one who'd like so see this feature :)

KXStudio/Repository#56

Kdialog Crash when try to choose impulse

Hi,
Kdialog crash when I try yo open browser (settings > browse). I'm using kde 4.8.5 and launch klangflater as an LV2 plugin in ardour 3.1

here is the crash log, I hope it can help :

Application: KDialog (kdialog), signal: Aborted
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Current thread is 1 (Thread 0x7f63b1d2c780 (LWP 4726))]

Thread 2 (Thread 0x7f63a0e5f700 (LWP 4727)):
#0  0x00007f63aeb75313 in poll () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007f63ab03a456 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f63ab03a584 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f63affc8426 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#4  0x00007f63aff97c82 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#5  0x00007f63aff97ed7 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#6  0x00007f63afe96fa7 in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#7  0x00007f63aff779ff in ?? () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#8  0x00007f63afe99fcb in ?? () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#9  0x00007f63acb0fe9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#10 0x00007f63aeb80ccd in clone () from /lib/x86_64-linux-gnu/libc.so.6
#11 0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7f63b1d2c780 (LWP 4726)):
[KCrash Handler]
#6  0x00007f63aeac3425 in raise () from /lib/x86_64-linux-gnu/libc.so.6
#7  0x00007f63aeac6b8b in abort () from /lib/x86_64-linux-gnu/libc.so.6
#8  0x00007f63aeb0139e in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#9  0x00007f63aeb97817 in __fortify_fail () from /lib/x86_64-linux-gnu/libc.so.6
#10 0x00007f63aeb96710 in __chk_fail () from /lib/x86_64-linux-gnu/libc.so.6
#11 0x00007f63aeb977ce in __fdelt_warn () from /lib/x86_64-linux-gnu/libc.so.6
#12 0x00007f63addfe13a in ?? () from /usr/lib/x86_64-linux-gnu/libQtNetwork.so.4
#13 0x00007f63addfc1f8 in ?? () from /usr/lib/x86_64-linux-gnu/libQtNetwork.so.4
#14 0x00007f63addf3b1f in QAbstractSocket::waitForBytesWritten(int) () from /usr/lib/x86_64-linux-gnu/libQtNetwork.so.4
#15 0x00007f63b149ee12 in ?? () from /usr/lib/libkio.so.5
#16 0x00007f63b14a01ef in KIO::Connection::sendnow(int, QByteArray const&) () from /usr/lib/libkio.so.5
#17 0x00007f63b14a15a6 in ?? () from /usr/lib/libkio.so.5
#18 0x00007f63b156ed44 in KIO::Slave::accept() () from /usr/lib/libkio.so.5
#19 0x00007f63affad281 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#20 0x00007f63affad281 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#21 0x00007f63affad281 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#22 0x00007f63b04a519a in KLocalSocketServer::incomingConnection(int) () from /usr/lib/libkdecore.so.5
#23 0x00007f63b051724b in ?? () from /usr/lib/libkdecore.so.5
#24 0x00007f63affad281 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#25 0x00007f63afffa2fe in QSocketNotifier::activated(int) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#26 0x00007f63affb660b in QSocketNotifier::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#27 0x00007f63af31b894 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#28 0x00007f63af320713 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#29 0x00007f63b09fe3f6 in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5
#30 0x00007f63aff98e9c in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#31 0x00007f63affc7a97 in ?? () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#32 0x00007f63ab03a173 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#33 0x00007f63ab03a4c0 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#34 0x00007f63ab03a584 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#35 0x00007f63affc83bf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#36 0x00007f63af3c3d5e in ?? () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#37 0x00007f63aff97c82 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#38 0x00007f63aff97ed7 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#39 0x00007f63af7eb936 in QDialog::exec() () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#40 0x000000000040d365 in ?? ()
#41 0x00007f63aeaae76d in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
#42 0x000000000040ea61 in _start ()

Issues with linux hosts

As stated here, KlangFalter (as a LV2 plugin) is having issues with some hosts on linux:

  • It doesn't appear in Ardour (5.12)
  • Qtractor freezes after adding an IR (see here)
  • it opens with jalv.select but doesn't display the IR form. Still it sounds to be working.

Is there any chance to improve this? It'd be awesome!

Compiling with Windows

The project is out of sync with Juce (obviously). Managed to compile on Windows by:
replacing AudioBuffer::getSamples by either getReadPointer or getWritePointer
making the custom look and feel subclass LookAndFeel_V1 instead of LookAndFeel

Managed to make the plugin crash by turning it on and off randomly during playback, meaning that CopyAndPad in Utilities.h had too small a buffer and gave an assertion failure.

Impulses: http://fokkie.home.xs4all.nl/IR.htm

Here's a windows compile to VST, run through a couple of antivirus and rename to DLL.

Good stuff

klangfalter dll

Licensing for Commercial Use

I wanted to talk to you about licensing the KlangFalter for commercial use. How can I contact you. Our name is MIDIculous on the Juce forum.

(LV2) Wet sound only if Low Cut Freq. = OFF

Hi! I use Klangfalter as an LV2 plugin under Linux/KXStudio and it is working almost perfect. Yet I notice that Klangfalter's wet output is clipped down to zero as soon as the Low Cut Freq. knob is turned away from OFF.
Can you confirm this?

Binary Folder missing

The Binary Folder is missing and thus there is no way to download a file that can be installed. Is there anything else one can do for installation?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.