Help us understand the problem. What is going on with this article?

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

More than 3 years have 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だ!
sion_cojp
元プロゲーマーのインフラエンジニアです。 好きなことは音楽、ギター、食べ歩き、GetWild。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away