Slide 1

Slide 1 text

RubyͰԻΛ࡞Δ දࢀಓ.rb ta1kt0me

Slide 2

Slide 2 text

ࣗݾ঺հ • ΤϯδχΞ@גࣜձࣾgrooves • Twitter • @talkto_me • Github • @ta1kt0me

Slide 3

Slide 3 text

ԻΛ࡞Δ

Slide 4

Slide 4 text

ϥΠϒϥϦ • ruby-coreaudio • Core Audioͱ͍͏iOSɺOSX༻ͷԻָϥΠ ϒϥϦͷϥούʔ • https://github.com/nagachika/ruby- coreaudio

Slide 5

Slide 5 text

αϯϓϧ ˌruby-coreaudio/examples/outbuffer_sine.rb require "coreaudio" dev = CoreAudio.default_output_device buf = dev.output_buffer(1024) phase = Math::PI * 2.0 * 440.0 / dev.nominal_rate th = Thread.start do i = 0 wav = NArray.sint(1024) loop do 1024.times {|j| wav[j] = (0.4 * Math.sin(phase*(i+j)) * 0x7FFF).round } i += 1024 buf << wav end end buf.start sleep 2 buf.stop puts "#{buf.dropped_frame} frame dropped." th.kill.join

Slide 6

Slide 6 text

΍ͬͯΔ͜ͱ • ഑ྻʹ਺ࣈΛ٧ΊΔ • ग़ྗσόΠεʹ౉͢

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Θ͔Βͳ͍ • 440.0 ❓ • Math::PI * 2 ❓ • 0x7FFF ❓ • 0.4 ❓ • Math.sin ❓

Slide 9

Slide 9 text

(θωθ;?

Slide 10

Slide 10 text

ͱΓ͋͑ͣ • प೾਺ • Իͷߴ͕ܾ͞·Δ • ج४͸440Hz ϥ • Ϗοτਂ౓ • Իͷେ͖͕ܾ͞·Δ • αϯϓϦϯάϨʔτͱ࠶ੜ࣌ؒ • ੜ੒͢Δ਺஋ͷ਺͕ܾ·Δ • αΠϯ೾ • ౳଎ԁӡಈͰදݱ

Slide 11

Slide 11 text

αΠϯ೾ • ౳଎ԁӡಈ STANDARD_PITCH = 440.0 BIT_DEPTH = 0x05A0 PLAY_TIME = 2 tone = 3 waves = [] dev = CoreAudio.default_output_device phase = STANDARD_PITCH * 2 ** (tone/12.0) / dev.nominal_rate (0...PLAY_TIME * dev.nominal_rate).inject(0.0) do |position, i| waves << Math.sin(position * 2 * Math::PI) * BIT_DEPTH phase * i - (phase * i).floor end

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

ෳ਺ͷԻ࠶ੜ͍ͨ͠ • ෳ਺ͷchannel͔ΒͷԻΛಉ࣌ʹ࠶ੜ͢Δ • ෳ਺ͷԻΛಉ࣌ʹ࠶ੜ͢Δ • ԻΛ߹੒ͯ͠ҰͭͷchannelͰ࠶ੜ͢Δ

Slide 14

Slide 14 text

Իͷ߹੒ • ෳ਺ͷप೾਺ͷαΠϯ೾Λ߹੒͢Δ͢Δͱɺ ෳ਺ͷԻ͕ͳ͍ͬͯΔΑ͏ʹฉ͑͜Δ • 523Hzʢυʣ + 659Hzʢϛʣ + 784Hzʢιʣ • प೾਺͸େମ

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

ଞͷ೾ܗ

Slide 17

Slide 17 text

ϊίΪϦ೾ • ΪβΪβͳ೾ STANDARD_PITCH = 440.0 BIT_DEPTH = 0x05A0 PLAY_TIME = 2 tone = 3 waves = [] dev = CoreAudio.default_output_device phase = STANDARD_PITCH * 2 ** (tone/12.0) / dev.nominal_rate (0...PLAY_TIME * dev.nominal_rate).inject(0.0) do |position, i| waves << ((position * 2.0) - 1.0) * BIT_DEPTH phase * i - (phase * i).floor end

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

ࡾ֯೾ STANDARD_PITCH = 440.0 BIT_DEPTH = 0x05A0 PLAY_TIME = 2 tone = 3 waves = [] dev = CoreAudio.default_output_device phase = STANDARD_PITCH * 2 ** (tone/12.0) / dev.nominal_rate (0...PLAY_TIME * dev.nominal_rate).inject(0.0) do |position, i| waves << BIT_DEPTH - (((position * 2.0) - 1.0) * BIT_DEPTH * 2.0).abs phase * i - (phase * i).floor end

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

ۣܗ೾ • ࠷େ͔࠷খ͔ STANDARD_PITCH = 440.0 BIT_DEPTH = 0x05A0 PLAY_TIME = 2 tone = 3 waves = [] dev = CoreAudio.default_output_device phase = STANDARD_PITCH * 2 ** (tone/12.0) / dev.nominal_rate (0...PLAY_TIME * dev.nominal_rate).inject(0.0) do |position, i| waves << ((position >= 0.5) ? BIT_DEPTH : -BIT_DEPTH) phase * i - (phase * i).floor end

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

ϊΠζ • βʔοͯԻ • ϗϫΠτϊΠζʹ෼ྨ͞ΕΔʁ • ࣜ rand(-Ϗοτਂ౓..Ϗοτਂ౓)

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

·ͱΊ • RubyͰԻ͕࡞ΕΔ • ΋ͬͱָʹ࡞ΕΔϥΠϒϥϦ͍Ζ͍Ζ͋Γͦ͏ • Իͷߏ଄͕ΠϝʔδͰ͖ͨ • Ի࡞Δ࣌ɺ೾ܗݟͳ͕ΒͩͱḿΔ • ϑʔϦΤ΄ʹΌΒΒ͕೉ղ • ΧϥʔυϊΠζ΁ͷಓͷΓ͸௕͍

Slide 26

Slide 26 text

͋Γ͕ͱ͏͍͟͝·ͨ͠