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曲を消去してもよろしいですか?」
とポップアップが出て、連続してゲッワイエンターフ!を流すことができません - 画像の通り、一旦削除しましょう
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だ!