Purplelilgirl Makes Games

Hi, so yeah, we made a game… :) for a penguin named Maru:

(And his clones…)

He’s actually a flash drive:

Yes, his head is um… removable? But it’s all for a good cause!

So anyway, app description:

Maru Penguin is an adventurous game which combines the elements of action and intelligence. By pulling backward and forward the users can control the extent of jumping. Lots of hidden props can be found in different chapters to help the Maru Penguin to achieve his mission. The cartoon style, the well-known capitals as the main scene of the game and the cute background music creates a delightful atmosphere while playing.

Maru Penguin是一款動作結合益智的冒險遊戲,遊戲操作相當容易,玩家利用指頭觸控畫面中的Maru Penguin,往後拉動控制Maru Penguin的跳躍弧度,關卡中埋藏著各種道具,使Maru Penguin更能輕易地到達終點。遊戲畫面為可愛卡通風格,同時結合亞洲著名城市做為遊戲關卡背景,搭配活潑生動的背景音樂,使玩家能
Maru Penguin一同在全球各大城市展開冒險。

Features
Use of well-known cities as the stage of the game.
Abundant choices of props
Adorable characters
3D environments
Simple instruction is easy for users to get familiar with.
Suitable for user of all ages.

遊戲特色
- 以全球著名城市作為關卡主題。
- 豐富的道具供玩家使用。
- 企鵝肢體活潑逗趣。
- 遊戲以3D展現,畫面精緻度高。
- 操作模式簡易明瞭,操作門檻低。
- 適合0-99歲的各種玩家。

Story background
The global warming has put the Maru Penguin at steak and he has faced the risk of food shortage. With moving his finger the player can aid the penguin to conquer all the obstacles during journey.

故事背景
由於全球氣候暖化,企鵝Maru面臨嚴重的糧食危機,他行遍五大洲只為了找到美味的小魚兒。玩家利用一指神功左右滑動,協助不會飛的Maru 跳躍障礙,成功填飽肚皮!!

And screenies…

And… *cue link*…

Link: http://itunes.apple.com/tw/app/maru-penguin/id521096937?mt=8

Download, please and thank you? :)

*sorry Twitter followers for repeat posts*

Mini Tutorial: How to post score of your Unity iOS game to Facebook?

-without shelling out $65 ;)

Well, if you have $65 to spare, just check out Prime31’s Social Networking plugin (you can even get Twitter!).

Link: http://www.prime31.com/unity/

If you don’t, like 1-broke-girl/me, read on…

There are two parts to this, Unity side and Xcode side. We must find a way for Unity and Xcode to be friends and talk to one another, you know call each others’ functions, access each others’ variables etc.

First let’s take advantage of NSUserDefaults and PlayerPrefs to save some variables (you may encrypt the score variable if you are afraid of cheaters).

PlayerPrefs in Unity…

PlayerPrefs.SetString(“score”, score.ToString());

… can be read in Xcode using…

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *score = [defaults objectForKey:@”score”];

There, we know how to pass variables, what about functions…?

