Upgrade to Pro — share decks privately, control downloads, hide ads and more …

(a bit) high-layer audio embedded platforms in 2020

(a bit) high-layer audio embedded platforms in 2020

A short survey of domain-specific languages for DSP & programmable boards for audio/programmable instruments.
DSP専用言語&プログラマブル楽器、開発ボードのサーベイです。画像少なくリンクが多いのでDLするのがおすすめです。

Tomoya Matsuura

September 01, 2020
Tweet

More Decks by Tomoya Matsuura

Other Decks in How-to & DIY

Transcript

  1. 2020/09/01 দӜ஌໵([email protected]/matsuuratomoya.com)
    (ͪΐͬͱ)ߴϨΠϠʔ

    ΦʔσΟΦ૊ΈࠐΈ2020
    DSPݴޠ/ϓϩάϥϚϒϧϘʔυ/

    Φʔϓϯϋʔυ΢ΣΞ
    1

    View Slide

  2. ϓϩάϥϚϒϧ
    ΦʔσΟΦϘʔυ
    2

    View Slide

  3. • STM32FϕʔεɺC++ͷίʔυΛࣗ༝ʹ໐ΒͤΔ

    • WebϕʔεͷΦʔαϦϯάπʔϧɺGen~/HeavyΤΫεϙʔτ
    ͷࢧԉ

    • MagusͰ͸Owl޲͚ͷύον͸ͦͷ··࢖͑Δʢ࣮࣭ޙܧػʣ

    • FreeRTOSͰಈ͍͍ͯΔΒ͍͠

    • ϑΝʔϜ͸શػछެ։͞Ε͍ͯΔ͕ɺυΩϡϝϯτ͸΄΅ͳ͠
    Owl→Magus(Rebel Technology)
    3

    View Slide

  4. • BeagleBone Black(ͪΐͬͱߴڃͳϥζύΠ)+ઐ༻֦ுϘʔυ
    +Χʔωϧ֦ு(Xenomai)

    • Ϣʔβʔίʔυ͸C++ʢΛܦ༝ͯ͠ɺFaust΍Pd+HeavyͳͲʣ

    • LANͰܨ͙ͱWebαʔόϕʔεͷIDE্ཱ͕͕ͪΔ

    • Linuxϕʔε͕ͩΦʔσΟΦؔ࿈ͷίʔυ͸ΧʔωϧΛόΠύε͠
    ͍ͯΔͷͰόοϑΝΛ2αϯϓϧ·Ͱ٧ΊΒΕΔ

    • ແཧ΍ΓϢʔϩϥοΫԽͨ͠γϦʔζͱ͔ग़ͯΔʢͰ͔͍ʣ
    Bela
    4

    View Slide

  5. • νοϓɿSTM32H750IBK6(Cortex-M7,400MHz)

    • AKMͷ2in2out,~192kHz/24bitΦʔσΟΦίʔσοΫ৐ͬͯΔ

    • 64MB SDRAM(wavͱ͔ࡌͤ΍͍͢)

    • stm32duinoରԠͳͷͰArduino IDEͰ։ൃͰ͖Δ

    • ઐ༻ͷDSPϥΠϒϥϦDaisySP͕͋Δ

    • ൈ͖ࠩ͠༰қͳΨϫ͕ϢʔϩϥοΫ/Ϊλʔϖμϧ/ελϯυΞϩ
    ϯͱἧ͓ͬͯΓݡ͍
    Daisy
    5

    View Slide

  6. • ARMίΞϕʔεͷ҆ͯ͘଎͍ϚΠίϯϘʔυ(ArduinoIDEରԠ)

    • νοϓ͸STMͰͳ͘NXP੡ɺ3.x:Cortex-m4 4.0:Cortex-m7

    • 4.0ͳΒΫϩοΫ600MHzͰ$19.95

    • ΦʔσΟΦ༻ͷ֦ுϘʔυ΍ɺϏδϡΞϧϓϩάϥϛϯάͰ͖Δ
    ΦʔσΟΦϥΠϒϥϦ͕͋ΔͳͲԻ·ΘΓͷ؀ڥ͕ॆ࣮

    • ΠϯσΟʔϞδϡϥʔܥͰͷར༻࣮੷ଟ͠ (BASTL ɺɹ
    Ornament&Crimes)
    Teensy
    6

    View Slide

  7. • Linux্Ͱಈ͘Lv2ͱ͍͏VSTྨࣅϓϥάΠϯن֨Λ૸ΒͤΒΕΔ
    Ϊλʔϖμϧ

    • த਎͸ී௨ͷLinux on Arm A7 1GHz(ύϫʔͰΰϦԡ͠ײ)

    • ϨΠςϯγ͸5ms(ଟ෼όοϑΝαΠζ128ͷԟ෮ʁ)
    MODDevices MOD Duo
    7

    View Slide

  8. • ϥζύΠϕʔεɺLuaεΫϦϓςΟϯάͱSuperColliderϕʔεͷ
    Իڹ߹੒

    • ORCAͱ͔ɺΞϓϦέʔγϣϯΛೖΕସ͑Δײ֮Ͱத਎Λม͑Β
    ΕΔ

    • ΠϯλʔϑΣʔεͷ֦ு͸monome੡඼ಉ͕࢜த৺
    Monome Norns
    8

    View Slide

  9. • Linux্ͰPuredataΛ্ཱͪ͛ͯૢ࡞Ͱ͖Δ

    • PdݶఆͳͷͰNornsΑΓͰ͖Δ͜ͱͷ෯͸ڱ͍͕ࢀೖোน௿͍

    • HeavyͰͳ͘७ਮͳPdͳͷͰɺύιίϯͰ࡞ͬͨύον͸΄΅
    ಈ͔ͤΔ͸ͣ

    • ͜Ε΋ɺΠϯλʔϑΣʔε͸ඪ४ͷϘλϯ΍ϊϒݶఆ

    • த਎͸Raspberry Pi Compute Module3+
    Critter & Guitari Organelle
    9

    View Slide

  10. • Axoloti http://www.axoloti.com/ ಠࣗύονϟʔϑΥʔϚοτ

    • midiglue https://sigboost.audio/midiglue/ ϓϩάϥϚϒϧmidiϓ
    ϩηοα ಠࣗϏδϡΞϧݴޠ

    10

    View Slide

  11. • RtoRΦϖΞϯϓx2 (ήΠϯͷબ୒ࢶ͕-15,-7,-3,-1,2,4,8,16)

    • DAC͸12bit͕ͩADC͸16bit x3

    • ADC͸ଟॏԽͰ࠷େ36ch࢖͑Δػछ΋͋Δ

    • 12bitDAC΋ߴप೾ʹϊΠζγΣʔϐϯά͢Ε͹࢖͑Δ͸ͣ

    • ͱ͍͏͔ɺ଎౓ʹ೚ͤͯιϑτ΢ΣΞ1bitDACΛ࡞Δͷ΋͋Γ
    ༨ஊɿSTM32H750Λ௚઀࢖͏ͳΒ…
    11

    View Slide

  12. DSPಛԽݴޠ
    12

    View Slide

  13. • C++ΤΫεϙʔτ͕ୈҰ໨ඪͷݴޠ

    • Faust
    • Soul
    • Vult
    • ෭࣍తʹC++/CΤΫεϙʔτ͕Ͱ͖Δ΋ͷ

    • Cycling’ 74 Max (Gen~)
    • Puredata+Heavy
    DSPݴޠҰཡ
    13

    View Slide

  14. • ؔ਺ܕDSPಛԽݴޠɻจ๏͕ͱʹ͔͘ಛघɻ

    • جຊ͸C++τϥϯεύΠϥ͕ͩɺArchitectureϑΝΠϧͱݺ͹Ε
    ΔDSPҎ֎ͷC++෦෼ͷςϯϓϨʔτΛ࡞͓ͬͯ͘͜ͱͰɺଟ
    ༷ͳϓϥοτϑΥʔϜʹίϚϯυҰͭͰΤΫεϙʔτͰ͖Δ

    • ϥΠϒϥϦ͕๛෋ɻϑΟϧλ/ΦγϨʔλ/෺ཧϞσϦϯάؔ࿈͸
    ΞϧΰϦζϜఏҊऀ͕ॻ͍ͯͨΓ͢ΔͷͰ࣮࣭ϦϑΝϨϯε

    • ϋʔυपΓͷΤΫεϙʔτ΋
    Faust
    14

    View Slide

  15. • ։ൃɾίϯύΠϧ͸΄΅WebͰ׬݁(https://faustide.grame.fr/)

    • routeϓϦϛςΟϒͷಋೖ

    • soundfileϓϦϛςΟϒͷಋೖ

    • ࠓޙɺαϯϓϧϨʔτมߋΛՄೳʹ͢ΔondemandϓϦϛςΟϒ
    ͕ೖΔͱ͔ɾɾɾ(ࢀߟ:https://drive.google.com/file/d/
    1LkT8KviWocnzt6hqRsLlSri5uwVDWI5p/view)
    ࠷ۙͪΐͬͱ࢖͍΍͘͢ͳͬͨ
    Faust
    15

    View Slide

  16. • JUCEͳͲΛ࡞͍ͬͯΔROLI͕ओಋͰ࡞͍ͬͯΔDSPݴޠ

    • खଓ͖ܕʴ෦෼తʹσʔλϑϩʔͬΆ͍ܗͰ·͋·͋ಡΈ΍͍͢

    • Faustಉ༷Web্ͰฤूͰ͖Δ

    • ·ͩશ෦ͷιʔε͕Φʔϓϯʹͳ͍ͬͯͳ͍ʢHEARTͱ͍͏ɺ

    ΑΓ௿ϨΠϠʔͷதؒදݱ͕͋Δͱ͔ʣ

    • Ξηοτ΍GUIͳͲͷϚοϐϯά৘ใΛؚΊͨ.soulpatchͱ͍͏
    ϓϩδΣΫτϑΥʔϚοτ͕͋Δ
    Soul
    16

    View Slide

  17. • Leonardo Laguna Ruizͱ͍͏ਓ͕෭ۀతʹ
    ΍͍ͬͯΔιϑτɾϋʔυγϯηϓϩδΣ
    ΫτͷͨΊͷݴޠ

    • C++,JS,LuaJITͳͲʹΤΫεϙʔτͰ͖Δ

    • ͜Ε΋WebͰಈ͔ͤΔ

    • ίϯύΠϥ͸Ocaml(࣮૷͕៉ྷ)

    • ૊ΈࠐΈ޲͚Λҙࣝͨ͠ݴޠ࢓༷
    Vult
    17

    View Slide

  18. • FloatΛઐ༻ԋࢉ໋ྩ͕ແ͍ϓϥοτϑΥʔϜ޲͚ʹfixed-pointͱ
    ͯ͠ग़ྗ͢Δ͜ͱ͕Ͱ͖Δ

    • ؔ਺ΛςʔϒϧϧοΫΞοϓʹࣗಈม׵ͯ͘͠ΕΔه๏͕͋Δ
    ʢFaustͰ΋Ͱ͖Δ͕ɺͪΐͬͱख͕͔͔ؒΔʣ

    • WavϑΝΠϧΛίϯύΠϧ࣌ʹݻఆ഑ྻͱͯ͠ຒΊࠐΜͰ͠·͑
    Δ
    ૊ΈࠐΈ޲͚ػೳ
    Vult
    18

    View Slide

  19. • MaxͷதͷGen~ͱ͍͏DSPಛԽύονϑΥʔϚοτ

    • MaxͱࣅͨܗͷσʔλϑϩʔܕϏδϡΞϧϓϩάϥϛϯά΋ɺgenexprͱ
    ͍͏खଓ͖ܕςΩετͰهड़΋Մ

    • genexprͷந৅Խೳྗ͸ͦΜͳʹߴ͘ͳ͍ͷͰϦόʔϒͱ͔࡞Ζ͏ͱ͢
    Δͱେมɺେن໛ͳม਺؅ཧ͕ਏ͍

    • C++ΤΫεϙʔτ͸͓·͚ͬΆ͘ɺެࣜυΩϡϝϯτͷղઆ΋গͳ͍͕
    OwlͰ͸ੵۃతʹ׆༻͞Ε͍ͯΔ

    • Rebel͸emscripten࢖ͬͯউखʹWeb্ͰϓϨϏϡʔͰ͖ΔπʔϧΛ
    ࡞ͬͯӡ༻͍ͯ͠ΔΒ͍͠
    Gen~
    19

    View Slide

  20. • hvcc: PdύονˠCͷτϥϯεύΠϥ (࣮૷͸Python)

    • libpdͳͲͱ͸׬શʹҟͳΔ࣮૷Ͱɺεέδϡʔϥͱ͔͸ଘࡏ͠ͳ͍ɻ
    PdͷύονΛແཧ΍ΓGen~Ϩϕϧͷύονͱͯ͠ղऍ͍ͯ͠Δײ͡

    • ։ൃݩͷEnzien Audio͕2೥લʹ౗࢈ɺطʹձࣾͷWeb΋ফ໓

    • hvcc͸GPLͱͯ͠ެ։͞ΕΔ΋Ұ੾ϝϯς͞ΕͣɺOSSͱͯ͠։ൃ
    ͕Ҿ͖ܧ͕ΕΔ༷ࢠ΋ͳ͠

    • ͷׂʹPdͷ࢓༷͕ރΕ͍ͯΔ͜ͱ΋͋ΓҰԠಈ͘ɻBela΍OwlͰ͸
    Ҿ͖ଓ͖ར༻͞Ε͍ͯΔ(͜Ε΋Rebel͕WebϓϨϏϡʔ࣋ͬͯΔ)
    Puredata+Heavy
    20

    View Slide

  21. DSPݴޠൺֱ
    21
    C++ϕλ Faust Soul Vult Gen~ Heavy Pd/SC
    Մಡੑ ˚ × ̋ ̋ ˚ ̋ ̋
    ந৅Խೳྗ ࿹࣍ୈ ˕ ̋ ̋ ˚ ˚ ˚
    ΦʔσΟΦ
    ϑΝΠϧ
    ˚ ˚ ̋ ̋ ˚ ˚ ̋
    ࣮ߦੑೳ ࿹࣍ୈ ̋ ̋ ̋ ̋ ̋ ˚
    ҆ఆੑ ࿹࣍ୈ ̋ ̋ ̋ ̋ ˚ ̋
    কདྷੑ ̋ ̋ ʁ ˚ ˚ × ̋
    WebAudio ˚ ̋ ̋ ̋ ˚ ˚ ×
    උߟ จ๏͕ಠಛ

    ϥΠϒϥϦ๛෋
    Ұ෦ιʔεඇެ։,

    ։ൃ్த
    ૊ΈࠐΈར༻࣮੷͋Γ,

    ݸਓ։ൃOSS
    C++ؔ܎ͷ։ൃɾ
    ػೳ௥Ճ͸ඇ׆ൃ
    ։ൃऴྃ OSඞཁ
    (Owl͕ಠࣗରԠ)
    (emscripten)

    View Slide

  22. 22
    Faust
    Puredata
    SuperCollider
    Heavy
    Gen~
    Owl
    (Magus)
    Bela
    Organelle
    Norns
    Vult
    WebAudio
    Emscripten
    C++,C
    Daisy
    Teensy
    MOD Duo
    Lv2 Plugin
    Soul
    Linux
    +Xenomai
    FreeRTOS
    OSͳ͠

    Arduino

    IDEରԠ

    View Slide

  23. 23
    Faust
    Puredata
    SuperCollider
    Heavy
    Gen~
    Owl
    (Magus)
    Bela
    Organelle
    Norns
    Vult
    WebAudio
    Emscripten
    C++,C
    Daisy
    Teensy
    MOD Duo
    Lv2 Plugin
    Soul
    ↑ʢਖ਼֬ʹ͸ΤΫελʔφϧʣ↓
    Faust͔ΒίϚϯυҰͭͰॻ͖ग़ͤΔ΋ͷ
    ESP32ͱ͔΋

    View Slide

  24. • ਖ਼௚ɺҰ౓C++Λܦ༝͢ΔͱC++ίϯύΠϥͷ࠷దԽͰࣅͨΓدͬͨΓʹͳΔ
    (ಛʹClangܥͷLLVMϕʔεͷ΋ͷΛ࢖ͬͨ৔߹)

    • ϝϞϦͷޮ཰͸ඞཁͳσʔλΛҰׅͰ֬อ͢ΔͷͰDSPݴޠͷํ͕ଟগ༗ར

    • Cortex-M4/7͸DSP޲͚ͷઐ༻໋ྩηοτ͕͋Δ͕ɺ༗ޮ׆༻͖͠ΕͣSTM༻ϥ
    ΠϒϥϦΛ࢖ͬͨ΄͏͕ૣ͘ͳΔՄೳੑ͸͋Δ

    • ͪͳΈʹDaisySP͸ઐ༻໋ྩΨϯΨϯ࢖ͬͯΔͷ͔ͱࢥ͍͖΍STL׬݁ͩͬͨ

    • ύϑΥʔϚϯεͷͨΊʹΧϦΧϦʹνϡʔχϯάͯ͠ΊͪΌͪ͘ΌಡΈͮΒ͍
    C++ͷίʔυͷ࣮ߦੑೳΛ100ɺC++ͰಡΈ΍͢͞࠷༏ઌͯ͠ॻ͍ͨίʔυΛ50
    ͱ͢ΔͱɺDSPݴޠͰద౰ʹॻ͍ͯ΋70͘Β͍ͷύϑΥʔϚϯε͕ग़ͤΔΠ
    ϝʔδ
    DSPݴޠͷύϑΥʔϚϯε͸ʁ
    24

    View Slide

  25. ༨ஊɿCortex Series·ͱΊ
    25
    M3 M4 M4F M7
    Fixed ○ ○ ○ ○
    DSP × ○ ○ ○
    SP Float × × ○ ○
    DP Float × × × Ұ෦
    ໋ྩηοτ

    View Slide

  26. • DSP͸DSPॲཧͱͯ͠ίʔυ͕࣮֬ʹ෼཭Ͱ͖Δ

    • ≒։ൃͷϓϩηε͕͖ͪΜͱ෼཭Ͱ͖Δɻੑೳͷ໰୊ͱදݱͷ໰
    ୊Λ෼͚ͯߟ͑ΒΕΔ

    • υΩϡϝϯςʔγϣϯɺཁ݅ఆٛͱͯ͠ͷՁ஋

    • ࠷ѱݴޠॲཧܥ͕ࢮΜͰ΋ݴޠ࢓༷͸࢒ΔͷͰղಡ͠΍͍͢

    • ϦϯάόοϑΝͱ͔σΟϨΠपΓͷϝϞϦ؅ཧؔ܎ͷࣦഊ͕ݮΔ

    • VCVRackͳͲͷιϑτγϯηɺWebͳͲଞϓϥοτϑΥʔϜͱฒߦ
    ͯ͠ӡ༻͢ΔՄೳੑ͕͋ΔͳΒ˕
    DSPݴޠΛ࢖͏ϝϦοτ
    26

    View Slide

  27. • ಋೖ࣮੷ɾՄಡੑɾ։ൃͷރΕ۩߹ɺকདྷੑͳͲਖ਼௚Ұ௕Ұ୹

    • Faust͸҆ఆ͍ͯ͠Δ͕ɺ૊ΈࠐΈ͕ϝΠϯλʔήοτͱ͍͏Θ͚Ͱ΋ແ͍

    • Soul͸কདྷతʹ૊ΈࠐΈΛ͔ͳΓҙ͍ࣝͯ͠Δ͕ൃల్্

    • Vult͸খن໛Ͱ͸͋Δ͕ར༻࣮੷͋Γ

    • Ϗϧυϓϩηε͕ҰஈෳࡶʹͳΔ

    • FFT͕བྷΜͩΓɺ෦෼తʹαϯϓϧϨʔτΛม͑Δͱ͔͕ݫ͍͠
    DSPݴޠΛ࢖͏σϝϦοτ
    27

    View Slide

  28. • LinuxFoundation͕ࢧԉͯ͠ɺIntelͷਓ͕த৺ʹ։ൃத

    • ஍ຯʹLinux Kernel 5.2͔Β΋͏औΓࠐ·Ε͍ͯΔ

    • ࠓͷͱ͜Ζαϙʔτ͸Intelܥͷx86CPU&TensilicaͷXtensa HiFiγ
    Ϧʔζͷ૊Έ߹Θͤ(࣮ػͰࢼ͢ͳΒMinnowBoard Turbot͙Β͍)

    • ௚઀࣮༻తʹͳΔ೔·Ͱ͸·ͩԕͦ͏ʢಛʹARMରԠͱ͔ʣͩ
    ͚ͲɺQEMUͰΤϛϡϨʔγϣϯͯ͠Δͷͱ͔Ξϓϩʔνͱͯ͠
    ࢀߟʹͳΔ
    ༨ஊ: Sound Open Firmwareɹ
    28

    View Slide

  29. ·ͱΊ
    29

    View Slide

  30. • OSΛ࢖͏͔൱͔ʁ

    • Linuxͷ৔߹ɺXenomaiͷΑ͏ͳΧʔωϧ֦ுΛ͢Δ͔ʁ

    • ALSA System on a Chip(ASoC)΍SOFͳͲɺ૊ΈࠐΈ޲͚Φʔ
    σΟΦػೳ͸ࠓޙॆ࣮͍͖ͯͦ͠͏

    • OS࢖Θͳ͍৔߹ɺArduino IDEରԠorඇରԠʁ

    • ͳΜ͔ͩΜͩIOͷڞ௨ن֨ͱͯ͠੒ཱͭͭ͋͠ΔͷͰɺϘʔυ
    ͕σΟείϯʹͳͬͯ΋ସ͑Λޮ͔ͤ΍͍͔͢΋
    ΞʔΩςΫνϟͷબ୒ࢶ
    30

    View Slide

  31. • ϢʔβʔʹϓϩάϥϜॻ͖׵͑Λ։์͢Δ͔?

    • ͞ΒʹɺϑΝʔϜॻ͖׵͑orϗοτϦϩʔυ

    • OS͋Γͷํ͕ϗοτϦϩʔυͳͲ΋ؚΊରԠ͠΍͍͢

    • ίετͷ໰୊
    ΞʔΩςΫνϟબ୒ͷ൑அج४
    31

    View Slide

  32. • ʮιʔε͕ެ։͞Ε͍ͯΔʯͱʮυΩϡϝϯτ͕͖ͬͪΓ·ͱΊ
    ΒΕ͍ͯΔʯ͸શવҧ͏

    • ϋʔυ΋ؚΊͨυΩϡϝϯτ·Ͱ͖ͪΜͱ·ͱΊ͍ͯΔͷ͸
    Mutable Instruments͘Β͍ʢ݁ՌతʹͦΕͰ޿͕ͬͯ΋͍Δʣ

    • ͤΊͯReadme͘Β͍ॻ͍ͯ͘Εʢ.inoϑΝΠϧ͕υϯͱஔ͔Ε
    ͍ͯͯ΋ࠔΔʣ

    • ϑΝʔϜ΢ΣΞɺճ࿏ਤ/ϨΠΞ΢τ΋ؚΊͨڞ༗͸·͍ͩΖ͍Ζ
    ೉͍͕͠https://www.writethedocs.org/guide/ͱ͔ࢀߟʹͳΓͦ͏
    Φʔϓϯιʔεϋʔυͷ࣮ࡍ
    32

    View Slide

  33. • Daisy͸DSPϥΠϒϥϦ΄͔Ͱ΋࢖͍ճ͠ޮ͖ͦ͏ͩ͠ɺSTM
    ϕʔεͷ։ൃͷϓϩτλΠϓͱͯ͠े෼࢖͑ͦ͏

    • QEMUͱ͔Ͱϓϩηοα/ϩδοΫϨϕϧͷΤϛϡϨʔλ࡞Δͱ
    ͔ɺΞφϩάɾϝΧ෦෼ͷγϛϡϨʔλ༻ҙ͓ͯ͘͠ͱ͔ɺ͋Μ
    ·Γ΍ͬͯΔͱ͜ͳ͍͚ͲຊؾͰ௕ଓ͖͍ͤͨ͞ͳΒ༗ޮ͔΋
    ͦͷଞॴײ
    33

    View Slide