示例#1
0
def analsynthSineModelStreaming(params, signal):

    out = numpy.array(0)

    pool = essentia.Pool()
    fcut = es.FrameCutter(frameSize=params['frameSize'],
                          hopSize=params['hopSize'],
                          startFromZero=False)
    w = es.Windowing(type="blackmanharris92")
    fft = es.FFT(size=params['frameSize'])
    smanal = es.SineModelAnal(sampleRate=params['sampleRate'],
                              maxnSines=params['maxnSines'],
                              magnitudeThreshold=params['magnitudeThreshold'],
                              freqDevOffset=params['freqDevOffset'],
                              freqDevSlope=params['freqDevSlope'])
    smsyn = es.SineModelSynth(sampleRate=params['sampleRate'],
                              fftSize=params['frameSize'],
                              hopSize=params['hopSize'])
    ifft = es.IFFT(size=params['frameSize'])
    overl = es.OverlapAdd(frameSize=params['frameSize'],
                          hopSize=params['hopSize'],
                          gain=1. / params['frameSize'])

    # add half window of zeros to input signal to reach same ooutput length
    signal = numpy.append(signal, zeros(params['frameSize'] / 2))
    insignal = VectorInput(signal)
    # analysis
    insignal.data >> fcut.signal
    fcut.frame >> w.frame
    w.frame >> fft.frame
    fft.fft >> smanal.fft
    smanal.magnitudes >> (pool, 'magnitudes')
    smanal.frequencies >> (pool, 'frequencies')
    smanal.phases >> (pool, 'phases')
    # synthesis
    smanal.magnitudes >> smsyn.magnitudes
    smanal.frequencies >> smsyn.frequencies
    smanal.phases >> smsyn.phases
    smsyn.fft >> ifft.fft
    ifft.frame >> overl.frame
    overl.signal >> (pool, 'audio')

    essentia.run(insignal)

    # remove short tracks
    freqs = pool['frequencies']
    minFrames = int(params['minSineDur'] * params['sampleRate'] /
                    params['hopSize'])
    freqsClean = cleaningSineTracks(freqs, minFrames)
    pool['frequencies'].data = freqsClean

    # remove first half window frames
    outaudio = pool['audio']
    outaudio = outaudio[2 * params['hopSize']:]

    return outaudio, pool
示例#2
0
out = np.array(0)
loader = es.MonoLoader(filename=inputFilename, sampleRate=params['sampleRate'])
pool = essentia.Pool()
fcut = es.FrameCutter(frameSize=params['frameSize'],
                      hopSize=params['hopSize'],
                      startFromZero=False)
w = es.Windowing(type="blackmanharris92")
fft = es.FFT(size=params['frameSize'])
smanal = es.SineModelAnal(sampleRate=params['sampleRate'],
                          maxnSines=params['maxnSines'],
                          magnitudeThreshold=params['magnitudeThreshold'],
                          freqDevOffset=params['freqDevOffset'],
                          freqDevSlope=params['freqDevSlope'])
smsyn = es.SineModelSynth(sampleRate=params['sampleRate'],
                          fftSize=params['frameSize'],
                          hopSize=params['hopSize'])
ifft = es.IFFT(size=params['frameSize'])
overl = es.OverlapAdd(frameSize=params['frameSize'], hopSize=params['hopSize'])
awrite = es.MonoWriter(filename=outputFilename,
                       sampleRate=params['sampleRate'])

# analysis
loader.audio >> fcut.signal
fcut.frame >> w.frame
w.frame >> fft.frame
fft.fft >> smanal.fft
smanal.magnitudes >> (pool, 'magnitudes')
smanal.frequencies >> (pool, 'frequencies')
smanal.phases >> (pool, 'phases')
# synthesis