(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するのがおすすめです。

24b82e535177c6be997ca4ec43d8df6b?s=128

Tomoya Matsuura

September 01, 2020
Tweet

Transcript

  1. 2020/09/01 দӜ஌໵(me@matsuuratomoya.com/matsuuratomoya.com) (ͪΐͬͱ)ߴϨΠϠʔ
 ΦʔσΟΦ૊ΈࠐΈ2020 DSPݴޠ/ϓϩάϥϚϒϧϘʔυ/
 Φʔϓϯϋʔυ΢ΣΞ 1

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

  3. • STM32FϕʔεɺC++ͷίʔυΛࣗ༝ʹ໐ΒͤΔ • WebϕʔεͷΦʔαϦϯάπʔϧɺGen~/HeavyΤΫεϙʔτ ͷࢧԉ • MagusͰ͸Owl޲͚ͷύον͸ͦͷ··࢖͑Δʢ࣮࣭ޙܧػʣ • FreeRTOSͰಈ͍͍ͯΔΒ͍͠ •

    ϑΝʔϜ͸શػछެ։͞Ε͍ͯΔ͕ɺυΩϡϝϯτ͸΄΅ͳ͠ Owl→Magus(Rebel Technology) 3
  4. • BeagleBone Black(ͪΐͬͱߴڃͳϥζύΠ)+ઐ༻֦ுϘʔυ +Χʔωϧ֦ு(Xenomai) • Ϣʔβʔίʔυ͸C++ʢΛܦ༝ͯ͠ɺFaust΍Pd+HeavyͳͲʣ • LANͰܨ͙ͱWebαʔόϕʔεͷIDE্ཱ͕͕ͪΔ • Linuxϕʔε͕ͩΦʔσΟΦؔ࿈ͷίʔυ͸ΧʔωϧΛόΠύε͠

    ͍ͯΔͷͰόοϑΝΛ2αϯϓϧ·Ͱ٧ΊΒΕΔ • ແཧ΍ΓϢʔϩϥοΫԽͨ͠γϦʔζͱ͔ग़ͯΔʢͰ͔͍ʣ Bela 4
  5. • νοϓɿSTM32H750IBK6(Cortex-M7,400MHz) • AKMͷ2in2out,~192kHz/24bitΦʔσΟΦίʔσοΫ৐ͬͯΔ • 64MB SDRAM(wavͱ͔ࡌͤ΍͍͢) • stm32duinoରԠͳͷͰArduino IDEͰ։ൃͰ͖Δ

    • ઐ༻ͷDSPϥΠϒϥϦDaisySP͕͋Δ • ൈ͖ࠩ͠༰қͳΨϫ͕ϢʔϩϥοΫ/Ϊλʔϖμϧ/ελϯυΞϩ ϯͱἧ͓ͬͯΓݡ͍ Daisy 5
  6. • ARMίΞϕʔεͷ҆ͯ͘଎͍ϚΠίϯϘʔυ(ArduinoIDEରԠ) • νοϓ͸STMͰͳ͘NXP੡ɺ3.x:Cortex-m4 4.0:Cortex-m7 • 4.0ͳΒΫϩοΫ600MHzͰ$19.95 • ΦʔσΟΦ༻ͷ֦ுϘʔυ΍ɺϏδϡΞϧϓϩάϥϛϯάͰ͖Δ ΦʔσΟΦϥΠϒϥϦ͕͋ΔͳͲԻ·ΘΓͷ؀ڥ͕ॆ࣮

    • ΠϯσΟʔϞδϡϥʔܥͰͷར༻࣮੷ଟ͠ (BASTL ɺɹ Ornament&Crimes) Teensy 6
  7. • Linux্Ͱಈ͘Lv2ͱ͍͏VSTྨࣅϓϥάΠϯن֨Λ૸ΒͤΒΕΔ Ϊλʔϖμϧ • த਎͸ී௨ͷLinux on Arm A7 1GHz(ύϫʔͰΰϦԡ͠ײ) •

    ϨΠςϯγ͸5ms(ଟ෼όοϑΝαΠζ128ͷԟ෮ʁ) MODDevices MOD Duo 7
  8. • ϥζύΠϕʔεɺLuaεΫϦϓςΟϯάͱSuperColliderϕʔεͷ Իڹ߹੒ • ORCAͱ͔ɺΞϓϦέʔγϣϯΛೖΕସ͑Δײ֮Ͱத਎Λม͑Β ΕΔ • ΠϯλʔϑΣʔεͷ֦ு͸monome੡඼ಉ͕࢜த৺ Monome Norns

    8
  9. • Linux্ͰPuredataΛ্ཱͪ͛ͯૢ࡞Ͱ͖Δ • PdݶఆͳͷͰNornsΑΓͰ͖Δ͜ͱͷ෯͸ڱ͍͕ࢀೖোน௿͍ • HeavyͰͳ͘७ਮͳPdͳͷͰɺύιίϯͰ࡞ͬͨύον͸΄΅ ಈ͔ͤΔ͸ͣ • ͜Ε΋ɺΠϯλʔϑΣʔε͸ඪ४ͷϘλϯ΍ϊϒݶఆ •

    த਎͸Raspberry Pi Compute Module3+ Critter & Guitari Organelle 9
  10. • Axoloti http://www.axoloti.com/ ಠࣗύονϟʔϑΥʔϚοτ • midiglue https://sigboost.audio/midiglue/ ϓϩάϥϚϒϧmidiϓ ϩηοα ಠࣗϏδϡΞϧݴޠ

    ଞ 10
  11. • RtoRΦϖΞϯϓx2 (ήΠϯͷબ୒ࢶ͕-15,-7,-3,-1,2,4,8,16) • DAC͸12bit͕ͩADC͸16bit x3 • ADC͸ଟॏԽͰ࠷େ36ch࢖͑Δػछ΋͋Δ • 12bitDAC΋ߴप೾ʹϊΠζγΣʔϐϯά͢Ε͹࢖͑Δ͸ͣ

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

  13. • C++ΤΫεϙʔτ͕ୈҰ໨ඪͷݴޠ • Faust • Soul • Vult • ෭࣍తʹC++/CΤΫεϙʔτ͕Ͱ͖Δ΋ͷ

    • Cycling’ 74 Max (Gen~) • Puredata+Heavy DSPݴޠҰཡ 13
  14. • ؔ਺ܕDSPಛԽݴޠɻจ๏͕ͱʹ͔͘ಛघɻ • جຊ͸C++τϥϯεύΠϥ͕ͩɺArchitectureϑΝΠϧͱݺ͹Ε ΔDSPҎ֎ͷC++෦෼ͷςϯϓϨʔτΛ࡞͓ͬͯ͘͜ͱͰɺଟ ༷ͳϓϥοτϑΥʔϜʹίϚϯυҰͭͰΤΫεϙʔτͰ͖Δ • ϥΠϒϥϦ͕๛෋ɻϑΟϧλ/ΦγϨʔλ/෺ཧϞσϦϯάؔ࿈͸ ΞϧΰϦζϜఏҊऀ͕ॻ͍ͯͨΓ͢ΔͷͰ࣮࣭ϦϑΝϨϯε •

    ϋʔυपΓͷΤΫεϙʔτ΋ Faust 14
  15. • ։ൃɾίϯύΠϧ͸΄΅WebͰ׬݁(https://faustide.grame.fr/) • routeϓϦϛςΟϒͷಋೖ • soundfileϓϦϛςΟϒͷಋೖ • ࠓޙɺαϯϓϧϨʔτมߋΛՄೳʹ͢ΔondemandϓϦϛςΟϒ ͕ೖΔͱ͔ɾɾɾ(ࢀߟ:https://drive.google.com/file/d/ 1LkT8KviWocnzt6hqRsLlSri5uwVDWI5p/view)

    ࠷ۙͪΐͬͱ࢖͍΍͘͢ͳͬͨ Faust 15
  16. • JUCEͳͲΛ࡞͍ͬͯΔROLI͕ओಋͰ࡞͍ͬͯΔDSPݴޠ • खଓ͖ܕʴ෦෼తʹσʔλϑϩʔͬΆ͍ܗͰ·͋·͋ಡΈ΍͍͢ • Faustಉ༷Web্ͰฤूͰ͖Δ • ·ͩશ෦ͷιʔε͕Φʔϓϯʹͳ͍ͬͯͳ͍ʢHEARTͱ͍͏ɺ
 ΑΓ௿ϨΠϠʔͷதؒදݱ͕͋Δͱ͔ʣ •

    Ξηοτ΍GUIͳͲͷϚοϐϯά৘ใΛؚΊͨ.soulpatchͱ͍͏ ϓϩδΣΫτϑΥʔϚοτ͕͋Δ Soul 16
  17. • Leonardo Laguna Ruizͱ͍͏ਓ͕෭ۀతʹ ΍͍ͬͯΔιϑτɾϋʔυγϯηϓϩδΣ ΫτͷͨΊͷݴޠ • C++,JS,LuaJITͳͲʹΤΫεϙʔτͰ͖Δ • ͜Ε΋WebͰಈ͔ͤΔ

    • ίϯύΠϥ͸Ocaml(࣮૷͕៉ྷ) • ૊ΈࠐΈ޲͚Λҙࣝͨ͠ݴޠ࢓༷ Vult 17
  18. • FloatΛઐ༻ԋࢉ໋ྩ͕ແ͍ϓϥοτϑΥʔϜ޲͚ʹfixed-pointͱ ͯ͠ग़ྗ͢Δ͜ͱ͕Ͱ͖Δ • ؔ਺ΛςʔϒϧϧοΫΞοϓʹࣗಈม׵ͯ͘͠ΕΔه๏͕͋Δ ʢFaustͰ΋Ͱ͖Δ͕ɺͪΐͬͱख͕͔͔ؒΔʣ • WavϑΝΠϧΛίϯύΠϧ࣌ʹݻఆ഑ྻͱͯ͠ຒΊࠐΜͰ͠·͑ Δ ૊ΈࠐΈ޲͚ػೳ

    Vult 18
  19. • MaxͷதͷGen~ͱ͍͏DSPಛԽύονϑΥʔϚοτ • MaxͱࣅͨܗͷσʔλϑϩʔܕϏδϡΞϧϓϩάϥϛϯά΋ɺgenexprͱ ͍͏खଓ͖ܕςΩετͰهड़΋Մ • genexprͷந৅Խೳྗ͸ͦΜͳʹߴ͘ͳ͍ͷͰϦόʔϒͱ͔࡞Ζ͏ͱ͢ Δͱେมɺେن໛ͳม਺؅ཧ͕ਏ͍ • C++ΤΫεϙʔτ͸͓·͚ͬΆ͘ɺެࣜυΩϡϝϯτͷղઆ΋গͳ͍͕

    OwlͰ͸ੵۃతʹ׆༻͞Ε͍ͯΔ • Rebel͸emscripten࢖ͬͯউखʹWeb্ͰϓϨϏϡʔͰ͖ΔπʔϧΛ ࡞ͬͯӡ༻͍ͯ͠ΔΒ͍͠ Gen~ 19
  20. • hvcc: PdύονˠCͷτϥϯεύΠϥ (࣮૷͸Python) • libpdͳͲͱ͸׬શʹҟͳΔ࣮૷Ͱɺεέδϡʔϥͱ͔͸ଘࡏ͠ͳ͍ɻ PdͷύονΛແཧ΍ΓGen~Ϩϕϧͷύονͱͯ͠ղऍ͍ͯ͠Δײ͡ • ։ൃݩͷEnzien Audio͕2೥લʹ౗࢈ɺطʹձࣾͷWeb΋ফ໓

    • hvcc͸GPLͱͯ͠ެ։͞ΕΔ΋Ұ੾ϝϯς͞ΕͣɺOSSͱͯ͠։ൃ ͕Ҿ͖ܧ͕ΕΔ༷ࢠ΋ͳ͠ • ͷׂʹPdͷ࢓༷͕ރΕ͍ͯΔ͜ͱ΋͋ΓҰԠಈ͘ɻBela΍OwlͰ͸ Ҿ͖ଓ͖ར༻͞Ε͍ͯΔ(͜Ε΋Rebel͕WebϓϨϏϡʔ࣋ͬͯΔ) Puredata+Heavy 20
  21. DSPݴޠൺֱ 21 C++ϕλ Faust Soul Vult Gen~ Heavy Pd/SC Մಡੑ

    ˚ × ̋ ̋ ˚ ̋ ̋ ந৅Խೳྗ ࿹࣍ୈ ˕ ̋ ̋ ˚ ˚ ˚ ΦʔσΟΦ ϑΝΠϧ ˚ ˚ ̋ ̋ ˚ ˚ ̋ ࣮ߦੑೳ ࿹࣍ୈ ̋ ̋ ̋ ̋ ̋ ˚ ҆ఆੑ ࿹࣍ୈ ̋ ̋ ̋ ̋ ˚ ̋ কདྷੑ ̋ ̋ ʁ ˚ ˚ × ̋ WebAudio ˚ ̋ ̋ ̋ ˚ ˚ × උߟ จ๏͕ಠಛ ϥΠϒϥϦ๛෋ Ұ෦ιʔεඇެ։,
 ։ൃ్த ૊ΈࠐΈར༻࣮੷͋Γ, ݸਓ։ൃOSS C++ؔ܎ͷ։ൃɾ ػೳ௥Ճ͸ඇ׆ൃ ։ൃऴྃ OSඞཁ (Owl͕ಠࣗରԠ) (emscripten)
  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ରԠ
  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ͱ͔΋
  24. • ਖ਼௚ɺҰ౓C++Λܦ༝͢ΔͱC++ίϯύΠϥͷ࠷దԽͰࣅͨΓدͬͨΓʹͳΔ (ಛʹClangܥͷLLVMϕʔεͷ΋ͷΛ࢖ͬͨ৔߹) • ϝϞϦͷޮ཰͸ඞཁͳσʔλΛҰׅͰ֬อ͢ΔͷͰDSPݴޠͷํ͕ଟগ༗ར • Cortex-M4/7͸DSP޲͚ͷઐ༻໋ྩηοτ͕͋Δ͕ɺ༗ޮ׆༻͖͠ΕͣSTM༻ϥ ΠϒϥϦΛ࢖ͬͨ΄͏͕ૣ͘ͳΔՄೳੑ͸͋Δ • ͪͳΈʹDaisySP͸ઐ༻໋ྩΨϯΨϯ࢖ͬͯΔͷ͔ͱࢥ͍͖΍STL׬݁ͩͬͨ

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

    ◦ ◦ DSP × ◦ ◦ ◦ SP Float × × ◦ ◦ DP Float × × × Ұ෦ ໋ྩηοτ
  26. • DSP͸DSPॲཧͱͯ͠ίʔυ͕࣮֬ʹ෼཭Ͱ͖Δ • ≒։ൃͷϓϩηε͕͖ͪΜͱ෼཭Ͱ͖Δɻੑೳͷ໰୊ͱදݱͷ໰ ୊Λ෼͚ͯߟ͑ΒΕΔ • υΩϡϝϯςʔγϣϯɺཁ݅ఆٛͱͯ͠ͷՁ஋ • ࠷ѱݴޠॲཧܥ͕ࢮΜͰ΋ݴޠ࢓༷͸࢒ΔͷͰղಡ͠΍͍͢ •

    ϦϯάόοϑΝͱ͔σΟϨΠपΓͷϝϞϦ؅ཧؔ܎ͷࣦഊ͕ݮΔ • VCVRackͳͲͷιϑτγϯηɺWebͳͲଞϓϥοτϑΥʔϜͱฒߦ ͯ͠ӡ༻͢ΔՄೳੑ͕͋ΔͳΒ˕ DSPݴޠΛ࢖͏ϝϦοτ 26
  27. • ಋೖ࣮੷ɾՄಡੑɾ։ൃͷރΕ۩߹ɺকདྷੑͳͲਖ਼௚Ұ௕Ұ୹ • Faust͸҆ఆ͍ͯ͠Δ͕ɺ૊ΈࠐΈ͕ϝΠϯλʔήοτͱ͍͏Θ͚Ͱ΋ແ͍ • Soul͸কདྷతʹ૊ΈࠐΈΛ͔ͳΓҙ͍ࣝͯ͠Δ͕ൃల్্ • Vult͸খن໛Ͱ͸͋Δ͕ར༻࣮੷͋Γ • Ϗϧυϓϩηε͕ҰஈෳࡶʹͳΔ

    • FFT͕བྷΜͩΓɺ෦෼తʹαϯϓϧϨʔτΛม͑Δͱ͔͕ݫ͍͠ DSPݴޠΛ࢖͏σϝϦοτ 27
  28. • LinuxFoundation͕ࢧԉͯ͠ɺIntelͷਓ͕த৺ʹ։ൃத • ஍ຯʹLinux Kernel 5.2͔Β΋͏औΓࠐ·Ε͍ͯΔ • ࠓͷͱ͜Ζαϙʔτ͸Intelܥͷx86CPU&TensilicaͷXtensa HiFiγ Ϧʔζͷ૊Έ߹Θͤ(࣮ػͰࢼ͢ͳΒMinnowBoard

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

  30. • OSΛ࢖͏͔൱͔ʁ • Linuxͷ৔߹ɺXenomaiͷΑ͏ͳΧʔωϧ֦ுΛ͢Δ͔ʁ • ALSA System on a Chip(ASoC)΍SOFͳͲɺ૊ΈࠐΈ޲͚Φʔ

    σΟΦػೳ͸ࠓޙॆ࣮͍͖ͯͦ͠͏ • OS࢖Θͳ͍৔߹ɺArduino IDEରԠorඇରԠʁ • ͳΜ͔ͩΜͩIOͷڞ௨ن֨ͱͯ͠੒ཱͭͭ͋͠ΔͷͰɺϘʔυ ͕σΟείϯʹͳͬͯ΋ସ͑Λޮ͔ͤ΍͍͔͢΋ ΞʔΩςΫνϟͷબ୒ࢶ 30
  31. • ϢʔβʔʹϓϩάϥϜॻ͖׵͑Λ։์͢Δ͔? • ͞ΒʹɺϑΝʔϜॻ͖׵͑orϗοτϦϩʔυ • OS͋Γͷํ͕ϗοτϦϩʔυͳͲ΋ؚΊରԠ͠΍͍͢ • ίετͷ໰୊ ΞʔΩςΫνϟબ୒ͷ൑அج४ 31

  32. • ʮιʔε͕ެ։͞Ε͍ͯΔʯͱʮυΩϡϝϯτ͕͖ͬͪΓ·ͱΊ ΒΕ͍ͯΔʯ͸શવҧ͏ • ϋʔυ΋ؚΊͨυΩϡϝϯτ·Ͱ͖ͪΜͱ·ͱΊ͍ͯΔͷ͸ Mutable Instruments͘Β͍ʢ݁ՌతʹͦΕͰ޿͕ͬͯ΋͍Δʣ • ͤΊͯReadme͘Β͍ॻ͍ͯ͘Εʢ.inoϑΝΠϧ͕υϯͱஔ͔Ε ͍ͯͯ΋ࠔΔʣ

    • ϑΝʔϜ΢ΣΞɺճ࿏ਤ/ϨΠΞ΢τ΋ؚΊͨڞ༗͸·͍ͩΖ͍Ζ ೉͍͕͠https://www.writethedocs.org/guide/ͱ͔ࢀߟʹͳΓͦ͏ Φʔϓϯιʔεϋʔυͷ࣮ࡍ 32
  33. • Daisy͸DSPϥΠϒϥϦ΄͔Ͱ΋࢖͍ճ͠ޮ͖ͦ͏ͩ͠ɺSTM ϕʔεͷ։ൃͷϓϩτλΠϓͱͯ͠े෼࢖͑ͦ͏ • QEMUͱ͔Ͱϓϩηοα/ϩδοΫϨϕϧͷΤϛϡϨʔλ࡞Δͱ ͔ɺΞφϩάɾϝΧ෦෼ͷγϛϡϨʔλ༻ҙ͓ͯ͘͠ͱ͔ɺ͋Μ ·Γ΍ͬͯΔͱ͜ͳ͍͚ͲຊؾͰ௕ଓ͖͍ͤͨ͞ͳΒ༗ޮ͔΋ ͦͷଞॴײ 33