Happy Birthday Pablo 🎂

Hello Pablo! We are really excited it’s your Birthday 🎂🎈🎉🎊🎁 In the spirit of new beginnings, we’ll send our wishes a little bit differently. We’ll R them to you 😊


Notes for ‘Happy Birthday’ song and their respective values

note <- c('D4', 'D4', 'E4', 'D4', 'G4', 
          'F#4', 'D4', 'D4', 'E4', 'D4', 
          'A4', 'G4', 'D4', 'D4', 'D5', 
          'B4', 'G4', 'F#4', 'E4', 'C5', 
          'C5', 'B4', 'G4', 'A4', 'G4')

value <- c(rep(c(0.75, 0.25, 1, 1, 1, 2), 2), 
           0.75, 0.25, 1, 1, 1, 1, 1, 
           0.75, 0.25, 1, 1, 1, 2)

bday <- cbind.data.frame(note, value)
View(bday)


frequencies of audio waves associated with the notes. Being quite inept at music theory, I’ll scrap the data from Wikipedia.

suppressPackageStartupMessages({
library(htmltab)
library(dplyr)
  
})

wikitab <- htmltab("https://de.wikipedia.org/wiki/Frequenzen_der_gleichstufigen_Stimmung", 1,
  colNames = c("key", "note", "ger", "freq")) %>% 
  mutate(freq = as.numeric(gsub(",", ".", freq)),
         note = substr(note, 0, 3)) %>% 
  select(-3)

View(wikitab)


Assigning the ‘Happy Birthday’ notes to their corresponding frequencies

bday <- inner_join(bday, wikitab, by= "note") %>% select(-3)
View(bday)


Analog audio is recorded by sampling it 44,100 times per second, and these samples are used to reconstruct the audio signal when playing it back. Sine {sound}creates samples for a sine wave when provided with a frequency, a duration (note value/BPM) and a sampling rate.

suppressMessages(library(sound))

sine_wave <- mapply(Sine, bday$freq, (bday$value/120)*60, rate = 44100, channels = 1) %>% 
  do.call("c", .)
bday_tune <- as.Sample(sine_wave)


On behalf of DekutR Data Science Comminity and my fellow Microsoft Learn Student Ambassadors in Kenya, we present to you a ‘Happy BiRthday’ tune made with lots of love and R: 🎵🎵

suppressMessages(library(audio))
audio::play.Sample(bday_tune)


Thank you for all the support and really inspiring us to be a force for good- locally and globally.

Happy Birthday once again 🎂🎈,

Eric.