In order to do that, I read this tut, which is in Simplified Chinese!  (http://xys289187120.blog.51cto.com/3361352/705415). The gist of that tutorial is that you create this other class (let’s just call it Facebook.cs):

using UnityEngine;  
using System.Runtime.InteropServices;  

public class Facebook : MonoBehaviour {

    [DllImport(“__Internal”)]  
     private static extern void _PressButton0 ();  

     public static void ActivateButton0 ()  
     {  if (Application.platform != RuntimePlatform.OSXEditor)   
        {   _PressButton0 ();  
        }  
     }  
}

The _PressButton0() will actually call some code in Xcode (we’ll get to that).

Someone else in Unity has to call ActivateButton0, a GUI button, perhaps?

if(GUI.Button(new Rect(0, 0, 130, 235), “Facebook”))
{       Facebook.ActivateButton0();
}

So when the player clicks on the GUI button, ActivateButton0() will be called which will in turn call _PressButton0().

But where’s _PressButton0()?

We create a ViewController class in Xcode (let’s just call it MyView.m):

#import “MyView.h”
#import “AppController.h”

@implementation MyView

void _PressButton0()  
{   AppController *appController = (AppController*)[[UIApplication sharedApplication] delegate];

    [appController feedDialogButtonClicked];
}  

@end

So there’s _PressButton0()!

Now let’s do the Facebook related things. Go to Facebook’s Developer site and follow the tutorial: https://developers.facebook.com/docs/mobile/ios/build/

Instead of putting some stuff in ApplicationDidFinishLaunchingWithIOptions… I placed everything in a function I called feedDialogButtonClicked.

- (void) feedDialogButtonClicked {
   
    facebook = [[Facebook alloc] initWithAppId:@”221872691249521” andDelegate:self];
   
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@”FBAccessTokenKey”]
        && [defaults objectForKey:@”FBExpirationDateKey”]) {
        facebook.accessToken = [defaults objectForKey:@”FBAccessTokenKey”];
        facebook.expirationDate = [defaults objectForKey:@”FBExpirationDateKey”];
    }
   
    /**
    if (![facebook isSessionValid])
    {   [facebook authorize: nil];
    }
    **/
   
    [[NSUserDefaults standardUserDefaults] synchronize];
    NSString *level = [defaults objectForKey:@”level”];
    NSString *score = [defaults objectForKey:@”score”];
   
    NSMutableDictionary *params =
    [NSMutableDictionary dictionaryWithObjectsAndKeys:
     [NSString stringWithFormat: @”I just scored %@ in the %@ Level of Maru Penguin!”, score, level], @”name”,
     @”“, @”caption”,
     @”Get Maru Penguin for free in the iTunes Store”, @”description”,
     @”http://itunes.apple.com/tw/app/maru-penguin/id521096937?mt=8”, @”link”,
     @”http://a2.mzstatic.com/us/r1000/082/Purple/v4/3a/42/b5/3a42b5dc-5452-9dde-cdc8-24e24fb82363/486SkNsbbo2zaF3glfCuo0-temp-upload.iomrjeon.320x480-75.jpg”, @”picture”,
     nil]; 
    [facebook dialog:@”feed”
           andParams:params
         andDelegate:self];
}

I had a little problem with fbDidLogin (the one mentioned in the tutorial), good thing this other tutorial solved it for me: http://ebrentnelson.blogspot.com/2012/02/fbdidlogin-never-calledwhy.html

I ended up commenting out:

/**
    if (![facebook isSessionValid])
    {   [facebook authorize: nil];
    }
    **/

Because I seem to be able to post feeds to my Facebook wall even without it (don’t know why, anyone care to explain?).

Another helpful link: How to include a link in my feed-post using FBConnect from iPhone app? (http://stackoverflow.com/questions/5574433/how-to-include-a-link-in-my-feed-post-using-fbconnect-from-iphone-app) This answer in this post explains stuff that you can include in your Feed Dialog pretty clearly.

And um, I think that is it. That bunch of codes can post your scores from Unity iOS to Facebook.

Now my other problem is, how to add a share link to the feed my app posted? Anyone, help?

Also check out an old blog post of mine about how to post pictures from Cocos2D iPhone to Facebook: http://purplelilgirl.tumblr.com/post/9406805856/howtoaddfacebooktococos2diphone

EDIT:

Since generated feeds don’t get the share button (I Google-d for 2 days and found nothing, at the end of it, it was a Which Avengers are You? quiz that helped me solve my problem) , do you know what I eventually did? I went back to that Cocos2D blog post and did it that way (That’s what the Avengers app did, by the way, I’m Hawkeye :D). I posted a photo of the results screen, lol, which is actually what my boss suggested in the first place. And since when you post photos, you can include captions (no advertising though), so there. Problem solved -ish.

EDIT:

Okay, I am apparently not a very good Googler, since only saw this today: http://forum.unity3d.com/threads/122681-Free-facebook-Plugin-for-Unity-iOS Free, Facebook, Unity, iOS, all the keywords that I’ve been searching for, all along was in the Unity Forums!

.

.

.

By the way, we made an app (the one in the sample), it’s a game and it’s free and it stars a penguin named Maru in search of yummy fishies around the world (so far he only got to Asia)…

Link: http://itunes.apple.com/tw/app/maru-penguin/id521096937?mt=8

» App's cost money

pragmaticprogrammer:

Great post about people’s general shock when you tell them about typical app development prices

Mini Tutorial: How to create only one set of GUI for different iOS resolutions in Unity3D?

So, there’s the old iPhone resolution (480x320) and then there’s the retina (960x640). Question is, how do you just create one set of GUI that can fit both resolutions? Because you know scaling and adjusting the GUI elements is such a bother.

Code bit:

public float screenWidth = 960;
public float screenHeight = 640;
   

private Matrix4x4 tMatrix;


void Awake ()
{    RotateDevice();
}
   
void RotateDevice()
{    // Calculate the transformation matrix
     // for the actual device screen size
     tMatrix  = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3((float)1.0 * Screen.width/screenWidth, (float) 1.0 * Screen.height/screenHeight, 1.0f));

}

