Adeleのセカンド

出てるのか

ProductName 21
Adele
Xl / 1553円 ( 2011-02-01 )


この曲はいいな。

Hometown Glory (High Contrast Remix)も良い

こっちは元ネタ

選曲候補を記録するスクリプトをPythonで書いた

DJ選曲術を読んだり田中フミヤのviaのダイジェストを見たりしてたら、選曲というものが楽しくなってきた。どういう曲のつながりを気持いいと思うかは結局自分をよく知ることになるので意味のある行為ではないかと思う。

で、iTunesで聴いてる曲のつながりを記録するCUIアプリをPythonで書いてみた。単にヘッドとテイルを記録するだけの有向グラフなんだけど、sqliteにぶち込んでいるので後から検索するとき便利だと思う。データが溜まったらチェインをたどりながらplaylistに書きだすようなスクリプトも用意しようかな。

あとは選曲のつながりぐあいをnetworkxとかcytoscape視覚化して見てみたいという個人的な興味もあったりするのでそういうデータが欲しかったりする。

djutil

h(head)を押すとヘッドに現在聴いてるiTunesの曲名が、t(tail)だとテイルに挿入されてヘッドとテイルが揃うとグラフとして追加されるようにしてある。q押すとquitするようにしてあるんだけどquitしないのでなんかおかしい。後でどうにかする

そのうちGitHubで管理する予定

以下コード

#!/usr/bin/python
# -*- encoding:utf-8 -*-

# kzfm <kerolinq@gmail.com>

import curses
import os
from ScriptingBridge import *

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine,Column,Integer,String,ForeignKey,UniqueConstraint
from sqlalchemy.orm import scoped_session,sessionmaker

DATABASE = '/Users/kzfm/djutil.db'
engine = create_engine('sqlite:///'+DATABASE)
Session = scoped_session(sessionmaker(autocommit=False,
                                      autoflush=False,
                                      bind=engine))
Base = declarative_base(bind=engine)

class Music(Base):
    __tablename__ = 'music'
    __table_args__ = (UniqueConstraint('title','artist'),{})
    id = Column(Integer, primary_key=True)
    title  = Column(String(128))
    artist = Column(String(128))

class Graph(Base):
    __tablename__ = 'graph'
    __table_args__ = (UniqueConstraint('head','tail'),{})
    id = Column(Integer, primary_key=True)
    head = Column(Integer, ForeignKey('music.id'))
    tail = Column(Integer, ForeignKey('music.id'))

def main(stdscr):
    if not os.path.isfile(DATABASE):
        Base.metadata.create_all()

    session = Session()

    iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")
    stdscr.nodelay(1)
    head_music = None
    tail_music = None

    while True:
        c = stdscr.getch()
        y,x = stdscr.getyx()
        if c == ord('h'):
            artist = iTunes.currentTrack().artist()
            title  = iTunes.currentTrack().name()
            head_music = session.query(Music).filter(Music.artist == artist) \
                                             .filter(Music.title == title) \
                                             .first()
            if head_music == None:
                head_music = Music(artist=artist,title=title)
                session.add(head_music)
                session.commit()

            if tail_music != None:
                mg = session.query(Graph).filter(Graph.head == head_music.id) \
                                             .filter(Graph.tail == tail_music.id) \
                                             .first()
                if mg == None:
                    mg = Graph(head=head_music.id,tail=tail_music.id)
                    session.add(mg)
                    session.commit()

                stdscr.addstr("%s / %s -> %s / %s" % (head_music.title,head_music.artist,tail_music.title,tail_music.artist))
                stdscr.move(y+1, 0)

                tail_music = None
            else:
                stdscr.addstr("%s / %s -> [] / []" % (head_music.title,head_music.artist))
                stdscr.move(y, 0)

        elif c == ord('t'):
            artist = iTunes.currentTrack().artist()
            title  = iTunes.currentTrack().name()
            tail_music = session.query(Music).filter(Music.artist == artist) \
                                .filter(Music.title == title) \
                                .first()

            if tail_music == None:
                tail_music = Music(artist=artist,title=title)
                session.add(tail_music)
                session.commit()

            if head_music != None:
                mg = session.query(Graph).filter(Graph.head == head_music.id) \
                                             .filter(Graph.tail == tail_music.id) \
                                             .first()
                if mg == None:
                    mg = Graph(head=head_music.id,tail=tail_music.id)
                    session.add(mg)
                    session.commit()

                stdscr.addstr("%s / %s -> %s / %s" % (head_music.title,head_music.artist,tail_music.title,tail_music.artist))
                stdscr.move(y+1, 0)
                tail_music = None

            else:
                stdscr.addstr("[] / [] -> %s / %s" % (tail_music.title,tail_music.artist))
                stdscr.move(y, 0)
        elif c == ord('q'):
            exit
        elif c != -1:
            # debug
            stdscr.addstr(str(c))
            stdscr.refresh()
            stdscr.move(0, 0)

