2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Elixir~Streamをシンセサイザーになぞらえて~

Posted at

ここまでのあらまし

前回、Elixir~Enum.zipでドラムシーケンサー!~
でドラムパターンを作ったが、今度はStream関数をシンセサイザーになぞらえることになりました。

式と解説


1..100 |> Stream.map (& (&1 * 2)) |> Enum.filter(& &1 >= 10 and &1 < 100)

1..100は1から100のリストの短縮系です。これにパイプライン演算子でStream関数をかけています。
Stream.mapで1から100のマップの数字すべてに2をかけているようです。
そしてEnum.filterで、10以上、100未満の結果を出力する。

シンセサイザーになぞらえてみよう

シンセサイザーというのは、もともとの波形をオシレーターで出力し、それにフィルターをかけ、LFOで各種周期をかけて音を揺らして音色を生成します。

1..100は純然たるオシレーターでしょう。サイン波かスクエア波かノコギリ波かでいえば、さしあたり一番シンプルなサイン波でしょうか。
Stream.mapで2をかけているところは音色の立ち上がり、減衰などを司るADSRというセクションに酷似しています。気になる方は"シンセ ADSR"でググってみてください。
そして、Enum.filterは文字通りフィルター。シンセサイザーではカットする周波数帯にピークをつけるレゾナンス機能とあわせてローパスフィルターでオシレーターの波形を加工するのが一般的です。

現時点ではめちゃくちゃわかりにくいかもしれませんが、Elixirでシンセサイザーをつくる、というのがわたしの中長期的なミッションです。
うまずたゆまず、頑張ります。
Kento Mizuno

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?