screenWidth and screenHeight is the resolution that you are designing your GUI to, I prefer to scale down, that’s why I set it to 960x640.

In OnGUI add:

GUI.matrix = tMatrix;

GUI.matrix will do all the scaling and transformations and whatnots for you.

And now in your GUI code anywhere you want to refer to Screen.width or Screen.height use screenWidth or screenHeight instead:

if(GUI.Button(new Rect(screenWidth-50, screenHeight-30, 50, 30), “Click Button”))
{   // some code
}

So now, your GUI works for both 960x640 and 480x320.

I got this tip from “Unity iOS Essentials” book :). Although I couldn’t get the code in the book to work as is, so I had to search the forums and stuff to fix the code.

That’s it :)

Quick Review: Unity iOS Essentials

I am currently reading “Unity iOS Essentials”, which I won from ManiacDev’s book giveaway contest.

Unity iOS Essentials

And so far, I find that this book seems to be all over the place and it inspires to be a Game Design book.

Why made me think so? Well, Chapter 1 is about Planning Ahead for an Unity iOS Game, it starts out pretty clear, it aims to give the readers a little heads up before they start their game, it mentions considerations such as terrain, lighting, audio, etc. And then it got to the Let’s Get Started part, which is pretty much the author make all sorts of game design suggestions, and sometimes he would suggest something and not really explain why, such as he said that Fog is not such a great idea, and he suggests that we use particles instead, but why? Why isn’t fog a good idea? He even mentioned that it adds ambiance, so why isn’t it a good idea? Also there is a whole chunk that he talks about teleportation (wut? o.O), which provides means for players to travel across our large levels. He could have ended that bit there, but he goes on to suggest different ways of doing teleportation, warp gates, trains, what nots. And then after being distracted by all those really not important stuff, he starts talking about culling. Now, culling is important (even the author says so). But the reader could have skipped that part (okay, at least I almost skipped that part because I was skipping the trying to skip the teleportation part).

Chapter 2 is called iOS Performance Guide, but like Chapter 1, instead of getting right down to it (the performance guide), he starts the chapter with different kinds of games that the reader can make. And briefly mention skybox and how we’re supposed to use a cube with reversed normals instead of the one that Unity came with (again, no explanation whatsoever on why we shouldn’t use the Unity one). And then some bits about how we should do our terrain (not the technical part, the design part of making a terrain). Some more bits about different game genres.And then suddenly, Unified Graphic Architecture and the other stuff that actually seems like the iOS Performance Guide.

Chapter 3 is called Advanced Game Concepts, but really the things covered in the chapter is not very advanced, it’s stuff about menus, interface, screen sizes, accelerometer, shaders and organizing your assets.

Chapter 4 is called Flyby Background. Can’t say anything about it, because I skipped it.

I’m after Chapter 5 because it’s about Scalable GUIs, which I happen to be working on right now. So far, it’s understandable, pretty easy to follow. But the way the code bits are edited makes it somewhat unreadable. Oh and don’t expect the code to work as is.

That’s where I am right now, there are still four more chapters that I haven’t read yet.

So far, my comment is, it’s all over the place.

Link: http://www.packtpub.com/unity-3d-essentials-for-ios-games/book

Cocos2d for iPhone 1 Game Development Cookbook

Packt recently released a new Cocos2d book: “Cocos2d for iPhone 1 Game Development Cookbook” by Nathan Burba.

Cocos2d for iPhone 1 Game Development Cookbook

