LoginLogin

Potential for SmileNet, a smilebasic based net service. (using sound analysis)

Root / Talk About Programs / [.]

CoinzReturnsCreated:
Update Video below
Spoilerhttps://www.youtube.com/watch?v=HeFgy8g6VKo
So that's what is working right now. It's kind of neat . I've been at this point with SmileNet for two days now. There's a slight issue with getting the letters to interprete uniquely. I'm going to attempt changing that as we speak. I'm just working on A and B right now. The issue mainly is that frequencies that are playing drop into the next 'listening' window, even as they are dying down. This dying down of audio causes the stopping sound part of a previously playing frequency to actually be interpreted (using zero crossings) as a totally different frequency so when playing for instance, the B tone into SmileBasic, as the tone stops: My algorithm seems to detect the tone at the next 'listening' window as a B input. This is input pollution and I haven't found a strong way to fix it yet without either creating extra delays between listens or somehow throttling it. There's a better solution and the solution I'm going to try next is pair-inputs. Pair inputs is a cool idea and I'm not sure it's widely used anymore but at one point or another it probably was. Basically you get initial input of a signal. Then you expect the same input to repeat once, to confirm that the signal is not lossy or bad. If you can't get a pair input that matches both times then you assume some interference, and start over. This is fine if operated by a human because the human can just repeat the input seeing that it failed the first time. For more broad and real-time applications it isn't an ideal way to deal with signal loss. I haven't gotten to dealing with the PC-end of things yet so perhaps after I do I can come up with a nice error-correction ratio. I'm considering using a sigmoid function on the pc end.. or better yet. An adjustable tone-frame rate. Yes.. that's right. An adjustable tone frame rate would allow SB to send the "same" data in the same tones backwards to the PC end. This tells the pc program "This is the signal I have. " The pc program can then compare the signal it used to the signal SmileNet's framework interpreted on that frame and issue a sync-wait. This sync-wait can be used to better tune the pc program and the SmileNet framework to work together in synchronicity. The goal this week is to get SmileNet to an input state that can allow me to type "Hello World" using my pc and to see the letters come up on the 3ds screen interpreted from a real time analog signal. if I can achieve this then I can move into trying to shrink the frame-window of the signal. This is strictly speaking, a time domain issue at best. So it's not going to be too hard to solve. It's been done a lot and there are a variety of solutions that are reasonably quick that do not require FFT. This means that probably on the 3ds end I'm going to try my hardest not to force people to use the dlc until I absolutely can't speed it up anymore. At which point the features will be available without dlc, but enhanced with dlc so you will have two options as a SmileNet user. Wish me luck. and yes eventually we will get SmileNet working with Twitch chat. ;)

Update Below: The word "Login" is seen typed into Smilenet's basic interface. I used my computer keyboard to do this at a blazing 1 letter every two seconds (roughly)
Spoiler
That's okay though because here's a hello World:
Spoiler
SmileNet is making headway. Basically after this test I can attempt now to speed up the input by (alot probably) The error ratio is going to go up with speed so I'll need to formulate a better error-checking thing than using pairing. Pairing is nice. Uh even with pairing right now at really high speeds it's very error-prone. I may modify the method smile-net uses but for the time being.. it's staying where it's at. If anyone has any questions about this let me know. I'm very pleased with myself that I even got this far. It's not practical yet.. but it is a proof of concept. also it still is somewhat error prone even at slower speeds. We have right now about one character a second.. It isn't horrible. It's not the greatest though. I'll try to speed it up. Still one character on a 3ds game can be used to represent a lot if you get creative (several bits infact) Which if you know anything about game-states you would have a byte table like this first message: 01010101 or whatever Then set the bits like so: 01001010 or however you want Where each bit in the byte actually represents 8 possible values in a truth table, telling the game (system) about a specific state. Ie what mode of online link you are using with someone else? Though yeahh it needs work. Keep posted. I mean.. you know.

Update Okay everyone who's been eager to see something real! Here is a ground-breaking proof of concept working. Spoiler below sorry for shaky cam
Spoilerhttps://www.youtube.com/watch?v=8TDGBl__154
Please enjoy!! This is still not fully humanly usable but i've optimized it as close as I can for tonight! I am PLEASED.

The implications of something like this are incredible, I admire your work here!

Update Okay everyone who's been eager to see something real! Here is a ground-breaking proof of concept working. Spoiler below sorry for shaky cam
Spoilerhttps://www.youtube.com/watch?v=8TDGBl__154
Please enjoy!! This is still not fully humanly usable but i've optimized it as close as I can for tonight! I am PLEASED.
That's pretty nice! *∞

The implications of something like this are incredible, I admire your work here!
Thank you :D

Update Okay everyone who's been eager to see something real! Here is a ground-breaking proof of concept working. Spoiler below sorry for shaky cam
Spoilerhttps://www.youtube.com/watch?v=8TDGBl__154
Please enjoy!! This is still not fully humanly usable but i've optimized it as close as I can for tonight! I am PLEASED.
That's pretty nice! *∞
Yeah I thought so too.. can't wait to get twitch chat running lol lol lol

