Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
I am planning to implement a mobile guitar tuner app. I did an initial research and found out some commonly used methods for pitch detection such as fast Fourier transformation , autocorrelation ,etc.
I have also found out that FFT is not a very good mechanism to detect frequency.
Since there are 2 parts in this project which is detecting the frequency of a guitar string and matching that frequency with the frequency which the string should be in,i thought of using an already implemented class library for detecting the frequency of a string.
I currently have no idea how tough this project will be, so my question is which part of the project is tougher? Is it matching the 2 frequencies or detecting a frequency of a string ? Also is there a way to use the FFT but at the same time get the accurate frequency of the string.
Thank you for your time.
The TarsosDSP project, a java audio processing library, contains several pitch detection algorithms. You can test them using the provided pitch detection example, an see which one works best in your case. The source code can be found on the TarsosDSP github page
The library is open source and available on Android. I think it is a good match for your application.
To match a frequencies to a target frequencies, i would convert both to the absolute cents scale (or MIDI cents). 100 cents equals a semi-tone. You then can round up to the nearest 100 to get the assumed target tone. Consult this page to convert frequencies in hertz to cents
There are numerous libraries that can help you do this.
The phone mic should be able to detect the audible spectrum you want
Detecting frequency is the first part, FFT should be able to do this
Transferring frequency to pitch is something you'll have to think about
matching frequencies is just the second part
Here's a good start:
Frequency detection and pitch tracking in java
FFTW is the 'fastest fourier transform in the west', and has some Java wrappers:
FFT JAVA library
Related
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 years ago.
Improve this question
I used Android Speech-to-Text API (Recognizer Intent), for recognition of the word said by the user. But the problem is that it returns the accurate word after autocorrection. I want it returns the exact word (without correction) said by the user. Please suggest me any other android library for this feature or how can I got my feature inside the android inbuild speech to text API.
I also saw the google API for this but that is paid And that is also AI-based.
I want it to return the exact word (without correction) said by the user.
I think you misunderstand what speech recognition is capable of doing.
A speech recognizing system is only capable of recognizing an uttered word as being one of a number of possible words. It doesn't ... and cannot ... tell you with 100% accuracy what the speaker actually said.
This applies to any speech recognition system, including a human listener. (How many times have you had to ask someone to "Say that again please" ?)
The only way to determine with absolute certainly the exact words that were spoken is to ask the person who spoke them to type them in! (And even then, they may not give you a 100% accurate answer, in some cases.)
In short, what you want is not possible. Software cannot do it. Humans cannot do it, even if they believe that they can1. You need to adjust your expectations.
1 - The Two Ronnies - Four Candles sketch
Identifying / recommending better (more accurate) speech recognition software or services is off-topic.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
I am new to the image processing discipline, currently I am working on an activity to find the path in a given floor plan image using java. I could understand & implement a plain Dijkstra or A star algorithm in java to find the shortest path between nodes that can work on hard coded values for nodes & edges. But I have no idea on how to do the same with image file as input.
I could not find any much detailed or comprehensive solution for this on web surfing. Any idea on how to achieve this. Kindly help.
If the walls on your plan are black, and the space is white, then use the white pixels as the space in which you can search using your algorithms.
be aware that:
The plan images could need some preprocessing, like adjusting brightness/contrast and/or converting into lower resolution picture.
If the plans are more complicated than that, ie. you need to take into account some special signs or structures on them then you need to do more complicated conversion/preprocessing and/or image recognition, using some special tools, maybe even some AI.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
I'm having trouble understanding the concept of using FFT to calculate frequency changes. I've been scavenging through a ton of articles on this concept but it's still confusing me. I found a Stack Overflow article about the steps to take to calculate the frequency, but I'm still a little bit confused on exactly what to do in Java.
Sounds like you need to start way back with some general concepts. An FFT is just a fast DFT. A DFT uses Fourier decomposition on a set of sampled data. So first you need to understand what a waveform is, what a sinusoid is, what a frequency is (and is not the same as a musical pitch), and how Fourier's theorem works to relate the two. Then how to compute a DFT on a window of a sampled waveform, and how to interpret the complex result vector. Then how to do it fast in Java.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
Hough Transform Algorithm is one of the algorithm use for text line detection and edge detection.
Does Hough Transform Algorithm can be use for Detecting text in Images?
What must be the process or implementation in java for this question? or It must be have another algorithm to make it possilble?
Hoping for positive response.
Hough transform was initially designed to detect straight lines in an image, but later modifications have been proposed to use similar logic to detect circles or other shapes. However letters and text is a bit more complex and can(most of the time) be described with a simple shape. Thus applying Hough transform directly is not possible.
However Hough transform can be used as part of the solution. For instance you can detect straight lines and this can help you detect separate letters or to recognize some special letters. Also sometimes Hough can be used to detect text direction which is a challenging problem on its own.
Text recognition is a very interesting problem and many different solutions have been proposed. In fact there are whole courses dedicated to that and new approaches appear often. I personally like approaches that use neural networks the most. Have a look here for instance.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 9 years ago.
Improve this question
I am looking into finding algorithm within the area of clustering or machine learning which will facilitate or creating a typical data reading for a group of readings. The issue is that it must facilitate time series data; thus some traditional (k-means) techniques are not as useful.
Can anyone recommend places to look or particular algorithms that would provide a typical reading and relatively simple to implement (in Java), manipulate and understand?
As an idea. Try to convert all data types into time, then you will have vectors of the same type (time), then any clustering strategy will work fine.
By converting to time I actually mean that any measurement or data type we know about has a time in its nature. Time is not a 4-th dimension, as many think! Time is actually 0-dimension. Even a point of no physical dimensions which may not exist in space, exists in time.
Distance, weight, temperature, pressure, directions, speed... all measures we do can be converted into certain functions of time.
I have tried this approach on several projects and it payed back with really nice solutions.
Hope, this might help you here as well.
For most machine learning problems in Java, weka usually works pretty well.
See, for example: http://facweb.cs.depaul.edu/mobasher/classes/ect584/weka/k-means.html