If An Audio Framework Falls Online, Does it Still Make Sound?

About a week ago I finished my first programming book ever. I finished reading and coding the projects in “Learning Core Audio” by Chris Adamson. I wanted to get that done before this past weekend. I attended CocoaConf in Boston solely because Chris was going to be there and do a full day workshop on Core Audio. I will talk more about my experiences in another post.

One of the last chapters was about OpenAL. OpenAL is a framework that allows the user to create three-dimensional sound. One of the few links hardcoded into the book was for their site, OpenAL.org. I wanted to get the programming guide to read later, so I went to the site. It was down. I checked it a few days later, same thing.

I emailed Chris to ask him if this was a known issue. The book is a few years old, which is forever in programmer years. He wasn’t aware of it being down.

We began to look into this issue. We knew it was down and it had been for a while.

So I did some digging into OpenAL and what the hell is going on with it.

It looks like it began as an open source project. It was embraced, extended, and taken over by a company called Creative Labs back about five years ago. Their last update on OpenAL was version 2.1. OpenAL is now a proprietary technology owned by Creative Labs.

For some reason a few years ago they stopped doing any work on it and they have killed it off. They cut off all links to developers using it and stopped updating OpenAL.org. It is still owned by Creative so no one can go in and purchase the domain, but it looks very much like what happens when a large company buys a patent for something that they want to sit on to prevent anyone else from implementing it.

Correction: I have since been told that APIs are not copyrightable. Anyone is free to write their own implements of the OpenAL spec. If you want to go and make your own variation on OpenAL as Apple has you are free to do so.

My limited experience with programming frameworks and languages is that once they are abandoned they eventually go away. Apple might still have that implemented within their framework, but if the platform isn’t going forward then it might change.

Also, did slightly more digging and there is a different industry standard: FMOD.

This is not open source. It is owned by Firelight Technologies, but it is still being supported and maintained. It is multi-platform and there is a programmer API that is free to mess around with but they ask that you pay them a license fee if you plan to make money off it.

There seems to be a flourishing developer community in gaming forums, so that is one place to look if one were inclined to do 3D audio programming. I think it is just a bunch of C and C++, so you drag, drop, and include it in your project.

I don’t know if this would replace OpenAL within the Apple frameworks, but I don’t have high hopes for OpenAL. I am just very happy to know that it didn’t leave a vacuum. I was concerned that 3D audio was being abandoned totally and that would be a tragedy. I know there are a limited number of audio nerds out there in the world, but I am one of them. I aspire to accomplish some awesome stuff with audio and I am stoked to know that this possibility isn’t closed to me quite yet.

Chasing the Dragon

I am slightly concerned about my future at this point in time.

I am on my (hopefully) last semester of school. I am taking an iOS class, a JavaScript class, and a Java Class.

Each of these classes offers a different future.

JavaScript offers the future of doing web development. Web development is still very huge. Any business worth its salt has a website. Many people are developing apps for the web and using things like Phonegap to use JavaScript to create both iOS apps and Android apps.

Speaking of Android, those apps are written in Java. We currently have a mobile development degree geared towards Android where you take Java and Android development classes. Android is taking over a large portion of the market and Java is still very highly in demand at large companies in the Madison area who specialize in health care.

I feel I am at a crossroads. I know that the point of the programs at school is to make me as marketable as possible. I know enough different things that I should be able to get an entry level job somewhere doing one of these things.

7 of Cups

So many choices, but until you pick one, it’s all vaporware.

I feel paralyzed by choice.

I feel very much like this Zen Pencil’s quote. I know this might cost me a few jobs, but I do Tarot card readings and I am constantly fighting with the philosophy of this card.

The basic meaning of both of these references is the idea of choice. You have limitless possibilities, but once you take one step towards achieving one of these possible futures the other ones vanish.

You must make a choice. You might make the wrong choice. If you do, all other possibilities disappear. You could be the next Steve Jobs or you could make a bad choice and be no one.

I feel like I am supposed to keep my options open. I know I should do my homework like a good girl, keep as many choices open as I can, and look for whatever opportunity presents itself.

I can’t do that right now.

I want to learn Core Audio.

