Hey Just J reviews and demos Loopy
Here’s a review and great little demo of Loopy version 2 by looper Hey Just J:
Read MoreHere’s a review and great little demo of Loopy version 2 by looper Hey Just J:
Read MoreI’m hard at work on Loopy 2.0.1, which will include a few improvements:
Look out for it soon.
Read MoreI’m very pleased to announce the launch of our new app, [Loopy 2](http://loopyapp.com)! It’s a pretty, easy-to-use but feature-packed looper for making music by layering looped recordings of singing, beatboxing or playing an instrument (or banging cutlery together).
It’s currently on sale for launch, so take a look! We’re very proud of it.
Read MoreI’m very happy to announce The Cartographer version 1.4!
This version brings new features from Google Maps to the iPhone: Routes and shapes. Now you can plot hiking routes, cycle paths or road trips on your computer using Google Maps, then sync them to your iPhone and take them with you.
Combined with The Cartographer’s existing offline mapping features, we think this is a really exciting feature for outdoorsy types and travellers.
So, we hope you enjoy 1.4! It’s available right now from the App Store.
Read MoreThere are a hundred and one proposed solutions out there for how to move UITextField
and UITextView
out of the way of the keyboard during editing — usually, it comes down to observing UIKeyboardWillShowNotification
and UIKeyboardWillHideNotification
, or implementing UITextFieldDelegate
delegate methods, and adjusting the frame of the superview, or using UITableView
‘s scrollToRowAtIndexPath:atScrollPosition:animated:
, but all the proposed solutions I’ve found tend to be quite DIY, and have to be implemented for each view controller that needs it.
I thought I’d put together a relatively universal, drop-in solution: UIScrollView
and UITableView
subclasses that handle everything.
When the keyboard is about to appear, the subclass will find the subview that’s about to be edited, and adjust its frame and content offset to make sure that view is visible, with an animation to match the keyboard pop-up. When the keyboard disappears, it restores its prior size.
It should work with basically any setup, either a UITableView-based interface, or one consisting of views placed manually.
Read MoreFrom the iPhone 3Gs up, it’s possible to encode compressed AAC audio from PCM audio data. That means great things for apps that deal with audio sharing and transmission, as the audio can be sent in compressed form, rather than sending huge PCM audio files over the network.
Apple’s produced some [sample code (iPhoneExtAudioFileConvertTest)](http://developer.apple.com/library/ios/samplecode/iPhoneExtAudioFileConvertTest/Introduction/Intro.html), which demonstrates how it’s done, but their implementation isn’t particularly easy to use in existing projects, as it requires some wrapping to make it play nice.
For my upcoming looper app [Loopy](http://loopyapp.com), I’ve put together a simple Objective-C class that performs the conversion of any audio file to an AAC-encoded m4a, asynchronously with a delegate, or converts any audio provided by a data source class (which provides for recording straight to AAC) and I thought I’d share it.
Read More[Circular buffers](http://en.wikipedia.org/wiki/Circular_buffer) are pretty much what they sound like – arrays that wrap around. They’re fantastically useful as scratch space for audio processing, and generally passing audio around efficiently.
They’re designed for FIFO (first-in-first-out) use, like storing audio coming in the microphone for later playback or processing.
Consider a naive alternative: You copy the incoming audio into an NSData you allocate, and then pass that NSData off. This means you’re allocating memory each time, and deallocating the memory later once you’re done processing. That allocation incurs a penalty, which can be a show-stopper when part of an audio pipeline – The Core Audio documentation advises against any allocations when within a render callback, for example.
Alternatively, you can allocate space in advance, and write to that, but that has problems too: Either you have a synchronisation nightmare, or you spend lots of time moving bytes around so that the unprocessed audio is always at the beginning of the array.
A better solution is to use a circular buffer, where data goes in at the head, and is read from the tail. When you produce data at the head, the head moves up the array, and wraps around at the end. When you consume at the tail, the tail moves up too, so the tail chases the head around the circle.
Here’s a simple C implementation I recently put together for my app Loopy: [TPCircularBuffer](https://github.com/michaeltyson/TPCircularBuffer)
Read More