Modular Synthesis 101 – Part 1

8475032798 03939f6f42 z Modular Synthesis 101   Part 1

This is my first post in a planned series on modular synthesis. Over the course of the series I hope to provide an introduction to the basics of modular synthesizers and take a look at some of the specific modules available in the increasingly popular Eurorack format. I am by no means an expert on the subject but believe I know enough to hopefully provide a place for beginners to learn the fundamentals. I will rely on the critical feedback of my learned readers to kindly point out any inaccuracies I may inadvertently include in my posts but I’ll try and keep the need for that to a minimum.

In todays post I am going to introduce some of the various modular synthesizer formats and define some of the basic terminology. In later posts I will dive deeper into the different modules, their functions and some of their uses.

The first thing to know about modern modular synthesizer systems is that there are several formats including Euro (or Eurorack), Frac (or Fracrack), Buchla, Serge, MOTM and several others besides. Some of the things that may differ between the formats are the height of the modules, the supply voltages, the power connector type, the mounting hardware and the size of patch cables used. The format that is arguably the most popular right now is the Eurorack format and that is what I will focus on for this series.

Eurorack modules are 3U in height, which is to say that they are roughly the height of three vertical pieces of rack gear in a standard 19″ rack. Though 3U is technically 5.25″ or 133.35mm, Eurorack modules are usually 5mm shorter than that, but we still call it 3U.

The other measurement you will hear a lot with Eurorack modules is “HP” (horizontal pitch) or less commonly “TE” both of which are a measurement of the width of the module where 1HP (or 1TE) is 5.08mm, or 1/5″. The smallest modules are typically 2HP and modules are usually multiples of 2; so 4HP, 6HP, 8HP, 10HP and so on.

Of course to use modules you will need a case (with a power supply) to put them in. Many options are available. You could make a case yourself, purchase a full case from one of the several modular case manufacturers such as Monorocket, or get a kind of in between solution that is great for beginners such as the Tiptop Audio Happy Ending Kit. Cases are always at least 3U in height and are then in multiples of 3U thereafter. Widths vary but 84HP – 90HP are very common widths for cases. I’d recommend making sure the power supply in your case has both +12/-12V and 5VDC output but this should be true of most case power supplies.

Eurorack modules use +/-12VDC or 5VDC for power and usually connect to the power supply by a ribbon cable and a common 12 pin connector. It is very important that the connector be oriented correctly. Usually there is a red stripe on the ribbon cable that indicates the -12V side of the connector. Connecting an incorrectly oriented power connector to a Eurorack module and turning on the power can damage or destroy the module.

Eurorack modules use 1/8″ (3.5mm) mono connectors and plugs for patching. There are many different lengths and colours of patch cables available today, one of the more popular ones being the Tiptop Audio StackCable which allows you to connect your cables to each other, or “mult” them in the modular terminology. This allows you to for example take multiple outputs from one jack on a module or to combine signals going into an input.

Mentioning stack cables I feel I should add a caveat that may be a bit confusing for new comers to modulars or electronics. Feel free to skip this part for now or just don’t worry if you don’t get everything I am discussing.

There are several important things to be aware of when using stack cables or any passive multiple, rather than a buffered multiple. A multiple in modular land is just something that lets you split (or combine) a signal. A passive one, such as when stacking cables like this or using a passive multiple module simply provides a direct connection between the cables. A buffered multiple would buffer the signal so that the same signal would come out of each output connected to the mult.

If you split a signal output you will potentially have a lower current flowing through each of the cables depending on the input impedance of the inputs your cables are plugged into. This isn’t necessarily a bad thing but depending on what you are doing you may not have enough input current to trigger or effect the module whose input you are plugged into.

Of greater concern is combining signals at an input. It is generally a bad idea, unless you really know what you are doing, to combine inputs passively, such as using stack cables. The reason is that you can very easily exceed the tolerance of the input to the module that you are combining signals in to and damage your module. If you want to combine signals you should use a mixer of some sort so that you can reduce the level of the various signals to make sure the total signal you are passing to your module is at a safe level.