My first degree was in Journalism. I was a newscaster at a community radio station for three years. The first time I placed the headphones on my ears and heard my voice through the headphones over the air I knew my life had changed.

Over the years I lost my affection for news, but never for audio. I went back to school to learn audio engineering. I loved working with it. Things did not work out and I decided to go back to school to learn programming. I figured I made a bad bet on a disappearing technology and it was time to grow up and learn a real skill.

About a year ago I learned about Core Audio. I sort of knew that the programs I used for audio engineering were written in code, but it never really occurred to me that I could acquire the skills to write one of my own.

I am at a quandary. I love audio. I feel working with audio is my calling. I have felt that way for nearly two decades. So far my gut has not paid off.

How many levels of abstraction do I need to get to before I reach the right one? I feel like I keep doubling down on a bad bet assuming that it eventually has to turn around for me.

I feel wary. Everyone tells me if I master this one skill that I can write my own ticket and make a lot of money. I have heard this before. It has never paid off.

How many times do I believe what I hear before realizing that it is wrong?

I can’t ignore my gut. It tells me to keep moving forward. I am ignoring my classwork to learn audio programming. My rational brain tells me to learn Java and get a nice 40-hour-a-week healthcare job with two weeks of vacation and try to have a normal life. My gut tells me to keep moving forward with audio programming. Guess which one I am listening to.

Audio Queues and Audio Units

I am working on doing a Core Audio project for two of my classes this semester. I was supposed to do an internship, but nothing panned out. I am also supposed to work on creating an app to put on the Apple App store for my Professional iOS development class.

Currently I am working my way through the book. I am trying to get all the way through before October 23. I won a ticket to CocoaConf (thanks guys!) and before the conference Chris Adamson is doing a workshop on Core Audio. I would like to get through the books once before I go to his workshop. I know part of the point of the workshop is to learn Core Audio but I would like to be prepared and get as much out of that experience as possible.

Initially I was going to do a synthesizer app. I met a person at a CocoaHeads meeting who has been programming them for the last 15-20 years. He and I met up for coffee and he showed me his code. He also told me he has been working on his synth for four years. I tend to bite of more than I can chew. I have reassessed my project to try and accomplish something a little more achievable.

I am now focusing on creating an app that records your voice and plays it back. After I get it to that point I can add a levels meter and maybe some effects.

The first half of the Core Audio book goes over some audio basics and talks about how to create a recorder using audio queues. Perfect! I can take the command line programs as a starting point and integrate them into an iPhone app that has a user interface.

However, from past experiences, I have found it is a good idea to continue learning things before prematurely ending. I am glad that I did this.

The middle of the book is about audio units. Audio units allow you to do things that queues do not. If my plan was to just create a recorder that plays back queues would have been sufficient. Since I want to add effects to my app, I will need to utilize audio units.

So my progress is that I am about halfway through the book. I have found some working space and I am able to focus on plowing through the book. I really want to focus on just doing this, but I have other classes I need to work on as well. I have not worked on my JavaScript class for a week and we have a group project in the iOS development class that I have let slide. I am not even going to get into my Java class!

I think tomorrow and this weekend should be spent on some of these other things. I know I need to focus on Core Audio, but I can’t just drop the rest of the balls I am juggling. I am learning to delegate my activities and to make sure I don’t let anything slide for too long.

I also would like to start adding some small audio projects to my GitHub account. I need to figure out what will be indicative that I know how to do this without putting anything too valuable up on there. I think the former will be harder to pull off than the latter.

Core Audio and Co-Working Space

Yesterday I spend my day working at Bendyworks, a Ruby/Coworking shop downtown. On Fridays they have a “Growth Day” where people can work on sharpening their tools. I have been told by people who work there that anyone can come to work on things, but I have asked one the owners if I can come in anyway.

I spent the day working through my Core Audio book. I decided about a week ago to pursue creating a Core Audio app this semester. I got behind on some of my other classes, so I spent a lot of time this week trying to catch up with where I am supposed to be (I still need to finish my Ajax project, which I hope to complete this weekend.)