Update WITH KEY Okay so this is just the key
7EENX3ZJ
You still need the pc program which, I'll upload later. For the time being anyone feeling adventurous can experiment with an online tone generator alternatively.. use your splitter and play music into it and watch the letters flow. (seriously check it out!) and no its not just random it really reads tones as letters. It now supports the space and newline keys. Have fun looking for "hidden secret messages" in music.

Awesome! I like this idea! I knew that something like this was possible!

Is process still being made on this, it has great potential!

Is process still being made on this, it has great potential!
Progress will be made when my math abilities improve a little. It doesn't seem like I have the math knowledge needed to apply the fft algorithm. I'll be working on it. Buying the fft dlc is also an option I might check.. I'm uncertain at this stage. o.0

So I'm currently working on something similar where it would be a plug-in to the 3ds and the computer would hook up to a server I'm currently trying to hook up. It looks like you're actually quite a bit ahead of me in the audio transmission. The grand plan of mine was to hook up a raspberry pi to work as a game style server (not a website server) and to be able to create an internet service, similarly to what you described. If you want to work together to where you handle the SmileBasic side and I handle the computer side then I would be more than delighted to do that. Cheers
I wouldn't mind doing that, but there's some issues with noise isolation that still make this a bit infeasible. Also.. a 3ds running smilenet would not be able to run a real time game and also do streaming unless this method of communication can be sped up in real time (at higher rates) with lower error ratios. The speed causes error ratios to spike dramatically. If I were to get the DLC for SmileBasic that includes the FFT library already I may not have as much of a problem but I wanted this to work for everyone without money. Anywho.. message me in the chat if you want to catch me I hang out there alot. I am currently in over my head right now with some other*ahem* projects nearing completion. One of them is a virtual machine that runs in SmileBasic soo yeah.. that'll be fun!!

I've considered doing something very similar, though personally I planned to reverse engineer the Petit Modem source, as that already has the fast data transfer algorithms created. Rei does grant permission on his site for people to reverse engineer and modify his code, so that shouldn't be an issue. I have emailed him to see if he'll release the source to his PC app (which I believe is written in VB.Net) but for now it's possible to decompile the .exe using .net decomplilers (and thankfully he uses English function names, so the code is fairly easy to follow) My main hurdle is I need to get/make a suitable cable for the two way comms - My laptop has a 4-pole combined mic/headphone jack, so it's not as simple as the regular splitter cables. My plan was just to allow a dropbox style "sync" between a local folder and a SB project folder - this way you'd just run the SB app and the PC app, then would be able to open up the files locally in your favourite text editor and paint programs, and have them converted/synced back to SB automatically. You could even pretty easily have run and debug options straight from the PC. I guess, the first person to get something that's actually usable at a decent speed should try and make their solution "plug-in-able" - I.e. keep their send/receive code as isolated as possible in its own library, so other tools can piggyback off it and add additional functionality.

I'm kinda stuck with PetNet so far so as a kind of side-project I'm currently working on SmileBasic Minecraft. I am making progress with Minecraft but if you could give me your sound-analysis code it would be much-appreciated. Thanks
I can't do that at the moment but I'll try to see what I can do... the sound-analysis code I'm using relies on specific frequencies though within a set range. It also relies on a pc program that uses pre-recorded audio samples, and each pre-recorded audio sample matches roughly that frequency range and represents a letter from A-Z.

Oh, okay then. I didn't understand how you were doing it at first but now that you have really explained it I can see some improvements that could be made. For one, I plan to ditch the whole frequency idea and use the ADC instead, which should allow for faster data transmission. However, I must admit that for text transmission your system seems pretty genius because if the signal strength decays it won't ruin the data.
That's because I use a frequency range instead of a specific frequency. I had to manually test what ranges were good, as well.

Cell phones have extremely poor quality audio. I doubt you'd be able to get any decent speeds that way.

Not to mention you would need to set up a dedicated cell service for that a network to exist

Not to mention you would need to set up a dedicated cell service for that a network to exist
Well seeing that there are currently no alternatives with even the slightest amount of practicality, I'd say this is pretty good. blah blah what is dedicated cell service mean
Eh... no. SmileNet is a better option. I mean a phone line hooked up to a computer handling the calls. (I’m pretty sure it doesn’t work exactly like that, but you need a receiving end) Direct access to the internet or through a PC connection, such as SmileNet, would work better.

Not to mention you would need to set up a dedicated cell service for a network to exist
Well seeing that there are currently no alternatives with even the slightest amount of practicality, I'd say this is pretty good.
Eh... no. SmileNet is a better option.
What does it even do so far? I don't really see that it does much of anything, and the concept is impractical. SmileNet isn't even released.
It’s more practical than using the audiojack and a phone for dialup. SmileNet isn’t released, no, but it ‘works’. Any concept for internet in SB is impractical imho.

Eh... no. SmileNet is a better option. I mean a phone line hooked up to a computer handling the calls. (I’m pretty sure it doesn’t work exactly like that, but you need a receiving end) Direct access to the internet or through a PC connection, such as SmileNet, would work better.
No, it would be compatible with standard dial-up infrastructure. So if you pay for 300 baud dial-up it is as simple as calling into the number, and connecting your 3ds. The network would not be handled by me, at least as of now.
Then who? Who is willing to set up a dial-up service for an obscure 3DS game?