シンセサイザー制作メモ 〜プロトタイプ編〜

基本的なシンセサイザーの中身はこんな感じだと思う

[oscillator] -> [filter] -> [amp/EG]

github.com

ということでコピペして書いた
設定できるパラメータは以下

Oscillator

周期波形を生成

項目名 値の範囲 デフォルト値 説明
Wave “sine”,“square”,“sawtooth”,“triangle” “sine” 波形の種類を指定する
Freq 50.0〜20000.0 440.0 波形の周波数,単位はHz

Filter

フィルタを生成

項目名 値の範囲 デフォルト値 説明
Type “allpass”,“LPF”,“HPF”,“BPF”,“LowShelf”,“HighShelf”,“Peaking”,“Notch” allpass フィルタの種類を指定する
Freq 50.0〜20000.0 50.0 カットオフ周波数,単位はHz
Q 0.0〜50.0 5.0 フィルターのQ

Amplitude

信号の増幅/減衰をさせる EGも設定できる

項目名 値の範囲 デフォルト値 説明
Level 0.0〜1.0 1.0 ゲイン,倍率を数値で指定(dBではない)
Attack 0.0〜1.0 0.0 設定したLevel値になるまでの時間
Decay 0.0〜1.0 1.0 LevelSustainになるまでの時間
Sustain 0.0〜1.0 0.5 Levelの減衰が収束する値
Release 0.0〜1.0 1.0 LevelSustainから0(最小値)になるまでの時間

次にやること

  • 鍵盤みたいなの作ろう(キーボードで音出すのでもいいけど)
  • AnalyserNode波形を可視化したい
    • FFTから着手する
  • ElectronかReact.jsを使おう

参考にさせていただきました

Web Audio API 解説 - 01.前説 | g200kg Music & Software

プログラマーの力量を見極める質問に答えてみた

matome.naver.jp

プログラミング一般のところだけ自分なりに答えをまとめてみる

「等値」と「等価」の違いを説明してください

言葉の意味だと
等値は値の等しいこと
英語ではequality

等価は価値や価格が等しいこと
英語ではequivalence

数学的な意味だと
等値は等式のことになるので A = B
等価はA ⇔ B,すなわち,AならばBとBならばAが同時に成り立つことをいう

ここまで説明すれば,プログラム的な意味は

A == Bが等値
!(A < B) && !(B < A)が等価
等価は++EE += 1が同じとか,!E0 == Eが同じであることを表すときにも使う

正確に等しいときは等値
正確には等しくないが等しいとみなすときは等価

「値渡し」と「参照渡し」の違いはなんですか?オブジェクト指向システムや手続き型システムにおいて,これらにはどのような違いが存在するのかを説明してください

変数の中身を変えるか変えないかの違い
値渡しは変数の中身を変えない
参照渡しは変数の中身を変える

C言語で書くと

#include <stdio.h>

int call_by_value(int a) {
    ++a;
}

int call_by_reference(int* a) {
    ++*a;
}

int main(void) {
    int a = 1;
    
    call_by_value(a);
    printf("a = %d¥n", a);
    call_by_reference(&a);
    printf("a = %d¥n", a);

    return 0;
}
a = 1
a = 2

値渡しは変数の中身を渡す
参照渡しは変数が格納されているメモリのアドレスを渡す

オブジェクト指向システムや手続き型システムにおいて,これらにはどのような違いが存在するのかを説明してください

これはざっくりと言うと
 オブジェクト指向 → 値渡し
 手続き型 → 値渡し,参照渡しどっちもできる
という感じかと

ポリモーフィズム」とは何か説明してください

日本語で多態性とか多様性とか
オブジェクト指向における「継承」の概念をなす機能の一つ
例えば,与えられた引数を文字列にして返す処理を考えると
手続き型の場合だと引数の型によって処理をそれぞれ別々に書かなければいけないし,使う場合も引数の型を意識しないといけない
オブジェクト指向だと汎用的な処理を書き,型ごとに処理を書くことで,使う場合に引数の型を意識しなくて良くなる

「悲観的ロック」と「楽観的ロック」を比較し,違いを明確に述べてください

楽観的ロックは
Aさんが更新画面を開く
Aさんが更新中にBさんが更新画面を開く

Bさんの更新作業が完了する
Aさんの更新作業が完了する,そのときBさんが更新したことを知らせるメッセージを表示する

悲観的ロックはAさんが更新画面を開くとその間誰も更新作業ができない

楽観的ロックはredmineでよく見る(というよりブラウザが絡むとトランザクションを維持するのが難しいので主にこちらが使われる)

シンセサイザー制作メモ ~方針編~

モチベーション

  • Electron,React.js,fluxに慣れておこうと思った
  • WebAudioAPI を使ってみたかった
  • フロントエンドを勉強しようと思った

作るもの

  • シンセサイザー
    • オシレータ,フィルタ,アンプ機能を持つ
    • 音を出さなくても波形が確認できるように周波数特性の表示をさせる
    • ミキサやキーボード,エフェクタなどは上記ができてから着手する

内部設計方針

外部設計方針

読んだら忘れない読書術 と 覚えない記憶術 樺沢紫苑 著 を読んで

www.amazon.co.jp

www.amazon.co.jp

 

この読書感想を書くきっかけになった2冊.

読んでもすぐに忘れてしまうし,覚えていないことが多かった.

2冊を読んでインプットばかりではダメでアウトプットする必要があるなと気づいた.

読んだら忘れない読書術にただ漫然と読むのではなく「目的」を持って読む,と書かれているように読み方も工夫してみようと思った.

「目的」を持って読むために,まず目次を見て全体像を把握して,この章ではこれを学ぼうとはっきり決めて読むのがいいと思う.

 

覚えない記憶術にも全体を見てから細部にという工程だと学習効率がよいということなので,いろんな場面で試してみようと思う.

マッキンゼー流入社一年目問題解決の教科書 大嶋祥誉 著 を読んで

www.amazon.co.jp

 

自分の問題解決の方法は間違っていたと気づいた一冊.

問題解決のフレームワークを紹介しているが,最も勉強になったのは「真の問題解決」をする方法.

問題をロジックツリーで分解して整理した後に,仮設を立てて検証する.

問題は「なぜ」で問いかけながら分解して,問題の本質を見つける.

意外とこの部分を疎かにしていて,適当な問題解決をしていた.

問題の本質を見抜けるように努力していこうと思った.

不可能は可能になる 古田貴之著 を読んで

 

www.amazon.co.jp

 

結果にこだわるからこそ,「できるかどうか」ではなく「どうしたらできるか」を考える.

「できるかどうか」のまま進めても,目的は達成できても結果には満足しないというのは確かにその通りだと思った.

結果を残すためにはこういう考え方が必要なのだなと改めて気付かされた.

 

本質は見えないところにある.

物事を上辺だけで判断するのは間違いであると,これも改めて気付かされた.

例えば,問題に対して解決策を考えるときも上辺で判断しても,それが正しい解決にならないことが多い.

物事の本質を見抜ける力を鍛えていこうと思った.

バッチファイルって便利w

約半年ぶりの更新.

バッチファイルが案外使い易く,かなり便利なため,ちょっとしたものを作ってみた.
作ったのはRubyで波形を生成して,それをGnuplotでプロットするという一連の動作を行えるプログラム.
バッチファイルを起動させるだけでグラフの表示ができちゃう.
まぁ,gnuplotだけでもできそうだけど今回はバッチファイルを作るためにわざわざやってしまう. 続きを読む