anthonydickson / aurallearner Goto Github PK
View Code? Open in Web Editor NEW'Aural Learner' is an app which aims to teach aural music theory.
'Aural Learner' is an app which aims to teach aural music theory.
The pitch detector class from the new library that we are using works fine for the most part, but if you call stop()
on an AudioDispatcher
instance created via the AudioDispatcherFactory
and then try to start a new thread using the same instance, the AudioDispatcher
instance does not produce any pitch readings.
It seems that this is caused by the AudioRecord
instance used internally is not being released properly, but I'm not quite sure.
need to make pitch detector check all octaves so that the vocal range of the singer does not matter, just the how close they were to the note (irrespective of the octave)
E.g. E4 should be considered the same as E5.
Grader should be updated so that it uses the new pitch detection library. Examples of how this library can be used can be found in the PitchMatchingExercise class.
Check if it is viable in android sdk, or potentially iOS
When a user sings an interval, they should be at least shown the notes they sang. They could also be shown some measure of how far the notes they sang were from the target notes (for example, distance in semitones or cents).
I want calculate an accuracy metric that gives a score between 0 and 100 for the user's singing.
This line of code does not do this properly, fix it pls.
It doesn't hear the user's input correctly occasionally.
It seems to struggle with the shorter commands such as 'help', 'terminology', and 'about'; but seems to be fine with longer commands such as 'open melodies hard help'.
We need to ignore the user sung octave and just grade to target note
All notes used by exercise should be within a a generally singable range
The user exercise should play the exercise, then have the user sing it from memory
After, it should be graded
Grading it should include telling the user wether they were usually above pitch, below pitch or
indeterminate
It should give an overall score of Excellent, good, bad. Excellent being audibly the same, good being close but some off pitches, bad should be unacceptable.
The next part should play the user input against the demonstration. The idea being that pitch axis theory should give good feedback. The user should be able to tell how close they were given the frequency of the fluctuations
to reduce brain pain
see if we can find all the necessary libraries/resources/information and compile as much as
we can, maybe put it in a Word document and put it on Github
I think we should try find some way to automatically generate the javadocs and push them to git, maybe this could be done with travis on a successful build?
Let me know if you think this is either overkill or not thorough enough.
(Note: when I say “check that x does the math right”, I mean we give it a certain frequency we know the associated cents etc for, and we check that it gets those values as it should, in the case of note, or other numbers for other contexts)
Note
-check that sending an invalid frequency throws an exception
-check that sending an invalid String throws an exception
-check that each constructor calculates the correct values for each global variable (including through generateTone())
-check that getNoteLength returns the note length given to create the note
-check that octave does the math right
-check that halfStepDistance does the math right
-check that frequency does the math right
-check that both centDifference methods do the math right
-check that both centDistanceClamped methods do the math right
-check that compareTo gives the right number of half steps
-check that equals knows what’s a note and what’s not
-check getNameIndex, getFrequency, getOctave, getCents, getDuration, getName(), getName(bool) and toString all return the correct variables
-check that setNoteLength correctly alters each relevant variable
-maybe check the log tag for play is accurate (I don’t know how we’d do a unit test for a hardware thing)
-if we check the log tag for play we’d also check the log tag for onDone
Grader
-check that both constructors create the correct variable values (which would inherently also check reset since it’s called by the empty constructor)
-check that getScore returns the right variable
-check handlePitch’s log tag for invalid frequencies and check that it adds to frequencyReadings correctly
-maybe check start’s log tag
-check that playNextNote gets the correct next note in the sequence
-check log tag for onNoteDone for valid and invalid frequencyReadings sizes
-check log tag is accurate for onSequenceDone
-check calculateScore’s log tag is accurate and that it does the math right
-maybe check log tag for stop
IntervalExerciseCreator
-check that the constructor creates the correct interval
-check that pickInterval returns the correct interval
MelodyExerciseCreator
-check that the constructor creates the correct melody
-check that pickMelody returns the correct melody
-check that scaleGenerator generates the correct scale
MenuAction
-check that the constructor sets the Strings properly
PitchDetector
-check that both constructors set all of the global variables properly
-check that start sets state to State.BUSY
-check that stop sets state to State.READY
Playable
-check that the constructor sets isPlaying to false without issue
-check that delegate is no longer null when setDelegate is called
-check that stop (and therefore onDone) set isPlaying to false without issue
TextToSpeechManager
-check that calling the constructor makes instance no longer null and returns it
-check that init sets the global variables properly
-check logs for restart, close and pause are accurate
Utilities
-check that it returns -1 when something doesn’t exist in the ArrayList
-check that it returns the correct index when something does exist in the ArrayList
VoiceRecognitionManager
-check that the constructor makes the global variables what they’re meant to be
-check that getInstance makes instance no longer null and returns it properly
-check that init sets parentContext properly
-check that setupRecognizer sets up recognizer properly
-check that onPartialResults does nothing for null hypothesis
-check for accurate log tags with onTimeOut, onEndOfSpeech, onResult, handleHypothesis, switchSearch, onError, pause, resume, restart and close
-check that registerAction adds to the actions list without issue
IntervalsExercise
-at least check that onCreate makes everything not null anymore (I’m not sure how you’d check the listeners)
-check that startTargetPlayback, stopTargetPlayback, onPlaybackFinished, onGradingDone, startListening and stopListening set button visibility properly and set isListening to the correct value
-check that setTargetRoot and setTargetInterval set the global variables properly
PitchMatchingExercise
-for this one everything’s pretty much the same as IntervalsExercise with different method and variable names and maybe actually a couple things missing, so do the above
Instructions can be found here.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.