(a bit) high-layer audio embedded platforms in 2020
by
Tomoya Matsuura
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
2020/09/01 দӜ(
[email protected]
/matsuuratomoya.com) (ͪΐͬͱ)ߴϨΠϠʔ ΦʔσΟΦΈࠐΈ2020 DSPݴޠ/ϓϩάϥϚϒϧϘʔυ/ ΦʔϓϯϋʔυΣΞ 1
Slide 2
Slide 2 text
ϓϩάϥϚϒϧ ΦʔσΟΦϘʔυ 2
Slide 3
Slide 3 text
• STM32FϕʔεɺC++ͷίʔυΛࣗ༝ʹ໐ΒͤΔ • WebϕʔεͷΦʔαϦϯάπʔϧɺGen~/HeavyΤΫεϙʔτ ͷࢧԉ • MagusͰOwl͚ͷύονͦͷ··͑Δʢ࣮࣭ޙܧػʣ • FreeRTOSͰಈ͍͍ͯΔΒ͍͠ • ϑΝʔϜશػछެ։͞Ε͍ͯΔ͕ɺυΩϡϝϯτ΄΅ͳ͠ Owl→Magus(Rebel Technology) 3
Slide 4
Slide 4 text
• BeagleBone Black(ͪΐͬͱߴڃͳϥζύΠ)+ઐ༻֦ுϘʔυ +Χʔωϧ֦ு(Xenomai) • ϢʔβʔίʔυC++ʢΛܦ༝ͯ͠ɺFaustPd+HeavyͳͲʣ • LANͰܨ͙ͱWebαʔόϕʔεͷIDE্ཱ͕͕ͪΔ • Linuxϕʔε͕ͩΦʔσΟΦؔ࿈ͷίʔυΧʔωϧΛόΠύε͠ ͍ͯΔͷͰόοϑΝΛ2αϯϓϧ·Ͱ٧ΊΒΕΔ • ແཧΓϢʔϩϥοΫԽͨ͠γϦʔζͱ͔ग़ͯΔʢͰ͔͍ʣ Bela 4
Slide 5
Slide 5 text
• νοϓɿSTM32H750IBK6(Cortex-M7,400MHz) • AKMͷ2in2out,~192kHz/24bitΦʔσΟΦίʔσοΫͬͯΔ • 64MB SDRAM(wavͱ͔ࡌ͍ͤ͢) • stm32duinoରԠͳͷͰArduino IDEͰ։ൃͰ͖Δ • ઐ༻ͷDSPϥΠϒϥϦDaisySP͕͋Δ • ൈ͖ࠩ͠༰қͳΨϫ͕ϢʔϩϥοΫ/Ϊλʔϖμϧ/ελϯυΞϩ ϯͱἧ͓ͬͯΓݡ͍ Daisy 5
Slide 6
Slide 6 text
• ARMίΞϕʔεͷ͍҆ͯ͘ϚΠίϯϘʔυ(ArduinoIDEରԠ) • νοϓSTMͰͳ͘NXPɺ3.x:Cortex-m4 4.0:Cortex-m7 • 4.0ͳΒΫϩοΫ600MHzͰ$19.95 • ΦʔσΟΦ༻ͷ֦ுϘʔυɺϏδϡΞϧϓϩάϥϛϯάͰ͖Δ ΦʔσΟΦϥΠϒϥϦ͕͋ΔͳͲԻ·ΘΓͷڥ͕ॆ࣮ • ΠϯσΟʔϞδϡϥʔܥͰͷར༻࣮ଟ͠ (BASTL ɺɹ Ornament&Crimes) Teensy 6
Slide 7
Slide 7 text
• Linux্Ͱಈ͘Lv2ͱ͍͏VSTྨࣅϓϥάΠϯن֨ΛΒͤΒΕΔ Ϊλʔϖμϧ • தී௨ͷLinux on Arm A7 1GHz(ύϫʔͰΰϦԡ͠ײ) • ϨΠςϯγ5ms(ଟόοϑΝαΠζ128ͷԟ෮ʁ) MODDevices MOD Duo 7
Slide 8
Slide 8 text
• ϥζύΠϕʔεɺLuaεΫϦϓςΟϯάͱSuperColliderϕʔεͷ Իڹ߹ • ORCAͱ͔ɺΞϓϦέʔγϣϯΛೖΕସ͑Δײ֮ͰதΛม͑Β ΕΔ • ΠϯλʔϑΣʔεͷ֦ுmonomeಉ͕࢜த৺ Monome Norns 8
Slide 9
Slide 9 text
• Linux্ͰPuredataΛ্ཱͪ͛ͯૢ࡞Ͱ͖Δ • PdݶఆͳͷͰNornsΑΓͰ͖Δ͜ͱͷ෯ڱ͍͕ࢀೖোน͍ • HeavyͰͳ͘७ਮͳPdͳͷͰɺύιίϯͰ࡞ͬͨύον΄΅ ಈ͔ͤΔͣ • ͜ΕɺΠϯλʔϑΣʔεඪ४ͷϘλϯϊϒݶఆ • தRaspberry Pi Compute Module3+ Critter & Guitari Organelle 9
Slide 10
Slide 10 text
• Axoloti http://www.axoloti.com/ ಠࣗύονϟʔϑΥʔϚοτ • midiglue https://sigboost.audio/midiglue/ ϓϩάϥϚϒϧmidiϓ ϩηοα ಠࣗϏδϡΞϧݴޠ ଞ 10
Slide 11
Slide 11 text
• RtoRΦϖΞϯϓx2 (ήΠϯͷબࢶ͕-15,-7,-3,-1,2,4,8,16) • DAC12bit͕ͩADC16bit x3 • ADCଟॏԽͰ࠷େ36ch͑Δػछ͋Δ • 12bitDACߴपʹϊΠζγΣʔϐϯά͢Ε͑Δͣ • ͱ͍͏͔ɺʹͤͯιϑτΣΞ1bitDACΛ࡞Δͷ͋Γ ༨ஊɿSTM32H750Λ͏ͳΒ… 11
Slide 12
Slide 12 text
DSPಛԽݴޠ 12
Slide 13
Slide 13 text
• C++ΤΫεϙʔτ͕ୈҰඪͷݴޠ • Faust • Soul • Vult • ෭࣍తʹC++/CΤΫεϙʔτ͕Ͱ͖Δͷ • Cycling’ 74 Max (Gen~) • Puredata+Heavy DSPݴޠҰཡ 13
Slide 14
Slide 14 text
• ؔܕDSPಛԽݴޠɻจ๏͕ͱʹ͔͘ಛघɻ • جຊC++τϥϯεύΠϥ͕ͩɺArchitectureϑΝΠϧͱݺΕ ΔDSPҎ֎ͷC++෦ͷςϯϓϨʔτΛ࡞͓ͬͯ͘͜ͱͰɺଟ ༷ͳϓϥοτϑΥʔϜʹίϚϯυҰͭͰΤΫεϙʔτͰ͖Δ • ϥΠϒϥϦ͕๛ɻϑΟϧλ/ΦγϨʔλ/ཧϞσϦϯάؔ࿈ ΞϧΰϦζϜఏҊऀ͕ॻ͍ͯͨΓ͢ΔͷͰ࣮࣭ϦϑΝϨϯε • ϋʔυपΓͷΤΫεϙʔτ Faust 14
Slide 15
Slide 15 text
• ։ൃɾίϯύΠϧ΄΅WebͰ݁(https://faustide.grame.fr/) • routeϓϦϛςΟϒͷಋೖ • soundfileϓϦϛςΟϒͷಋೖ • ࠓޙɺαϯϓϧϨʔτมߋΛՄೳʹ͢ΔondemandϓϦϛςΟϒ ͕ೖΔͱ͔ɾɾɾ(ࢀߟ:https://drive.google.com/file/d/ 1LkT8KviWocnzt6hqRsLlSri5uwVDWI5p/view) ࠷ۙͪΐͬͱ͍͘͢ͳͬͨ Faust 15
Slide 16
Slide 16 text
• JUCEͳͲΛ࡞͍ͬͯΔROLI͕ओಋͰ࡞͍ͬͯΔDSPݴޠ • खଓ͖ܕʴ෦తʹσʔλϑϩʔͬΆ͍ܗͰ·͋·͋ಡΈ͍͢ • Faustಉ༷Web্ͰฤूͰ͖Δ • ·ͩશ෦ͷιʔε͕Φʔϓϯʹͳ͍ͬͯͳ͍ʢHEARTͱ͍͏ɺ ΑΓϨΠϠʔͷதؒදݱ͕͋Δͱ͔ʣ • ΞηοτGUIͳͲͷϚοϐϯάใΛؚΊͨ.soulpatchͱ͍͏ ϓϩδΣΫτϑΥʔϚοτ͕͋Δ Soul 16
Slide 17
Slide 17 text
• Leonardo Laguna Ruizͱ͍͏ਓ͕෭ۀతʹ ͍ͬͯΔιϑτɾϋʔυγϯηϓϩδΣ ΫτͷͨΊͷݴޠ • C++,JS,LuaJITͳͲʹΤΫεϙʔτͰ͖Δ • ͜ΕWebͰಈ͔ͤΔ • ίϯύΠϥOcaml(࣮͕៉ྷ) • ΈࠐΈ͚Λҙࣝͨ͠ݴޠ༷ Vult 17
Slide 18
Slide 18 text
• FloatΛઐ༻ԋࢉ໋ྩ͕ແ͍ϓϥοτϑΥʔϜ͚ʹfixed-pointͱ ͯ͠ग़ྗ͢Δ͜ͱ͕Ͱ͖Δ • ؔΛςʔϒϧϧοΫΞοϓʹࣗಈมͯ͘͠ΕΔه๏͕͋Δ ʢFaustͰͰ͖Δ͕ɺͪΐͬͱख͕͔͔ؒΔʣ • WavϑΝΠϧΛίϯύΠϧ࣌ʹݻఆྻͱͯ͠ຒΊࠐΜͰ͠·͑ Δ ΈࠐΈ͚ػೳ Vult 18
Slide 19
Slide 19 text
• MaxͷதͷGen~ͱ͍͏DSPಛԽύονϑΥʔϚοτ • MaxͱࣅͨܗͷσʔλϑϩʔܕϏδϡΞϧϓϩάϥϛϯάɺgenexprͱ ͍͏खଓ͖ܕςΩετͰهड़Մ • genexprͷநԽೳྗͦΜͳʹߴ͘ͳ͍ͷͰϦόʔϒͱ͔࡞Ζ͏ͱ͢ Δͱେมɺେنͳมཧ͕ਏ͍ • C++ΤΫεϙʔτ͓·͚ͬΆ͘ɺެࣜυΩϡϝϯτͷղઆগͳ͍͕ OwlͰੵۃతʹ׆༻͞Ε͍ͯΔ • RebelemscriptenͬͯউखʹWeb্ͰϓϨϏϡʔͰ͖ΔπʔϧΛ ࡞ͬͯӡ༻͍ͯ͠ΔΒ͍͠ Gen~ 19
Slide 20
Slide 20 text
• hvcc: PdύονˠCͷτϥϯεύΠϥ (࣮Python) • libpdͳͲͱશʹҟͳΔ࣮Ͱɺεέδϡʔϥͱ͔ଘࡏ͠ͳ͍ɻ PdͷύονΛແཧΓGen~Ϩϕϧͷύονͱͯ͠ղऍ͍ͯ͠Δײ͡ • ։ൃݩͷEnzien Audio͕2લʹ࢈ɺطʹձࣾͷWebফ໓ • hvccGPLͱͯ͠ެ։͞ΕΔҰϝϯς͞ΕͣɺOSSͱͯ͠։ൃ ͕Ҿ͖ܧ͕ΕΔ༷ࢠͳ͠ • ͷׂʹPdͷ༷͕ރΕ͍ͯΔ͜ͱ͋ΓҰԠಈ͘ɻBelaOwlͰ Ҿ͖ଓ͖ར༻͞Ε͍ͯΔ(͜ΕRebel͕WebϓϨϏϡʔ࣋ͬͯΔ) Puredata+Heavy 20
Slide 21
Slide 21 text
DSPݴޠൺֱ 21 C++ϕλ Faust Soul Vult Gen~ Heavy Pd/SC Մಡੑ ˚ × ̋ ̋ ˚ ̋ ̋ நԽೳྗ ࣍ୈ ˕ ̋ ̋ ˚ ˚ ˚ ΦʔσΟΦ ϑΝΠϧ ˚ ˚ ̋ ̋ ˚ ˚ ̋ ࣮ߦੑೳ ࣍ୈ ̋ ̋ ̋ ̋ ̋ ˚ ҆ఆੑ ࣍ୈ ̋ ̋ ̋ ̋ ˚ ̋ কདྷੑ ̋ ̋ ʁ ˚ ˚ × ̋ WebAudio ˚ ̋ ̋ ̋ ˚ ˚ × උߟ จ๏͕ಠಛ ϥΠϒϥϦ๛ Ұ෦ιʔεඇެ։, ։ൃ్த ΈࠐΈར༻࣮͋Γ, ݸਓ։ൃOSS C++ؔͷ։ൃɾ ػೳՃඇ׆ൃ ։ൃऴྃ OSඞཁ (Owl͕ಠࣗରԠ) (emscripten)
Slide 22
Slide 22 text
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ରԠ
Slide 23
Slide 23 text
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ͱ͔
Slide 24
Slide 24 text
• ਖ਼ɺҰC++Λܦ༝͢ΔͱC++ίϯύΠϥͷ࠷దԽͰࣅͨΓدͬͨΓʹͳΔ (ಛʹClangܥͷLLVMϕʔεͷͷΛͬͨ߹) • ϝϞϦͷޮඞཁͳσʔλΛҰׅͰ֬อ͢ΔͷͰDSPݴޠͷํ͕ଟগ༗ར • Cortex-M4/7DSP͚ͷઐ༻໋ྩηοτ͕͋Δ͕ɺ༗ޮ׆༻͖͠ΕͣSTM༻ϥ ΠϒϥϦΛͬͨ΄͏͕ૣ͘ͳΔՄೳੑ͋Δ • ͪͳΈʹDaisySPઐ༻໋ྩΨϯΨϯͬͯΔͷ͔ͱࢥ͍͖STL݁ͩͬͨ • ύϑΥʔϚϯεͷͨΊʹΧϦΧϦʹνϡʔχϯάͯ͠ΊͪΌͪ͘ΌಡΈͮΒ͍ C++ͷίʔυͷ࣮ߦੑೳΛ100ɺC++ͰಡΈ͢͞࠷༏ઌͯ͠ॻ͍ͨίʔυΛ50 ͱ͢ΔͱɺDSPݴޠͰదʹॻ͍ͯ70͘Β͍ͷύϑΥʔϚϯε͕ग़ͤΔΠ ϝʔδ DSPݴޠͷύϑΥʔϚϯεʁ 24
Slide 25
Slide 25 text
༨ஊɿCortex Series·ͱΊ 25 M3 M4 M4F M7 Fixed ○ ○ ○ ○ DSP × ○ ○ ○ SP Float × × ○ ○ DP Float × × × Ұ෦ ໋ྩηοτ
Slide 26
Slide 26 text
• DSPDSPॲཧͱͯ͠ίʔυ͕࣮֬ʹͰ͖Δ • ≒։ൃͷϓϩηε͕͖ͪΜͱͰ͖Δɻੑೳͷͱදݱͷ Λ͚ͯߟ͑ΒΕΔ • υΩϡϝϯςʔγϣϯɺཁ݅ఆٛͱͯ͠ͷՁ • ࠷ѱݴޠॲཧܥ͕ࢮΜͰݴޠ༷ΔͷͰղಡ͍͢͠ • ϦϯάόοϑΝͱ͔σΟϨΠपΓͷϝϞϦཧؔͷࣦഊ͕ݮΔ • VCVRackͳͲͷιϑτγϯηɺWebͳͲଞϓϥοτϑΥʔϜͱฒߦ ͯ͠ӡ༻͢ΔՄೳੑ͕͋ΔͳΒ˕ DSPݴޠΛ͏ϝϦοτ 26
Slide 27
Slide 27 text
• ಋೖ࣮ɾՄಡੑɾ։ൃͷރΕ۩߹ɺকདྷੑͳͲਖ਼ҰҰ • Faust҆ఆ͍ͯ͠Δ͕ɺΈࠐΈ͕ϝΠϯλʔήοτͱ͍͏Θ͚Ͱແ͍ • SoulকདྷతʹΈࠐΈΛ͔ͳΓҙ͍ࣝͯ͠Δ͕ൃల్্ • VultখنͰ͋Δ͕ར༻࣮͋Γ • Ϗϧυϓϩηε͕ҰஈෳࡶʹͳΔ • FFT͕བྷΜͩΓɺ෦తʹαϯϓϧϨʔτΛม͑Δͱ͔͕ݫ͍͠ DSPݴޠΛ͏σϝϦοτ 27
Slide 28
Slide 28 text
• LinuxFoundation͕ࢧԉͯ͠ɺIntelͷਓ͕த৺ʹ։ൃத • ຯʹLinux Kernel 5.2͔Β͏औΓࠐ·Ε͍ͯΔ • ࠓͷͱ͜ΖαϙʔτIntelܥͷx86CPU&TensilicaͷXtensa HiFiγ ϦʔζͷΈ߹Θͤ(࣮ػͰࢼ͢ͳΒMinnowBoard Turbot͙Β͍) • ࣮༻తʹͳΔ·Ͱ·ͩԕͦ͏ʢಛʹARMରԠͱ͔ʣͩ ͚ͲɺQEMUͰΤϛϡϨʔγϣϯͯ͠Δͷͱ͔Ξϓϩʔνͱͯ͠ ࢀߟʹͳΔ ༨ஊ: Sound Open Firmwareɹ 28
Slide 29
Slide 29 text
·ͱΊ 29
Slide 30
Slide 30 text
• OSΛ͏͔൱͔ʁ • Linuxͷ߹ɺXenomaiͷΑ͏ͳΧʔωϧ֦ுΛ͢Δ͔ʁ • ALSA System on a Chip(ASoC)SOFͳͲɺΈࠐΈ͚Φʔ σΟΦػೳࠓޙॆ࣮͍͖ͯͦ͠͏ • OSΘͳ͍߹ɺArduino IDEରԠorඇରԠʁ • ͳΜ͔ͩΜͩIOͷڞ௨ن֨ͱཱͯͭͭ͋͠͠ΔͷͰɺϘʔυ ͕σΟείϯʹͳͬͯସ͑Λޮ͔͍͔ͤ͢ ΞʔΩςΫνϟͷબࢶ 30
Slide 31
Slide 31 text
• ϢʔβʔʹϓϩάϥϜॻ͖͑Λ։์͢Δ͔? • ͞ΒʹɺϑΝʔϜॻ͖͑orϗοτϦϩʔυ • OS͋Γͷํ͕ϗοτϦϩʔυͳͲؚΊରԠ͍͢͠ • ίετͷ ΞʔΩςΫνϟબͷஅج४ 31
Slide 32
Slide 32 text
• ʮιʔε͕ެ։͞Ε͍ͯΔʯͱʮυΩϡϝϯτ͕͖ͬͪΓ·ͱΊ ΒΕ͍ͯΔʯશવҧ͏ • ϋʔυؚΊͨυΩϡϝϯτ·Ͱ͖ͪΜͱ·ͱΊ͍ͯΔͷ Mutable Instruments͘Β͍ʢ݁ՌతʹͦΕͰ͕͍ͬͯΔʣ • ͤΊͯReadme͘Β͍ॻ͍ͯ͘Εʢ.inoϑΝΠϧ͕υϯͱஔ͔Ε ͍ͯͯࠔΔʣ • ϑΝʔϜΣΞɺճ࿏ਤ/ϨΠΞτؚΊͨڞ༗·͍ͩΖ͍Ζ ͍͕͠https://www.writethedocs.org/guide/ͱ͔ࢀߟʹͳΓͦ͏ Φʔϓϯιʔεϋʔυͷ࣮ࡍ 32
Slide 33
Slide 33 text
• DaisyDSPϥΠϒϥϦ΄͔Ͱ͍ճ͠ޮ͖ͦ͏ͩ͠ɺSTM ϕʔεͷ։ൃͷϓϩτλΠϓͱͯ͠े͑ͦ͏ • QEMUͱ͔Ͱϓϩηοα/ϩδοΫϨϕϧͷΤϛϡϨʔλ࡞Δͱ ͔ɺΞφϩάɾϝΧ෦ͷγϛϡϨʔλ༻ҙ͓ͯ͘͠ͱ͔ɺ͋Μ ·ΓͬͯΔͱ͜ͳ͍͚ͲຊؾͰଓ͖͍ͤͨ͞ͳΒ༗ޮ͔ ͦͷଞॴײ 33