LS0tDQp0aXRsZTogJyAnDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY3NzOiBzdHlsZV8yLmNzcw0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIHRoZW1lOiBmbGF0bHkNCiAgICBoaWdobGlnaHQ6IGJyZWV6ZWRhcmsNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIGluY2x1ZGVzOg0KICAgICAgYWZ0ZXJfYm9keTogZm9vdGVyLmh0bWwNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KLS0tDQoNCiMgKipIYXBweSBCaXJ0aGRheSBQYWJsbyDwn46CICoqIA0KDQpIZWxsbyBQYWJsbyEgV2UgYXJlIHJlYWxseSBleGNpdGVkIGl0J3MgeW91ciBCaXJ0aGRheSDwn46C8J+OiPCfjonwn46K8J+OgQ0KSW4gdGhlIHNwaXJpdCBvZiBuZXcgYmVnaW5uaW5ncywgd2UnbGwgc2VuZCBvdXIgd2lzaGVzIGEgbGl0dGxlIGJpdCBkaWZmZXJlbnRseS4gV2UnbGwgYFJgIHRoZW0gdG8geW91IPCfmIoNCg0KPGJyPg0KDQpOb3RlcyBmb3IgJ0hhcHB5IEJpcnRoZGF5JyBzb25nIGFuZCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcw0KYGBge3J9DQpub3RlIDwtIGMoJ0Q0JywgJ0Q0JywgJ0U0JywgJ0Q0JywgJ0c0JywgDQogICAgICAgICAgJ0YjNCcsICdENCcsICdENCcsICdFNCcsICdENCcsIA0KICAgICAgICAgICdBNCcsICdHNCcsICdENCcsICdENCcsICdENScsIA0KICAgICAgICAgICdCNCcsICdHNCcsICdGIzQnLCAnRTQnLCAnQzUnLCANCiAgICAgICAgICAnQzUnLCAnQjQnLCAnRzQnLCAnQTQnLCAnRzQnKQ0KDQp2YWx1ZSA8LSBjKHJlcChjKDAuNzUsIDAuMjUsIDEsIDEsIDEsIDIpLCAyKSwgDQogICAgICAgICAgIDAuNzUsIDAuMjUsIDEsIDEsIDEsIDEsIDEsIA0KICAgICAgICAgICAwLjc1LCAwLjI1LCAxLCAxLCAxLCAyKQ0KDQpiZGF5IDwtIGNiaW5kLmRhdGEuZnJhbWUobm90ZSwgdmFsdWUpDQpWaWV3KGJkYXkpDQoNCmBgYA0KPGJyPg0KDQpmcmVxdWVuY2llcyBvZiBhdWRpbyB3YXZlcyBhc3NvY2lhdGVkIHdpdGggdGhlIG5vdGVzLiBCZWluZyBxdWl0ZSBpbmVwdCBhdCBtdXNpYyB0aGVvcnksIEknbGwgc2NyYXAgdGhlIGRhdGEgZnJvbSBXaWtpcGVkaWEuDQoNCmBgYHtyfQ0Kc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKHsNCmxpYnJhcnkoaHRtbHRhYikNCmxpYnJhcnkoZHBseXIpDQogIA0KfSkNCg0Kd2lraXRhYiA8LSBodG1sdGFiKCJodHRwczovL2RlLndpa2lwZWRpYS5vcmcvd2lraS9GcmVxdWVuemVuX2Rlcl9nbGVpY2hzdHVmaWdlbl9TdGltbXVuZyIsIDEsDQogIGNvbE5hbWVzID0gYygia2V5IiwgIm5vdGUiLCAiZ2VyIiwgImZyZXEiKSkgJT4lIA0KICBtdXRhdGUoZnJlcSA9IGFzLm51bWVyaWMoZ3N1YigiLCIsICIuIiwgZnJlcSkpLA0KICAgICAgICAgbm90ZSA9IHN1YnN0cihub3RlLCAwLCAzKSkgJT4lIA0KICBzZWxlY3QoLTMpDQoNClZpZXcod2lraXRhYikNCmBgYA0KDQo8YnI+DQoNCkFzc2lnbmluZyB0aGUgJ0hhcHB5IEJpcnRoZGF5JyBub3RlcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGZyZXF1ZW5jaWVzDQoNCmBgYHtyfQ0KYmRheSA8LSBpbm5lcl9qb2luKGJkYXksIHdpa2l0YWIsIGJ5PSAibm90ZSIpICU+JSBzZWxlY3QoLTMpDQpWaWV3KGJkYXkpDQpgYGANCg0KPGJyPg0KDQpBbmFsb2cgYXVkaW8gaXMgcmVjb3JkZWQgYnkgc2FtcGxpbmcgaXQgNDQsMTAwIHRpbWVzIHBlciBzZWNvbmQsIGFuZCB0aGVzZSBzYW1wbGVzIGFyZSB1c2VkIHRvIHJlY29uc3RydWN0IHRoZSBhdWRpbyBzaWduYWwgd2hlbiBwbGF5aW5nIGl0IGJhY2suIGBTaW5lIHtzb3VuZH1gY3JlYXRlcyBzYW1wbGVzIGZvciBhIHNpbmUgd2F2ZSB3aGVuIHByb3ZpZGVkIHdpdGggYSBmcmVxdWVuY3ksIGEgZHVyYXRpb24gKG5vdGUgdmFsdWUvQlBNKSBhbmQgYSBzYW1wbGluZyByYXRlLg0KDQpgYGB7cn0NCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShzb3VuZCkpDQoNCnNpbmVfd2F2ZSA8LSBtYXBwbHkoU2luZSwgYmRheSRmcmVxLCAoYmRheSR2YWx1ZS8xMjApKjYwLCByYXRlID0gNDQxMDAsIGNoYW5uZWxzID0gMSkgJT4lIA0KICBkby5jYWxsKCJjIiwgLikNCmJkYXlfdHVuZSA8LSBhcy5TYW1wbGUoc2luZV93YXZlKQ0KYGBgDQo8YnI+DQoNCg0KT24gYmVoYWxmIG9mIERla3V0UiBEYXRhIFNjaWVuY2UgQ29tbWluaXR5IGFuZCBteSBmZWxsb3cgTWljcm9zb2Z0IExlYXJuIFN0dWRlbnQgQW1iYXNzYWRvcnMgaW4gS2VueWEsIHdlIHByZXNlbnQgdG8geW91IGEgJ0hhcHB5IEJpUnRoZGF5JyB0dW5lIG1hZGUgd2l0aCBsb3RzIG9mIGxvdmUgYW5kIFI6IPCfjrXwn461IA0KDQoNCg0KDQpgYGB7cn0NCg0Kc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGF1ZGlvKSkNCmF1ZGlvOjpwbGF5LlNhbXBsZShiZGF5X3R1bmUpDQpgYGANCjxicj4NCg0KVGhhbmsgeW91IGZvciBhbGwgdGhlIHN1cHBvcnQgYW5kIHJlYWxseSBpbnNwaXJpbmcgdXMgdG8gYmUgYSBmb3JjZSBmb3IgZ29vZC0gbG9jYWxseSBhbmQgZ2xvYmFsbHkuDQoNCkhhcHB5IEJpcnRoZGF5IG9uY2UgYWdhaW4g8J+OgvCfjogsDQoNCkVyaWMuDQoNCg==