I hope you have found this tutorial useful. I know some of this stuff seemed confusing when I was first getting into modulars. Next time we will start in on the basic modules and concepts of connecting them.

Happy patching!

Share and Enjoy:
  • printfriendly Modular Synthesis 101   Part 1
  • digg Modular Synthesis 101   Part 1
  • stumbleupon Modular Synthesis 101   Part 1
  • delicious Modular Synthesis 101   Part 1
  • facebook Modular Synthesis 101   Part 1
  • yahoobuzz Modular Synthesis 101   Part 1
  • twitter Modular Synthesis 101   Part 1
  • googlebookmark Modular Synthesis 101   Part 1
  • reddit Modular Synthesis 101   Part 1
Posted in Eurorack, instrument, MIDI, modular, sound, Synth | Tagged , , , , , | 9 Comments

Ableton Live 9 And Push Controller

The wait will be over soon, or soonish. A week after a leaked video showing features of Live 9 we have an official announcement of Live 9 from Ableton.

New features include:

Record automation into session view clips (finally!)
Curved automation (finally!)
Convert harmony, melody and drums to MIDI (!!!)
New Browser
More sounds
Glue Compressor (made in conjunction with Cytomic, too bad I already own The Glue…)
Improved EQ8
New displays on EQ8, Gate and Compressor
New MIDI clip editing features
Max4Live speed improvements
New Max4Live devices, lots of them, including:
an LFO you can assign to other devices (yes!!)
new drum synth instruments
MIDI echo
an improved Step Sequencer
an improved Buffer Shuffler
convolution reverb

Here is the official vid:

Not only will we be getting Live 9 in Q1 2013 but they have teamed with Akai to make a new custom Ableton controller, Ableton Push. This controller looks to be tightly integrated with Live 9 in a way reminiscent of Native Instruments Maschine with its software.

The most apparent feature is the big colourful grid of buttons but they aren’t just buttons, these are actually pads that are velocity and pressure sensitive. Natch.

For the full details on Ableton Push check out the website they have created for it here. This thing has a lot of power packed into it.

Looks to me to be very promising to be the controller with the best workflow for Live. Glad I have held off on Maschine.

Share and Enjoy:
  • printfriendly Ableton Live 9 And Push Controller
  • digg Ableton Live 9 And Push Controller
  • stumbleupon Ableton Live 9 And Push Controller
  • delicious Ableton Live 9 And Push Controller
  • facebook Ableton Live 9 And Push Controller
  • yahoobuzz Ableton Live 9 And Push Controller
  • twitter Ableton Live 9 And Push Controller
  • googlebookmark Ableton Live 9 And Push Controller
  • reddit Ableton Live 9 And Push Controller
Posted in ableton, controller, hardware, instrument, MIDI, mixing, sound, Synth | Tagged , , | Leave a comment

A Trio Of Tracks

Keeping with the theme of threes, I just put up three new tracks on Soundcloud that I recorded this summer. I figured as fall is arriving here already it was time to get them out.

Brane Space and Something Familiar are both essentially modular patches that I then added to and arranged in Live. Both are pretty chill affairs. While not exactly a banger, Bug Light is a little harder and was made using the modular and other gear (hard and soft) in a more linear/traditional way. Truth be told I didn’t spend a ton of time mixing any of these three. They were just ideas I needed to get down but I like them all. Hope you enjoy.


Brane Space by Jason Job


Something Familiar by Jason Job


Bug Light by Jason Job

Share and Enjoy:
  • printfriendly A Trio Of Tracks
  • digg A Trio Of Tracks
  • stumbleupon A Trio Of Tracks
  • delicious A Trio Of Tracks
  • facebook A Trio Of Tracks
  • yahoobuzz A Trio Of Tracks
  • twitter A Trio Of Tracks
  • googlebookmark A Trio Of Tracks
  • reddit A Trio Of Tracks
Posted in Eurorack, modular, Synth, track | Tagged , , | Leave a comment

Three New Modules & A Demo

IMG 1558 1024x1024 Three New Modules & A Demo

Στοιχεῖα dual Euclidean Sequencer

