Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@kmizuno0211

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

ここまでのあらまし

前回、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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?