if __name__ == '__main__':
    curses.wrapper(main)

Via / 田中フミヤ

ツレが田中フミヤ大好きだったので大阪のロケッツによく行った。

フロアーだともってかれるって表現するけど、DJのほうは引っ張ってくのね。グルーブ気持ちいい。

[なにがイェーイなんだろ]「その場にいないとわかんないよ」っていうコメントが流れていったとこが一番面白かった。

ProductName Via [DVD]
田中フミヤ
インディーズ・メーカー / ?円 ( 2007-09-28 )


コレ欲しいなぁ。

DJ選曲術

前々からこの本の存在を知っていたのだけど、特に興味がわかなかったのでスルーしていたが、最近Typhoonを購入してから、つなぎの下手さに凹むことが多くて購入してみた。

ちなみに僕は、コラージュ通いまくり、cool to kool行きまくりから、House,Technoを通って、drum'n'bassへ。ちゅうわけでZettai-muよくいったという。そんな感じです。

ProductName DJ選曲術―何を考えながらDJは曲を選び、そしてつないでいるのか?
沖野 修也
リットーミュージック / 1260円 ( 2005-10 )


  • 本当にあなたが気に入っている曲、しかも人に聴かせたい曲には、あなたを魅了している「何か」、つまりあなたの完成に訴える共通の要素があるはず
  • 選曲とは何であるかを知っておいたほうがよい。曲を楽しめる上に、「選曲」が楽しめるから
  • 「行間の感覚」は、あなたの並べ方のセンスそのもの
  • 何をかけるか、そして、次に何をかけるか。それが選曲というもの
  • 自分にしかできない曲の組み合わせは、それ自体がアイデア
  • 曲を選ぶということは生きるということ

おおまかな選び方

  • 前にかけた曲の中から、最新曲の前後に合いそうなもの(20枚)
  • 最新(10枚)
  • 前にかけてない曲の中から、最新曲の前後に合いそうなもの(20枚)
  • プッシュしたい、定番、長く忘れていたから30枚くらい

上の3つは3枚で1パターンになるように組む。ストーリーとプロットが必要。起承転結重要。

個人的にはダークでニュートラル(若干耽美目)を狙いたい

というわけで、Typhoonは超楽しい。iTunesに10000曲以上入ってれば何やっても楽しめるはずなのでオススメ。

ダンボール掘ってみた(10)

somarecordsは結構買った気がする。Envoyは特に好きだったな。

1295003217

ProductName SOMA COMPILATION 2011
オムニバス
SOMA QUALITY RECORDINGS / OCTAVE-LAB / 2490円 ( 2010-12-08 )


ダンボール掘ってみた(9)

Roni Sizeとunderworld。どっちも名盤ですな。

1295003181 1295003205

ProductName New Forms
Roni Size
Talkin Loud / 1883円 ( 1997-09-08 )


Blackout / Hiveの元ネタってメタリカだよなぁ

Nightlife EP PT. 3のBlackoutって曲を聴いてて

ん、デジャブったか?

と思ったけど、 やっぱりBlackend / Metallicaが元ネタだったのね。ギターの音色でなんとなくわかるな。

ProductName ...AND JUSTICE FOR ALL
Metallica
Elektra / Wea / 2776円 ( 1990-10-25 )


つなげてるヒトもいた。

たしかにメタルからドラムンベースにつなげるというのもありだなと思った。イングウェイのドラムンベースものとかもあるんだろうか?Racer Xとかもやりやすそうな気がするが。

ダンボール掘ってみた(8)

こどもと魔法 / 竹村延和 のヴァイナル

1295003300

Child's Viewは今でもよく聴くし、remixもいい曲揃っとるよね。

ProductName CHILD'S VIEW REMIX
竹村延和
トイズファクトリー / ?円 ( 1995-10-21 )


ダンボール掘ってみた(7)

ジェフミルズ ああジェフミルズ ジェフミルズ

1295003312

ProductName スリーパー・ウェイクス
ジェフ・ミルズ
Third-Ear JPN Ltd. / 2389円 ( 2009-12-09 )