def compute(audio, pool, options):
    defaultStats=['mean', 'min', 'max', 'var', 'dmean', 'dvar', 'dmean2', 'dvar2', 'value']
    aggPool = essentia.PoolAggregator(defaultStats=defaultStats)(pool)
    descriptors = aggPool.descriptorNames()
    profile = 'music'

    INFO('Computing High-Level descriptors...')

    if profile == 'music':
        # Excitement
        excitement(aggPool)
        # Excitement
        intensity(aggPool)

    INFO('100% done...')
def computeSegments(audio, segments, extractors, megalopool, options):

    sampleRate = options['sampleRate']

    for segment in segments:

        segmentName = 'segment_' + str("%02d" % segments.index(segment))

        if options['verbose']:
            print 'Processing', segmentName, 'from second', segment[
                0], 'to second', segment[1]

        # creating pool...
        poolSegment = essentia.Pool()

        # creating audio segment
        audioSegment = audio[segment[0] * sampleRate:segment[1] * sampleRate]

        # creating the pool
        #poolSegment.setCurrentNamespace('metadata')
        #poolSegment.setGlobalScope([ 0.0, len(audioSegment) / sampleRate ])
        poolSegment.add('metadata.duration_processed',
                        float(len(audioSegment)) /
                        sampleRate)  #, poolSegment.GlobalScope)

        # process all extractors
        options['computed'] = []
        computeAllExtractors(extractors, audioSegment, poolSegment, options)

        # remove unwanted descriptors
        wantedStats = cleanStats(poolSegment, options)

        # adding to megalopool
        segmentScope = [segment[0], segment[1]]
        poolSegmentAggregation = essentia.PoolAggregator(
            exceptions=wantedStats)(poolSegment)
        #megalopool.add(segmentName, poolSegment.aggregate_descriptors(wantedStats))#, segmentScope)
        addToPool(segmentName, megalopool, poolSegmentAggregation)

    return megalopool
Example #3
0
def compute(profile, inputFilename, outputFilename, userOptions = {}):

    # load profile
    profileDirectory = __file__.split(os.path.sep)[:-1]
    profileDirectory.append('profiles')
    profileDirectory.append('%s_config.yaml' % profile)

    try:
        # try to load the predefined profile, if it exists
        config = open(os.path.sep.join(profileDirectory), 'r').read()
    except:
        # otherwise, just load the file that was specified
        config = open(profile, 'r').read()

    options = yaml.load(config)
    mergeRecursiveDict(options, userOptions)

    # which format for the output?
    format = options['outputFormat']
    if format not in [ 'xml', 'yaml' ]:
        raise essentia.EssentiaError('output format should be either \'xml\' or \'yaml\'')
    if format == 'xml':
        xmlOutput = True
    else:
        xmlOutput = False

    # we need this for dependencies checking
    options['computed'] = []
    options['generatedBy'] = {}

    # get list of extractors to compute
    extractors = options['extractors']

    # create pool & megalopool
    pool = essentia.Pool()

    # load audio file into memory
    audio = loadAudioFile(inputFilename, pool, options)

    # preprocess audio by applying a DC filter, normalization, etc...
    # preprocessing is a special step because it modifies the audio, hence it
    # must be executed before all the other extractors
    audio = preProcess(audio, pool, options, 'metadata')
    options['globalPreprocessing'] = options['preprocessing']
    del options['preprocessing']

    # process all extractors
    computeAllExtractors(extractors, audio, pool, options)

    # process segmentation if asked
    if options['segmentation']['doSegmentation']:
        segments = segmentation.compute(inputFilename, audio, pool, options)

    # remove unwanted descriptors
    wantedStats = cleanStats(pool, options)

    # add to megalopool
    #megalopool = essentia.Pool()
    scope = [ 0.0, len(audio)/options['sampleRate'] ]
    #megalopool.add('global', pool.aggregate_descriptors(wantedStats))#, scope)
    megalopool = essentia.PoolAggregator(exceptions=wantedStats)(pool)
    # special case for spectral contrast, which is only 1 matrix, therefore no
    # stats are computed:
    spectral_contrast_stats(megalopool, 'lowlevel.spectral_contrast', wantedStats)

    # plotting descriptors evolution
    try:
        if options['plots']:
            import plotting
            plotting.compute(inputFilename, audio, pool, options)
    except KeyError: pass

    # compute extractors on segments
    if options['segmentation']['doSegmentation']:
        if options['segmentation']['computeSegments']:
            if len(segments) == 0:
                megalopool.add('void', [0])
            else:
                computeSegments(audio, segments, extractors, megalopool, options)

    # save to output file
    essentia.YamlOutput(filename=outputFilename)(megalopool)