package pl.piotrsukiennik.whowhen.processer.service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Component; import pl.piotrsukiennik.whowhen.backend.api.inner.processing.ProcessingRequest; import pl.piotrsukiennik.whowhen.backend.api.inner.processing.ProcessingResponse; import pl.piotrsukiennik.whowhen.backend.api.inner.processing.ProcessingService; import pl.piotrsukiennik.whowhen.backend.api.inner.util.AudioInfo; import pl.piotrsukiennik.whowhen.backend.api.outer.IBackendService; import pl.piotrsukiennik.whowhen.processer.mfcc.MFCCAudioFileProcessor; import pl.piotrsukiennik.whowhen.processer.transformer.IFeatureVectorsTransformer; import javax.annotation.Resource; import java.io.File; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author Piotr Sukiennik */ @Component( "processingServiceImpl" ) public class ProcessingServiceImpl implements ProcessingService { private static ExecutorService executorService = Executors.newFixedThreadPool( 4 ); private static Log logger = LogFactory.getLog( ProcessingServiceImpl.class ); @Resource private MFCCAudioFileProcessor mfccAudioFileProcessor; @Resource( name = "transformers" ) private IFeatureVectorsTransformer featureVectorsTransformer; @Resource private IBackendService backendService; @Override public void handle( final ProcessingRequest processingRequest ) { executorService.submit( new Runnable() { @Override public void run() { try { AudioInfo audioInfo = processingRequest.getConvertedAudioInfo(); File convertedAudioFile = audioInfo.getAudioFile(); List<double[]> mfccFeatures = mfccAudioFileProcessor.process( convertedAudioFile ); List<double[]> transofrmedFeatures = featureVectorsTransformer.transform( mfccFeatures ); ProcessingResponse processingResponse = new ProcessingResponse( processingRequest.getRequestIdentifier(), transofrmedFeatures, (double) audioInfo.getDuration() / transofrmedFeatures.size() ); backendService.notify( processingResponse ); } catch ( Exception e ) { if ( logger.isErrorEnabled() ) { logger.error( e ); } } } } ); } }