もくもくドラムンベース(110508)

True Romance,Lend Me Your Troublesあたりでちょっとダレた。

  • Ocean Deep / B-Complex
  • Believe Me / Blu Mar Ten
  • Broken / Calibre
  • Dont Want Your Love / Calibre
  • Let Me Be Your Fantasy (J Majik & Wickaman Remix) / Baby D
  • Spanish Sun (Bungle Remix) / Bachelors of Science
  • One Year On (Instrumental) / BCee & Lomax
  • True Romance / dBridge Feat. Vegas
  • Sky / DJ Chap
  • Chasing Dreams / Mutated Forms
  • Lend Me Your Troubles / Well Being
  • Moon Palace / Noisia & Teebee
  • Vanity /Seba
  • Sleepless (B-Complex remix) / New Zealand Shapeshifter
  • Detroit Amen / Seba & Krazy

ProductName The system is a remix

Hospital Records / ?円 ( 2010-09-10 )


曲のつなぎを可視化

選曲をログるようにしているので、可視化してみた。まだ60チェーンくらいしかないのでcytoscape使うまでもなくnetworkxで充分。

djutil

seba,b-complex,sporあたりがお気に入りなのがわかるというか、自分はつなぐときに耽美でダークな感じの曲から展開していくのが好きだということがはっきりするわけだ。

from sqlalchemy import *
import networkx as nx
import matplotlib.pyplot as plt

G=nx.Graph()

db = create_engine('sqlite:////Users/kzfm/python/DJUtil/djutil.db')
metadata = MetaData(bind=db, reflect=True)
music_table = metadata.tables['music']
graph_table = metadata.tables['graph']

music = [m.title for m in music_table.select().execute()]

stmt = graph_table.select()
result = stmt.execute()
for row in result:
    G.add_edge(music[row.head-1], music[row.tail-1])

pos=nx.spring_layout(G)
ith_labels=False)
nx.draw(G,pos,node_color='#A0CBE2',width=1,node_size=200,alpha=0.4,edge_cmap=plt.cm.Blues,font_size=8)
plt.savefig("path.png")

もくもくドラムンベース(110425)

結局章立てするようなもんかなぁと、今夜は最後に何をかけようかなぁという観点から組み立ててみた。

Amen AlleyからMessiahへの流れは気に入った。

  • Requiem / Uman & No Money
  • Tru Born Playa / Glidlok & Prolifix
  • Let Me Be Your Fantasy / Baby D
  • Miss You / Echo Inada
  • The First Time / Nu:Tone
  • Amen Alley / Danny Byrd
  • Messiah (Noisia Remix) / Konflict
  • Chubrub / ?
  • Snow / Seba
  • Blow Out / Body & Soul
  • Catch You / Fred V
  • Ocean Deep / B Complex
  • Requiem / Uman & No Money

ProductName Return to Forever
Seba
Combination / ?円 ( 2008-09-29 )


もくもくドラムンベース

途中何かけたか忘れたが、大体こんな感じ

  • Link To The Past / Loadstar ft. Xample & Lomax
  • Blackout / Hive
  • G-Force Jesus / Ed Rush & Optical
  • Mediation / Nosia & Maldini & Vegas
  • Machine Gun(Spor Mix) / Nosia
  • Hate / Telekinesis
  • Moodswings / Dom & Roland
  • Hear My Call / Dom & Roland
  • Overdue / Spor
  • Memories / 17th Boulevard
  • Down Deep (VIP) / Wickaman & RV
  • New Dawn / Savage Rehab
  • Hide Your Tears Because We Are In Heaven / Unquote

ProductName Vol. 4-Bad Taste
Blokhe4d
Pid / 3815円 ( 2011-04-19 )


Drum&Bassarena: Evolution

人気曲のコンピ

ProductName Drum&Bassarena: Evolution
Various Artists
Pias / 2941円 ( 2011-04-04 )


持っている曲が結構かぶっているのだけど、Let Me Be Your FantasyのJ Majik & Wickaman RMXが欲しくて買ってしまった

Bad Taste Vol.4

remixものが幾つか入っていてちょっとネタ切れか?と思ったのだけどTorもcletinもremixはよかったのでよし。

ProductName Bad Taste Vol.4: Blokhe4d Presents
Blokhe4d
Bad Taste / 2853円 ( 2011-03-21 )


個人的に気に入ったのは

  • Lifelike / Cause4Concern
  • Hate / Telekinesis

Words And Pictures / NU:TONE

聴きやすい曲が揃っている。

ProductName Words And Pictures
NU:TONE
HOSPITAL / 1700円 ( 2011-02-28 )


  • The First Time (Ft. Natalie Williams)
  • One (Ft. Sophie Paul)
  • Wild Life (NuTone Remix) (Unicorn Kid)
  • Shine In (feat. Natalie Williams)

がお気に入り

高揚感が気持よく、途中に入るシンセブリブリ攻撃で盛り上がる歌モノチューン。アンセム決定かな。

個人的には、アゲ気味よりはこういうベースラインが黙々と続くほうが好き。

Overdue / Spor

Spor,NoisiaとかBadtasteあたりを最近よく聴いている。

選曲候補を記録するスクリプトを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)