Add program reference suppression and mapping
This commit is contained in:
parent
48cbd2fc9a
commit
c0108094a5
4 changed files with 221 additions and 0 deletions
36
tests/test_program_reference.py
Normal file
36
tests/test_program_reference.py
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import unittest
|
||||
|
||||
import numpy as np
|
||||
|
||||
from audio_field.program_reference import suppress_program_reference
|
||||
|
||||
|
||||
class ProgramReferenceTests(unittest.TestCase):
|
||||
def test_reference_bleed_is_suppressed_from_channel(self):
|
||||
sample_rate = 48000
|
||||
t = np.arange(sample_rate, dtype=np.float32) / sample_rate
|
||||
reference = 0.2 * np.sin(2 * np.pi * 440 * t) + 0.1 * np.sin(2 * np.pi * 1400 * t)
|
||||
voice = 0.03 * np.sin(2 * np.pi * 220 * t)
|
||||
field = np.zeros((sample_rate, 2), dtype=np.float32)
|
||||
field[:, 0] = voice + 0.7 * reference
|
||||
field[:, 1] = voice
|
||||
|
||||
cleaned, reports = suppress_program_reference(
|
||||
field,
|
||||
reference,
|
||||
sample_rate,
|
||||
channels=[0],
|
||||
nperseg=2048,
|
||||
noverlap=1536,
|
||||
subtraction_strength=1.0,
|
||||
)
|
||||
|
||||
self.assertEqual((sample_rate, 2), cleaned.shape)
|
||||
self.assertLess(reports[0].output_rms, reports[0].input_rms)
|
||||
self.assertLess(float(np.sqrt(np.mean((cleaned[:, 0] - voice) ** 2))), 0.01)
|
||||
np.testing.assert_allclose(cleaned[:, 1], field[:, 1])
|
||||
self.assertGreater(len(reports[0].phase_mapping), 0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Loading…
Reference in a new issue