Today I received a Synthesis Technology E350 morphing Terrarium, a MakeNoise Optomoix Low Pass gate and a Rebel Technology Στοιχεῖα (Stoicheia, or Elements) dual Euclidean Sequencer. I am in modular heaven.

Here is a moody patch I just recorded making use of all three of these.


Morpho patch by Jason Job

The E350 is a wavetable synth that allows you to modulate independently by row and column through an 8 by 8 grid of waveforms and there are 3 different banks of waveforms to choose from. There is also a secondary output that can linearly scan through all 64 waves which can also be modulated. I used both outputs of an MFB Dual LFO to modulate the X and Y (row and column) inputs. Each of the LFO outputs was a triangle set to a low frequency with lots of cross modulation. I ran them through an Intellijel uAtt before the E350 to get the movement through the wave tables that I wanted.

I used the Stoicheia to sequence two TipTop Z3000mkIIs, one going through a TipTop Z2040 and the other feeding into the Optomix which I was pinging with the Euclidean sequencer. Though I kept the sequencing very simple in this patch I think this is going to be a really useful and fun module. I also finally see what everyone is talking about with Low Pass Gates. I love the percussive sound I am getting with the Optomix.

Effects used are a Strymon Blue Sky Reverberator and an El Capistan dTape Delay.

Excited to go deeper with these modules.

Share and Enjoy:
  • printfriendly Three New Modules & A Demo
  • digg Three New Modules & A Demo
  • stumbleupon Three New Modules & A Demo
  • delicious Three New Modules & A Demo
  • facebook Three New Modules & A Demo
  • yahoobuzz Three New Modules & A Demo
  • twitter Three New Modules & A Demo
  • googlebookmark Three New Modules & A Demo
  • reddit Three New Modules & A Demo
Posted in Eurorack, modular, patching, sound, Synth | Tagged , , , , , | 2 Comments

A Cat, A Synthesizer & Outer Space (and a couple modular patches)

I’m not sure of the origin of the meme but anyone that delves into the world of synthesis online will eventually come face to face with the slightly bizarre phenomena of photos of cats and synthesizers.

I am most aware of this meme from the great modular synth community at Muff Wiggler where there is a brilliant, welcoming and very active forum about all things modular, as well as a good little wiki. There are also a lot of avatars that contain cats and synthesizers.

When you first go to the site you are greeted by a “Yes we cat” poster inspired by the iconic Obama poster. On the main forum page there is a photo of two cats where the one in the foreground seems to be doing something (wiggling a muff?) for which it has a suspicious and somewhat guilty look while it glares at the cat in the foreground with a look that says “Fuck off, what I’m doing is perfectly normal.” The cat in the background has a look of stunned shock which adds to the hilarity.

Another source of synth and cat photos can be found at synthcats.com where there is a rather (disturbingly) large collection of photos from this genre.

My personal favourite variation on this theme is that of the cat with a synthesizer in outer space. My five year old daughter and I often rock out on the synths in my studio and we both like to improvise lyrics along with our jams. Cats in space on synthesizers have given us many hours of ridiculous lyric improvisation.

And so, I have finally made my own cat with a synth in space photo which I have happily set as my avatar on the Muff Wiggler forums, as well as making it the desktop wallpaper on my Mac, iPhone and iPad.

So here it is, my contribution to this strange meme. I don’t know what it means, but it makes me smile every time. Maybe some day some one will do their thesis on the correlation between people who love synths and people who love cats.

7688628502 a8e171ed77 z A Cat, A Synthesizer & Outer Space (and a couple modular patches)

Cat – Synth – Space

And of course here are a couple of modular patches to listen to while you contemplate the awesomeness that is the cat with a synthesizer in space.


70s Patch by Jason Job


Toppo Patch by Jason Job

