Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Rでドレミ/Do-Re-Mi_with_R
Search
florets1
September 28, 2026
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rでドレミ/Do-Re-Mi_with_R
florets1
September 28, 2026
More Decks by florets1
See All by florets1
整数計画ソルバーで遊ぼう/using_an_integer_programming_solver_in_r
florets1
0
54
データ分析をはじめよう/lets_start_data_analysis
florets1
2
1.2k
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
870
Tableauとggplot2の背景/Background_of_Tableau_and_ggplot2
florets1
0
110
Rで学ぶデータハンドリング入門/Introduction_to_Data_Handling_with_R
florets1
0
180
人工知能はクロスジョインでできている/AI_Is_Built_on_Cross_Joins
florets1
0
140
仮説の取扱説明書/User_Guide_to_a_Hypothesis
florets1
4
510
複式簿記から純資産を排除する/eliminate_net_assets_from_double-entry_bookkeeping
florets1
1
530
カイ二乗検定は何をやっているのか/What_Does_the_Chi-Square_Test_Do
florets1
7
2.6k
Other Decks in Programming
See All in Programming
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
1
200
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
3
1.2k
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
120
No More NoSuchMethodError
exoego
1
110
contenteditable と日本語入力に向き合う
colorful12
0
210
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
160
ActionController meets Protocol Buffers
sorah
0
690
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
280
気持ちぃ〜角丸 Squircle
ryu1013
0
340
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
150
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
3
2.5k
sbt 2.0: takeoff
eed3si9n
0
170
Featured
See All Featured
Crafting Experiences
bethany
1
390
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
530
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
The Pragmatic Product Professional
lauravandoore
37
7.5k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Deep Space Network (abreviated)
tonyrice
0
380
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Agile that works and the tools we love
rasmusluckow
331
22k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
Transcript
Rでドレミ 2026.10.03 Tokyo.R #122 1
ピアノの鍵盤、なぜこんな並び方 ・1オクターブに白鍵7個、黒鍵5個 ・白鍵の間隔:全・全・半・全・全・全・半 ・そもそも、なぜ12音 →「倍音」が原因なんです 2
Rで説明します 3
音には倍音が含まれている 弦を弾くと ・弦全体が振動 ・2つに分かれて振動 ・3つに分かれて振動 ・4つに分かれて振動 ・… これらが同時に起こります 4
1倍, 2倍, 3倍, 4倍, … 一つの音の中には 基本となる周波数だけでなく 自然数倍の周波数「倍音」も含まれています 私たちは、基本音だけを聞いているのではなく 倍音の合成を一つの「音」
として聞いています。 5
周波数2倍 弦のちょうど半分のところを押さえて 半分の長さの弦を鳴らしてみます 波長は半分 周波数は2倍 もとの音と調和してきれいに響きます 6
周波数2倍=1オクターブ上 ×2, ×3, ×4, ×5 , ×6, ×7,… ×1, ×2,
×3, ×4, ×5, ×6, ×7,… 人間は、周波数が2倍になった音を 1オクターブ上の同じ名前の音 として扱っています 周波数2倍の音は、もとの音に最初から含まれている倍音の一つです それらを特別に近い関係の音と感じているのです 7
周波数3倍 2で割って 1.5倍 周波数3倍はもとの音から1オクターブ上なので 1オクターブ下げて( 2で割って)考えましょう。 この音も、もとの音とよく調和します 弦で考えると 長さは2/3 周波数は3/2=1.5
8
1.5倍を繰り返してみる ある音から周波数を1.5倍すると よく調和する別の音が得られます その音からさらに1.5倍するとまた よく調和する別の音が得られます 正規化 ただし、そのままではどんどん音が高くなってしまいます そこで、2倍を超えたら2で割り、常に同じオクターブ内に戻します 9
1.5倍を繰り返してみる(Rで) 10
コードの説明 何をやっているのか 周波数を1.5倍する操作を繰り返し、2倍を超えたらオクターブを下げて 周波数を常に1~2の範囲に収めます 1.5倍を繰り返したいので、1.5をbaseという変数に入れています このあと指数乗を使って、以下のように計算します 1.5^0 = 1 1.5^1
= 1.5 1.5^2 = 2.25 1.5^3 = 3.375 … 11
コードの説明 seq()は連続した数を作る関数 この場合は、0, 1, 2, 3, …, 20 という21個の数を作ります 1.5倍を0回、1回、2回、…20回と繰り返すための指数です
12
コードの説明 ^はべき乗 baseは1.5、exponentは0~20なので 1.5 ^ c(0, 1, 2, 3, …)
が一度に計算され、結果は 1.000 1.500 2.250 3.375 … となります Rはfor文を書かなくてもベクトルに対してまとめて 計算することができます 13
コードの説明 やっていること:2倍を超えたら2で割って、1~2の範囲に戻します 例えば freq = 5.0625 log(freq, 2) は「2を何乗するとfreqになるか」 2^2
< 5.0625 < 2^3 なのでlog(freq, 2)は2と3の間 trunc()で小数部分を切り捨てて結果は 2 したがって normal_freq = 5.0625 / (2^2) 結果は1.265625となり、1~2の範囲に収まります つまり、何回オクターブを下げればよいかを調べて、その分で割っています 14
「正規化」について 2倍を超えたら2で割って、1~2の範囲に戻す この操作のことを、今回の発表では「正規化」と呼ぶことにします 例えばもとの周波数を1とすると 1, 2, 4, 8, … これらはすべてオクターブ違いの同じ名前の音と考え
1→1, 2→1, 4→1, 8→1 のようにして、オクターブ違いを取り除き、すべて1~2の範囲に収めます 正規化によって、音の高さそのものではなく 1オクターブの中のどの位置にいるのか だけを比較できるようにするのです 15
データフレーム化 これまで別々に作っていた exponent, freq, normal_freq という3つのベクトルを、ひとつの データフレームにまとめています 16
1周した! 正規化周波数(normal_freq)が 1.00≒1.01 ほぼ同じ つまり 周波数の1.5倍を12回 繰り返したら1周して 同じ音が現れた 17
音は12個にしよう 周波数の1.5倍を12回 繰り返したら1周 13個目からは同じ音 18
12件だけにしぼる |> はパイプ演算子です 左側のデータdfを 右側のfilterに流している というイメージで読みます 19
←基準音 ←相性が悪い音 基準音との響きがよくない 20
目印をつける mutateで列を追加しています パイプ演算子でデータが左から右へ流れているように読んでください 21
セルに色をつける 0は白、1は黒 22
ソートする arrangeでソートを行いました normal_freq(正規化周波数)の昇順 23
Cド Dレ 名前をつける Eミ Fファ Gソ Aラ Bシ 白鍵にドレミファソラシという名前をつけました 24
Photo: Kjethdubns / Wikimedia Commons, CC0 1.0 25
Cド Gソ Dレ Aラ Eミ Bシ ソートを戻す Fファ この順番だと、黒鍵はドとの距離が遠いことがわかりやすいですね 26
Cド Gソ Dレ Aラ Eミ Bシ 五度圏とも一致 Fファ 27
五度圏とは ・音を理解しやすくした図 ・音に関する諸々が整理されて とても便利な早見表 実は 12音の構成過程からみると、そもそも 五度圏の音並びが先であって、これを わざわざ別の基準でソートし直したのが ドレミファソラシなのです 28
ちょっと補足 12回で1周する と説明してきましたが 実際は少しズレています 1.00≠1.01 現代のピアノでは 12個の音に少しずつズレを 分担してもらっています 29
Cド 現在のピアノでは Dレ 隣の鍵盤との周波数比を 2^(1/12)として Eミ Fファ Gソ 1.00=1.00 ピッタリ1周
Aラ Bシ 30
まとめ 31
まとめ ・1オクターブが12音 ・白鍵7個、黒鍵5個 ・白鍵の間隔:全・全・半・全・全・全・半 「倍音」が原因でした 響きのよい2倍音と3倍音(正規化すると1.5倍) から構成した結果なのです 32