Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

Lofi hiphop風の揺らぎのあるビートを作るドラムマシンのWebアプリ試作

去年から積んでいた Lofi風ドラムマシンの開発をようやく消化できたので紹介を細かい話を書きたいと思います。

モチベーション

元々はサンプラーベースのシーケンサを実装していましたが、開発中に自動作曲っぽいことに興味がわいたため、昨年の夏ごろに以下のソフトを開発しました。

Electronica Machine v0.1- wizard-notes.com

www.wizard-notes.com

とはいっても、元々はドラムマシンとして実装していたため、ちゃんとドラムマシンとして使いたいと思い始めました。

ただ、Electronica machineを開発して遊んでいる中で、自動演奏っぽい一期一会のパターンや演奏に魅力を感じたので、それと相性がよさそうなlofi風のリズムパターンを演奏するドラムマシンを作ってみました。

機能について

基本機能

シーケンサ自体の実装については、Electronica machine の記事をご参照ください。

実装では React と WebAudioAPIを使っています.

Fluctuation mode

Lofi hiphop を作るときに重要なのが、ヨレた感じの独特な揺らぎのある音色やビートです。

これは、元々はサンプラーやレコーダなどの機器によるものですが、現代のDAW上での作成は以下のような方法があります。

  • 周波数方向
    • ローパスや古い音響機器の音質をエミュレートしたフィルタ
    • サチュレーション
    • ピッチを不安定にさせるエフェクト
  • 時間方向
    • クオンタイズを無視
    • ノイズの追加

iZotope の Vinyl はエフェクタとして有名かと思います。

今回は周波数方向に関しては用意する音色を調整し、時間方向はクオンタイズの無視、つまりビートの揺らぎをそれっぽく実装してみました。

具体的には、WebAudioAPIで用意した音源ファイルを鳴らすタイミングを乱数で変えています。

ただし、一様分布だと違和感が強いため、心地よいビートとして成立しやすい位置で鳴るような確率分布を設定しています。

聞いてみた印象だと、もたつく(発音が遅れるような)分布がよいと感じました。

[px]

Random Pattern

Electronica machineから引き継いだ機能です。 ただし、サイン波の場合と違ってリズムはある程度パターンが決まっていた方が使いやすいため、共起する位置は発生確率をかなり偏らせています。

動画(YouTube

改善したいところ

  • シーケンサの状態に応じて、シーケンサの色を変化させたい
  • スマホ向けのシーケンサデザイン(縦長),UI の修正
  • Fluctuation mode で、ビートの揺らぎの強さを可変化
  • クエリパラメタでリズムパターンを入力,パターンをMIDI出力
  • 音高のある楽器(ベース、Eピアノなど)を、音高が操作できる形で追加したい
  • 音源の書き出し(録音)
  • ・・・

書き出してみると追加したい機能はたくさんありますが、突き詰めていくとDAWの開発になってしまうので、追加する/追加しない機能の境界線を明確にして、気が向いたら出来るところだけ追加実装したいと思います。

[px]