Share and Enjoy:
  • printfriendly A Cat, A Synthesizer & Outer Space (and a couple modular patches)
  • digg A Cat, A Synthesizer & Outer Space (and a couple modular patches)
  • stumbleupon A Cat, A Synthesizer & Outer Space (and a couple modular patches)
  • delicious A Cat, A Synthesizer & Outer Space (and a couple modular patches)
  • facebook A Cat, A Synthesizer & Outer Space (and a couple modular patches)
  • yahoobuzz A Cat, A Synthesizer & Outer Space (and a couple modular patches)
  • twitter A Cat, A Synthesizer & Outer Space (and a couple modular patches)
  • googlebookmark A Cat, A Synthesizer & Outer Space (and a couple modular patches)
  • reddit A Cat, A Synthesizer & Outer Space (and a couple modular patches)
Posted in instrument, modular, patching, Synth | Tagged , , , , , , | 5 Comments

Pocari Sweat – Live Analog Studio Synth Jam

A foreboding banger for a late, hot night with lots of reverb curtesy of my new Strymon Blue Sky Reverberator pedal.


Pocari Sweat by Jason Job

Tiptop Audio drum modules. Roland HS-60 doing a big washy pad with plenty of Strymon Blue Sky Reverberator. Yamaha CS-10 doing the main lead. Other parts provided by Tiptop Audio Z3000s through a Doepfer A-124 Wasp filter and a Topobrillo Multifilter. Sequenced in Ableton and played by triggering the clips live and messing with effects sends and filter settings. Delay is Strymon El Capistan dTape Echo. All instruments run through Soundcraft EPM8 analog mixer and main outs recoded directly into Ableton. Compression with iZotope Ozone and Cytomic The Glue.

Share and Enjoy:
  • printfriendly Pocari Sweat   Live Analog Studio Synth Jam
  • digg Pocari Sweat   Live Analog Studio Synth Jam
  • stumbleupon Pocari Sweat   Live Analog Studio Synth Jam
  • delicious Pocari Sweat   Live Analog Studio Synth Jam
  • facebook Pocari Sweat   Live Analog Studio Synth Jam
  • yahoobuzz Pocari Sweat   Live Analog Studio Synth Jam
  • twitter Pocari Sweat   Live Analog Studio Synth Jam
  • googlebookmark Pocari Sweat   Live Analog Studio Synth Jam
  • reddit Pocari Sweat   Live Analog Studio Synth Jam
Posted in Eurorack, live recording, MIDI, mixing, modular, patching, sound, Synth, track | Tagged , , , , , , , , | 1 Comment

How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog

Sometimes with a modular system made up of modules from different manufacturers, or when integrating with other external analogue gear, it is necessary to invert a signal to get your modules speaking to each other in the desired way. Other times you may want to invert a signal for some creative patch you are building. This is especially true of triggers because there is no standard to use a rising edge trigger versus a falling edge trigger and sometimes we can be very particular about which kind of edge we want.

The other day I wired up the trigger and CV outputs of a Yamaha CS-10 to respectively the trigger input of a Maths (being used as a simple AD envelope to open a VCA) and the 1V/Oct input of a Z3000 VCO. It didn’t take long to realize that when I was playing the keyboard the VCA wasn’t opening until I lifted my finger off the keys.

IMG 1050 1024x768 How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog

This told me two important things. First of all, clearly the CS-10 was not sending a trigger, rather (not surprisingly for a keyboard) it was sending a gate. Second, the gate signal it was sending was normally high and would go low when the key was depressed and then go back to high when the key was released. This meant that the rising edge needed by the Maths happened on the release of the key. This obviously would not do when the goal was to play the modular with a keyboard.

There are specific modules that will do inversion for you that would fix this in a snap but I don’t have one of those. What I do have is an Intellijel Plog which is a digital logic module that has two, 2 or 3 input boolean logic operation blocks, a toggle flip flop and a data flip flop. For our uses we need just one of the boolean blocks and we only need to be concerned with the 2-input logic because the third (Z) input for each boolean block is normalled to the second (Y) input unless it is patched.

IMG 1052 768x1024 How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog

Intellijel Plog

Here is the the truth table for the 2-input logic:

Screen Shot 2012 07 06 at 3.49.37 PM How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog

2-input logic

