Slide 1

Slide 1 text

2020/09/01 দӜ஌໵(me@matsuuratomoya.com/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++ʢΛܦ༝ͯ͠ɺFaust΍Pd+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) • DAC͸12bit͕ͩADC͸16bit 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Ͱ͸ੵۃతʹ׆༻͞Ε͍ͯΔ • Rebel͸emscripten࢖ͬͯউखʹWeb্ͰϓϨϏϡʔͰ͖ΔπʔϧΛ ࡞ͬͯӡ༻͍ͯ͠ΔΒ͍͠ Gen~ 19

Slide 20

Slide 20 text

• hvcc: PdύονˠCͷτϥϯεύΠϥ (࣮૷͸Python) • libpdͳͲͱ͸׬શʹҟͳΔ࣮૷Ͱɺεέδϡʔϥͱ͔͸ଘࡏ͠ͳ͍ɻ PdͷύονΛແཧ΍ΓGen~Ϩϕϧͷύονͱͯ͠ղऍ͍ͯ͠Δײ͡ • ։ൃݩͷEnzien Audio͕2೥લʹ౗࢈ɺطʹձࣾͷWeb΋ফ໓ • hvcc͸GPLͱͯ͠ެ։͞ΕΔ΋Ұ੾ϝϯς͞ΕͣɺOSSͱͯ͠։ൃ ͕Ҿ͖ܧ͕ΕΔ༷ࢠ΋ͳ͠ • ͷׂʹPdͷ࢓༷͕ރΕ͍ͯΔ͜ͱ΋͋ΓҰԠಈ͘ɻBela΍OwlͰ͸ Ҿ͖ଓ͖ར༻͞Ε͍ͯΔ(͜Ε΋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/7͸DSP޲͚ͷઐ༻໋ྩηοτ͕͋Δ͕ɺ༗ޮ׆༻͖͠Εͣ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

• DSP͸DSPॲཧͱͯ͠ίʔυ͕࣮֬ʹ෼཭Ͱ͖Δ • ≒։ൃͷϓϩηε͕͖ͪΜͱ෼཭Ͱ͖Δɻੑೳͷ໰୊ͱදݱͷ໰ ୊Λ෼͚ͯߟ͑ΒΕΔ • υΩϡϝϯςʔγϣϯɺཁ݅ఆٛͱͯ͠ͷՁ஋ • ࠷ѱݴޠॲཧܥ͕ࢮΜͰ΋ݴޠ࢓༷͸࢒ΔͷͰղಡ͠΍͍͢ • ϦϯάόοϑΝͱ͔σΟϨΠपΓͷϝϞϦ؅ཧؔ܎ͷࣦഊ͕ݮΔ • 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

• Daisy͸DSPϥΠϒϥϦ΄͔Ͱ΋࢖͍ճ͠ޮ͖ͦ͏ͩ͠ɺSTM ϕʔεͷ։ൃͷϓϩτλΠϓͱͯ͠े෼࢖͑ͦ͏ • QEMUͱ͔Ͱϓϩηοα/ϩδοΫϨϕϧͷΤϛϡϨʔλ࡞Δͱ ͔ɺΞφϩάɾϝΧ෦෼ͷγϛϡϨʔλ༻ҙ͓ͯ͘͠ͱ͔ɺ͋Μ ·Γ΍ͬͯΔͱ͜ͳ͍͚ͲຊؾͰ௕ଓ͖͍ͤͨ͞ͳΒ༗ޮ͔΋ ͦͷଞॴײ 33