読者です 読者をやめる 読者になる 読者になる

TaillookTech

備忘録

Processingとminimでインタラクティブアート作品を作る

Processing

minimとは

minimはProcessing1.0以降のバージョンで標準のサウンドライブラリ.
短いコードでオーディオのコントロールができる!

Minim | Compartmental

今回作ったもの

画面中の風船をユーザの声で膨らませるもの.
“声を出し続けないと風船がしぼんじゃうよ!”(草)
“膨らませすぎると割れちゃうよ!”(草)
子供向けに何か作れないかなと思って作ったはいいけど唾がキーボードに散るのが嫌なので不採用. f:id:taillook:20170321185217p:plain
f:id:taillook:20170321185127p:plain
f:id:taillook:20170321185122p:plain
画像は"いらすとや"から

動作

  1. マイクから音を拾う
  2. 音量が一定以上で膨らませる
  3. 音量が一定以下でしぼませる
  4. 風船が一定以上の大きさになると破裂する
  5. Shiftキーでリセット

環境

  • MacBookPro 2016
  • macOS Sierra
  • Processing 3.3
  • minim 2.2.2

GitHub

github.com

コード

import ddf.minim.*;

Minim minim;
AudioInput in;
float volumeIn;
float volumeTemp;
float size;

PImage balloon;
PImage explosion;

void setup() {
  //fullScreen();
  size(500,500);
  minim = new Minim(this);
  in = minim.getLineIn(Minim.MONO, 512);
  fill(200,0,0);
  balloon = loadImage("husen.png");
  explosion = loadImage("husen2.png");
  size = 50;
}

void draw() {
  background(0);
  volumeIn = map(in.left.level(), 0, 0.5, 0, 10);
  
  if (size < height*0.95) {
    if (volumeIn>5){
      size = size + 10;
    }else {
      if (size > 20) {
        size = size - 0.5;
      }
    }
    image(balloon, width/2-size/2+random(-5, 5), height/2-size/2+random(-5, 5), size, size);
  }else {
    image(explosion, width/2-size/2+random(-5, 5), height/2-size/2+random(-5, 5), size, size);
  }
}

void stop(){
  in.close();
  minim.stop();
  super.stop();
}

void keyPressed() {
  if (key == CODED) {
    if (keyCode == SHIFT) {
       size = 50;
    }
  }
}

subprocess.callでPythonからシェルコマンドを叩く

Python bash

備忘録

import subprocess

subprocess.call('ls -l', shell=True)
subprocess.call(['ls', '-l'])

出力結果は同じ
自動でパースさせる場合にshell=Trueが必要.

ImageSnapを使ってbash上で写真を撮る

bash

はじめに

bashコマンドで写真とか撮れないかなーって探してたらあったので使ってみた.

ImageSnapとは

ImageSnapはWebカメラから画像をキャプチャできるコマンドラインツール.

詳細

github.com

使ってみる

環境

インストール

brewでインストールできる.
brew install imagesnap

ヘルプ

とりあえずimagesnap -h

USAGE: imagesnap [options] [filename]
Version: 0.2.5
Captures an image from a video device and saves it in a file.
If no device is specified, the system default will be used.
If no filename is specfied, snapshot.jpg will be used.
Supported image types: JPEG, TIFF, PNG, GIF, BMP
  -h          This help message
  -v          Verbose mode
  -l          List available video devices
  -t x.xx     Take a picture every x.xx seconds
  -q          Quiet mode. Do not output any text
  -w x.xx     Warmup. Delay snapshot x.xx seconds after turning on camera
  -d device   Use named video device

写真を撮る

imagesnap -q -w 1 snapshot.pngで写真が撮れる.
オプションはqとwを使っている.
qはリザルトとかの出力をなくす.wは写真を撮る時間をコマンド実行時から遅らせる.
今回は1秒遅らせた.(このオプションを付けないと画像が真っ暗になった.レンズのライトが着くタイミングとかなのかな…?)

何秒かごとに写真を撮る.

tオプションを付けることで何秒かごとに写真を撮ることができる.
imagesnap -t 1.00で1秒ごとに写真を撮ることができる.

結果

open snapshot.pngで写真を開く.
f:id:taillook:20170306232438p:plain
こんな感じの写真が撮れた.

感想

後ろに居る人にバレずに写真を撮りたい時とかに使えそう.

MacのsayコマンドとPythonでツイート読み上げスクリプト書いた

Python bash

経緯

知り合いのオタクがVOCALOID?のゆかり?にツイート読み上げさせてたのでやってみたかった.

実装

ツイッターのストリーミングAPIを使って取得したツイートの内容をPyhtonのsubprocessモジュールでbashのsayコマンドで読み上げさせる.
sayコマンドはOS X独自のコマンドでLinuxとかではGoogleとかの読み上げ機能を使うといいみたい.
sayコマンドで使える音声は色々あってデフォルトではKyokoという女の声.

ha1f-blog.blogspot.jp
ツイッターのストリーミングはこのページのコードを参考にしました.
qiita.com
sayコマンドの使い方はここを参考にしました,

動作

こんな感じの出力が出てKyokoさんが喋ってくれる.
f:id:taillook:20170304185116p:plain

コード

# -*- coding: utf-8 -*-
import tweepy
import subprocess
from datetime import timedelta

#CK = 'XXXXXXXXXXXXXXXXXXXXXX'                             # Consumer Key
#CS = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'         # Consumer Secret
#AT = 'XXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' # Access Token
#AS = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'         # Accesss Token Secert

class Listener(tweepy.StreamListener):
    def on_status(self, status):
        status.created_at += timedelta(hours=9)

        print('------------------------------')
        print(status.text)
        print(status.author.name + status.author.screen_name +  unicode(status.created_at) + status.source)
        subprocess.call('say ' + '"' + status.author.name + 'さんのツイート"'.decode('utf-8'), shell=True)
        subprocess.call('say ' + '"' + status.text + '"', shell=True)
        return True

    def on_error(self, status_code):
        print('Got an error with status code: ' + str(status_code))
        return True

    def on_timeout(self):
        print('Timeout...')
        return True

auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)

listener = Listener()
stream = tweepy.Stream(auth, listener)
stream.userstream()

bashで syntax error near unexpected token `(' が出た

bash 備忘録

bashsyntax error near unexpected token `('が出たときの話

bashでsayコマンドで遊んでたら syntax error near unexpected token `('というエラーが出た.
例:say go on the next page(唐突)
このときに引数の文字列をダブルクオーテーションで囲めばいいだけだった.
say "go on the next page(唐突)"

MarkdownにHTMLを埋め込む

MarkDown HTML

概要

いままでMarkdown記法のみしか書けないと思っていたので書く

やり方

そのままMarkdownに直接書いて大丈夫らしい

やってみた

###<ul>
  <li>Swift</li>
  <li>C++</li>
  <li>Python</li>
</ul>

ローカルのGitリポジトリをGitHubの管理下に置く

Git

概要

ローカルで使っているGitHubに公開したくなったとき用メモ

手順

  1. GitHubで新しくリポジトリを作る
  2. git remote add origin 作ったリポジトリのURL
  3. git pull origin master
  4. git add .
  5. git commit -m "first commit"
  6. git push origin master