Electro-smith Daisy seed로 반전 만들기
데이지 뭐예요?
오디오를 전문적으로 처리하는 아두노와 유사하다.앞서 노트에 소개한 글이 있으니 관심 있으신 분들도 참고해주세요.
Daisy seed 및 기타 보드의 차이점
데이지 시리즈는 이번에 사용한 시드 외에도 팟/패치/피탈 등이 있다.
Seed와 다른 점은 자신이 만든 파일과 버튼 등의 입력과 출력을 준비해야 한다는 것이다.Pod/Patch/Petal에 이미 그림과 단추가 있는데 이 일대는 도서관에 추상화되어 간단하게 방문할 수 있다.샘플 코드는 이것을 전제로 하는 것이 많아서 Seed에서 같은 일을 하려고 할 때 좀 까다롭다.
Parameter
예를 들어, Daisy에는 클래스Parameter가 있습니다.ADC에서 입력한 최대치, 최소치, 곡선 모양(선형, 지수, 로그 등)을 지정하여 수치에 매핑할 수 있는 편리한 유틸리티다.샘플 코드를 보고
lpParam.Init(patch.controls[3], 20, 20000, Parameter::LOGARITHMIC);
( https://github.com/electro-smith/DaisyExamples/blob/c763348d79a83afa53d0176cd4a616dc8d098ad5/patch/verb/ex_verb.cpp#L63 )이렇게 지정한 것
patch.controls[3]
은 ADC를 나타내는 것 같다.Patch의 경우 이렇게 하면 됩니다. Seed의 경우 이'ADC를 표시하는 것'을 처리하기 위해 코드를 얼마나 써야 합니까?구체적으로 말하면
Parameter
의Init()
는 이런 서명입니다.void daisy::Parameter::Init(
AnalogControl input,
float min,
float max,
Curve curve
)
( https://electro-smith.github.io/libDaisy/classdaisy_1_1_parameter.html#a0dc0293e425569511a73c311bfa54f48 )그럼,
AnalogControl
어떻게 할까요, 바로 이렇습니다Init()
.void daisy::AnalogControl::Init(
uint16_t * adcptr,
float sr,
bool flip = false,
bool invert = false,
float slew_seconds = 0.002f
)
( https://electro-smith.github.io/libDaisy/classdaisy_1_1_analog_control.html#a516499f0788d7405024eff550386a59e )이
adcptr
의 설명을 읽었습니다.is a pointer to the raw adc read value – This can be acquired with
dsy_adc_get_rawptr()
, or dsy_adc_get_mux_rawptr()
그러나 실제로dsy_adc_get_rawptr()
는 미공개 함수이기 때문에 사용할 수 없습니다...도대체 어떻게혼란스러웠지만 패치를 싸고 있는 프로그램 라이브러리 안을 들여다보니 이렇게 됐어요.
seed.adc.GetPtr()
이 함수는 사용할 수 있을 것 같습니다.controls[i].Init(seed.adc.GetPtr(i), AudioCallbackRate(), true);
( https://github.com/electro-smith/libDaisy/blob/831f3820808f7718c55d6c844489d17bc20c2086/src/daisy_patch.cpp#L225 )이걸 쓰면 이런 느낌의 코드예요.15~18바늘에 바늘땀을 연결할 생각이다.
#define PIN_REVERB_CONTROL1 15
#define PIN_REVERB_CONTROL2 16
#define PIN_REVERB_CONTROL3 17
#define PIN_REVERB_CONTROL4 18
static DaisySeed seed;
// ADCの設定。配列の長さは必要なツマミの数と同じ。
AdcChannelConfig adcConfig[4];
// ツマミを接続するピンをそれぞれ指定する
adcConfig[0].InitSingle(seed.GetPin(PIN_REVERB_CONTROL1));
adcConfig[1].InitSingle(seed.GetPin(PIN_REVERB_CONTROL2));
adcConfig[2].InitSingle(seed.GetPin(PIN_REVERB_CONTROL3));
adcConfig[3].InitSingle(seed.GetPin(PIN_REVERB_CONTROL4));
// ADCを初期化(4は使うADCの数)
seed.adc.Init(adcConfig, 4);
AnalogControl verb_control1, verb_control2, verb_control3, verb_control4;
Parameter verb_feedback, verb_lp_freq, verb_mix, verb_send;
// 各ADCをParameterに割り当てる
verb_control1.Init(seed.adc.GetPtr(0), sample_rate);
verb_feedback.Init(verb_control1, 0.f, 0.99f, Parameter::LINEAR);
verb_control2.Init(seed.adc.GetPtr(1), sample_rate);
verb_lp_freq.Init(verb_control2, 0.f, 20000.0f, Parameter::EXPONENTIAL);
verb_control3.Init(seed.adc.GetPtr(2), sample_rate);
verb_mix.Init(verb_control3, 0.f, 1.0f, Parameter::LINEAR);
verb_control4.Init(seed.adc.GetPtr(3), sample_rate);
verb_send.Init(verb_control4, 0.f, 1.0f, Parameter::LINEAR);
seed.adc.Start();
이렇게 Parameter
로 싸면 ADC의 값을 반방향 매개 변수로 사용할 때 자신이 비추지 않아도 <Parameter>.Process()
를 통해 비추는 값을 얻을 수 있다.RevebSc
역방향은
ReverbSc
이라는 등급이 있다.피드백량과 피드백 저통 필터 마감 주파수는 두 가지 파라미터가 있다.회감과 건습 등은 스스로 실시해야 한다.(pre-delay의 처리 방법을 잘 몰라요. 내부에 몇 개의 파라미터가 있는 것 같아서 이 부분을 바꾸는 게 좋을 것 같아요.참고https://github.com/electro-smith/DaisyExamples/blob/master/patch/verb/ex_verb.cpp#L63,바로 이런 느낌의 코드입니다.ReverbSc verb;
static void AudioCallback(float *in, float *out, size_t size) {
float sig, sig_tmp, dry_rate, send_rate, wet1, wet2;
for (size_t i = 0; i < size; i += 2) {
sig = in[i];
// dry/wet、sendの量を決める
dry_rate = verb_mix.Process();
send_rate = verb_send.Process();
// sigはdryとして使うので、リバーブに送る分は別の変数sig_tmpに入れておく
sig_tmp = sig * send_rate;
// パラメータを設定
verb.SetFeedback(verb_feedback.Process());
verb.SetLpFreq(verb_lp_freq.Process());
// リバーブをかける
verb.Process(sig_tmp, sig_tmp, &wet1, &wet2);
// dry/wetを合わせる
out[i] = sig * dry_rate + wet1;
out[i + 1] = sig * dry_rate + wet2;
}
}
감상
데이지시드는 3천엔 정도면 살 수 있기 때문에 데이지 시리즈 중 가장 손쉬운 선택이지만, 상대적으로 문서의 어디를 봐야 할지 몰라 걸려 넘어지기 쉽다.나는 주의한 곳을 좀 기억하고 싶다.
Reference
이 문제에 관하여(Electro-smith Daisy seed로 반전 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yutannihilation/articles/366f6cc52cf9dc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)