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
Add contrast to functional #551
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for working on this! Can you add the following?
@bhargavkathivarapu If you need help in adding the tests, let me know. |
@mthrok , @vincentqb |
@@ -65,6 +65,18 @@ def test_istft(self): | |||
]) | |||
_test_batch(F.istft, stft, n_fft=4, length=4) | |||
|
|||
def test_contrast(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you use simple random tensor of value range [-1.0, 1.0] i.e. torch.rand(2, 100) - 0.5
?
The reason is that we do not want this unit test to rely on other library function torchaudio.load
.
That way when torchaudio.load
is broken, this test is not affected.
I know that test_detect_pitch_frequency
does this but it's only because of recent refactoring and in my opinion it should not.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mthrok I have this modified .
Are torchaudio functionals conditioned on normalization ?
- Because sox in some functions it internally clips the values as per max and min of input.
- I assumed normalized waveform in writing contrast function .
- In tests also i didn't see anywhere normalization=False.
- If unnormalized waveform is passed, the outputs will differ between existing SoxEffects and functional contrast
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure if there is/was a design principle for audio normalization but since torchaudio.load
has normalization=True
by default, and all the tests are written in normalization=True
so I think that's de-facto standard.
Talking about batch consistency test here specifically, the purpose of the test is to assure that function returns the same result regardless of batching and not to assure the result is same as SoX. So it's okay to put whatever the tensor, but to be closer to the actual situation, I thought rather than torch.rand
(which produces [0, 1]), torch.rand - 0.5
would be slightly better. You can normalize it to be further closer if you would like.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure if there is/was a design principle for audio normalization but since
torchaudio.load
hasnormalization=True
by default, and all the tests are written innormalization=True
so I think that's de-facto standard.
Yes, we assume that waveforms are in the range [-1, 1] in torchaudio.
We should consider documenting this convention in the readme, and guaranteeing it in some form. A caveat is that, when doing a transformation that makes the waveform fall outside (e.g. gain), there may be more than one way to bring the signal back to the [-1, 1] range.
I agree. Recently I also had difficult time figuring out what tests need to be added so I reorganized most of the test, and I was planning to add overview of the test structure. Thanks for bringing this up. |
Tests look good to me. Thanks! @bhargavkathivarapu |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks!
Hi ,
Regarding the issue #260 ( Reducing dependency in Sox)
Implemented below function in functional.py
Added a test case to test_sox_compatibility.py
All tests in test_sox_compatibility.py passed on CPU.
@vincentqb could you please review changes