Overview of Cocos2d for iPhone 1 Game Development Cookbook

  • Discover advanced Cocos2d, OpenGL ES, and iOS techniques spanning all areas of the game development process
  • Learn how to create top-down isometric games, side-scrolling platformers, and games with realistic lighting
  • Full of fun and engaging recipes with modular libraries that can be plugged into your project
  • Over 90 recipes for iOS 2D game development using cocos2d

Link: http://www.packtpub.com/cocos2d-for-iphone-1-game-development-cookbook/book

Mini Tutorial: How to batch convert image files to PVR (for iPhone app development)?

According to Unity3D’S manual, when developing for iOS

Use iOS native PVRT compression formats. They will not only decrease the size of your textures (resulting in faster load times and smaller memory footprint), but also can dramatically increase your rendering performance! Compressed texture requires only a fraction of memory bandwidth compared to full blown 32bit RGBA textures.

You can use Unity’s built in PVRTC compression, but according to @ToxicBlob

Not all PVRTC are created equal

http://www.toxicblob.com/files/Not_all_PVRTC_are_created_equal.php

Well, the Unity manual also suggested using PVRTexTool to create your PVRs. They have a GUI tool and a command line tool. (Please read ToxicBlob’s blog on how to install the tool).

Since, my artists gives me a lot of texture files, there’s no way that I’d do the conversion one by one using the GUI tool, so Mac’s Automator to the rescue! I love Mac’s Automator, it’s now my new best friend.

So I made an Automator Workflow:

The shell script:

for f
do
/Applications/PVRTexTool/PVRTexToolCL/MacOS_x86/PVRTexTool -fPVRTC4 -pvrtchighquality -yflip 1 -square -i”$f” -o”$f”
done

EDIT: I edited the previous script, adding “-o$”f”” so that the output file will be in the same folder as your input file.

Just add all your textures in the Get Specified Finder Items part and click Run!

And that’s it!

amyokuda:

HAHAH AMAZING

Mini Tutorial: How to capture video of iPhone app in Cocos2D?

Someone asked me before if I knew how to do record the screen in Cocos2d as a video. I didn’t know how to record a video, so this guy sent me some codes, but his problem is that his code is recording the screen (taking screenshots) as a UIWindow. So my idea for him was to replace his screenshot code with AWScreenshot (by Manucorporat, search the Cocos2d forums for his code).

And here are the code bits:

#import <AVFoundation/AVFoundation.h>
#import <AVFoundation/AVAssetWriter.h>
#import <CoreVideo/CVPixelBuffer.h>
#import <CoreMedia/CMTime.h>


#import “AWScreenshot.h”

#define FRAME_WIDTH 320
#define FRAME_HEIGHT 480
#define TIME_SCALE 60 // frames per second

-(void) startScreenRecording
{  
    NSLog(@”start screen recording”);
   
    // create the AVAssetWriter
    NSString *moviePath = [[self pathToDocumentsDirectory] stringByAppendingPathComponent: @”video.mov”];
    if ([[NSFileManager defaultManager] fileExistsAtPath:moviePath])
    {   [[NSFileManager defaultManager] removeItemAtPath:moviePath error:nil];
    }
   
    NSURL *movieURL = [NSURL fileURLWithPath:moviePath];
    NSError *movieError = nil;
   
    [assetWriter release];
    assetWriter = [[AVAssetWriter alloc] initWithURL:movieURL
                                            fileType: AVFileTypeQuickTimeMovie
                                               error: &movieError];
    NSDictionary *assetWriterInputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                              AVVideoCodecH264, AVVideoCodecKey,
                                              [NSNumber numberWithInt:FRAME_WIDTH], AVVideoWidthKey,
                                              [NSNumber numberWithInt:FRAME_HEIGHT], AVVideoHeightKey,
                                              nil];
    assetWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType: AVMediaTypeVideo
                                                          outputSettings:assetWriterInputSettings];
    assetWriterInput.expectsMediaDataInRealTime = YES;
    [assetWriter addInput:assetWriterInput];
   
    [assetWriterPixelBufferAdaptor release];
    assetWriterPixelBufferAdaptor =  [[AVAssetWriterInputPixelBufferAdaptor  alloc]
                                     initWithAssetWriterInput:assetWriterInput
                                     sourcePixelBufferAttributes:nil];
    [assetWriter startWriting];
   
    firstFrameWallClockTime = CFAbsoluteTimeGetCurrent();
    [assetWriter startSessionAtSourceTime: CMTimeMake(0, TIME_SCALE)];
   
    // start writing samples to it
    [assetWriterTimer release];
    assetWriterTimer = [NSTimer scheduledTimerWithTimeInterval:0.1
                                                        target:self
                                                      selector:@selector (writeSample:)
                                                      userInfo:nil
                                                       repeats:YES] ;
   
}

