GolangでTello eduを遊んでみた?

この記事はOUCC Advent Calendar 2022の24日目の記事です。前回の記事はカキのたねさんの「c#でAWSLambda関数を作ってみた」でした。

今回の記事のタイトルは「GolangでTello eduを遊んでみた?」です。
なぜ?がついているのでしょうか。考えてみてください。

The Go gopher was designed by Renee French

はじめまして、Namifuji です。今日は家庭でも簡単に楽しむことができるドローンtello eduについてご紹介させていただきます。

まず、tello eduとはなんぞ?

Tello、Tello eduはドローン界のAppleと言われるDJIと、CPU部分をIntelで共同開発し、Ryze Techから販売されているトイドローンです。機能的にも立派にドローンです。
https://www.ryzerobotics.com/
上記のURLから約1万〜2万円で購入することができます。
そのため、皆さんのクリスマスプレゼントには持ってこいの品だと思います。
法律の許す範囲内で楽しんでいただけたらなと思います。
またTelloはスマホのアプリもしくはGolang、Python、Scrachを通じて操作することができます。
さらに取得した飛行風景をVRや、スマホ、コンピュータを用いることで手軽に見ることができます。
他にも顔識別や音声認識の機能も追加することができるようです。

環境

OS: macOS Ventura 13.0.0
Goのバージョン: go1.16 darwin/arm64
Pythonのバージョン:Python 3.10.9

IDE: Goland
エディタ: visual studio code

準備

Golangのフレームワークであるgobotをインストール

$ go get -d -u gobot.io/x/gobot/...

やったこと

1、ドローン自体の動作確認
スマホ版のアプリからドローンに接続し、動作確認

結果:飛んだ 。
<br/>
ここで先に以下で用いるドローンの飛行写真はアプリやGolangなどで飛ばした場合とすべて共通で用います。理由としましてはドローンを飛ばすときに発生する音があまりにも大きくて、近所迷惑にならないか不安で、撮る余裕があまりありませんでした。
<br/>
<br/>
<a href="https://blog.oucc.org/?attachment_id=993&quot; rel="attachment wp-att-993"><img src="https://blog.oucc.org/wp-content/uploads/2022/12/IMG_0293-1-2.jpg&quot; alt="" width="195" height="146" class="aligncenter size-full wp-image-993" /></a>

<br/>
<br/>

2、 gobotのフレームワークを使わずに、飛ばす。

package main

import "net"

func main() {
    conn, _ := net.Dial("udp", "192.168.10.1:8889")
    conn.Write([]byte("command"))
    conn.Write([]byte("takeoff"))
    conn.Write([]byte("flipoff"))
}

<br/>
<a href="https://blog.oucc.org/?attachment_id=993&quot; rel="attachment wp-att-993"><img src="https://blog.oucc.org/wp-content/uploads/2022/12/IMG_0293-1-2.jpg&quot; alt="" width="195" height="146" class="aligncenter size-full wp-image-993" /></a>
<br/>
結果:飛んだ 。
<br/>

<br/>

  1. gobotを使って飛ばす。
package main

import (
        "fmt"
        "time"

        "gobot.io/x/gobot"
        "gobot.io/x/gobot/platforms/dji/tello"
)

func main() {
        drone := tello.NewDriver("8888")

        work := func() {                                // この関数内に実行する動作を設定
                drone.TakeOff()

                gobot.After(5*time.Second, func() {
                        drone.Land()
                })
        }

        robot := gobot.NewRobot("tello",
                []gobot.Connection{},
                []gobot.Device{drone},
                work,
        )

        robot.Start()
}

<br/>
<a href="https://blog.oucc.org/?attachment_id=993&quot; rel="attachment wp-att-993"><img src="https://blog.oucc.org/wp-content/uploads/2022/12/IMG_0293-1-2.jpg&quot; alt="" width="195" height="146" class="aligncenter size-full wp-image-993" /></a>
<br/>
結果:成功。
<br/>
<br/>

4 pythonでも飛ぶの確認

import socket
import time

socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
tello_address = ('192.168.10.1' , 8889)

socket.sendto('command'.encode('utf-8'),tello_address)
socket.sendto('takeoff'.encode('utf-8'),tello_address)

結果:成功

上記で用いたコードから分かるように、ドローンを飛ばすためのプログラム自体はとても簡単に書けます。
接続先のipアドレスとポートを設定し、コマンドを送信するだけで遊べます。
Golang自体も簡単なプログラムを書く程度であれば、他の言語で何か作った経験があればすぐに理解できると思います。

上記の例ではただ単にドローンを離陸させただけです。