I spent the day working on the chapter regarding recording. I have worked through about half the book before and I am finding the code to make more sense the second time through. I am planning to spend the next few days seeing how far I can get into the book before reassessing my application idea and solidifying its specifications.

I have found Bendyworks to be an ideally suited environment for working. It is a calm and peaceful place full of energetic, talented people. It is one of the most safe and comfortable places I have ever been.

I know that they charge a certain amount for co-working space. I can’t afford to rent co-working space at this junction of my career. I know that being able to code there would help me get through all of my projects this semester.

I am planning to reach out to the owners to see if it is possible for me to continue to code there. I would like to explore if it is possible to negotiate a reduced rate or something. I have heard that others have just showed up and basically run businesses out of their space without paying the fee, but I don’t want to do that. I would like to be upfront about what I am trying to accomplish and see if we can figure out a way I can set up and work.

So, the plan for the day is to set forth with Core Audio. I have several long-term projects that I need to work on and I am trying to balance the amount of time I spend on each aspect of the projects. I will post an update about my progress later.

Plotting The Course

I finished my semester (yay) and I am off to explore a few months of being able to do whatever I want.

I have some intriguing prospects. The coolest one so far is that I am communicating with the founder of an iOS start-up in Austria about going there for a month and completing my internship requirement. I am super excited about this possibility.

I am being offered a place to stay and help getting there, so if I can break even on my travel and living expenses I will consider that a great achievement.

I am starting to figure out what I am going to learn and how I would like to do so. My initial, not-thinking-things-through plan was to master Core Audio. This is still a large goal that I have that I want to work towards as quickly as possible.

But now I am thinking about what do I want to do with it. I also have interest and experience in graphics. This seems like a good opportunity to do Game Design. I know most people who do programming probably want to do Game Design. I am certain it is probably like my experiences in the Audio Recording industry where the cooler a certain career path is, the more sexist and intolerant it becomes.

I would like to design my own games. I have several ideas that I would like to implement. One that I had was far too advanced for me to do on my own and I had to figure out what I would do. I could go to someone about it and risk them taking the idea away from me and cutting me out of the process. I could talk to other people I eventually want to hire about co-owning the game with me, but I did not think that would go well. I eventually was able to formulate a less-complex version of what I wanted to do and I believe I can accomplish that on my own in the next year or so.

But where does that leave Core Audio?? I made a personal commitment to learning that this summer. I know that if I go chasing after every single whim and interest I have I won’t get anything done. I need to really figure out what I ultimately want to do so that I don’t waste this valuable time spreading myself in too many directions and accomplishing nothing.

Another fly in the ointment is my husband. He is under the assumption that since school is over I have no commitments and I am available to do stuff whenever he has a whim. We went to Star Trek Into Darkness on Friday morning because he took the day off. I don’t think he understands what I am trying to do.

That would not have been so bad had today not been so difficult. I felt like I hadn’t slept and I wound up taking two naps today because I felt exhausted. So I did no work on Friday, Saturday, or Sunday. I made some progress in my C programming book today, but I feel like today was mostly a wash. I can have those days periodically, but if I am going to try and treat this as a real job, I can’t randomly spend my day playing Portal and napping with my dogs. I hope tomorrow works out better.

My progress through the Core Audio book is slow but steady. I completed the first two chapters. I could probably plow through them more quickly, but based on how hard it was to process the other information during the semester for iOS, I hesitate to go too fast through the book. I am trying to spend a few days on each chapter and go through them about two a week. The earlier chapters are probably easier, so I will reassess when I get further.

I thought I knew C pretty well, but there are a lot of commands I am using that I am not familiar with. I am going to go more in-depth with C while going through Core Audio.

I will give another update at some point soon since this is the first full week I have to myself.

Summer Plans

I am writing out how I plan to spend my summer so that I can formulate a plan of action about the best way of utilizing my time. I also, from past experience, know that when I put in writing exactly what I plan to do, within 13 hours the Universe steps in and thwarts all of my plans, so I want to give myself enough time to adapt to whatever changes will invariably be throw in my path 🙂

This is my last week of classes. Next week is Finals Week. I am signed up to take a Linux scripting class over the summer.

After I get done with my finals I anticipate doing the following:

– Mastering Core Audio. I will work through Chris Adamson’s wonderful Core Audio book and the Apple documentation for it. I plan to spend every morning from the time I wake up until around noon working on Core Audio.

– Take a lunch/cleaning break. I then plan, around noon each day, to spend some time cleaning the house. I have gotten very far behind on my chores and I need to schedule time for myself to do these things.

– Learn Linux. This will happen later in the summer when I begin taking this class. I plan to spend two or three days working on Linux.

– Possible other skill. I am contemplating learning more about Cocoa Drawing or Cocos2d gaming. I realize that learning Core Audio is a pretty sizable endeavor, so I am not committed to doing this third thing. I may also modify my plans to only learn Core Audio in the mornings. I worry that I will burn out if I only work on one thing. If all else fails, I will simply keep working on the skills I learned in my iOS class this semester and work my way through a few of my iOS programming books in the afternoons rather than trying to learn a second large skill. The more I type about this, the more committed I am to that course of action.

My goal is to see if I can make myself work a regular schedule on my own without having a job. Roald Dahl says that being a writer is the worst job in the world because you have to make yourself get up and sit at the typewriter and write a book. If you have a job where you are expected to be there at 8:00 in the morning and you get paid even when you are surfing the Internet reading Dilbert comics, it can be difficult to motivate yourself to work hard when there is no immediate financial reward.

Working for yourself isn’t for everyone. Most people I talk to about being an entrepreneur have this grand delusion of getting out from under the boot of the Man and setting their own schedule and being free. I see that to some capacity, but there is also something to be said about having a job where you get paid regardless of whether you produce something useful or not.

Since, as of this moment, my options are to work for free for myself or to donate work to someone else, I am working for the person who values my work more, which is me.

What Do I Want??

I am beginning to ruminate on what I want to accomplish with my career when I finish with school.

Here is what I know I DON’T want:
– Work for a large company doing enterprise-level programming.
– Work for a company utilizing a language that is for all intents and purposes dead but won’t be replaced because the company invested a lot of money in its architecture so if I ever get laid off or the company goes out of business I will never find another job again.
– Work for a bully
– Work for someone that tries to compromise my moral integrity

Here is what I DO want, both short and long term:
– Work with media (either graphics or sound)
– Write books
– Attend conferences
– Do talks at conferences
– Do trainings at conferences

I am uncertain how I go from where I am now to getting to where I want to be. I am assuming the Dan Steinbergs of the world did not graduate from college and start going out and doing talks. They had jobs that they went to where they honed their skills and acquired their hard-earned expertise.

I know that I need to learn either OpenGL or Core Audio. I want to learn Core Audio. I went to a conference two months ago where I got a taste of Core Audio. I came home and blasted through a hundred pages of Chris Adamson’s book in one night of glorious coding.

Since then, nothing.

We have been working on table views and modal controllers in class. These are such alien concepts that I have been doing our assignments over and over again until I can internalize what each line of code is doing and why it is there.

I keep thinking if I have a solid block of time with no obligations that I will learn a specific concept, but then life gets in the way and the time slips by without me getting a thing done.

I would like to spend this summer mastering Core Audio. I am supposed to get an internship for school and for my husband so that I don’t have a solid block of several months where I am earning no money. I don’t think I can sell the idea to him that the temporary loss of money is an investment in the future because I worry that I won’t get anything done.

So here is what I am going to do. I am going to dedicated a certain amount of time every week to Core Audio. I am treating my time at school like a job. I clock in, study programming, and at some point at night I clock out. I think that spending my summer setting my own hours and setting my own goals would be an invaluable thing to learn how to do, but I feel I must try to find paid work even though I think that in the long run learning how to structure my own work hours would be far more valuable.

The other concept my brain is bashing up against is the idea of “the long run”. I got journalism degree, but didn’t have any video skills, so I got a video degree. I found out that television journalism pays nothing but that doing sound for film is lucrative so I studied audio engineering. Then the recession hit and the whole bag of tricks blew up in my face.

Nothing in life is certain. I can’t plan on spending several years learning something that might vanish in a poof of technology. This is yet another reason I would rather spend my summer learning Core Audio, so that I can jumpstart my career when I get done instead of toiling doing something I don’t want while trying to eke out a modicum of time to work on the things I eventually want to do.