We want a logic function that will take our trigger signal (actually a gate in this case) in one input and when the other input remains a logic 0, (we are not plugging anything in to the other input so it will be zero) we want to get the opposite output. Looking at the truth table there are two operations that would give us this, NOR or XNOR though the NOR is a better choice because it will always work. If we used XNOR and for some reason the second input ever got a high signal on it (logic 1) then the XNOR wouldn’t flip the output correctly for us.

Here is the Plog wired up so that output A outputs the inverse of input X:

IMG 1054 768x1024 How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog

Plog wired to invert the input signal at X

Anyway, this solved my problem of needing an inverter when I didn’t have a dedicated module. I’m not sure what other logic modules are out there but any logic module that can do a NOR operation should be up to this task. Hope this is useful for some patchers out there.

Share and Enjoy:
  • printfriendly How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog
  • digg How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog
  • stumbleupon How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog
  • delicious How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog
  • facebook How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog
  • yahoobuzz How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog
  • twitter How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog
  • googlebookmark How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog
  • reddit How To Invert A Modular Synth Signal Using Boolean Logic With An Intellijel Plog
Posted in Eurorack, instrument, modular, patching, sound, Synth | Tagged , , , , , , , , , | Leave a comment

And… I’m Back – Juvinated – Live Analog Studio Synth Jam

The last few months have been like a dream; a very bad dream of a long slow motion car crash where you are in the passenger seat and can see the accident coming and have time to tell the driver but they just ignore you…

Anyway, I’m not one to dwell too much on the past. I am glad these past months are behind me and that I will once again have some time for life (music!) outside of work.

IMG 1042 768x1024 And... Im Back   Juvinated   Live Analog Studio Synth Jam

Analog AND digital getting along

So, this weekend I reorganized my studio. I cleaned up a bunch of the clutter and made room for a hopefully soon to come couch that will make my space more conducive to having other people over for jamming and hanging out. I also moved my synths to a better location with a particularly better position for my modular synth. Feng Shui FTW!

To celebrate my new setup I recorded a new live synth jam. This one features the HS-60 doing a fuzzed out but bright repeating stab, the CS-10 providing some modulated bloops, two channels of heavily modulated chewy sound (PEG and Maths modulating Topobrillo MultiFilter,TipTop Z2040 & Z3000) from the modular and the TipTop BD808, SD808 and HATS808 providing the rhythm section. The HS-60 and CS-10 were sequenced with Genome midi sequencer for iPad which was also providing clock to the modular. The drums were sequenced with the Intelijel uStep and 4ms RCD. Only one effect was used which is my trusted Strymon El Capistan dTape Echo which I had feeding back into itself to get the texture that builds through out the track. (Side note: I’ve got a BlueSky reverberator on the way which I am very excited about!)

This was all recorded straight out of the main outs of the Soundcraft EPM8 analog mixer through an RME Fireface UFX and recorded into TwistedWave, my new go to audio editor. I applied a bit of compression, limiting and EQ with iZotope Ozone 5.


Juvinated by Jason Job

I’ll be off on a trip next week but hope to get into a regular groove of recording more live synth jams for the rest of the summer.

Share and Enjoy:
  • printfriendly And... Im Back   Juvinated   Live Analog Studio Synth Jam
  • digg And... Im Back   Juvinated   Live Analog Studio Synth Jam
  • stumbleupon And... Im Back   Juvinated   Live Analog Studio Synth Jam
  • delicious And... Im Back   Juvinated   Live Analog Studio Synth Jam
  • facebook And... Im Back   Juvinated   Live Analog Studio Synth Jam
  • yahoobuzz And... Im Back   Juvinated   Live Analog Studio Synth Jam
  • twitter And... Im Back   Juvinated   Live Analog Studio Synth Jam
  • googlebookmark And... Im Back   Juvinated   Live Analog Studio Synth Jam
  • reddit And... Im Back   Juvinated   Live Analog Studio Synth Jam
Posted in Eurorack, iOS, iPad, live recording, mixing, modular, patching, sound, Synth, track | Tagged , , , , , , , , , , , , , | Leave a comment

Updating An sqlite CoreData Backing Store On iOS

