Go
golang
GetWild
GetWildDay 1

GolangでGetWildの'89バージョンを演奏する

More than 1 year has passed since last update.

Get Wild Advent Calendar 2016 の1日目です。

概要

  • 89バージョンやライブの小室さんみたいにGetWildをサンプリングしたい
  • でもシンセがない
  • 君にはterminalがあるじゃないか

サンプリングに必要な音源をゲットしよう

  • 私はMacなのでGarageBandで元音源から必要な部分だけ抽出しました
  • 全部で2個。
    • /tmp/de-dende-den.mp3 : デーデン!デーデン!の部分(0:21~0:22)
    • /tmp/get_wild_and_tough.mp3 : ゲッワイエンターフ!の部分(1:01〜1:04)

itunesの簡易プレイリストを消去しよう

  • 音源再生時、itunesが立ち上がる人もいるでしょう。
  • その場合、簡易プレイリストがあると、
    「再生を開始します。以前、次はこちらに追加した5曲を消去してもよろしいですか?」
    とポップアップが出て、連続してゲッワイエンターフ!を流すことができません
  • 画像の通り、一旦削除しましょう

スクリーンショット 2016-11-01 14.41.02.png

golangのインストール

  • 今回はgolangで実装します
  • ネットで見てインストールしましょう

コードを書く

  • シグナルハンドリングを活用してみます。
sampling.go
package main

import (
    "fmt"
    "os"
    "os/exec"
    "os/signal"
    "syscall"
)

func main() {
    signal_chan := make(chan os.Signal, 1)
    signal.Notify(signal_chan,
        syscall.SIGINT,
        syscall.SIGQUIT,
        syscall.SIGTERM,
        syscall.SIGKILL)

    var exit_code int

loop:
    for {
        s := <-signal_chan
        switch s {
        case syscall.SIGINT:
            // `$ open -g`でitunesを立ち上げるが、最前面に表示させないようにしてます
            exec.Command("open", "-g", "/tmp/de-dende-den.mp3").Start()

        case syscall.SIGQUIT:
            exec.Command("open", "-g", "/tmp/get_wild_and_tough.mp3").Start()

        case syscall.SIGTERM:
            fmt.Println("\n\n何も こわくはない")
            exit_code = 0
            break loop

        case syscall.SIGKILL:
            fmt.Println("\n\nきっと 強くなれる")
            exit_code = 0
            break loop

        default:
            fmt.Println("\n\nGet Wild And Tough...")
            exit_code = 1
            break loop
        }
    }
    os.Exit(exit_code)
}

実践

# buildしたほうが、TERM送った時のメッセージが表示されます
# せっかくなのでbuildしましょう
$ go build sampling.go

# 実行
$ ./sampling

ctrl + c = デーデン!デーデン!
ctrl + 4 = ゲッワイエンターフ!
閉じる時 = `psコマンド`でプロセスIDを調べ、kill -9でプロセスkillしちゃってください

最後に

  • これで君もTKだ!