Progress Report 2, technical
It's been a week and a half and we are now in that phase of the project where the project begins to expand before your eyes. Quick recognition of pitch is seeming more complicated than I originally thought: the lower frequencies that people normally sing at are in the 50 Hz range. A simple Fourier Transform rule says that at that speed the best you might expect to resolve the frequency in 0.1 seconds is on the order of 10 Hz, which is a spread of at least a half note on either side. For a voice with the right timbre (harmonic, and it looks like most Western musical instruments are more or less harmonic in timbre) I guess that you can use the spacing of the partials (I think partials is the word they use for non-fundamental frequencies). In addition it is looking like a simple Fast Fourier Transform may not be the best way to go and also like a typical person's voice may have a fairly broad spread around the fundamental frequency in the first place. I could go on but you get the picture that there is still a little learning to do in terms of acoustics, signal processing, and human perception of pitch.
On the more technical side of programming things are moving forward. It looks like there are a ton of resources out there to help you begin processing digital audio with Port Audio being just one. Sun has a very well documented sound API in Java so we are leaning toward Java. We've heard it said that Java applications can be slow, but the proof is in the pudding for our application. I figure that once we have something written it shouldn't be too hard to take to another language and compiler should that prove necessary.
This is super interesting and fun from a robotics standpoint as well as from an applications standpoint. I'm starting to realize that computers now have quite a few input and output ports that could be used for a lot of different things. How would you like to control a remote robot using your sound card? Or a USB port? Or your Ethernet port? Or look at the huge amount of information that is communicated to a computer's monitor. Right now in the lab you have to buy special cards if you want to have analogue and digital input and output ports to control devices like the microscope that I was adapting. I think it could all be done through the ports that the computer already has. And with a proper adapter you could get all kinds of signals into and out of your computer very quickly and simultaneously. I think that giving the computer senses (good sources of local information) and hands (good ways to get things done) is a neat concept. The cool thing is that nothing need be changed about the standard pc to add these extra functionalities. It would only take a little external hardware and some software. And it doesn't take too much imagination to see how all of this can work toward inexpensive medical devices . . . the goal would be to have a million devices that all work off of one adapter. Just change the device like you change out one color of lego block for another.
On the more technical side of programming things are moving forward. It looks like there are a ton of resources out there to help you begin processing digital audio with Port Audio being just one. Sun has a very well documented sound API in Java so we are leaning toward Java. We've heard it said that Java applications can be slow, but the proof is in the pudding for our application. I figure that once we have something written it shouldn't be too hard to take to another language and compiler should that prove necessary.
This is super interesting and fun from a robotics standpoint as well as from an applications standpoint. I'm starting to realize that computers now have quite a few input and output ports that could be used for a lot of different things. How would you like to control a remote robot using your sound card? Or a USB port? Or your Ethernet port? Or look at the huge amount of information that is communicated to a computer's monitor. Right now in the lab you have to buy special cards if you want to have analogue and digital input and output ports to control devices like the microscope that I was adapting. I think it could all be done through the ports that the computer already has. And with a proper adapter you could get all kinds of signals into and out of your computer very quickly and simultaneously. I think that giving the computer senses (good sources of local information) and hands (good ways to get things done) is a neat concept. The cool thing is that nothing need be changed about the standard pc to add these extra functionalities. It would only take a little external hardware and some software. And it doesn't take too much imagination to see how all of this can work toward inexpensive medical devices . . . the goal would be to have a million devices that all work off of one adapter. Just change the device like you change out one color of lego block for another.
0 Comments:
Post a Comment
<< Home