隅歩つ

書いて理解を深める

TouchDesigner初心者の参考資料

f:id:chapone:20220310185748p:plain

TouchDesignerを勉強しはじめました。

TouchDesignerは人気があるので、たくさんの情報があります。
しかし、初心者向けとなると情報が少ない気がします。

自分用に簡単にまとめました。

初心者向けYoutube

TDSW YouTube Academyは、ダントツにわかりやすいです。

TDSWの他のコンテンツも上級者向けのものもあるので、上級者も満足じゃないかと思います。

www.youtube.com

書籍

実は、私は最初に本を買って勉強をしはじめました。

最初はまったく理解できませんでした。
何も知らない状態でTouchDesignerを本で勉強するのは難しいですよね。

けど、ちょっと理解できてきたら、細かい部分の説明などは本の方がいいことも多いです。

私の買った本↓

Webコンテンツ

あと、よく目にするのがsatoruhigaさんのサイト。

satoruhiga.com

最後にもう一つ。
田所淳さんの大学の授業(?)の資料

yoppa.org

私はProcessingとライブコーディングの田所さんの本で勉強したので、安心感があります。

今調べたらまとめてくれている記事がありました。

qiita.com

初心者時期が終わった人はこの記事の方が参考になると思います。

私も早く初心者を抜け出したい!

Spotifyのプレイリストのタイトルとアーティスト名をspotipyで取得する

Spotifyで自分の好きな曲を分析したいと思っています。

分析するためにはデータを取得する必要があります。

Spoifyには、spotipyというライブラリがあって、それを使いたいと思います。

まずは、プレイリストのタイトルとアーティスト名を取得したいと思います。

手順

まずは、spotipyをインストールします。

pip install spotipy

spotipyと認証をインポートします。

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

自分のIDを設定します。

client_id='CLIENT_ID'
client_secret='CLIENT_SECRET'

IDを認証します。

client_id_secret = SpotifyClientCredentials(client_id, client_secret)
sp = spotipy.Spotify(client_credentials_manager=client_id_secret)

リストを定義。

list_title_artist=[]

リストに情報を入れる関数。

def getTitleArtist(user,playlist_id):
  playlist=sp.user_playlist(user,playlist_id)
  for item in playlist['tracks']['items']:
    list_title_artist.append(item)
  return list_title_artist

プレ入リストIDを設定。

playlist_id='PLAYLIST_ID'

getTitleArtistでリストに情報を入れる。

title_artist=getTitleArtist('USER_NAME', playlist_id)

リストを表示する。

for i in range(len(title_artist)):
  title=title_artist[i]['track']['name']
  artist=title_artist[i]['track']['album']['artists'][0]['name']
  print(str(i+1)+".",title,"/",artist)

最終的に、以下のように表示されます。

  1. Tree Ghost - Natasha Kmeto Remix / Yppah
  2. The Best Is Yet To Come / Roman Flügel
  3. Dehors (Intro) / パソコン音楽クラブ
  4. Dance of the Mince Pie Martians / The Night Monitor
  5. Harlequin / FM Skyline
  6. Can't You See Me / Saint Petersburg Disco Spin Club
  7. Signals In My Head / DJ Manny
  8. bbycakes (with Lil Uzi Vert, PinkPantheress & Shygirl) / Mura Masa
  9. REFLECTION (feat. 中村佳穂) / tofubeats

これでわかりやすくなりました。

yuuuha.hatenablog.com

Pythonのrandomについて

Pythonのrandomがわからなかったのでまとめてみました。

p5.jsでrandomを使ったことがあったのですが、Pythonではちょっと違いました。

ざっくりと以下があるようです。

  • random.random()
  • random.uniform()
  • random.randint()
  • random.randrange()
  • random.choice()
  • random.sample()

使い方を確認します。

import random

まず、randomをインポートします。

インポートしないと使えないのは、なんか新鮮です。


random.random()

# 0.07559877180636054

これで、0~1の乱数が返ります。


random.uniform(-100,100)

# 92.07673281390541
# -53.74115299039885

任意の範囲の浮動小数点を取得できます。


random.randint(-100,100)

# 88
# -94

任意の範囲の整数値を取得できる。


random.randrange(-100,100,2)

# 20
# -58

randintと同じように使いますが、3つ目の引数でstepを設定できます。

上のように[2]を設定すると偶数を取得できる。


あと、リストから要素を取り出せる[choice]というのがあるようです。

data=['札幌','仙台','東京','名古屋','大阪','広島','福岡']
random.choice(data)

# '東京'

sampleだと複数の要素が取り出せる。

第2引数は要素の個数。

data=['札幌','仙台','東京','名古屋','大阪','広島','福岡']
random.sample(data,3)

# ['広島', '東京', '仙台']

choicesも複数の要素が取り出せるが、重複がある。

第2引数の[k]は要素の個数。

data=['札幌','仙台','東京','名古屋','大阪','広島','福岡']
random.choices(data,k=6)

# ['名古屋', '大阪', '仙台', '札幌', '札幌', '仙台']

choicesは[weights]で重みを付けれる。

random.choices(data,weights=[1,1,2,1,1,1,1],k=6)

# ['広島', '東京', '東京', '札幌', '仙台', '名古屋']

randomの種類、結構多いですね。。

Blenderでやってみた

Blenderで確認しました。

cube(四角)はrandom、sphere(丸)はrandom.uniformで位置を設定しています。

cubeはx軸のプラス方向のみになっていて、sphereはマイナスとプラスの両方になっています。

blender-python
cube→random、sphere→uniform

import bpy
import random

for m in bpy.data.meshes:
    bpy.data.meshes.remove(m)


def make_sphere(x, y, z):
    loc = (x, y, z)
    sphere = bpy.ops.mesh.primitive_uv_sphere_add(location=loc)


def make_cube(x, y, z):
    loc = (x, y, z)
    cube = bpy.ops.mesh.primitive_cube_add(location=loc)


def main():
    for i in range(30):
        make_sphere(
            random.uniform(-1, 1)*10,
            random.uniform(-1, 1)*10,
            random.uniform(-1, 1)*10)
        make_cube(
            random.random()*10,
            random.random()*10,
            random.random()*10)


if __name__ == '__main__':
    main()

また、「特定の分布に基づく乱数生成関数」というのがあるようです。

「独習Python」に載っていたのですが、よくわからなかったです。

わかったら改めてまとめます。