Faire un journal court pourquoi pas mais mettre les sources dedans serait quand même plus agréable pour ceux qui veulent lire ce que tu as fait :
packagecom.i2bp.taptempo;importorg.apache.commons.cli.CommandLine;importorg.apache.commons.cli.CommandLineParser;importorg.apache.commons.cli.DefaultParser;importorg.apache.commons.cli.HelpFormatter;importorg.apache.commons.cli.Option;importorg.apache.commons.cli.Options;importorg.apache.commons.cli.ParseException;importjava.text.DecimalFormat;importjava.util.Scanner;importjava.util.ArrayDeque;importjava.util.Date;importjava.util.Deque;publicclassTapTempo{staticdoublecomputeBPM(longcurrentTime,longlastTime,intoccurenceCount){if(occurenceCount==0){occurenceCount=1;}doubleelapsedTime=currentTime-lastTime;doublemeanTime=elapsedTime/occurenceCount;doublebpm=60.0*1000/meanTime;returnbpm;}publicstaticvoidmain(String[]args)throwsException{intprecision=0;intresetTime=5;intsampleSize=5;Optionsoptions=newOptions();Deque<Long>hitTimePoints=newArrayDeque<Long>();;OptionoptHelp=newOption("h","help",false,"Display this help message.");optHelp.setRequired(false);options.addOption(optHelp);OptionoptPrecision=newOption("p","precision",true,"Set the decimal precision of the tempo display. Default is 0 digits, max is 5 digits.");optPrecision.setRequired(false);options.addOption(optPrecision);OptionoptResetTime=newOption("r","reset-time",true,"Set the time in second to reset the computation. Default is 5 seconds.");optResetTime.setRequired(false);options.addOption(optResetTime);OptionoptSampleSize=newOption("s","sample-size",true,"Set the number of samples needed to compute the tempo. Default is 5 samples.");optSampleSize.setRequired(false);options.addOption(optSampleSize);OptionoptVersion=newOption("v","version",false,"Display the version.");optVersion.setRequired(false);options.addOption(optVersion);CommandLineParserparser=newDefaultParser();HelpFormatterformatter=newHelpFormatter();CommandLinecmd=null;try{cmd=parser.parse(options,args);if(cmd.hasOption('p')){precision=Integer.parseInt(cmd.getOptionValue('p'));if(precision<0){precision=0;}elseif(precision>5){precision=5;}}if(cmd.hasOption('r')){resetTime=Integer.parseInt(cmd.getOptionValue('r'));if(resetTime<1){resetTime=1;}}if(cmd.hasOption('s')){sampleSize=Integer.parseInt(cmd.getOptionValue('s'));if(sampleSize<1){sampleSize=1;}}}catch(ParseException|NumberFormatExceptione){System.out.println(e.getClass()+": "+e.getMessage());formatter.printHelp("TempoTap",options);System.exit(1);}if(cmd.hasOption('h')||cmd.hasOption('v')){if(cmd.hasOption('h')){formatter.printHelp("TempoTap",options);}if(cmd.hasOption('v')){System.out.println("Version: 1.0");}System.exit(0);}DecimalFormatdf=newDecimalFormat();df.setMaximumFractionDigits(precision);df.setMinimumFractionDigits(precision);System.out.println("Hit enter key for each beat (q to quit).\n");Scannerkeyboard=newScanner(System.in);keyboard.useDelimiter("");booleanshouldContinue=true;while(shouldContinue){charc;do{c=keyboard.next().charAt(0);if(c=='q'){shouldContinue=false;System.out.println("Bye Bye!\n");break;}}while(c!=10);if(shouldContinue){longcurrentTime=System.currentTimeMillis();// Reset if the hit diff is too big.if(!hitTimePoints.isEmpty()&¤tTime-hitTimePoints.getLast()>resetTime*1000){// Clear the history.hitTimePoints.clear();}hitTimePoints.add(currentTime);if(hitTimePoints.size()>1){doublebpm=computeBPM(hitTimePoints.getLast(),hitTimePoints.getFirst(),hitTimePoints.size()-1);StringbpmRepresentation=df.format(bpm);System.out.println("Tempo: "+bpmRepresentation+" bpm");}else{System.out.println("[Hit enter key one more time to start bpm computation...]");}while(hitTimePoints.size()>sampleSize){hitTimePoints.pop();}}}}}
# Sources
Posté par Mimoza . En réponse au journal TapTempo en langage Java. Évalué à 10.
Faire un journal court pourquoi pas mais mettre les sources dedans serait quand même plus agréable pour ceux qui veulent lire ce que tu as fait :