Slide 1

Slide 1 text

:VLJ:BTPTIJNB!ZBTP@TBO  "7"VEJP&OHJOFͰ ϦΞϧλΠϜϨϯμϦϯά J04%$+BQBO

Slide 2

Slide 2 text

಺༰ ΦʔσΟΦೖग़ྗͷ࢓૊Έ J04ͷΦʔσΟΦ"1* ҆ఆͯ͠ϦΞϧλΠϜʹϨϯμϦϯάΛ͢Δʹ͸ IUUQTHJUIVCDPNPCKFDUJWFBVEJP"VEJP6OJU3FOEFSJOH&YBNQMF αϯϓϧίʔυ

Slide 3

Slide 3 text

ΦʔσΟΦೖग़ྗͷ࢓૊Έ

Slide 4

Slide 4 text

ίʔϧόοΫ ΦʔσΟΦೖग़ྗͷ࢓૊Έ ΦʔσΟΦॲཧΛ։࢝͢Δͱઐ༻ͷεϨουͰ܁Γฦ͠ίʔϧόοΫ͕ݺ͹ΕΔ ʢඵʹ͖ͭ਺ेճҎ্ʣ

Slide 5

Slide 5 text

ίʔϧόοΫ ग़ྗ ΦʔσΟΦೖग़ྗͷ࢓૊Έ ίʔϧόοΫ಺ͰσʔλΛ౉͢ͱԻ੠͕ग़ྗ͞ΕΔ

Slide 6

Slide 6 text

ίʔϧόοΫ ग़ྗ ೖྗ ΦʔσΟΦೖग़ྗͷ࢓૊Έ ίʔϧόοΫʹೖྗ͞ΕͨԻ੠ͷσʔλ͕౉ͬͯ͘Δ

Slide 7

Slide 7 text

ίʔϧόοΫ ग़ྗ ೖྗ ΦʔσΟΦೖग़ྗͷ࢓૊Έ ❌ ίʔϧόοΫͷॲཧʹ͕͔͔࣌ؒΔͱɺԻ్͕੾ΕͨΓऔΓ͜΅ͨ͠Γ͢Δ͜ ͱʹͳΔ

Slide 8

Slide 8 text

"7"VEJP1MBZFSɾ"7"VEJP3FDPSEFSͳͲͷߴϨϕϧͳ"1*͸ɺ͜ͷΑ͏ͳ௿Ϩ ϕϧॲཧΛؾʹ͠ͳͯ͘΋؆୯ʹ࢖͑ΔΑ͏ʹͳ͍ͬͯΔ ϦΞϧλΠϜʹࣗ༝ʹԻΛѻ͍͍ͨ৔߹͸ɺ௿ϨϕϧͳॲཧΛ͢Δඞཁ͕͋Δ ΦʔσΟΦೖग़ྗͷ࢓૊Έ

Slide 9

Slide 9 text

J04ͷΦʔσΟΦ"1*

Slide 10

Slide 10 text

J04ॳظͷࠒ͔Β͋Δ$ݴޠͷ"1* $BSCPODPNQPOFOUCBTFE"VEJP6OJUT "6(SBQI "VEJP2VFVF4FSWJDFT

Slide 11

Slide 11 text