Something that has unpleasantly surprised many an iOS developer is that to update the data in an sqlite database that is the backing store for CoreData you need to do more than just make a new release of your app with a new database file included in your bundle. The reason for this is that CoreData can’t write to your sqlite database while it is in the bundle, so the database is typically saved to the Documents folder.

NOTE: With the advent of iCloud the Documents folder should only be used for data, (including sqlite databases) that is user generated. For data, (including sqlite databases) that is not user generated you should use the Library/Cache directory instead of the Documents directory. For the purposes of this tutorial I will leave it as saving to the Documents directory but be aware that you may need to save to somewhere else.

To update your database you will need to replace the old one in the Documents folder with the new one from the bundle. I usually do this in two steps, first deleting the old sqlite file from the Documents folder and then writing the new one in its place.

Of course you don’t want this to happen every time the user starts the app. You really only want to do it once when the user has opened a new version of the app that they have downloaded. To handle that I make use of the bundle version from the Info.plist and good old NSUserDefaults (which I do still use for some things).

Here is the code I use in my AppDelegate’s application:didFinishLaunchingWithOptions: method:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSString *bundleVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    if ([userDefaults objectForKey:kVERSION]) {
        NSString *version = [userDefaults objectForKey:kVERSION];
        if (![version isEqualToString:bundleVersion]) {
            [self replaceDatabase];
            [userDefaults setObject:bundleVersion forKey:kVERSION];
        }
    } else {
        [self replaceDatabase];
        [userDefaults setObject:bundleVersion forKey:kVERSION];
    }

The key “kVERSION” is just a # define of @”version”. All I am doing here is getting the userDefaults and the bundleVersion and then checking if there is a bundleVersion saved in userDefaults. If there is I check if it is different from the current bundleVersion of the app. If it is different then I call my replaceDatabase method which we will get to in a minute. Once that has run I make sure to save the new version to userDefaults to eliminate this code running again while the app is still on this current version. If the version was found to be the same then we exit the if statement and are done. No need to update the database because we should already have the latest.

If there was not a previous bundleVersion saved, maybe because you have added this code to a later release of your app, then we do the same thing as above, replace the database and then save the version to userDefaults.

Pretty straightforward stuff. Now lets take a look at the replaceDatabase method:

- (void)replaceDatabase
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
        // remove old sqlite database from documents directory
    NSURL *dbDocumentsURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Data.sqlite"];
    NSString *dbDocumentsPath = [dbDocumentsURL path];
    if ([fileManager fileExistsAtPath:dbDocumentsPath]) {
        NSError *error = nil;
        [fileManager removeItemAtPath:dbDocumentsPath error:&error];
        if (error) {
            DLog(@"Error deleting sqlite database: %@", [error localizedDescription]);
        }
    }
    
        // move new sqlite database from bundle to documents directory
    NSString *dbBundlePath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"sqlite"];
    if (dbBundlePath) {
        NSError *error = nil;
        [fileManager copyItemAtPath:dbBundlePath toPath:dbDocumentsPath error:&error];
        if (error) {
            DLog(@"Error copying sqlite database: %@", [error localizedDescription]);
        }
    }
}

Here we first get a reference to the default fileManager which we will be using. Next we need to get the path to the database file in the documents directory. To do that we first get the URL to the file using Apple’s convenience method applicationDocumentsDirectory which gives us an NSURL for the Documents directory and call the URLByAppendingPathComponent: method on that. I think that the applicationDocumentsDirectory method is included in your AppDelegate by default but I will also post it below for your reference. Once we have the URL for the database we simply pass the ‘path’ message to the URL and that gives us the path. Now we just check if the file is in fact at that location and if it is we remove it.

So that is the first part done. Now to copy the new database into place. To do that we need to get the path to the new database in the bundle. We do this with the NSBundle pathForResource: method. If the path is good we then do a copy of the database in the bundle to the Documents directory path and we are done.

The next time CoreData accesses the persistent store it will find the sqlite database in the same place as always with the same name but with your new data.

Finally, just in case you can’t find it, here is the applicationDocumentsDirectory method which as you can see is not very complex:

- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

As always hope this is useful info for some of you out there.