-(void) stopScreenRecording
{   [assetWriterTimer invalidate];
    assetWriterTimer = nil;
   
    [assetWriter finishWriting];
    NSLog (@”finished writing”);
}

As you can see startScreenRecording is calls writeSample.

-(void) writeSample: (NSTimer*) _timer
{   if (assetWriterInput.readyForMoreMediaData)
    {
        CVReturn cvErr = kCVReturnSuccess;
       
        // get screenshot image!
        CGImageRef image = (CGImageRef) [[self createARGBImageFromRGBAImage:[self screenshot]] CGImage];
       
        // prepare the pixel buffer
        CVPixelBufferRef pixelBuffer = NULL;
        CFDataRef imageData= CGDataProviderCopyData(CGImageGetDataProvider(image));
        cvErr = CVPixelBufferCreateWithBytes(kCFAllocatorDefault,
                                             FRAME_WIDTH,
                                             FRAME_HEIGHT,
                                             kCVPixelFormatType_32ARGB,
                                             (void*)CFDataGetBytePtr(imageData),
                                             CGImageGetBytesPerRow(image),
                                             NULL,
                                             NULL,
                                             NULL,
                                             &pixelBuffer);
       
        // calculate the time
        CFAbsoluteTime thisFrameWallClockTime = CFAbsoluteTimeGetCurrent();
        CFTimeInterval elapsedTime = thisFrameWallClockTime - firstFrameWallClockTime;
        //NSLog (@”elapsedTime: %f”, elapsedTime);
        CMTime presentationTime =  CMTimeMake (elapsedTime * TIME_SCALE, TIME_SCALE);
       
        // write the sample
        BOOL appended = [assetWriterPixelBufferAdaptor appendPixelBuffer:pixelBuffer withPresentationTime:presentationTime];
   
        if (appended)
        {   NSLog (@”appended sample at time %lf”, CMTimeGetSeconds(presentationTime));
        } else
        {   NSLog (@”failed to append”);
            [self stopScreenRecording];
        }
    }
}

And the code I used to take screenshot:

- (UIImage*)screenshot
{   return [AWScreenshot takeAsImage];
}

Notice how I called [[self createARGBImageFromRGBAImage: [self screenshot]], it’s because my UIImage is a RGBAImage, while the CVPixelBuffer’s format type is kCVPixelFormatType_32ARGB, so I had to fix thing so they match or else, my video would come up in weird tints.

I found the Googled for the createARGBImageFromRGBAImage code, and here it is:

-(UIImage *) createARGBImageFromRGBAImage: (UIImage*)image
{   CGSize dimensions = [image size];
   
    NSUInteger bytesPerPixel = 4;
    NSUInteger bytesPerRow = bytesPerPixel * dimensions.width;
    NSUInteger bitsPerComponent = 8;
   
    unsigned char *rgba = malloc(bytesPerPixel * dimensions.width * dimensions.height);
    unsigned char *argb = malloc(bytesPerPixel * dimensions.width * dimensions.height);
   
    CGColorSpaceRef colorSpace = NULL;
    CGContextRef context = NULL;
   
    colorSpace = CGColorSpaceCreateDeviceRGB();
    context = CGBitmapContextCreate(rgba, dimensions.width, dimensions.height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrderDefault); // kCGBitmapByteOrder32Big
    CGContextDrawImage(context, CGRectMake(0, 0, dimensions.width, dimensions.height), [image CGImage]);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
   
    for (int x = 0; x < dimensions.width; x++) {
        for (int y = 0; y < dimensions.height; y++) {
            NSUInteger offset = ((dimensions.width * y) + x) * bytesPerPixel;
            argb[offset + 0] = rgba[offset + 3];
            argb[offset + 1] = rgba[offset + 0];
            argb[offset + 2] = rgba[offset + 1];
            argb[offset + 3] = rgba[offset + 2];
        }
    }
   
    colorSpace = CGColorSpaceCreateDeviceRGB();
    context = CGBitmapContextCreate(argb, dimensions.width, dimensions.height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrderDefault); // kCGBitmapByteOrder32Big
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
    image = [UIImage imageWithCGImage: imageRef];
    CGImageRelease(imageRef);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
   
    free(rgba);
    free(argb);
   
    return image;
}

And there we go, I managed to record the screen of my Cocos2d app and then save it as a video file.

My next problem is, how do I add audio to my video?

Review: iPhone JavaScript Cookbook

iPhone JavaScript Cookbook

https://www.packtpub.com/sites/default/files/imagecache/productview/1086EXP_iPhone%20JavaScript%20Development%20Cookbook_cov.jpg

This book is written by Arturo Fernandez Montoro.

This book is written for web dev guys, I guess, who wants to write native looking web applications for the iPhone. The book introduces a lot of frameworks to make life easier. the frameworks include native looking assets for user interface building, which you can call with just a line of code. This book also teaches the readers how to work with data using from SQL and AJAX.

Since this is a cookbook, it includes a lot of recipes that readers can copy and paste and revise.

If you want to make applications for the iPhone that look like applications for the iPhone, without having to learn Objective C, the iPhone SDK and all, then this book is a great guide for you. :)  

