ABCを読み上げるアプリをOpenEarsを使って作ってみる。

(XcodeのiOS6 iPhone Simulatorで試しています。)

サンプルアプリの内容

画面上にUILabelで、ABCDのパネルをランダムに配置して、

ゆびでタッチしたらそのアルファベットを組み込んだOpenEarsに

読み上げてもらう。OpenEars組み込みも、利用方法もスゴいシンプル。

英語のちょっとした遊びツールを作るのにはよさそう。

ポイント

OpenEarsというテキスト読み上げもできるオープンソースを組み込む

組み込み方法は、下記のOpenサイトを参考に。

OpenEars:http://www.politepix.com/openears/

サンプルコード

#import “ViewController.h”

#import <Slt/Slt.h>

#import <OpenEars/FliteController.h>

#import <QuartzCore/QuartzCore.h>

@interface ViewController ()

@property (strong, nonatomic) FliteController *fliteController;

@property (strong, nonatomic) Slt *slt;

@end

@implementation ViewController

@synthesize fliteController;

@synthesize slt;

– (void)viewDidLoad

{

    [super viewDidLoad];

    

    NSArray *words = [@”A B C D E F G” componentsSeparatedByString:@” “];

    

    for (NSString *str in words) {

        UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];

        l.font = [UIFont systemFontOfSize:30];

        l.text = str;

        l.textAlignment = 1;

        l.backgroundColor = [UIColor blackColor];

        l.textColor = [UIColor whiteColor];

        

        l.layer.cornerRadius = 6;

        float angle = (arc4random()%31) * M_PI * 0.1;

        l.transform = CGAffineTransformMakeRotation(angle);

        l.center = CGPointMake(arc4random() % 200 + 50, arc4random() % 400 + 40);

        

        [self.view addSubview:l];

        

        l.userInteractionEnabled = YES;

        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];

        [l addGestureRecognizer:tap];

    }

}

– (void)tap:(UIGestureRecognizer*)gr

{

    static BOOL first = YES;

    if (first) {

        first = NO;

        [self.fliteController say:@”ABC talking board!” withVoice:self.slt];

    }

    else {

        [self.fliteController say:((UILabel*)gr.view).text withVoice:self.slt];

        [UIView animateWithDuration:0.5 animations:^{

            gr.view.center = CGPointMake(gr.view.center.x, –100);

        } completion:^(BOOL finished) {

            [gr.view removeFromSuperview];

        }];

    }

    

}

– (FliteController *)fliteController {

if (fliteController == nil) {

fliteController = [[FliteController alloc] init];

}

return fliteController;

}

– (Slt *)slt {

if (slt == nil) {

slt = [[Slt alloc] init];

}

return slt;

}

– (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end