I wanted to perform an experiment with Active Noise Cancellation. I've downloaded a song from YouTube. I converted it to .wav
using FFmpeg. Then I negated it using sox
:
sox -v -1 song3.wav song3-negated.wav
As expected, the negated track sounds the same to a human's ear.
I added both songs to two separate decks in VirtualDJ (out of no better ideas).
I play them both at the same time using this VirtualDJ bind:
deck 1 play_pause & deck 2 play_pause
When I use a single output device, the “noise cancellation” does work. The more I increase the deck 2 volume, the quieter the whole song plays (up to a turning point). I believe it proves that the negated wave on deck 2 is as it should be.
Sadly, when I output deck 1 (the non-negated track) to my non-fancy old Creative stereo speakers (50 centimeters / 20 inches in front of me) and deck 2 (the negated track) to my non-fancy Steelseries over-ear headphones (put on my head), the cancellation effect doesn't appear at all. If anything, the overall music feels louder, as the track from headphones plays at the same time as speakers. Tweaking the volume of the negated track doesn't help.
Am I naive? I thought that this is actually the perfect ANC scenario, as no microphone is involved. The track and its negation are played perfectly synchronized, from the same device. What can I do more? Should the negated wave be... processed somehow? Or is this thing just impossible to achieve?