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

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だ!
Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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