Share and Enjoy:
  • printfriendly Updating An sqlite CoreData Backing Store On iOS
  • digg Updating An sqlite CoreData Backing Store On iOS
  • stumbleupon Updating An sqlite CoreData Backing Store On iOS
  • delicious Updating An sqlite CoreData Backing Store On iOS
  • facebook Updating An sqlite CoreData Backing Store On iOS
  • yahoobuzz Updating An sqlite CoreData Backing Store On iOS
  • twitter Updating An sqlite CoreData Backing Store On iOS
  • googlebookmark Updating An sqlite CoreData Backing Store On iOS
  • reddit Updating An sqlite CoreData Backing Store On iOS
Posted in app, code, iOS, iPad, iPhone, Objective-C | Tagged , , , , , , , | 5 Comments

Handy Scripts For Localizing iOS XIB Files

Recently I have been working on more and more iOS projects that require localization. One of the things that I find needs to be done fairly often while implementing localized XIB files is to extract all the strings from your English XIBs. The corollary is equally important which is creating new localized XIB files for all your supported languages from the .strings files that are provided to you by your translator.

Doing this by hand for even one additional language would be tedious if there are more than a couple of XIB files. This is exactly the kind of repetitive task that scripts are perfect for. My scripting language of choice is Ruby so you will need that installed to use these or you should be able to easily adapt these to whatever language you prefer.

Here is my genxibstrings script that I use to generate the .strings files from all my English XIB files. To use it just run it in your en.lproj folder which should contain all your English XIB files.

#!/usr/bin/env ruby

# Script to generate strings for localization from all XIB files in the current directory.

xibs = []

puts "Processing files..."

Dir.glob("*.xib") do |file| 
  fname = File.basename(file, '.*')
  success = system "ibtool --generate-strings-file #{fname}.strings #{file}"
  if success == true
    puts "#{file} --> #{fname}.strings"
    xibs.push file
  else
    puts "Warning! String file for #{file} could not be generated."
  end
end
  
count = xibs.length

puts "Generated Strings For #{count} XIB Files."

Next, here is my stringstoxibs script that creates all the localized XIB files from your .strings files and English XIBs. This script needs to be run in a directory that contains all the localized language folders which have names like en.lproj, fr.lproj, zh-hant.lproj, es.lproj etc. The en.lproj folder must contain all your English XIB files that were used to create your .strings files that you sent off to be translated. All the other .lproj folders must contain the translated .strings files for their language. When this script is done it will have made all the localized XIB files in each .lproj folder and removed all the .strings files which you no longer need.

#!/usr/bin/env ruby

# Script to create localized XIBs from localized strings.

xibs = []

puts "Processing files..."

Dir.glob("**/*.strings") do |file| 
  dname = File.dirname(file)
  fname = File.basename(file, '.*')
  if fname != "Localizable"
    success = system "ibtool --strings-file #{file} ./en.lproj/#{fname}.xib --write #{dname}/#{fname}.xib"
    if success == true
      puts "#{file} --> ./#{dname}/#{fname}.xib"
      xibs.push file
      system "rm ./#{dname}/#{fname}.strings"
    else
      puts "Warning! XIB for #{file} could not be generated."
    end
  end  
end
  
count = xibs.length

puts "Generated #{count} XIB Files."

Hope this helps speed up the task of localizing your iOS apps.

Share and Enjoy:
  • printfriendly Handy Scripts For Localizing iOS XIB Files
  • digg Handy Scripts For Localizing iOS XIB Files
  • stumbleupon Handy Scripts For Localizing iOS XIB Files
  • delicious Handy Scripts For Localizing iOS XIB Files
  • facebook Handy Scripts For Localizing iOS XIB Files
  • yahoobuzz Handy Scripts For Localizing iOS XIB Files
  • twitter Handy Scripts For Localizing iOS XIB Files
  • googlebookmark Handy Scripts For Localizing iOS XIB Files
  • reddit Handy Scripts For Localizing iOS XIB Files
Posted in app, code, Interface Builder, iOS, iPad, iPhone, Ruby, script | Tagged , , , , , , , , | Leave a comment