lofi hiphop 風のビートをさくっと作れるリズムマシンの試作。前半がヨレたビートの生成,後半がランダムパターンのデモ #reactjs #webaudioapi #webapp #lofi #lofibeats #lofihiphophttps://t.co/L7qrtNEEmM pic.twitter.com/h0JvMf654O
— Kurene (@_kurene) February 25, 2023
去年から積んでいた Lofi風ドラムマシンの開発をようやく消化できたので紹介を細かい話を書きたいと思います。
モチベーション
元々はサンプラーベースのシーケンサを実装していましたが、開発中に自動作曲っぽいことに興味がわいたため、昨年の夏ごろに以下のソフトを開発しました。
Electronica Machine v0.1- wizard-notes.com
エレクトロニカっぽい曲を自動生成&展開し続けるリズムマシンのWebアプリ試作 #javascript #webaudioapi #React
— Kurene (@_kurene) August 21, 2022
Electronica Machine v0.1https://t.co/HiqdWvGV7d pic.twitter.com/zjsJosajte
とはいっても、元々はドラムマシンとして実装していたため、ちゃんとドラムマシンとして使いたいと思い始めました。
ただ、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]