« ^ »

Overtoneでキラキラ星を演奏する

所要時間: 約 2分

Overtoneを使ってキラキラ星を演奏します。

実行環境

  • macOS Sierra 10.12.1(16B2657)
  • clojure: 1.8.0
  • overtone: 0.10.1
  • Leiningen 2.7.1 on Java 1.8.0_45 Java HotSpot(TM) 64-Bit Server VM

プロジェクトを作成する

leinでプロジェクトを作成します。

$ mkdir star
$ cd star
$ lein new star --to-dir .

作成したらproject.cljにovertoneを追加します。

project.clj::

(defproject star "0.1.0-SNAPSHOT"
  :description "Twinkle, twinkle, little star"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :main star.core
  :dependencies [
                 [org.clojure/clojure "1.8.0"]
                 [overtone "0.10.1"]
                 ])

project.clj を更新したら lein deps で依存ライブラリをインストールします。

$ lein deps

その他プロジェクトの作成は overtoneを使って音を出す をご覧ください。

コードを書く

src/star/core.clj にコードを書きます。

src/star/core.clj::

(ns star.core
  (:gen-class main true)
  (:require
   [overtone.api]
   ))


(overtone.api/immigrate-overtone-api)

(defn setup [& args]
  (require '[overtone.live]))

(setup)

(require '[overtone.inst.piano :refer [piano]])

(defn melody-a [& args]
  (piano 60)
  (Thread/sleep 600)
  (piano 60)
  (Thread/sleep 600)
  (piano 67)
  (Thread/sleep 600)
  (piano 67)
  (Thread/sleep 600)
  (piano 69)
  (Thread/sleep 600)
  (piano 69)
  (Thread/sleep 600)
  (piano 67)
  (Thread/sleep 600)
  (Thread/sleep 600)

  (piano 65)
  (Thread/sleep 600)
  (piano 65)
  (Thread/sleep 600)
  (piano 64)
  (Thread/sleep 600)
  (piano 64)
  (Thread/sleep 600)
  (piano 62)
  (Thread/sleep 600)
  (piano 62)
  (Thread/sleep 600)
  (piano 60)
  (Thread/sleep 600)
  (Thread/sleep 600)
  )

(defn melody-b [& args]
  (piano 67)
  (Thread/sleep 600)
  (piano 67)
  (Thread/sleep 600)
  (piano 65)
  (Thread/sleep 600)
  (piano 65)
  (Thread/sleep 600)
  (piano 64)
  (Thread/sleep 600)
  (piano 64)
  (Thread/sleep 600)
  (piano 62)
  (Thread/sleep 600)
  (Thread/sleep 600)
  )


(defn twinkle [& args]
  ;; <RECORD-START>
  (recording-start "testing.wav")
  ;; </RECORD-START>

  ;; <PLAY>
  (-> {}
      (melody-a)
      (melody-b)
      (melody-b)
      (melody-a)
      ))
  ;; </PLAY>

  ;; <RECORD-STOP>
  (recording-stop)
  ;; </RECORD-STOP>

(defn -main
  []
  (twinkle)
  (java.lang.System/exit 0)
  )

ただ流すのではなくファイルに出力して見ます。この行でファイルパスを指定して録音を開始します。

  (recording-start "testing.wav")

この行で録音を終了します。

  (recording-stop)

演奏

lein run で演奏を開始します。

$ lein run

Overtoneが起動して演奏が行われれば成功です。