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