5 それ以外にしたこと
そこでドローンを空中で回転させたり、ドローンの高度を設定できるようにします。以下のgobotのドキュメントの参考にしました。(https://pkg.go.dev/gobot.io/x/gobot/platforms/dji/tello)
それによって入力したキーに応じて空中で一回転したり、時間と共に高度を上げたり、下げたりすることができました。

package main

import (
    "gobot.io/x/gobot"
    "gobot.io/x/gobot/platforms/dji/tello"
    "gobot.io/x/gobot/platforms/keyboard"
)

func handleKeyboardInput(drone *tello.Driver) func(interface{}) {
    return func(data interface{}) {
        key := data.(keyboard.KeyEvent).Key

        switch key {
        case keyboard.A:              // 左へ移動
            drone.Left(3)
        case keyboard.D:              // 右へ移動
            drone.Right(3)
        case keyboard.U:              // 前方へ移動
            drone.Forward(3)
        case keyboard.J:              // 後方へ移動
            drone.Backward(3)
        case keyboard.L:              // 着陸
            drone.Land()
        case keyboard.E:              // 終了
            return
        case keyboard. B:             // 後ろ向きに回転
            drone.BackFlip()
        default:                           // 移動しない
            drone.Forward(0)
            drone.Backward(0)
            drone.Left(0)
            drone.Right(0)
        }
    }
}

func main() {
    keys := keyboard.NewDriver()
    drone := tello.NewDriver("8889")

    work := func() {
        drone.TakeOff()
        drone.BackFlip()

        for {
            keys.On(keyboard.Key, handleKeyboardInput(drone))
        }
    }

    robot := gobot.NewRobot("tello",
        []gobot.Connection{},
        []gobot.Device{drone},
        work,
    )

    robot.Start()
}

終わりに

当日になって始めたので、とても中身の薄い内容となってしまいました。
そのため、春休みなど時間があるときに画像認識の機能などの機能もつけてみたいと思った。

"GolangでTello eduを遊んでみた?" の続きを読む

お気に入りの量産型・地雷系ファッションブランドについて語る

 この記事はOUCC Advent Calendar 2022の22日目の記事です。前回の記事はMedjedさんの「あなたの継承大丈夫?委譲で書き換えた方がよくない?」でした。
 皆様初めまして。OUCC2回生の紅茶です。ciffeliaさんの記事はもちろん、他の部員の記事のクオリティの高さに圧倒されるばかりです。watamarioさんの「OUCC の 3 年間を振り返る [前編]」を見て、技術系だけでなく文化的な話をするのもありだと思ったので(私に技術力がないので)趣味の話をします。

 実はここ1年ほどで「量産型・地雷系ファッション」にハマりました。

 量産型とはすとぷりやあんスタなどの若い男性アイドルのライブ会場によくいる「ザ・女の子!」みたいな恰好のことで、地雷系とは「明日、私は誰かのカノジョ」に出てくるホスト狂いの女の子「ゆあてゃ」みたいなザ・女の子だけどピアスバチバチで黒の多いどこか病んだ印象の恰好のことです。

 今は流行が多少違いますが違いがわかりやすいツイートがあったので載せておきます。
 地雷系と量産型の違い

 量産型・地雷系ファッションで知らない人はいないインフルエンサー・イモちゃんが有名どころのブランドをまとめた記事があるので紹介しておきます。これで大体は網羅できています。
 2020年 最新版!おすすめの地雷女子向けブランド
 【2021年最新版】おすすめの量産型ヲタク向け洋服ブランドまとめ

 これだけ大量のブランドがあると「どこから探せばいいのか分からない!」となる方もいらっしゃると思います。(OUCCに量産地雷服を着る人が私以外いるのかはツッコんではいけない)そこで私が個人的におすすめするブランドを書き残そうと思います。
 
おすすめブランド一覧は、安い順(最後のみ例外)に

  1. MA*RS
  2. LIZ LISA
  3. Secret Honey
  4. BUBBLES

の5つです。名前をクリックしていただければ公式通販サイトに飛べます。

 最初にMARSを紹介します。
 昔はギャル系ブランドとして有名だったのですが、時代の流れもあって次第に地雷系を押し出すようになりました。
このブランドで特徴的なのは

  • プチプラ価格で手に入る服
  • トップスの胸元の取り外し可能なサテンリボン
  • 界隈で有名なインフルエンサーとのコラボ

です。

一例を挙げると、肩開きクロスブラウス
 肩開きクロスブラウス
(画像は公式通販サイトより引用、これより下に登場する画像も同様)

 まず値段が4950円と量産型・地雷系ファッションブランドの中では安いです。ユニクロやGUに比べたら高いですが、後述のようにトップスで10000円弱は行くのが普通の世界なので「安い」です。
 安い分他のブランドに比べてデザインや質感で見劣りする部分もありますが(特にボトムスで顕著)、地雷系デビューにはもってこいです。
 もっと安い服で言えばSHEINとかに有名な量産型・地雷系ブランドをパクった服が1000円とかで売られていますが、クオリティは悲惨そのものです。
 また画像を見ていただいたら分かるように、胸元にサテンリボンがついていますよね。これはMARSならではです。
 そしてこのモデルさんは「砂糖みう」と言い、界隈では割と有名な方です。

次にLIZ LISAを紹介します。
 MARS同様昔はギャルブランドとして有名でしたが、今は量産型寄りのブランドになりました。
このブランドで特徴的なのは

  • リボンとビジュー、フリルをふんだんに使った服
  • とことん甘い、ガーリーな世界観
  • クオリティの高い小物類

    です。

 界隈で非常に知名度の高い服があるので紹介しておきます。セーラーカラーセットアップ
セーラーカラーセットアップ
 画像を見ていただいたら分かるように、リボンとビジュー、フリルが目立つデザインになっていますよね。実は後ろもリボンになっていて、結んでウエストアップできる優れものです。値段は11880円と跳ね上がりましたが上下セットの中ではまだ安いほうです。
 モデルさんもフランス人形を思わせるような儚く美しい雰囲気で、服の女の子らしさを前面に打ち出したデザインも相まって本当に人形がたたずんでいるようです。
 
小物類も同様で、リボンとビジューをふんだんに使ったデザインになっています。
ジュエリー4つセットリボンクリップ
ジュエリー4つセットリボンクリップ
 他のブランドの小物類が「正直100均で材料買って工作すれば作れるよね…」というものが多い中、リズリサは並大抵ではないこだわりを感じます。デザインが圧倒的に優れていると思いますし、大きさや色も豊富で見ていて楽しいです。

次にSecret Honeyを紹介します。
昔はマリンテイストの服やディズニーコラボの服を販売していました。特にディズニーコラボの服はクオリティが高く、転売が大量に発生したこともあったそうです。
このブランドで特徴的なのは

  • ウエストの引き締まった、女性らしさと可愛さを両立させたクオリティの高いセットアップ
  • レトロだけどトレンドを追うガーリーなデザイン

です。
アクセサリーリボン長袖セットアップ
スタンドフリルラッフルセットアップ
アクセサリーリボン長袖セットアップ
スタンドフリルラッフルセットアップ
 Secret Honeyのセットアップは界隈では非常に有名で、種類によっては販売開始から数日で店舗から在庫がなくなることもあります。
 フリルやリボンといった女の子が憧れる要素をたっぷり詰め込んだデザインだけでなく、品質のいい布、後ろのウエストリボンやウエストがきゅっと引き締まる服の作り、程よい脚の露出によってスタイルアップ効果も抜群といった要素もあって絶大な支持を得ています。
 HEP FIVEに行ったらSecret Honeyのセットアップを着た女の子にたくさん出会えるので幸せになります。
 LIZ LISAでも「リボンとフリルをふんだんに使ったデザイン」と出てきましたが、また違った雰囲気に仕上がっていますよね。それはこのSecret Honeyのコンセプト「レトロガーリー」にあります。LIZ LISAは女の子らしさを全面的に打ち出したかわいらしいデザインになっているのに対して、Secret Honeyでは少し大人っぽい落ち着いたデザインになっています。ここにも各ブランドのデザイナーさんのこだわりを感じますね。
 その分お値段は張って、上下セットで15000円とか恐ろしい値段になりますが買う価値は絶対にあります。自分を大好きになれる素敵な服です。

 最後にBUBBLESを紹介します。
BUBBLESは量産型・地雷系ブランドとしても有名ですが、圧倒的に有名なのは黒エナメルの厚底シューズです。界隈ではたいていの人がBUBBLESの厚底を持っています。
ダブルバックル厚底シューズ
ダブルバックル厚底シューズ
 見てくださいこの厚底!!!なんとつま先で6cm、かかとで13cmあります。値段も7590円と可愛くないですが、圧倒的に可愛いですし、スタイルを盛れますし、可愛さ最強の自分になれます。「背が高くて履けない…」や「厚底初心者だからもっと低いのがいい」と言う方に向けて、かかとの高さが9.5cmや5cmの同デザインのものも出ているのでご安心ください。
 他にも様々なデザインの黒厚底シューズが出ているのでぜひサイトをのぞいてみてください。

以上、個人的お気に入りブランド紹介を終わります。
皆様の量産型・地雷系ライフが良くなることを祈ります。
最後まで見てくださりありがとうございました!

音MADの話

執筆者: ちょくぽ

これは OUCC Advent Calendar 2022 の 12/9 の記事です。
記事中の〇はただの検索避けです

音MADをつくろう

音MADを作る動機はファンアートなどと同じですが、音MADに使われる技術は他のことにも使えます。基本的にDAWとvocalshifterの技術なので。

  • 合成音声に歌わせる・変な声を出させる
  • 歌の調整をする(人間でも合成音声でも)
  • 普通の動画で音ハメ

などなど……

前提

Q. 音MADって著作権的にどうなの?
A. 元ネタ(素材)の作者に訴えられた場合、確実に負けます。
音MADを作るなら、著作権者に目を付けられないよう、黙認されるよう常に心がけましょう。(要するに二次創作と同じ)

Q. 音MADって儲かるの?
A. 商用利用が許可されている素材だけで作れば広告を付けることはできますが、それが面白くなる確率はかなり低いです。そもそも儲けようと思わない方がいいです。著作権的にも。

Q. 消されないの?
A. 消されます。よっぽどでない限り動画削除だけで済ませてくれますが……

原作者や他のMAD製作者への、可能な限りのリスペクトor配慮をしましょう。
二次創作界の空気感としてもそういう所は特に大事です。というかどの界隈でも発信をするなら半年ROMれ。

海外のフェアユースの思考は日本の感覚とかけ離れているので参考にしてはダメです

音MADの技術の情報はどこで手に入る?

音MADでググるのも良いですが、ニ〇二コだと音楽+コメント付きなので情報が多いです(経験談)。素材はほとんど淫〇ですが。
というか、音MAD自体サムいネタで遊ぶのがメインのような界隈です。勘違いしないように

淫〇や2〇兄貴周りは面白い情報がちょくちょくあります
2〇式動画講座が有能すぎ
純粋な作曲に関する情報も、当然役に立つのでありです

素材集め

素材を集めます。

  1. 原曲
    MADの原曲となる曲を探して、必要な長さのmp3やmp4を入手します。ボカロなどは作者が配布しているケースがありますが、すべての音を手元で作ればかっこいい……(地獄)。

  2. 音声素材
    MADの楽器の音やボーカルにするために、素材を集めます。楽器にするならキャラクターの声質や音圧を重視し、環境音をドラムにしましょう。
    キャラクターに歌わせたいなら、一文字一文字あつめるのが一番早い。歌詞をガン無視して面白いセリフを音合わせする方が楽。

  3. 動画素材
    音MAD制作は音作りがすべてではありません。原作に寄せた動画素材を集めたり、MP4を透過したり……同じジャンルのMAD動画も参考にしましょう。手描きは自信があれば。

二次創作を許可しているコンテンツは探せばかなり多いです。
実際によく使われている素材は、BB配布素材のように権利者に削除する気がないもの、権利者がtwitterでMAD動画に言及しているものなど、セーフ寄りのグレーがほとんどですが……
(ニ〇二コで流行っている例のアレの多くは許可されているわけではないので注意)

ツール

  • REAPER
    DAWならなんでもいいですが、REAPERがおすすめです。有料として紹介されることが多いですが、普通に無料で使えます。

  • VocalShifter
    音声が一定の音程になるよう調整し、素材にできる。音の外しや調子など細かな調整もできる。

  • Wavetone
    テンポ測定や耳コピが必要なら。

  • 動画編集ソフト
    Aviutlなんてソフトは過去の産物なので、普通に最近出たソフトを使いましょう。私はAviutl使います。どれも機能はだいたい一緒です。

メイン

REAPERの操作は覚えれば便利な操作が書ききれないほどあるので、適宜調べてください
file

web上の適当なオンラインBPM計測などで音楽に合わせてクリックしてテンポを解析したら、REAPERに設定します。

原曲(写真上)をREAPERにドロップすれば、グリッド線がなんとなく波形に合います。

REAPER上ではマウスの他に Alt+ドラッグ、S、ctrl+shift+n、ctrl+D、F2、Alt+S などの操作をよく使います。適当に試して体で覚えましょう。

file

素材を母音などで分割し、音楽に合うように配置(大抵の場合、八分音符より細かい調整は必要ないです)
原曲の力を借りているので当然、これだけでMADとして聞けるレベルになります。実際、分割と配置のみでランキング上位になるような音MADも多いです。

エフェクト(ここではVST)でリバーブを付ける、パン(FXの左のつまみ)をトラックごとに左右にずらすなどすると聞きやすくなります

file

次に、音程を変えてみましょう
vocalshifterに素材を渡して素材をダブルクリックすると、ピッチ補正ができます。
黄色い線でピッチを平坦にすれば、音程を変えやすい素材として利用できます。黄色い線(今はD4)がこの音声の音程なので、覚えておきます。

file

これで作成したピッチ調整済wavファイルをREAPERに持っていきます。複数アイテムを選択してF2から一括でwavファイルを変更できます。

アイテムを選択してShift+0、Shift+9で音程を1ずつ変えられるので、MIDIファイルや楽譜、WaveToneなどとvocalshifterの黄色い線を見比べながら調整しましょう。単純作業です。
file

これができたら音作りはできたも同然です。
細かい技術は最初から調べるのではなく、とりあえず触ってから学んだ方が意欲も学習速度も上がります。

場所によって黄色の線を数音高くしたり低くすることでビブラートや感情をつけられます。
クオリティ高い音MADでは、次の手順を踏むものが割とあります。

  • vocalshifterで平坦にした声をREAPERで並べ、切り貼りタイミング合わせだけする
  • それを再度vocalshifterに戻し、音程をつける
  • 音程が大きく飛ぶところではしゃくりや裏返り、伸ばすところではビブラートなどをつける

スケールを外すと目立ちすぎるので、外すときの音は考えましょう。(これ以上は音楽理論の話)

Aviutlの編集は割愛しますが、BPMを指定してグリッド線を小説ごとにする設定項目があります。活用しましょう。
音が鳴るたびに素材を左右反転させる、ちょっとだけ大きくして跳ねさせる、などすると視覚的に楽しくなります。
あとイージングを親の仇のように多用しましょう。
モーショングラフィックス関連のプラグインも沢山あるので、Aviutlで何かを始めるときは即座にプラグインを検索しましょう。

おわりに

いかなる創作においても、数字を見るのはやめましょう。作るのが楽しいのです。
数字は作品のクオリティとは関係なく、題材と宣伝が全てです。マジで。

OUCC Advent Calendar 2022

次回のアドベントカレンダーは12/11、Ayaka氏です!

Oracle Cloudにsign up出来なかった話

結論から言うと出来ました。
ブラウザの問題でした。

~あらすじ~

実は既に自宅にNASで若干サーバーっぽい物構築しているのでそれでいいかなと思ってました。
しかし無料の演算能力がある鯖が欲しくなって、自宅のは心許ないので、大企業様のOracle社のCloudを使ってみようと思い立ちました。

~苦戦~

様々なサイトを参考にsign upを試みました。
しかしどうも上手くいきません。
何故か東京とTokyoの二つ選択肢があるけどどちらがいいんだろうとか、英語にした方良いのだろうかと試行していました。
その中で一つ分かったことは、電話番号は最初の0は除いて記述することです。
しかしそれだけでは登録できませんでした。
「アカウントの作成には最大で15分かかります」的な表示が出てきてそれ以上進まない。
メールが来るのかと3日間待っても来ないし、chatがあったので、なけなしの英作文能力で質問したら、今審議中で1日かかるよと言われて、結局一日待っても何も起きない。
(最大で15分と書いてあるのに、1日かかると言われるのはこれ如何に)
※Chatは対応してくれるときとしてくれない時があります。2020年4月の一年間無料の締め切り間近の楽天モバイルよりかははるかに対応してくれる印象。

~解決~

私の使っているブラウザのVivaldiが悪いのでは?と思い、KC3冬のハッカソンでデバッグ用にインストールしたChrome Canaryを使用して登録してみました。
その時に違和感が。
Vivaldiの時はメールアドレスを同じやつ何度入れてもメールアドレス検証でエラーを吐かなかったのに、Chromeでは吐いた。
これはもしや...?と思い登録情報を埋めて登録していく...
メールが到着、そこには「Get Started Now with Oracle Cloud」!
秒で届きました。一体今までの苦労は何だったのか。
しかし、ブラウザ間で動作違うってよくありますよね。
実際ChromeとChrome Canaryですら動作異なりますもんね。
だから私はVivaldi、Chrome、Chrome Canary、Firefox、Edge、IE、OperaとかPCに入れてるんですよね。
その日の怒りのノリで書いたこの記事が参考になれば幸いです。

筆者:上月
前回の記事:Live2D触ってみた

fishshellを触ってみた

                              執筆者:NamiFuji

(フリー素材です)

この記事はOUCC Advent Calendar 2021の25日目の記事です。前回は上月さんの「Live2Dを触ってみた」でした。さて本日はクリスマスです。皆さんは本日はどのようにお過ごしの予定でしょうか?私はこの前買ったパズルを完成させる予定です。人によってはクリぼっちで最悪だなんて言っている人がいますが、私の考えではクリスマスにひとりで過ごすということは全く恥じることではないと思います。なぜかというとクリスマスというのは本来イエス=キリストの誕生を祝うことが目的であるので、そもそもクリスマスに大勢で集まらなければならないと考えること自体が本来の目的とずれているからです。なので一人であるということ自体に対してなんら問題もなく、逆に誰かといなければと考えること自体が周りの考えに振り回されているということになり、それ自体が問題となるからです。

さて、余談は置いておいて、本記事のタイトルにも書いてある通りfishshellについて話していこうと思います。本記事は調べたらそのまま出てくるような内容をまとめたような形になってしまうかもしれないですが、そのような場合は温かい目で見守ってください。

shell

まず、shellとはざっくりいうと自身がPCに対して行ってもらいたい命令をOS対して出すプログラムのことです。そしてshellにはいくつか種類があり、たとえばbash,tcsh,zshなどがあります。それらには当然のように機能の面において違いがあります。今回話そうとしているfishとはそのようなshellのうちの一つです。

fishのどこがいいのか

さてこれからfishについて話していこうとおもいますが、なぜbashやzshではなくfishなのかと疑問に思う人がいるかもしれません。その理由を端的にいうと、fishは他のshellと比べてとても扱う(カスタマイズをする)のが容易であるからです。

fishのデフォルトの機能としてシンタックスハイライトの機能がついており、それによってコマンドやオプションが間違っているのか一目で確かめることができます。さらにコマンドを入力する際に過去のコマンド履歴からインタラクティブに補完を見ることもできます。

補完機能の例

入力時

間違った入力をした時

fishの簡単なカスタマイズの方法

実行環境:M1mac Monterey

1,iterm2かターミナルでfish_configとコマンドを入力する。

2,ブラウザが開かれるので、そこから設定を行う

以上のような簡単な操作だけでもまぁまぁ見た目を変えることができる。

fishのカスタマイズ方法

さきほどはfishの簡単なカスタマイズ方法を説明しましたが、この方法ではカスタマイズの自由度がとても狭いです。そのためつぎはさらに自由度の高いカスタマイズ方法について話そうと思います。

それは~/.config/fish/config.fishファイルに直接設定を書いていく方法です。

たったこれだけだと、文章として寂しいので私個人が実際にいじった部分をのせようと思います。

現時点の私の設定ファイルは見ての通り、あまり書かれていません。そのためこれからさらに使いやすいように設定ファイルをいじるのが私の目標です。

今までに述べた方法以外にも、プラグインを入れるというカスタマイズ方法もあります。みなさんもこれを機にfishをつかって、みなさんの使いやすいようにカスタマイズしてみてください。

OUCC Advent Calendar DAY21 Unityでゲーム作るRTA+おまけの謎解き

執筆者:Pres.U(近々ハンドルネーム変更予定)
この記事はOUCC Advent Calendar 2021の21日目の記事です(実質9日目)。前回(12/21)はtakuemonさんのMixamoのススメです。

今回はUnityで2Dゲームをゼロから作りかつ記事を書くという無謀なRTAを行います。多分これが一番早いとは思いません

目次(と思しき何か)

  1. 初めに
  2. 作るゲーム
  3. 今回のRTAのレギュレーション
  4. 準備
  5. ゲームの方針
  6. 実装方法
  7. できた
  8. 完走した感想(俄並感)
  9. 謎解き

初めに

ほかの皆さんの記事は実用性があり内容も素晴らしいのですが、わたくしの書く記事は実用性も糞もなく、TDNただの読んでくださる人および執筆者の時間潰しにすぎません。それでも楽しんで頂けると幸いです。

おせちだよ~
図1:上はほかの皆様の記事、下は僕の記事

作るゲーム

今回は、脱出ゲームを作ってみようと思います。

図2:ゲーム画面の予定

今回のRTAのレギュレーション

  • Any%RTA、すなわち出来の良さを考慮しない
  • 計測開始はブログの執筆を開始した午後4時とす
  • 計測開始時点でのUnityプロジェクトは初期状態とする
  • 計測終了はブログを投稿した時間

準備

まずはプロジェクトを作りましょう。Unity Hubから新規作成→2D→任意で名前変更→作成で作れます。
次に、画像を自作します。ペイントがおすすめです。

ゲームの方針

軽い謎を解いて鍵をゲットし部屋から脱出する感じです。

実装方法


タイトル・本編・クリア画面の3つのシーンをSceneManagerを使って遷移させてやる感じです。また、アイテムの表示・非表示はオブジェクトの座標を画面外に移すことで疑似的に実行しています。

できた

後でドライブにzipファイルを置いておきます。

図3:ゲーム画面

完走した感想(俄並感)

じつは実装しているうちに、GameObjectを非表示にするとアタッチしているスクリプトが無効になるといった仕様に悩まされ方針を変更せざるを得なくなりました。
また、最近Unityに触れる機会がなかったので、いい練習の機会になったと思いました。
最後に、ゲーム作るのは大変でした。

謎解き

本編です。

1213①②16③④
④⑤⑥22⑦②⑧

⑥④⑦⑤er④→?

ヒント1:僕は22です(年齢じゃないよ)

ヒント2:①~⑧に入るのは数字ではなくアルファベット

ヒント3:このイベントはずばり…?

答え:mystery

Mixamoのススメ

執筆者:takuemon

 これはOUCC Advent Calendar 2021の20日の記事です。(なぜ記事を21日に記事が投稿されているんだ…おかしいぞ?…)前日(一昨日)の記事はyuyuさんの政府統計e-Statで学期末レポートを粉砕する 、明日(今日)の記事はMrMocchyさんのローポリのすゝめです。

今回は、Unityでゲーム制作しているときに個人的にお世話になったサイトを紹介させていただきたいと思います。

URL:https://www.mixamo.com/#/

Mixamoはどんなサイトかといいますと、大量のキャラクターとモーションが無料で使い放題という慈善事業みたいなことしてるサイトです。ここではキャラクターをアップロードして、専用のモーションをダウンロードするまでを解説していきます。

1.アカウントを作る

青色のボタンをクリックしてアカウントをつくります。

右上のCharacterのタブをクリックすると大量のキャラクターをダウンロードできますが、今回は自分でキャラクターをアップロードします、UPLOAD CHARACTERをクリックしましょう。

するとこのウィンドウが表示されます。私はユニティちゃんのfbxファイルをアップロードしました。

テクスチャが貼られたモデルをアップロードしたい場合は、テクスチャとモデルを圧縮したzipファイルをアップロードしてください。

左下の頭蓋骨をおすと、ボーンが表示されます。NEXTをクリックします。

すると、こんな感じに警告文が表示されます(初見でちょっとビビった)が、全く問題ないので無視してNEXTをクリックしましょう。

これでユニティちゃんがアップロードされました! 左側のモーションをクリックすることで、ユニティちゃんにモーションを反映させることができます。例えば、

それではこれらのモーションをダウンロードしてみましょう。DOWNLOADをクリックします。

するとこのようなウィンドウが表示されますがそのままでDOWNLOADをクリックしてください。これでユニティちゃんのモーションがダウンロードされました。

いかがだったでしょうか? Unityで3Dゲームを作る時、キャラクターのモーションに悩まされることは多いと思います。そんなとき、Mixamoに頼ってみると、あなたの求めるキャラクターやモーションが手に入るかもしれません。気になった人は是非!

ローポリのすゝめ

執筆者:MrMocchy

はじめに

この文章はOUCCアドベントカレンダー2021の12/21のものです。
前回はtakuemonさんのMixamoのススメです。

これが自分のはじめてのブログ記事になります。
調べものの際によく出てくるブログをまねる感じで書くつもりです。
暖かい目でご覧ください。

ローポリ

自分はノートパソコンしか持っていないのですが、3Dゲームは重いのばっかりで興味をもったやつの多くは必要スペックを満たせずに断念していたりします。
しかし、ある程度のグラフィックでも快適に遊べるものもあります。まあゲーム性自体がシンプルだってのもありますが、その多くは(たぶん)ローポリです。

ローポリとは、ロー・ポリゴンの略で、少ないポリゴン(=面)でできた、ざっくり言えば精巧でない3Dモデルを形容する言葉です。
それを綺麗に見せるためにテクスチャやシェーダーに力を入れているようなのですが、本記事のメインはローポリです。

エンティティを大量に配置するゲームを作る際、クオリティより数を必要とする際、その他とにかく軽くしたい際、ローポリは非常に有効です。

カメ

さて、ローポリについて話すとなれば何かの3Dモデルを用意する必要がありますが、なぜでしょうか、カメを作ろうと思いました。甲羅にポリゴン感があるからでしょうか。
「カメ 3Dモデル」などと検索してみてください。精巧なカメの画像がたくさん見つかると思います。手足や頭の曲線、皺、甲羅の凸凹感。重そうですね。

そこで自分が作ったカメがこちらです。

シンプルですね。5分で作れそうです。15分ぐらいで作りました。
しかし、このモノクロでもカメ、それもリクガメでもウミガメでもない、ミドリガメのようなカメだと分かります。

画像の左上にあるのがこれの三角面数などの情報です。比較対象は後に出しますが、基本的にこれが少ない=データ量が小さい=描画が軽いということになります。

ちなみに、もっとローポリにすることも可能です。それがこちら。

もはやカメだとも言われなければ分からなさそう...ですかね?よく見ればカメだとは思いますが。
ですがテクスチャを設定するだけで、随分と分かりやすくなるものです。現に、2色のべた塗りでも、

ほら、カメです(断言)。

先ほども述べましたが、モデルの精巧さだけでなく、このテクスチャにこだわることでもより正確なカメを表現することができます。
ただ、自分個人の意見としては、このような極端なローポリのモデルは、同じく極端に単純なモデル、パステルカラーなイメージの少ない色数といった感じのデザインで統一し、かわいい方向にした方が好きですね。

ウサギ

カメときたらウサギです。

誰が見てもウサギ、かは分かりませんが、多くの人はウサギだと言ってくれるでしょう。

これもさらにローポリにしようとしたのですが、なかなかうまいこと行きませんでした。

とりあえず鼻先を小さくするとして、やはり胴体がネックですね()。これが限界な気がします。

なので、逆に精巧に作ってみることにしました。

なにかがおかしい。犬でもない。なにかこう、いそうでいないようなクリーチャーができました。

できました。口の周りを膨らませたらウサギっぽくなりました。あとは草を咥えさせたら完全にウサギです。
色と背景を付けるとこうなります。

完成。

ここで見てもらいたいのが、2つ上の画像の左上の数字。...潰れてますね。こちらです。

そして先ほどのカメの数字をご覧ください。

ローポリの偉大さが分かっていただけたのではないでしょうか。

おわりに

まとめ:ローポリは軽い。作るのは非常に楽。かわいい。

ご覧いただきありがとうございました。

次回のOUCCアドベントカレンダー2021は、Pres.UさんのOUCC Advent Calendar DAY21 Unityでゲーム作るRTA+おまけの謎解きです。

ちなみに

上の3DモデルはBlenderというフリーソフトで作りました。完全フリーです。どこかの機能を使おうとしたら有料アップグレードを要求されることなんてありません。広告もありません。開発側はどうやって稼いでいるのでしょうか。

ローポリモデル欲しい、けどモデリングしたくない人は
「○○ 3Dモデル フリー」とかで検索、ダウンロード⇒Blenderにインポート⇒モディファイアーを追加>デシメート⇒比率を調整
で簡単にポリゴンの削減ができるはずです。あまり削減しすぎると崩れてきますが。

そしてウサギの背景をもらってきたのはPoly Havenというサイトからです。そこのHDRIs(=360°画像)で入手することができます。このサイトではテクスチャや3Dモデルも無料で利用できます。IT業界の発展のための無償公開だそうです。非常にありがたいです。

Blender:https://www.blender.org/
Poly Haven:https://polyhaven.com

政府統計e-Statで学期末レポートを粉砕する

執筆者:yuyu

この記事はOUCC Advent Calendar 2021の19日目の記事です。前回はyuさんの「パワポを動画にしようとしてみた」でした。

吐く息も白くなってきて、いよいよ令和も3年目を終え、はや4年目を迎えることに驚きを隠せておりません。yuyuです。みなさんはいかがお過ごしでしょうか。私は下宿をしている身ですが、部屋に備え付けの暖房の効きが異常に悪く、毎日布団にくるまっているミノムッチ状態です。

さて、今日は「政府統計の総合窓口」e-Statについて解説したいと思います。e-Statとは例えば「人口・世帯」、「労働・賃金」といった17の分野の政府による統計結果が集まったサイトです。具体的には国勢調査の結果や賃金構造基本統計調査(様々な業種の基本給を調査)の結果などが公表されています。URLはこちら。https://www.e-stat.go.jp/

※この記事は主にデータ分析のために、あるいは基盤教養科目などのレポート課題で自身の主張を裏付けるために公的な統計結果が欲しい方向けです。例えば、法学部に所属している私なら、特に政治学の分野において適切な政策を考案するために日本の現状を知る手段の一つとしてe-Statを利用しています。

目次

  1. はじめに
  2. この記事で伝えたいこと
  3. 解決したい問題
  4. じゃあ、どうする?
  5. e-Statの良いところ・悪いところ
  6. e-Statの使い方
  7. 補足
  8. おわりに
  9. リンク

1. はじめに

あなたはこれまでの人生で公的な統計結果が欲しいと感じたことがありませんでしたか?高校で調べ学習を課されたり、大学の基盤教養科目でレポート課題を課されたり。往々にして「引用するデータは信頼のおける発信者のものにしなさい」と注文が来ます。信頼のおける発信者とは公的機関、特に政府機関です。とはいえピンポイントで見つけるのは難しいです。たいていの場合は省庁が出している報告書に引っ掛かる程度。

そこで登場するのが我らがe-Statであり、これはありとあらゆる公的な統計調査結果を集約したサイトで、そこからさまざまな調査結果を調べ、データのダウンロード、ブラウザ上で表作成、グラフ作成が可能です。

こんな便利なサイトがあるのに使いこなさないのはもったいない!!!ということで、今日は[冬季集中講義]e-Stat基礎論を開講します。安心してください、楽単ですよ。

2. この記事で伝えたいこと

  • e-Statは政府統計調査のポータルサイトとしての役割をもつ
  • データのダウンロードが可能、簡単に利用できる

3. 解決したい問題

公的統計調査結果の効率的な収集です。そもそも、どのような統計調査が行われているのかを具体的に認識していないと単にブラウザで調べるという手法では限界があります。

4. じゃあ、どうする?

ついにこの記事の真打、e-Statの登場です。先述の通り、e-Statとは政府統計調査のポータルサイトです。ここを経由して様々な統計データにアクセスができます。ここでいったんe-Statの長所短所を確認しておきましょう。

5. e-Statの良いところと悪いところ

◇良いところ

  • 政府統計調査ポータルサイトの役割を担い、あらゆる統計調査にアクセスできる
  • csv形式やxlsx形式でデータのダウンロードが可能
  • 全国で平均を取ったデータだけでなく、都道府県別、市区町村別のデータも完備
  • 「詳細」からその統計を管轄する機関のサイトに飛び、細かい情報を得られる

◇悪いところ

  • 若干、作成したグラフが見づらい

こんなところです。べた褒めをしても政府の回し者に思われてしまいそうなので短所を出しておきましたが、個人的には気にならないかなと思っています。それは、デザインの問題であるという性質上、xlsx形式でダウンロードしてExcelを開いて自分で表やグラフを作成すれば済むことだからです。

6. e-Statの使い方

今回は「家計調査」を題材として説明していきたいと思います。

(1)e-Statにアクセスする

任意のWebブラウザで「e-Stat」と検索していただくと”e-Stat政府統計の総合窓口”にアクセスできると思います。(直リンは https://www.e-stat.go.jp/)

トップページはこんな感じ

(2)知りたい情報のキーワードを考える

ここからお目当てのデータにたどり着くには「・統計データを探す」というところから「すべて」、「分野」、「組織」、キーワード検索の4通りの方法があります。基本的には探しやすい「分野」を用いるのが良いと思います。探し出せなければキーワード検索を使いましょう。

今回の例として用いる題材は家計調査でしたね。つまり、キーワードは「家計」、「経済」です。まず分野を確認してみて、なければキーワード検索です。

「分野」をクリック

「企業・家計・経済」という分野の主な調査に掲載されている「家計調査」をクリックしましょう。

「家計調査」をクリック

(3)統計調査の詳細な内容確認

クリックして次のページに進んだら当該統計調査の目的と内容が大まかに書かれているのがわかると思います。統計データを分析するには統計で用いられている用語の定義を確認することが非常に重要です。自分の考えていた意味とは全く異なる場合があります。統計調査名の右にある「詳細」をクリックしてください。

「詳細」をクリック

すると担当機関名や課室名、連絡先などの情報がありますがそれらは無視して「ホームページURL」とあるのをクリックしてください。担当機関の当該統計調査に関するページに飛びます。

URLをクリック

ここには調査の概要や結果が載っています。この統計では総務省統計局のホームページですが、別の統計で担当機関が異なる場合でも同様に調査の概要を説明するページに飛びます。さて、最も重要なのは用語の定義です。調査の結果 > 用語の解説と進みます。

調査の結果 > 用語の解説

可処分所得を例に確認します。

「実収入」から税金,社会保険料などの「非消費支出」を差し引いた額で,いわゆる手取り収入のことである。これにより購買力の強さを測ることができる。

用語の解説

実収入と非消費支出にカギ括弧がついていますが、これらの定義も同じページに説明があるので確認してみてください。

(4)データ取得

用語の定義を確認したらいよいよデータを取得します。(2)が終わった段階までページをさかのぼります。「データベース」と「ファイル」の2つが確認できるかと思います。

このうち、「データベース」を選択した場合はブラウザ上で表の作成、グラフの作成ができます。単に内蔵データを確認したいならこちらを選択してください。一覧が出てくるので家計収支編 > 総世帯 > 年次を選び(図1)、続けて用途分類(総数)の全国の右にあるDBをクリックしてください(図2)。作成された表を閲覧できます(図3)。表をそのままダウンロードも可能です。APIは私自身がよくわからないので使っていません。

図1
図2
図3

一方、「ファイル」を選択した場合は Excelデータのダウンロードができます。

(5)データ分析

データを取得したら分析をして類似する別のデータを調べたりします。その場合は(1)からの手順を繰り返します。データ分析の手法は本題ではないので省略します。

7. 補足

今回取り扱った統計調査は国が行ったものであって、その収集単位も国全体です。しかし都道府県別のデータなど、地方公共団体を単位とする統計調査データが欲しいときもあると思います。そんなときはe-Statのトップページから「・統計データを活用する」にある「地域」を選択してください。

8. おわりに

いかがでしたでしょうか。ここまでお付き合いくださりありがとうございます。次節のリンクに学習用サイトのリンクを貼っておくのでわからない部分があればそちらを参考にしてください。

レポート課題のときだけでなく常日頃からさまざまな統計データに触れておくことで現政府の政策にある意図に気づくことができます。コロナ禍の今は皆さんも政府の動向にとりわけ注意を払っているはず。せっかくの機会ですからいろいろ考察してみると面白いかもしれないですね!

OUCC Advent Calendar 2021 次回はtakuemonさんです!お楽しみに!

9. リンク

パワポを動画にしようとしてみた

はじめに

この記事は、OUCC Advent Calendar 2021の18日目の記事です。前回はAreiさんのハンドヘルドコンピュータの製作と展望でした。 今回はPower Pointのスライドショーを動画に変換しようとしてみました。

やり方

音声付きスライドを考えると動画を作るためには画像と音声が必要です。しかし、pptxファイルやppsxファイルから直接画像や音声を取り出すことのできるライブラリはありませんでした。

まずは音声ファイルの抽出から行うことにしました。pptxを含むoffceファイルは中身はただのzipファイルなのでos.Rename()を使ってファイル形式を変え、zipfileライブラリで開くことで中の情報に直接アクセスできます。音声ファイルがあるのは ppt/media のディレクトリで、どの音声がどのスライドに紐づけられているのかというのは ppt/slides/_rels にあるrelsファイルに書いてあります。relsファイルはxmlファイルなのでこれもos.Rename()でファイル形式を変えて扱います。そこから音声ファイルとスライドの関連情報が得られ、音声ファイルの準備は完了します。

次に画像ファイルの作成ですが、現状pptxから自力で画像を作ること大変難しいのでPower Pointアプリを起動し、画像をエクスポートさせます。これはcomtypesライブラリを用いることで実現しました。

最後にこれらをまとめるのですがこれにはffmpegというコマンドライン上から動画編集ができるソフトをいれ、python上でそのコマンド実行するというゴリ押しの方法で行いました。

作っている途中で気づいたこと

Power Pointのエクスポートに動画に出力する機能があり、自作するより圧倒的に多機能であること

それを知って

デバッグする気力がなくなったため、途中からデバッグしてません。理論は分かったけど、もう動作させる理由がありませんでした。たぶん動かないと思います。

import os
import re
import zipfile
import glob
from comtypes import client
import xml.etree.ElementTree as ET
import subprocess

def getM4aPath(relsPath):
    root = ET.fromstring(relsPath)
    for child in root:
        data = child.attrib["Target"]
        print(data)
        if re.match(".+\.m4a",data):
            return "pptxZipTemp/voice/ppt/" + data.replace("../","")
    return ""

def generateMp4(relsPathList,pptxPath):
    aviPathList = []
    concat = "concat:"
    for index,relsPath in enumerate(relsPathList):
        voicePath = getM4aPath(relsPath)
        pngPath = "pptxZipTemp/images/slide{}.PNG".format(index)
        aviPathList.append("pptxZipTemp/avi/temp{}.avi".format(index))
        subprocess.run("ffmpeg -loop 1 {} -i {} -vodec mpeg4 -acodec pcm_s16le -shortest {}".format(pngPath,voicePath,aviPathList[index]),shell=True)
        concat = concat + aviPathList[index] + "|"
    concat = re.sub(".+\|$","",concat)
    pptxPath = pptxPath.split("/")
    pptxPath = pptxPath[-1].split(".")
    subprocess.run("ffmpeg -f concat -i {} -vcodec libx264 -acodec aac -pix_fmt yuv420p {}".format(concat,pptxPath[0]))

def zip2mp4(zipPath,pptxPath):
    with zipfile.ZipFile(zipPath) as pptxZip:
        inforLi = pptxZip.infolist()
        voicePathList = []
        relsPathList = []
        for info in inforLi:
            fname = info.filename
            if re.match(".+\.m4a",fname):
                voicePathList.append(fname)
            elif re.match("ppt/slides/_rels/.+\.rels",fname):
                relsPathList.append(fname)
            print(fname)
        for voiceIndex, voicePath in enumerate(voicePathList):
            pptxZip.extract(voicePath, "pptxZipTemp/voice")
            voicePathList[voiceIndex] = "pptxZipTemp/voice/" + voicePath
        for relsIndex, relsPath in enumerate(relsPathList):
            renamedRelsPath = relsPath.replace(".rels","")
            pptxZip.extract(relsPath, "pptxZipTemp/rels/")
            os.rename("pptxZipTemp/rels/"+relsPath, "pptxZipTemp/rels/"+renamedRelsPath)
            relsPathList[relsIndex] = "pptxZipTemp/rels/" + renamedRelsPath

        generateMp4(relsPathList,pptxPath)

def export_img(fname, odir):
    application = client.CreateObject("Powerpoint.Application")
    application.Visible = True
    current_folder = os.getcwd()

    presentation = application.Presentations.open(os.path.join(current_folder, fname))

    export_path = os.path.join(current_folder, odir)
    presentation.Export(export_path, FilterName="png")

    presentation.close()
    application.quit()

def rename_img(odir):
    file_list = glob.glob(os.path.join(odir, "*.PNG"))
    for fname in file_list:
        new_fname = fname.replace('スライド', 'slide')
        os.rename(fname, new_fname)

def getLines(path):
    reg = '\.pp[s|t]x'
    renamedPath = re.sub(reg,".zip", path)
    print("match:")
    print(renamedPath)
    print(path)
    if os.path.isfile(path):
        try:
            subprocess.run("mkdir pptxZipTemp",shell=True)
            export_img(path,"pptxZipTemp/images")
            rename_img("pptxZipTemp/images")
            os.rename(path,renamedPath)
            print("This path exists.")
            print(renamedPath)
            zip2mp4(renamedPath,path)
        except OSError as e:
            print("An OSError occured")
            print(e)
        finally:
            os.rename(renamedPath,path)
            print("終了しました")
    else:
        print(path+"は存在しないか、対応していません。")

def main():
    while True:
        print("scan:")
        inputString = input()
        if inputString == "exit":
            break
        else:
            getLines(inputString)

if __name__ == "__main__":
    main()