Link: http://www.packtpub.com/iphone-javascript-cookbook/book/mid/170811hge054

» Fula Fisken: Share screenshots with Sharekit and cocos2d on iPhone

fulafisken:

Posting screenshots on Facebook and Twitter is a great way to show high scores and make your game known to the world. The problem is that writing code for authentication and poking around the different APIs is time consuming. Here is where Sharekit comes in handy. It is an open source library…

Making that Talking App!

So you know Talking Tom, you know, the cat on the iPhone that you can tickle, hit, and repeats your voice in this squeaky voice? And his friends…

http://2.bp.blogspot.com/_6BulNZzpLXk/TEwLK1u0W0I/AAAAAAAACSw/DRV_LONsLwM/s1600/Talking+Baby+Hippo.jpghttp://a3.phobos.apple.com/us/r1000/024/Purple/de/08/17/mzl.xigukdzg.320x480-75.jpghttp://getandroidstuff.com/wp-content/uploads/2010/09/Talking-Tom-Cat.jpghttp://images.gamebase.com.tw/gb_img/0/001/469/1469470.jpg

So I wrote a series of tutorials months ago about how to make your own Talking app.

Check out the tutorial series:

And a couple of people have asked me for the sample project. Particularly about how Dirac. Since my previous project was work related, I obviously can’t give them that, so I sat down today, and whipped up a really simple sample project, which you guys can just copy the Dirac setup off.

It includes all the stuff mentioned in the tutorials, such as how to record the player’s voice, how to monitor when the player is talking and when the player stopped talking, and how to process the recorded audio using Dirac and play it.

Here’s a screenie of the project:

No, it doesn’t have a fluffy animal, and when you test it out, you’d find out that it doesn’t even talk like a chipmunk. Whoever can guess why, gets a, I don’t know, virtual pat on the head? 

To make it sound like a chipmunk, just adjust the pitch (the value is from 0-2, 0 being like really low voice, and 2 being well, chipmunky).

Link to the project: 

http://www.mediafire.com/file/dofz0hofjrlkrg9/VoiceChangingBowtie.zip

I’m providing the project as is, oh, and I only got to test on my Macbook Pro, because i don’t actually own a iOS device. So please test it for me? 

For questions, comments, and answer to why there is a red bowtie, just tweet, email of Facebook me, info is on my sidebar.

While you guys are at it, why don’t you check out some new iOS and books?

EDIT:

According to ManiacDev:

You may also need to tweak the threshold parameter in HelloWorldLayer.mm to get the recording working properly due to differences between the simulator and different iOS devices.

Thanks for pointing it out :)

He also mentioned:

Overall a pretty cool and useful audio effect. While you might have interest in building a Talking Tom app there are many other uses for this – such as changing the tempo of a song, or the key to make it easier to play or speeding up boring instructional audios without making the speaker sound like a chipmunk.

» Tutorial – Same Xcode Project Create Multiple Products for iPhone

What a waste of an app!

Ellen test these bad apps!

1 2 3 4   Next »