آواز قو - مهدی احمدوند
خیلی خب . رباتی که بتونه این بازی رو انجام بده رو با پایتون نوشتم و البته یه سری از مفاهیم مورد نیاز برای نوشتن ربات رو از اسکرپیت آقای کاپیتان فهمیدم .
کار این ربات اینجوری هستش که میاد صفحه رو اسکن میکنه و میبینه هر نقطه اون نقطه های قرمز بوجود اومد رو موقعیتش رو پیدا میکنه و با موس روش کلیک میکنه .
سورس ربات :
import pyautogui as g from time import sleep import keyboard from winsound import Beep import threading picture = "sample.png"
def findandclick(): try: location = g.locateOnScreen(picture , region = region) pos = g.center(location) g.click(pos[0] , pos[1]) Beep(1000,100) print("Click At ({} , {})".format(pos[0], pos[1])) except Exception as error: print("ERROR : " , error) for i in range(5,0 , -1): print (i) sleep(1)
print("start")
region = (0 , 171 , 1365 ,499)
while True: if keyboard.is_pressed("q"): break findandclick()
هر بار که یه نقطه رو پیدا میکنه و روش کلیک میکنه یه بوق میزنه . ویدیو تست کردنش :
ولی خب مشکل اینجاس که چون با پایتون نوشته شده سرعتش پایینه . فعلا دنبال اینم با سی پلاس پلاس پیاده سازیش کنم . البته داخل سی پلاس پلاس هم یه سری مشکلاتی بوجود اومده . من برای گرفتن رنگ هر پیکسل از تابع GetPixel استفاده میکنم ولی سرعتش بازم خیلی خیلی پایینه . اگه تابعی یا روشی برای خوندن سریع رنگ پیکسل ها تو سی پلاس پلاس سراغ دارید ممنون میشم بگید .
و نهایتا اینم رکورد زدن خودم (بدون ربات) به آهنگشم توجه نکنید همینجور داشتم گوش میکردم فیلم گرفتم :|| :
یه بازی برای تست سرعت کلیک موس هست .
از لینک زیر بازی رو انجام بدید و رکورد بزنید :
نکته : حتما با کامپیوتر وارد سایت بشید . نمیدونم با اندروید میشه یا نه ولی اصلش اینه که این بازی رو با موس انجام بدید
نکته 2 : اگه خواستید میتونید ربات براش بنویسید .
من فعلا بازی نمیکنم . دارم یه ربات براش مینویسم که انجام بده . با پایتون نوشتم ولی سرعتش پایینه میرم سمت سی پلاس پلاس .
شمام خواستید رکورد بزنید همینجا رکوردتونو بگید .
در پست بعدی وقتی ربات کامل شد سورس و توضیحاتشو میزارم .
همچنین تنظیمات پیشفرض بازی (مثل زمان و ...) رو عوض نکنید تا همه در شرایط یکسان رکورد گیری کنیم .
احتمالا اسم خیلی از زبانای برنامه نویسی رو شنیدید آره ؟ پایتون ، سی ، سی پلاس پلاس ، روبی ، پرل ، لیسپ ، جاوا ، گو ، لوا و .... . اوووه تا صبح بگم بازم هستن .
ولی امروز میخوام یه زبان برنامه نویسی بهتون معرفی کنم قطعا قطعا خیلیاتون اسمشو نشنیدید تاحالا :) هه :)
بله یه زبان برنامه نویسی به نام سونیک پای (sonic pi) که مخصوص ساخت آهنگه ؟ یعنی چی ؟ یعنی با کد نویسی آهنگ بسازیم .
فکرشو بکن آهنگ های اوپن سورس :)))) . آهنگ هایی که سورسشون باز هست و میتونیم ببینیم .
خب بگم که یادگیری این زبان برنامه نویسی اصلا اصلا اصلا کار سختی نیست . من خودم یه سال پیش بود رو رزبری پای باهاش آشنا شدم تقریبا تو 1 روز بیشتر مفاهیم اصلیشو یاد گرفتم . زیاد مباحث سنگینی نداره مثل زبانای برنامه نویسی دیگه .
همینطور خود برنامه sonic pi هم یک آموزش کامل به زبان اصلی (ولی روان و قابل فهم) داره که من از همون یادش گرفتم .
برای برنامه نویسی به زبان سونیک پای باید اول برنامشو دانلود کنیم . میتونید از این لینک ، برنامشو برا سیستم عاملتون بگیرید . سونیک پای برای ویندوز ، مک و لینوکس رزبری پای موجود هستش و میتونید دانلودش کنید
توضیح بسه . بزارید بریم یکم باهاش آهنگ بزنیم .
خب برنامه رو که باز میکنیم با چنین صفحه ای رو به رو میشیم که داخلش کد مینویسیم و اونارو اجرا میکنیم (پخش میکنیم آهنگی که نوشتیم رو) :
حالا بزارید چند نمونه آهنگ که با سونیک پای نوشته شدن رو گوش کنیم . این آهنگ ها اوپن سورس هستند بنابراین سورسشون رو هم میبینیم . هر آهنگ رو اول سورس کدشو میزارم بعد خود اهنگشو که گوش کنید.
1 - آهنگ اول (از تو گیت هاب پیدا کردم سورسشو ):
# Chrono Trigger Soundtrack - Corridors of Time # plug this into http://sonic-pi.net/
# still needs synth pads
# global config use_bpm 112
def play_legato_note(note_value, duration) release_duration = duration if duration < 1 release_duration = 1 end play note_value, release: release_duration, amp: 0.65 sleep duration end
# arpeggio parts
def arp_d_2 play_pattern_timed [:d4, :fs4, :b4, :cs5, :fs5, :fs4, :b4, :cs5], [0.5], amp: 0.5 play_pattern_timed [:e5, :fs4, :b4, :cs5, :fs5, :fs4, :b4, :cs5], [0.5], amp: 0.5 end
def arp_fs_2 play_pattern_timed [:cs4, :e4, :b4, :cs5, :fs5, :fs4, :b4, :cs5], [0.5], amp: 0.5 play_pattern_timed [:e5, :fs4, :b4, :cs5, :fs5, :fs4, :b4, :cs5], [0.5], amp: 0.5 end
# bass parts
def bass_d play :d2, release: 1.5 sleep 1.5 play :d2, release: 1.5 sleep 1.5 play :a2 sleep 0.5 play :d3 sleep 0.5 end
def bass_fs_2 play :fs2, release: 1.5 sleep 1.5 play :fs2, release: 1.5 sleep 1.5 play :cs3 sleep 0.5 play :fs3 sleep 0.5 play :fs2, release: 1.5 sleep 1.5 play :fs2, release: 1.5 sleep 1.5 play :e2 sleep 1 end
def bass_cs_2 play :cs2, release: 1.5 sleep 1.5 play :cs2, release: 1.5 sleep 1.5 play :gs2 sleep 0.5 play :cs3 sleep 0.5 play :cs2, release: 1.5 sleep 1.5 play :cs2, release: 1.5 sleep 1.5 play :gs2 sleep 1 end
def bass_e play :e2, release: 1.5 sleep 1.5 play :e2, release: 1.5 sleep 1.5 play :b2 sleep 0.5 play :e3 sleep 0.5 end
# Workspace live_loop :arp do # intro arp_d_2 arp_d_2 # bass and drums enter arp_d_2 arp_fs_2 # all instruments loop do arp_d_2 arp_fs_2 end end
live_loop :bass do sleep 16 bass_d bass_d bass_fs_2 # start melody bass_d bass_d bass_cs_2 bass_d bass_d bass_fs_2 bass_d bass_d bass_cs_2 bass_d bass_e bass_fs_2 end
live_loop :kick_drum do sleep 16 loop do sample :drum_tom_lo_soft, rate: 0.5 sleep 0.75 sample :drum_tom_lo_soft sleep 0.75 sample :drum_tom_lo_soft sleep 1 sample :drum_tom_lo_soft sleep 1.5 end end
live_loop :snare_drum do sleep 16 loop do sleep 1 sample :drum_tom_hi_soft sleep 1 end end
live_loop :melody do use_synth :prophet sleep 32 # bar 1, 2 play_legato_note :gs4, 0.75 play_legato_note :gs4, 0.75 play_legato_note :fs4, 0.5 play_legato_note :fs4, 3.5 play_legato_note :fs4, 0.25 play_legato_note :gs4, 0.25 play_legato_note :a4, 0.75 play_legato_note :b4, 0.75 play_legato_note :a4, 0.25 play_legato_note :gs4, 0.25 # bar 3, 4 play_legato_note :fs4, 0.75 play_legato_note :fs4, 0.75 play_legato_note :e4, 0.5 play_legato_note :e4, 5.5 # pre-measure 1 play_legato_note :cs4, 0.5 # bar 5,6 play_legato_note :gs4, 0.75 play_legato_note :gs4, 0.75 play_legato_note :fs4, 0.5 play_legato_note :fs4, 3 sleep 0.5 play_legato_note :fs4, 0.5 play_legato_note :gs4, 0.75 play_legato_note :a4, 0.75 play_legato_note :b4, 0.5 play_legato_note :b4, 0.75 play_legato_note :cs5, 0.75 play_legato_note :cs5, 3.5 sleep 0.5 play_legato_note :cs5, 0.5 play_legato_note :e5, 0.75 play_legato_note :cs5, 0.75 play_legato_note :a4, 5.25 sleep 0.75 play_legato_note :a4, 0.5 play_legato_note :fs4, 1 play_legato_note :cs5, 1 # play_legato_note :b4, 0.75 play_legato_note :cs5, 0.75 play_legato_note :gs4, 1.5 play_legato_note :fs4, 0.5 play_legato_note :e4, 3 sleep 1 play_legato_note :e4, 0.5 # play_legato_note :fs4, 0.5 play_legato_note :a3, 0.5 play_legato_note :d4, 0.5 play_legato_note :e4, 0.5 play_legato_note :fs4, 0.75 play_legato_note :gs4, 0.75 play_legato_note :a4, 0.5 # play_legato_note :gs4, 0.5 play_legato_note :b3, 0.5 play_legato_note :e4, 0.5 play_legato_note :fs4, 0.5 play_legato_note :gs4, 0.75 play_legato_note :a4, 0.75 play_legato_note :gs4, 0.5 # play_legato_note :gs4, 3 play_legato_note :gs4, 0.5 play_legato_note :fs4, 0.5 # play_legato_note :fs4, 4 end
2 - آهنگ بازی Super Mario :
comment do # transcribed from the MML notation here: http://www.mmlshare.com/tracks/view/403 # # Sonic Pi currently has a size limit of about 9k which is a known issue (#102). # I've kept the comments up here to get around that as comment blocks don't get # sent to the interpreter. Some of the layout here is an exercise in reducing bytes. # I'm using Ruby's stabby lambda syntax ( -> { ... } ) in case you want to google it :) # # THIS HAS ONLY BEEN TESTED ON A MAC - on an RaspberryPi you might want to change it to # use_bpm 60 # # Regarding the choice of an FM synth for drums: # You could use a noise synth here, but I think the NES sound # chip would have used something like this FM as the character # of the noise would change with different notes which I'm making # use of in drum_pattern_b end use_debug false # help RPi performance use_bpm 100 use_synth :pulse use_synth_defaults release: 0.2, mod_rate: 5, amp: 0.6 define :structure do |i,a,b,c,d| 1.times { i.call } loop do 2.times { a.call } 2.times { b.call } 1.times { c.call } 2.times { a.call } 2.times { d.call } 1.times { c.call } 1.times { d.call } end end
in_thread do intro = -> { play_pattern_timed([:e5,:e5,nil,:e5,nil,:c5,:e5,nil, :g5,nil,nil,nil,nil,nil,nil,nil], [0.25]) } theme_a = -> { play_pattern_timed([:c5,nil,nil,:g4,nil,nil,:e4,nil, nil,:a4,nil,:b4,nil,:Bb4,:a4,nil], [0.25]) play_pattern_timed([:g4,:e5,:g5], [1/3.0]) # minim triplets play_pattern_timed([:a5,nil,:f5,:g5, nil,:e5,nil,:c5, :d5,:b4,nil,nil], [0.25]) } theme_b = -> { play_pattern_timed([nil,nil,:g5,:fs5,:f5,:ds5,nil,:e5, nil,:gs4,:a4,:c5,nil,:a4,:c5,:d5, nil,nil,:g5,:fs5,:f5,:ds5,nil,:e5, nil,:c6,nil,:c6,:c6,nil,nil,nil, nil,nil,:g5,:fs5,:f5,:ds5,nil,:e5, nil,:gs4,:a4,:c5,nil,:a4,:c5,:d5, nil,nil,:ds5,nil,nil,:d5,nil,nil, :c5,nil,nil,nil,nil,nil,nil,nil], [0.25]) } theme_c = -> { play_pattern_timed([:c5,:c5,nil,:c5,nil,:c5,:d5,nil, :e5,:c5,nil,:a4,:g4,nil,nil,nil, :c5,:c5,nil,:c5,nil,:c5,:d5,:e5, nil,nil,nil,nil,nil,nil,nil,nil, :c5,:c5,nil,:c5,nil,:c5,:d5,nil, :e5,:c5,nil,:a4,:g4,nil,nil,nil, :e5,:e5,nil,:e5,nil,:c5,:e5,nil, :g5,nil,nil,nil,nil,nil,nil,nil], [0.25]) } theme_d = -> { play_pattern_timed([:e5,:c5,nil,:g4,nil,nil,:gs4,nil, :a4,:f5,nil,:f5,:a4,nil,nil,nil], [0.25]) play_pattern_timed([:b4,:a5,:a5, :a5,:g5,:f5], [1/3.0]) play_pattern_timed([:e5,:c5,nil,:a4,:g4,nil,nil,nil], [0.25]) play_pattern_timed([:e5,:c5,nil,:g4,nil,nil,:gs4,nil, :a4,:f5,nil,:f5,:a4,nil,nil,nil, :b4,:f5,nil,:f5], [0.25]) play_pattern_timed([:f5,:e5,:d5], [1/3.0]) play_pattern_timed([:g5,:e5,nil,:e5,:c5,nil,nil,nil], [0.25]) } structure(intro, theme_a, theme_b, theme_c, theme_d) end
in_thread do intro = -> { play_pattern_timed([:fs4,:fs4,nil,:fs4,nil,:fs4,:fs4,nil, :b4,nil,nil,nil,:g4,nil,nil,nil], [0.25]) } theme_a = -> { play_pattern_timed([:e4,nil,nil,:c4,nil,nil,:g3,nil, nil,:c4,nil,:d4,nil,:Db4,:c4,nil], [0.25]) play_pattern_timed([:c4,:g4,:b4], [1/3.0]) play_pattern_timed([:c5,nil,:a4,:b4, nil,:a4,nil,:e4, :f4,:d4,nil,nil], [0.25]) } theme_b = -> { play_pattern_timed([nil,nil,:e5,:ds5,:d5,:b4,nil,:c5, nil,:e4,:f4,:g4,nil,:c4,:e4,:f4, nil,nil,:e5,:ds5,:d5,:b4,nil,:c5, nil,:f5,nil,:f5,:f5,nil,nil,nil, nil,nil,:e5,:ds5,:d5,:b4,nil,:c5, nil,:e4,:f4,:g4,nil,:c4,:e4,:f4, nil,nil,:gs4,nil,nil,:f4,nil,nil, :e4,nil,nil,nil,nil,nil,nil,nil], [0.25]) } theme_c = -> { play_pattern_timed([:gs4,:gs4,nil,:gs4,nil,:gs4,:as4,nil, :g4,:e4,nil,:e4,:c4,nil,nil,nil, :gs4,:gs4,nil,:gs4,nil,:gs4,:as4,:g4, nil,nil,nil,nil,nil,nil,nil,nil, :gs4,:gs4,nil,:gs4,nil,:gs4,:as4,nil, :g4,:e4,nil,:e4,:c4,nil,nil,nil, :fs4,:fs4,nil,:fs4,nil,:fs4,:fs4,nil, :b4,nil,nil,nil,:g4,nil,nil,nil], [0.25]) } theme_d = -> { play_pattern_timed([:c5,:a4,nil,:e4,nil,nil,:e4,nil, :f4,:c5,nil,:c5,:f4,nil,nil,nil], [0.25]) play_pattern_timed([:g4,:f5,:f5, :f5,:e5,:d5], [1/3.0]) play_pattern_timed([:c5,:a4,nil,:f4,:e4,nil,nil,nil], [0.25]) play_pattern_timed([:c5,:a4,nil,:e4,nil,nil,:e4,nil, :f4,:c5,nil,:c5,:f4,nil,nil,nil, :g4,:d5,nil,:d5], [0.25]) play_pattern_timed([:d5,:c5,:b4], [1/3.0]) play_pattern_timed([:c5,nil,nil,nil,nil,nil,nil,nil], [0.25]) } structure(intro, theme_a, theme_b, theme_c, theme_d) end
in_thread do use_synth :tri use_synth_defaults attack: 0, sustain: 0.1, decay: 0.1, release: 0.1, amp: 0.4 intro = -> { play_pattern_timed([:D4,:D4,nil,:D4,nil,:D4,:D4,nil, :G3,nil,nil,nil,:G4,nil,nil,nil], [0.25]) } theme_a = -> { play_pattern_timed([:G4,nil,nil,:E4,nil,nil,:C4,nil, nil,:F4,nil,:G4,nil,:Gb4,:F4,nil], [0.25]) play_pattern_timed([:E4,:C4,:E4], [1/3.0]) play_pattern_timed([:F4,nil,:D4,:E4, nil,:C4,nil,:A3, :B3,:G3,nil,nil], [0.25]) } theme_b = -> { play_pattern_timed([:C3,nil,nil,:G3,nil,nil,:C3,nil, :F3,nil,nil,:C3,:C3,nil,:F3,nil, :C3,nil,nil,:E3,nil,nil,:G3,:C3, nil,:G2,nil,:G2,:G2,nil,:G4,nil, :C3,nil,nil,:G3,nil,nil,:C3,nil, :F3,nil,nil,:C3,:C3,nil,:F3,nil, :C3,nil,:Ab3,nil,nil,:Bb3,nil,nil, :C3,nil,nil,:G2,:G2,nil,:C3,nil], [0.25]) } theme_c = -> { 3.times { play_pattern_timed([:gs4,nil,nil,:ds4,nil,nil,:gs4,nil, :g4,nil,nil,:c4,nil,nil,:g4,nil], [0.25]) } play_pattern_timed([:D4,:D4,nil,:D4,nil,:D4,:D4,nil, :G3,nil,nil,nil,:G4,nil,nil,nil], [0.25]) } theme_d = -> { play_pattern_timed([:C3,nil,nil,:fs3,:g3,nil,:C3,nil, :F3,nil,:F3,nil,:C3,:C3,:F3,nil, :D3,nil,nil,:F3,:G3,nil,:B3,nil, :G3,nil,:G3,nil,:C3,:C3,:G3,nil, :C3,nil,nil,:fs3,:g3,nil,:C3,nil, :F3,nil,:F3,nil,:C3,:C3,:F3,nil, :G3,nil,nil,:G3], [0.25]) play_pattern_timed([:G3,:A3,:B3], [1/3.0]) play_pattern_timed([:C4,nil,:G3,nil,:C4,nil,nil,nil], [0.25]) } structure(intro, theme_a, theme_b, theme_c, theme_d) end
in_thread do use_synth :fm use_synth_defaults divisor: 1.6666, attack: 0.0, depth: 1500, sustain: 0.05, release: 0.0 ll = -> { play :a, sustain: 0.1; sleep 0.75 } l = -> { play :a, sustain: 0.1; sleep 0.5 } s = -> { play :a; sleep 0.25 } define :drum_pattern_a do [l,s,l,s,l,ll,l,s,s,s].map(&:call) end define :drum_pattern_b do play :b sleep 0.5 play :a6 sleep 0.3 play :a7 sleep 0.2 play :a, sustain: 0.1 sleep 0.5 play :a6 sleep 0.3 play :a7 sleep 0.2 end define :drum_pattern_c do [ll,s,l,l].map(&:call) end with_fx :level, amp: 0.5 do 1.times { drum_pattern_a } loop do 24.times { drum_pattern_b } 4.times { drum_pattern_a } 8.times { drum_pattern_b } 16.times { drum_pattern_c } 4.times { drum_pattern_a } 8.times { drum_pattern_b } end end end
3 - یه آهنگ دیگه (اینم از گیت هاب گرفتم ):
# Daft punk with code - Something about us # Coded by @luiscript with Sonic Pi
# If you enjoy PLEASE # like | follow | suscribe | star
# facebook.com/luiscript # twitter.com/luiscript # youtube.com/user/luiscript # github.com/luiscript
# Also consider support Sam Aaron on Patreon # patreon.com/samaaron
use_bpm 100 use_debug false
define :pianoMelody do use_synth :piano use_synth_defaults amp: 2, release: 4 play [:f2, :a2, :d3] sleep 4 play [:g2, :a2, :c3] sleep 4 play [:a2, :c3, :e3] sleep 4 play [:g2, :b2, :d3] sleep 4 play [:f2, :a2, :d3] sleep 4 play [:g2, :a2, :cs3] sleep 4 play [:a2, :d3, :g3] sleep 4 play [:a2, :d3, :f3] sleep 4 end
define :synth1 do use_synth :saw use_synth_defaults release: 0.25 sleep 0.5 play :d2 sleep 0.75 play :f2 sleep 0.75 play :d2 sleep 1 play :f2 sleep 0.5 play :a1 sleep 0.25 play :c2 sleep 0.75 play :d2 sleep 0.75 play :f2 sleep 0.75 play :d2 sleep 1 play :f2, release: 0.75 sleep 0.75 play :g2 sleep 0.25 end
define :synth2 do use_synth :pluck use_synth_defaults amp: 0.8 play :d3, release: 1 sleep 1 play :e3, release: 1 sleep 0.75 play :f3, release: 1.125 sleep 2.25 play [:c3, :e3], release: 1 sleep 1 play [:d3, :f3], release: 1 sleep 0.75 play [:e3, :g3], release: 1.125 sleep 2.25 play [:d3, :f3], release: 1 sleep 1 play [:e3, :g3], release: 1.125 sleep 0.75 play [:f3, :a3], release: 1.125 sleep 2.25 play [:f3, :a3], release: 0.25 sleep 0.25 play [:e3, :g3], release: 0.5 sleep 0.5 play [:e3, :g3], release: 0.5 sleep 0.5 play [:d3, :f3], release: 0.5 sleep 0.5 play [:d3, :f3], release: 1.5 sleep 2.25 end
define :bassDrum do sample :bd_fat, amp: 2 sleep 1 end
define :hiHat do sleep 0.5 sample :drum_cymbal_pedal sleep 0.5 end
define :snare do sleep 1 sample :sn_zome, amp: 0.5 sleep 1 end
live_loop :somethingAboutUs do 3.times do with_fx :lpf, cutoff: 80 do pianoMelody end end with_fx :reverb do 2.times do synth2 end end sample :daftVoice, amp: 0.8 sleep 64 with_fx :lpf, cutoff: 80 do pianoMelody end sample :daftSynth, amp: 0.7 sleep 96 stop end
with_fx :bitcrusher do live_loop :synth, delay: 32 do 24.times do synth1 end stop end end
live_loop :bassSample, delay: 32 do 18.times do sample :saub sleep 16 end stop end
live_loop :drum, delay: 32 do 128.times do bassDrum end sleep 16 142.times do bassDrum end stop end
live_loop :hh, delay: 48 do 112.times do hiHat end sleep 16 142.times do hiHat end stop end
live_loop :sn, delay: 48 do 56.times do snare end sleep 16 71.times do snare end stop end
4 - و اینم آهنگ معروف still dre همینجوری خودم زدم :
live_loop :chord do
use_synth :piano
sample :bd_haus
play :C5
play :E5
play :A5
sleep 0.3
play :C5
play :E5
play :A5
sleep 0.3
sample :bd_haus
sample :drum_snare_hard
play :C5
play :E5
play :A5
sleep 0.3
play :C5
play :E5
play :A5
sleep 0.3
sample :bd_haus
play :C5
play :E5
play :A5
sleep 0.3
play :C5
play :E5
play :A5
sleep 0.3
sample :bd_haus
sample :drum_snare_hard
play :C5
play :E5
play :A5
sleep 0.3
play :C5
play :E5
play :A5
sleep 0.3
sample :bd_haus
play :B4
play :E5
play :A5
sleep 0.3
play :B4
play :E5
play :A5
sleep 0.3
sample :bd_haus
sample :drum_snare_hard
play :B4
play :E5
play :A5
sleep 0.3
play :B4
play :E5
play :G5
sleep 0.3
sample :bd_haus
play :B4
play :E5
play :G5
sleep 0.3
play :B4
play :E5
play :G5
sleep 0.3
sample :bd_haus
sample :drum_snare_hard
play :B4
play :E5
play :G5
sleep 0.3
play :B4
play :E5
play :G5
sleep 0.3
end
خب تمام این سورس ها رو میتونید خودتون برنامشو نصب کنید و اجرا کنید و تست کنید ، تغییرشون بدید و آهنگ های جدید بسازید . در کل اگه وقت بزاری براش آهنگ های خوبی میشه باهاش درآورد . از این به بعد هر دفعه ای یه سری ملودی با این میسازم میزارم .
ولی خب این میتونه یه امکان فوق العاده برای یک برنامه نویس باشه . فرض کنید بعضی از صدا ها و آهنگ های نرم افزارتون رو خودتون بسازید !
میدونید اعداد مرسن چی هستند ؟ یه رابطه ای داریم : Mn=2n-1 . هر عدد اولی که از طریق این رابطه بدست بیاد رو بهش میگن عدد مرسن . کلا این رابطه پتانسیل اینو داره که عدد اول تولید کنه . مثلا اگه به جای n عدد 2 رو بزاریم ، جواب میشه : 3 که یک عدد اوله
یا مثلا به جای n عدد 3 رو بزاریم جواب میشه 7 که یک عدد اوله .
البته این رابطه به ازای همه ی اعداد برای n عدد اول تولید نمیکنه . مثلا به جای n عدد 4 بزاریم عدد 15 تولید میشه که اول نیست .
نکته ای که رابطه مرسن داره اینه که هرچی عدد n افزایش پیدا میکنه ، شانس این که عدد اول بدست بیاد کمتر میشه .
خب میدونیم که بینهایت عدد اول وجود داره ولی خب میخوام بزرگترین عدد اولی که با استفاده از رابطه مرسن شناخته شده رو بهتون معرفی کنم . گفته شده این عدد حدودا 30 روز طول کشیده تا شناخته بشه (توسط محاسبات شبانه روزی یک کامپیوتر ) و از طریق همین رابطه ی مرسن هم بدست اومده .
چون طول عدد خیلی بزرگه نمیتونم اینجا کپی پیست کنم . بنابراین لینک دانلود فایلش از سایت رسمی مرسن رو براتون میزارم که داخل یه فایل متنی نوشته شده (البته زیپ شده) :
از لینک بالا دانلودش کنید و عددشو ببینید :)
راستی :) میگن همین سایت مرسن جایزه 100 هزار دلاری گذاشته برای نفر بعدی که یه عدد اول بعد از این عدد که شناخته شده رو کشف کنه (با استفاده از رابطه مرسن)
خب خب تصمیم گرفتم ورژن حسین پسند قشنگ تر از پریا رو براتون بزنم 😂
با حفظ نکات ایمنی گوش فرا میدیم به قطعه (دقت کنید از وسطش اقا کریم نامسلمون هم میاد رو کار پس تا آخر گوش کنید 😂)
اخرشم که دست آقای خدادوست رو بوسید .
خلاصه هرچی گیر دستم اومد قاطیش کردم .