ooscc - open open sound control controller

  • Hello, I recently finished designing a open source/hardware controller that communicates over Ethernet via OSC (like the monome, but no USB cable and no monomeserial). The first one I built has 24 knobs and 8 sliders, but it will hopefully develop into a platform for an arbitrary number of analog and digital inputs and outputs. You can read about it (source, schematic, video and all) here: http://experimentalistsanonymous.com/ooscc

    -Colin

  • me likey.

    me likey a lot.

  • wow. that looks great.
    i look forward to seeing what the future of that project is.
    sounds like he has a hefty to-do list.

  • Such Great work! Site is bookmarked. will be checking it often...

  • That looks really interesting. I love that every project on experimentalistsanonymous is built into those rugged stomp-box enclosures :-) Great site by the way!

  • nice job :)

    i wonder about the networking. does it support dhcp? is there a way to implement http://en.wikipedia.org/wiki/Zeroconf or apples bonjour?

    that would be it. simply plug and play :) would love it!!!

  • colin, wonderful project! i'm very happy to see this prototype, and glad to see something assembled in the good old breadboard.

    i also have questions about the networking. how does the ooscc know which IP address to send data to? granted there is no inbound OSC at the moment (i may be wrong?) for LEDs, motors, etc, but how would that be handled?

    also, have you checked out the MAKE controller? it's more complex because it's running an atmel ARM chip, but they also have a full OSC implementation up and running which is very good. it's all open source so it might have some nice tips.

    very, very nice work!

  • Thanks for the kind words all!

    stigi - No DHCP (yet). You literally give it an IP and Mac address of your choosing in the source code, and it goes on that. DHCP is hard to implement because there's no UI at all.

    Tehn - Yes, I'm afraid multilayer SMD boards are a long way off! I also wanted to make it very DIY friendly, hence the perfboard. Here's the general setup -

    1) Plug in ooscc via Ethernet
    2) Send it a /init message (because you know the IP, mine is 192.168.1.10 for now, and the listening port, all coded in by you)
    3) If the ooscc is ready it sends back /boundto ip address

    Then, all messages from then on are sent to the IP address that the ooscc is bound to. You can also send the ooscc /adc and it will dump the adc values, or say /adc 2 3 29 and it will dump the 2nd, 3rd and 29th adc values.

    A LCD screen of some kind would be useful eventually, especially if you want to start getting into plugging in many of them across a network, or across the world or something. Then some DHCP and heavier ethernet stuff would be useful (but the enc28j60 is pretty primitive).

    I was steering clear of the MAKE controller just because I didn't understand how it worked fully. I am very much an advocate of building things that you understand, rather than trusting that it works based on someone else's work... and the MAKE has a lot of gizmos. I really wanted to strip it down to just a uC, ethernet interface, and "controller" interface, so that it was easy to grasp (both for me and others). Just because there are a lot of sites out there that explain how to interface with MIDI in easy to understand detail... there's not a lot out there about how to simply send and receive osc messages from a little circuit of some kind. The uOSC project is also doing a similar thing, but it uses a heavier embedded system too (I like to strip down as much as possible, and allow others to build up if needed). Hopefully one day it will just be sort of a library of code for use on microcontrollers, rather than more of a discrete circuit like this.

    -Colin

  • just thought I'd add to the general consensus that this is excellent stuff! Very nice to see an atmel-based osc implementation.

  • i agree with you completely about the MAKE controller. i do enjoy stripping off gizmos, though. again, nice work.

  • Thanks again, hopefully within the next month or two I will be finishing up the digital in/out design, which will undoubtedly end up quite like a monome (and will probably use the same press messages, so I can leech all of the monome community's hard work!)

    -Colin

  • Hi Colin, very nice project! I wonder if it would be possible to use an Arduino since both projects share the same ATmega 168... I think this is also a real nice candidate to combine with the prototyping modules I'm working on.. I hope to launch the machinecollective project on 08-08-08..

    Would be cool to add analog and digital I/O modules on the fly... add an LCD module for testing/debugging...

    See attached picture of my latest prototypes. The modules are made of a hi-tech aluminium sandwich material: light, flexible and very rigid when assembled! The modules with transparent sides are just prototypes, the 2mm acrylic doesn't work as well as the aluminium sandwich material...

    960 x 240 - 100K
  • xndr, your stuff looks really great. A modular system is the eventual goal, VERY (actually scarily so) much like yours. The reason I have been staying away from Arduino is the same as for why I stayed away from the MAKE controller... just stripping down. The Arduino embeds too much for my tastes, and though it's an awesome, excellent platform, it's just that, and I'd rather have my platform be pretty "OSC controller" specific. Just preference though, and I don't doubt that the ooscc stuff could be easily transported to arduino (can you compile C onto arduino?) Also, there's a pretty big price increase, even though the arduino definitely makes it easier. I just figure for others, and also for future possible products. Anyways, love the stuff, do you have a site? I'd love to coordinate something.

    -Colin

  • @eacolin
    i like the name ooscc very much!

    just read http://tuxgraphics.org/electronics/200606/article06061.shtml#06061lfindex9 about filters and broadcast.
    maybe it would be a good idea to broadcast the ip adress of the unit as long as there's been no /init recieved yet. so the box can draw attention on itself. the question is, can we recieve that broadcast via max/msp ? i'm no expert on this. but i like the idea of plug and play ;)

    also a dynamic IP changing would possibly make sense. maybe to cycle the most common local network IPs while broadcasting.... just an idea.

  • @xndr, colin,

    i think we might each be onto something similar. i've dreamed of a modular system sort of like the machine collective ones, but with dedicated modules that also generate and process sound (for laptop-less performance or at least resource management).

    lately i've been brainstorming a sort of unisex connection jack (maybe with conductive fabrics?) so that you wouldn't have to worry about the right gender of a parallel plug or an ethernet turnaround...

    i also like the idea of stripping things down to their bare minimums on the uCs. i might try my hand at making an RGB controller interface out of an hc12 next quarter... the best part about those is that freescale will give you samples for free =)

  • The prototyping modules are part of the MachineCollective.org project, featuring open source community driven hardware and interfaces for several popular platforms, so the ooscc project would be a really nice addition to the list of midibox, arduino, sanguino and monome.

    There will be a selection of standard modules, with or without electronics and custom boxes can be made on demand for a small extra fee.

    A couple of modules will have an arduino compatible device inside, to read sensors, digital I/O and are capable of communicating over I2C. The reason why I choose to support the Arduino platform is because it's real easy to program (for newbies) and there's a very large usergroup and codebase. Experts can use the ICSP header to program the device, others can use an usb-serial cable to program it using the Arduino IDE.

    The machinecollective site will go online on 08-08-08 so stay tuned ;-)

    @soundcyst: I have tried many types of (industrial) connectors, I have a big box of samples from all over the world, but I decided to stick with the infamous DB25 connectors. Modules can have up to 4 of these, top/right male, bottom/left female, so modules can be endlessly connected.

    The DB25 connectors are reliable, cheap and very common so lots of standard cables at hand (doesn't everybody have a couple of these around the house?). They are also available with different options such as solder tags, idc (flatcable) connector, (angled) pcb headers, so connecting them to the guts inside the boxes won't be a problem!

  • @Stigi: The thing is, it already is basically plug and play. On all of the ooscc patches (take a look) there is an init subpatch which uses a metro object to basically send out an /init message every second, until it gets a /boundto reply. So really all you have to do is plug in the ooscc, and the max/msp sits there and tries to communicate with it until it does - then it's bound and it stops sending /init messages. Of course it would be useful if you didn't have to manually enter the IP but I don't think max can get that info. The ooscc can't send messages directly to the computer until it has received a message, unfortunately. There may be a way to do that but it's beyond me at the moment!

    @soundcyst: I was thinking one "module" would be a little box that allowed you to load in osc->midi mappings. For example, you could program (nonvolatile) memory to know that whenever it received a /oscillator/frequency 440 .25 message, send a noteon A4 with velocity 32. That would definitely start to reduce the need for a computer. ALso of course osc to CV. Oscillators/shapers etc might be sort of a different project though, because control and generation are sort of different realms. But they're married so I imagine a similar system could be used for both.

    @xndr - I'd love to be able to interface with your modules. Why I2C? Are you going to give out more info about the inner workings - I'd love to make the ooscc compatible directly in some way, but I think we were heading different directions (mine involved a lot lot lot of 4051's, no serial interfaces to worry about). Arduino definitely has the advantage of a community and ease of use, so I'd love to try to make the ooscc as compatible with your stuff as arduino would be. Are you planning on machining the buttons or buying monome/sparkfun pads? I always imagined having a couple different sizes (as you do) but the smaller sizes would have more buttons per module, maybe 5x5 or 6x6 instead of 4x4. Also - are those encoders or pots? Any motorized stuff yet?

    -Colin

  • Hi,

    i'm joining to say very nice work eacolin.

    I'm no max/msp user but puredata user.
    I stumble upon this thread at the time when i'm currently implementing some osc between computers. Anyway, why not make max (or puredata) do sort of a portscan on an ip range, like:

    connecting to ip -> sending "/init" -> waiting for a response within a timeout
    -> closing connection, trying again with next ip
    or -> received "/boundto" -> registering ip + other stuff.

    I'm no expert at all but this is the model i'm using to bound my 2 lowcpu laptops one to another (they just have to be in team so they can face the monome power ;) ). I set the ip range to 20 adresses (yes, i expect some cool jams with my friends!), and each connection attempt takes about 50ms, so that's not a big deal for me. In my system, you can do this or manually enter the "slaves" ips too.

    Very interesting work, will keep an eye on it too.

  • Thanks for the kind words weng. That sounds like a good idea - but if you know the range of ip addresses shouldn't you probably also already know the ip address itself? Unless you're on a simple local network/router (in which case you could just scan 192.168.1.100 and up, or whatever your config is). In general I need to come up with a sort of "monomeserial" for the ooscc.

    -Colin

  • >> In general I need to come up with a sort of "monomeserial" for the ooscc.

    That's why we're working on the IOflow project.

    Somehow I missed your reply from aug 5, so here's my answer:

    >> Why I2C?
    It allows easier communication between modules. Every module should ultimately have some type of logic inside, my choice would be the SMD ATMega 168 to be Arduino compatible. The cool thing about I2C is that each device has its own address, so you can build a network of up to 120 devices/modules...

    But you don't *have* to use I2C, I have chosen the DB25 connectors for inter-module connections so that you can easily map every pin of your Arduino or other logic/IC to other modules, 25 should be plenty, right?

    >> Are you planning on machining the buttons or buying monome/sparkfun pads?

    Yes, yes and yes :-) You can choose to use whatever you prefer. The "downside" of the silicone buttons is that they're configured in a matrix, so you'll have to add additional logic to read those. I'm not really machining the buttons, but I'm working on a couple of tact switch / pcb solutions with/without led. I think 4x4, 5x5, 8x8 and 10x10 will cover a wide range of projects...

    The other thing I'm trying to figure out is how to make combined options easy for everyone, e.g. making a panel with 8 switches, 8 sliders, 8 rotary pots and 8 leds.. or whatever other combo...

    >> Are those encoders or pots?
    Those are pots, but I'm working on something way cooler! You will forget about pots, encoders and motorized stuff ;-)

  • Sheesh - cooler than pots encoders and motorized sounds VERY intriguing! Looking forward as always.

    -Colin

  • hi,
    is the site down?

  • Thanks for the heads up - server glitch - will be back up shortly.

    -Colin

  • @eacolin
    is your site down again? i just visited it some days ago, now it says it's down temporarely. i would really like to get to know more about your oosc project!

    @xndr
    any news on your prototyping modules? i posted some noob questions in your machinecollective forum :)

  • Don't have enough money to buy some real estate? Worry not, just because it's available to receive the credit loans to work out such problems. Thence get a college loan to buy everything you require.

  • When you're in uncomfortable position and have got no money to move out from that, you would require to take the home loans. Because it will help you for sure. I take short term loan every single year and feel great because of that.

  • spam bump

  • freestyle rapper