leap motionとlambdaで「第九」を鳴らしてみる

27
Ⓒ Classmethod, Inc. Leap motionとLambdaを使っ て「第九」を鳴らしてみる 1 DevIO MTUP11-SAPPORO-006 清野 剛史, AWSエンジニア, Classmethod Inc, Dec, 12, 2004

Upload: tsuyoshi-seino

Post on 15-Jul-2015

912 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

Leap motionとLambdaを使って「第九」を鳴らしてみる

1

DevIO MTUP11-SAPPORO-006

清野 剛史, AWSエンジニア, Classmethod Inc,

Dec, 12, 2004

Page 2: Leap MotionとLambdaで「第九」を鳴らしてみる

みなさん

ここまで休憩も無しの長丁場

お疲れ様です

2

Page 3: Leap MotionとLambdaで「第九」を鳴らしてみる

癒やしのお時間です

3

Page 4: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

自己紹介• 清野 剛史 • AWSエンジニア • 7月入社 • つまりまだまだ新人 • 今までのDevIOでの発表 • 最近のガジェットについて • Yoについて

• AWSについてロクに触れていない • 今夜はちょっとAWS触れます

4

Page 5: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

re:Invent 2014• AWS Lambda発表

5

Page 6: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

これからのコアサービスになるかも

6

Page 7: Leap MotionとLambdaで「第九」を鳴らしてみる

AWS Lambdaとは

7

Page 8: Leap MotionとLambdaで「第九」を鳴らしてみる

20分前に説明されているかと思うので割愛

8

Page 9: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

Lambdaの使い道

• 定期バッチ • 動画や写真等のフォーマット、サイズ変換 • IoT (Internet of Things)、センサー系データの処理 • データをDWH等に投入する際の前処理 • Kinesis等のリアルタイムデータの後処理

9

Page 10: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

Lambdaの使い道

• 定期バッチ • 動画や写真等のフォーマット、サイズ変換 • IoT (Internet of Things)、センサー系データの処理 • データをDWH等に投入する際の前処理 • Kinesis等のリアルタイムデータの後処理

10

Page 11: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

Leap Motion

11

Page 12: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

Leap Motion SDK V2 (Beta)変更点

・Skeletal Trackingの導入

・右手、左手の検出

・指の種類

・指の関節を検出

・Pinch、Grabの検出

・検出値の信頼度(Data Confidence)の表示

C++, Unity/C#, JavaScript, Java, Python, Objective-C等の言語を用意

今回はJavaScript SDKのラップライブラリ「LeapJS」を使用

https://github.com/leapmotion/leapjs12

Page 13: Leap MotionとLambdaで「第九」を鳴らしてみる

Demo

13

Page 14: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

今回やってみること1. Leap Motionよりデータを出力

2. Cognitoを使用してJavaScriptからKinesisに投入

3. KinesisからLambdaを起動

4. Lambdaを使ってデータを整形してSQSに入れる

5. JavaScriptからSQSデータを拾う

6. Web Audio APIを使用して音量、位相を変える

14

Page 15: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

Web Audio API・音声を処理、合成するためのWebアプリケーション向けHTML5 JavaScript API

・音源を「再生」するのではなく「音源」として解釈し、ピッチの調整、フィルター、PANNING等が可能。

・音波から作りこむような仕様の為、シンセサイザーの基礎知識が無いとハードルが高い

・ラップライブラリが出てきて使いやすくなった

https://github.com/goldfire/howler.js/tree/2.0

15

Page 16: Leap MotionとLambdaで「第九」を鳴らしてみる

Demo

16

Page 17: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

今回やってみること

17

Page 18: Leap MotionとLambdaで「第九」を鳴らしてみる

Song

Beethoven: Symphony #9 In D Minor, Op. 125, "Choral" - 4. Presto

18

Page 19: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

Kinesis Settingstream_name = Demono9

ARN = arn:aws:kinesis:us-east-1:xxxxxxxxxx:stream/Demono9

number of shard = 1

19

Page 20: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

SQS Settingqueue_name = Demono9

URL = https://sqs.us-east-1.amazonaws.com/xxxxxxxxxx/Demono9"

ARN = arn:aws:sqs:us-east-1: xxxxxxxxxx:Demono9

20

Page 21: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

Cognito 認証var AWS = require('aws-sdk');

var awsRegion = "us-east-1";

var cognitoParams = {

AccountId: "XXXXXXXXXXXX",

RoleArn: "arn:aws:iam::XXXXXXXXXXXX:role/Cognito_demo09_DefaultRole",

IdentityPoolId: "us-east-1:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

};

AWS.config.region = awsRegion;

AWS.config.credentials = new AWS.CognitoIdentityCredentials(cognitoParams);

AWS.config.credentials.get(function(err) {

…………後略

21

Page 22: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

Lambdavar aws = require('aws-sdk');

var kinesis = new aws.Kinesis({region:'us-east-1'});

var sqs = new aws.SQS({region:'us-east-1'});

exports.handler = function(event, context) {

for(i = 0; i < event.Records.length; ++i) {

encodedPayload = event.Records[i].kinesis.data;

payload = [ごにょごにょと変換処理]

}

var params = {

MessageBody: payload,

QueueUrl: 'https://sqs.us-east-1.amazonaws.com/xxxxxxxxxx/Demono9',

DelaySeconds: 0,

};

sqs.sendMessage(params, function(err, data) {

…………後略

22

Page 23: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

howler.js// Setup the sounds to be used.

var sound1 = new Howl({

src: ['Presto.m4a'],

html5: false

});

var playing = false;

// Define the tests to run.

var id;

var webaudio = [

function(fn) {

sound1.once('play', function() {

//label.innerHTML = 'PLAYING';

playing = true;

setTimeout(fn, 20000);

});

id = sound1.play();

sound1.pos(0,0,0);

…………後略

23

Page 24: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

LeapJS// Main Leap Loop

Leap.loop(options, function(frame) {

// Showcase some new V2 features

for (var i = 0, len = frame.hands.length; i < len; i++) {

hand = frame.hands[i];

for (var j = 0, len2 = hand.fingers.length; j < len2; j++) {

finger = hand.fingers[j];

if (i == 0 && j == 2 && playing){

x = Math.sin(finger.dipPosition[0] / 250);

y = -Math.cos(finger.dipPosition[0] / 250);

if (x > 1){

x = 1

}

if (y < -1){

y = -1;

}

sound1.pos(x,0,y);

start.style.marginLeft = Math.round(finger.dipPosition[0] * 3) + 'px';

sound1.volume(finger.dipPosition[1] / 400);

…………後略

24

Page 25: Leap MotionとLambdaで「第九」を鳴らしてみる

Demo

25

Page 26: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

まとめクラスメソッドではハードウェアエンジニアを募集しております。

26

Page 27: Leap MotionとLambdaで「第九」を鳴らしてみる

Ⓒ Classmethod, Inc.

#cmdevio

ご静聴ありがとうございました。 スライドは後日ブログで公開します。

27

DevIO MTUP11-SAPPORO-006