So, I am writing down here, that I am going to dedicate at least three afternoons a week to Core Audio. When noon hits on Mondays, Wednesdays, and Fridays I will finish up what I am doing and I will work through Core Audio. If I get on a roll I might up that to more days in a week.

If something is important you need to make time for it. I need to master Core Audio to the point that I can produce something impressive. I need to stop being distracted by all the other things I want to learn, even within the iOS environment. No Game Center, Storyboards, or Core Data. Just Core Audio. And the stuff I am doing for class.

I know that this epiphany will fade as all the rest of them do, I simply hope that by writing it down and putting it out there that I will make it happen and hold onto it even when I don’t feel like it or I have an assignment due.

Blog readers, hold me accountable!! 🙂

CocoaConf Chicago and Core Audio

Haven’t had a chance to write on my blog recently. I went to CocoaConf in Chicago this last weekend and it was an intense experience. I thought I would have more down time, but not only were the days long, they were packed with lots of content and by the time the end of the day came my brain had run out of available RAM!

I met a lot of amazing people. I saw a lot of amazing speakers. Among my favorites were Jonathan Penn and Daniel H. Steinberg. I went up to Dan after his keynote and told him he was my new career role model and he looked at me and said, “Oh God honey, why??”

However, the talk that made the most impact on my life as it is was the Core Audio talk by Chris Adamson. I bought his Core Audio book back in December. I took it on vacation with me between semesters because I thought I could read through it. That went fine until I got to the first code sample. It had code in it that had been deprecated. I discovered why the main method has the autorelease pool in it. It was because before you instantiated an NSPool object, did something, then called the drain pool method.

So, anyway, I got very confused about what stuff was deprecated and what was pertinent for Core Audio, so I set the book to the side until I learned enough to be able to make that determination.

I was super excited to see Chris’s talk. I wanted to go up to him and talk before the talk, but I didn’t really know what to say. At conferences I prefer to go to someone’s talk and then approach them later and talk to them about their talk. So far it has worked. The Core Audio talk was one of the last ones of the conference, so I saw him around for three days without talking to him 🙁

When he started talking about Core Audio, it was a revelation. I noticed that when my brain sees a bunch of unfamiliar stuff, it runs away and hides. I usually have to look at something two or three times before my brain gets used to what it is seeing and is willing to process it.

I did not feel that way with Core Audio. The first time I saw actual Core Audio it was a revelation, an epiphany. I didn’t want to run and hide from it. I wanted to dive into it and absorb it.

I got to talk to Chris after his talk and he is super cool. He is the first person I have encountered in four years who knew the person I named my dog after (her name is Delia Derbyshire). I had a great deal of fun talking to him and I hope that I get to do so again at some point in the future.

After I got back from the conference, I felt energized. I felt like I finally had a grasp of what I am doing. I spent the whole next day coding. I was in the flow.

This is the first time I have gotten into the flow for Objective-C. Before this, I did my homework because it was something I had to do. When I would talk to people who said they would code for hours I was jealous because I wanted to want to code for hours, but I wasn’t there yet. I was afraid it would never happen.

I want to be part of this world. When I go to these conferences and everyone knows each other and they are all familiar with each other’s work. I want to be one of those people. I don’t want to be the nerd that goes to Comic Con once a year so that I can meet the people who create my favorite shows, only to go home and wait for the next year to come so that I can rub elbows with these people. I want to be one of them. I want to walk the walk rather than just be a fan girl.

When I got home I dug into Core Audio. I stayed up all night coding and listening to my internet radio while drinking tea. My husband kept yelling at me about when I was coming to bed and I yelled at him that I was busy and to leave me alone. My dog, Delia, was unhappy that I wasn’t cuddling with her, so she came to my office and gave me disapproving face.

It was glorious. I feel that I now have focus. I know what I want to do. I know what I want to accomplish. I feel confident that this is something I can do and do well.

I feel bad that I didn’t write more about the conference, but if you are reading this post you were probably there and don’t need me to say what it was like!

I am going to code now. Life is amazing.