ඇਪ঑ʹͳͬͨ"1* J043FMFBTF/PUFTΑΓ "6(SBQIʢʙJ04ʣ *OUFS"QQBVEJPʢʙJ04ʣ $BSCPODPNQPOFOUCBTFE"VEJP6OJUTʢ͍ۙ͏ͪʹ࢖͑ͳ͘ͳΔʣ

Slide 12

Slide 12 text

௥Ճ͞Εͨ"1* "7"VEJP&OHJOFʢJ04ʙʣ "VEJP6OJU7"VEJP6OJU&YUFOTJPOTʢJ04ʙʣ "7"VEJP4PVSDF/PEF"7"VEJP4JOL/PEFʢJ04ʙʣ

Slide 13

Slide 13 text

J04ҎલͷϦΞϧλΠϜϨϯμϦϯά $ݴޠͷ"VEJP6OJU "6"VEJP6OJUΛܧঝ͢Δ͜ͱͰ"7"VEJP&OHJOFͰ΋Մೳʹ͸ͳΔʢϓϥάΠϯ ͷ࢓૊ΈͰ࡞ΔͷͰɺηοτΞοϓ͕໘౗Ͱෳࡶʣ

Slide 14

Slide 14 text

"7"VEJP4PVSDF/PEF"7"VEJP4JOL/PEF͕ొ৔ ϓϥάΠϯͱൺ΂ͯηοτΞοϓ͕༰қʹͳͬͨ J04Ҏ߱ͷϦΞϧλΠϜϨϯμϦϯά

Slide 15

Slide 15 text

"7"VEJP4PVSDF/PEF ΦʔσΟΦΛग़ྗ͢ΔσʔλΛ౉͢ 4PVSDF/PEF 0VUQVU/PEF "7"VEJP&OHJOF 3FOEFS #MPDL @interface AVAudioSourceNode : AVAudioNode - (instancetype)initWithRenderBlock:(AVAudioSourceNodeRenderBlock)block; - (instancetype)initWithFormat:(AVAudioFormat *)format renderBlock:(AVAudioSourceNodeRenderBlock)block; @end

Slide 16

Slide 16 text

"7"VEJP4JOL/PEF ΦʔσΟΦͷೖྗ͞ΕͨσʔλΛड͚औΔ *OQVU/PEF 4JOL/PEF "7"VEJP&OHJOF 3FDFJWFS #MPDL @interface AVAudioSinkNode : AVAudioNode - (instancetype)initWithReceiverBlock:(AVAudioSinkNodeReceiverBlock)block; @end

Slide 17

Slide 17 text

҆ఆͨ͠ϨϯμϦϯάΛߦ͏

Slide 18

Slide 18 text

ΦʔσΟΦ*0ͷεϨουʹ͓͍ͯ ϝϞϦͷ֬อΛ͠ͳ͍ MJCEJTQBUDI͸࢖Θͳ͍ $$ ͰॲཧΛॻ͘ "DDFMFSBUF'SBNFXPSLΛ׆༻͢Δ ଞͷεϨουͱͷϩοΫΛආ͚Δʢ4XJGU΍0CKFDUJWF$ͷݺͼग़͠ɺϑΝΠϧ ೖग़ྗͷதʹ͋Δʣ IUUQTQPTUEDDGPVSDPNNPONJTUBLFTJOBVEJPEFWFMPQNFOU

Slide 19

Slide 19 text

αϯϓϧίʔυ "7"VEJP4PVSDF/PEFαΠϯ೾ͷ࠶ੜ ʲ%JSFDUʳप೾਺ͷૢ࡞Λ͙͢ʹ൓ө ʲ%FGFSSFEʳཷΊ͍ͯΔόοϑΝʹରͯ͠प೾਺ͷૢ࡞Λ൓ө "7"VEJP4JOL/PEFೖྗԻͷϝʔλʔදࣔ IUUQTHJUIVCDPNPCKFDUJWFBVEJP"VEJP6OJU3FOEFSJOH&YBNQMF

Slide 20

Slide 20 text

αϯϓϧίʔυͷݴޠߏ੒ 3FOEFS#MPDL3FDFJWFS#MPDLͷத͸$ Ͱهड़ 0CKFDUJWF$Ͱϥοϓͯ͠/PEFΛฦ͢ "7"VEJP&OHJOFͷߏங΍6*͸4XJGUͰهड़

Slide 21

Slide 21 text

εϨουؒͷ΍ΓͱΓ

Slide 22

Slide 22 text

TUEBUPNJD ಛ௃ ੔਺ܕɾුಈখ਺఺਺ܕɾϙΠϯλܕΛεϨουηʔϑʹѻ͑ΔΫϥε JT@MPDL@GSFF ؔ਺ͰϩοΫ͞ΕΔ͔औಘͰ͖Δʢࠓ࣌ͷσόΠεͳΒ·ͣ USVFʣ

Slide 23

Slide 23 text

ෳ਺ͷ஋ΛΞτϛοΫʹ͢Δ ڞ༻ମͰTUEBUPNJDͷܕͱTUSVDUΛม׵ union Value { void *v; struct { float const level; float const peak; }; }; static_assert(sizeof(Value) == sizeof(void *), "");

Slide 24

Slide 24 text

ෳ਺ͷ஋ΛΞτϛοΫʹ͢Δ ڞ༻ମͰTUEBUPNJDͷܕͱTUSVDUΛม׵ std::atomic atomicValue; // atomicͷ஋ʹηοτ͢Δ Value setValue{.level = 0.0f, .peak = 0.0f}; atomicValue = setValue.v; // atomicͷ஋͔Βήοτ͢Δ Value getValue{.v = atomicValue};

Slide 25

Slide 25 text

TUETIBSFE@QUS ಛ௃ $ ͷΫϥεΛࢀরΧ΢ϯτํࣜͰอ࣋͢Δ ࢀরΧ΢ϯλ͸εϨουηʔϑ ϨϯμϦϯάதʹίϐʔ͠ͳ͍Α͏ʹؾΛ͚ͭΔ

Slide 26

Slide 26 text

TUETIBSFE@QUS ίϐʔͯ͠͠·͏ॻ͖ํ void sample(std::shared_ptr data) { auto localData = data; } ίϐʔ͞ΕΔ ͭղ์͞ΕΔ ίϐʔ͞ΕΔ

Slide 27

Slide 27 text

TUETIBSFE@QUS ίϐʔ͞Εͳ͍ॻ͖ํ void sample(std::shared_ptr const &data) { auto const &localData = data; } ίϐʔ͞Εͳ͍ ίϐʔ͞Εͳ͍ Կ΋ى͖ͳ͍

Slide 28

Slide 28 text

ͭͷεϨου͔Βಉ͡σʔλʹॻ͖ࠐΉ %FGFSSFEͷαϯϓϧ

Slide 29

Slide 29 text

ͭͷεϨου͔Βಉ͡σʔλΛѻ͏ %FGFSSFEͷαϯϓϧ αΠϯ೾ੜ੒εϨου αΠϯ೾Λ ॻ͖ࠐΈ ग़ྗόοϑΝʹ ಡΈࠐΈ ڞ༗͢Δσʔλ ͭ ࠷ޙ·ͰಡΈࠐΜͩΒ ಡΈࠐΈݩΛ੾Γସ͑ αΠϯ೾ͷ ॻ͖ࠐΈΛࢦࣔ ඵؒͷ ΦʔσΟΦσʔλ ग़ྗεϨου

Slide 30

Slide 30 text

ͭͷεϨου͔Βಉ͡σʔλΛѻ͏ %FGFSSFEͷαϯϓϧ αΠϯ೾ੜ੒εϨου 8SJUJOH 3FBEJOH ΞτϛοΫͳϑϥά 8SJUJOHͳΒ αΠϯ೾Λॻ͖ࠐΜͰ 3FBEJOHʹ͢Δ 3FBEJOHͳΒ ग़ྗόοϑΝʹ σʔλΛಡΈࠐΜͰ ࠷ޙ·ͰߦͬͨΒ 8SJUJOHʹ͢Δ ڞ༗͢Δσʔλ ͭ ඵؒͷ ΦʔσΟΦσʔλ ग़ྗεϨου

Slide 31

Slide 31 text

·ͱΊ $ݴޠͷ"1*͸ඇਪ঑ɻ࣌୅͸"7"VEJP&OHJOF ΦʔσΟΦͷεϨου͕ϩοΫͯ͠͠·Θͳ͍Α͏ʹؾΛ෇͚Δ