-
Notifications
You must be signed in to change notification settings - Fork 527
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
Zeros extracting chromagram with NNLSChroma and LogSpectrum #948
Comments
Hi @xaviliz, LogSpectrum updates the average tuning internally so using the last value would be more correct than re-averaging. You can do that by I reproduced your example and also got zeros in the output. While checking our comments, I found that only calculations without NNLS were properly tested and warrantied to work fine, so I'd recommend sticking to that configuration until we figure out the problem. Here it's your code snippet with the required modifications: from essentia import Pool, common
from essentia.standard import MonoLoader, Windowing, Spectrum, LogSpectrum, NNLSChroma, FrameGenerator
windowType = 'hann'
sampleRate = 44100
frameSize = 16384
nBPS = 3
window = Windowing(type=windowType, size=frameSize, normalized=False)
spectrum = Spectrum(size=frameSize)
logSpectrum = LogSpectrum(frameSize=int(frameSize/2) + 1, binsPerSemitone=nBPS, sampleRate=sampleRate)
nnlsChroma = NNLSChroma(frameSize=int(frameSize/2) + 1, useNNLS=False)
pool = Pool()
audio = MonoLoader(filename=filePath, sampleRate=sampleRate)()
for frame in FrameGenerator(audio, frameSize=frameSize, hopSize=hopSize, startFromZero=True):
logFreqSpectrum, meanTuning, localTuning = logSpectrum(spectrum(window(frame)))
pool.add('features.logSpectrogram', logFreqSpectrum)
pool.add('features.localTuning', localTuning)
pool.set('features.meanTuning', meanTuning) # use only the last value
tunedLogfreqSpectrum, semitoneSpectrum, bassChromagram, chromagram = nnlsChroma(pool['features.logSpectrogram'], pool['features.meanTuning'], pool['features.localTuning']) |
thanks for your clarification with the average tuning and your code modifications. I was testing NNLS Chroma during the last days and I found the same bug. When useNNLS is I hope this helps. |
It's nice to know that it works as expected without NNLS. We'll discuss a fix for the NNLS mode in #951 |
Hi all,
I am trying to extract NNLSChroma with Essentia library using LogSpectrum. I got the chromagram but something is wrong. In theory, NNLSChroma is waiting for meanTuning as VECTOR_REAL when meanTuning returned by LogSpectrum is a MATRIX_REAL defined by a N x nBPS VECTOR_REAL, a vector for each frame.
So, I have tried to sum each nBPS x 1 VECTOR_REAL as original NNLSChroma does, but the resulting chromagram, bassChromagram and tunedLogFreqSpectrum are filled with zeros.
I was revising this C++ example, but I cannot get similar results in Python
https://github.com/MTG/essentia/blob/master/src/examples/standard_nnls.cpp
Here my code:
Please, can you provide a Python example or any clarification in my code to compute these features?
Thanks in advance,
XL
The text was updated successfully, but these errors were encountered: