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
1
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
46
データ分析をはじめよう/lets_start_data_analysis
florets1
2
1.1k
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
860
Tableauとggplot2の背景/Background_of_Tableau_and_ggplot2
florets1
0
100
Rで学ぶデータハンドリング入門/Introduction_to_Data_Handling_with_R
florets1
0
170
人工知能はクロスジョインでできている/AI_Is_Built_on_Cross_Joins
florets1
0
130
仮説の取扱説明書/User_Guide_to_a_Hypothesis
florets1
4
500
複式簿記から純資産を排除する/eliminate_net_assets_from_double-entry_bookkeeping
florets1
1
520
カイ二乗検定は何をやっているのか/What_Does_the_Chi-Square_Test_Do
florets1
7
2.6k
Other Decks in Programming
See All in Programming
Webの地図
yosuke_furukawa
PRO
6
4.8k
すこし踏み込む CancellationToken
htkym
2
1.3k
FreeBSDでZabbixを動かす
kenkino
0
330
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
240
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
200
setup-vp GitLab対応の裏側
naokihaba
0
130
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
360
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
160
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.1k
スマート反転とウェブアクセシビリティ
camiha
0
210
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.1k
速習iPhone Duo対応
yuukiw00w
2
840
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
The Spectacular Lies of Maps
axbom
PRO
1
1k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Are puppies a ranking factor?
jonoalderson
2
3.9k
Design in an AI World
tapps
1
330
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
4.9k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
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倍 この音も、もとの音とよく調和します 周波数3倍はもとの音から1オクターブ上なので 1オクターブ下げて考えましょう。 つまり、周波数3倍を2で割り 1.5倍 弦で考えると 長さは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
Cド Gソ Dレ Aラ Eミ Bシ ソートを戻す Fファ この順番だと、黒鍵はドとの距離が遠いことがわかりやすいですね 25
Cド Gソ Dレ Aラ Eミ Bシ 五度圏とも一致 Fファ 26
五度圏とは ・音を理解しやすくした図 ・音に関する諸々が整理されて とても便利な早見表 なのですが、実は 12音の構成過程からみると、そもそも 五度圏の音並びが先にあって、これを わざわざ別の基準でソートし直したのが ドレミファソラシなのです 27
ちょっと補足 12回で1周する と説明してきましたが 実際は少しズレています 1.00≠1.01 現代のピアノでは 12個の音に少しずつズレを 分担してもらっています 28
Cド 現在のピアノでは Dレ Eミ Fファ Gソ Aラ Bシ 隣の鍵盤との周波数比を 2^(1/12)として
1.00=1.00 ピッタリ1周 29
まとめ ピアノの一見不規則な鍵盤の並びは 響きのよい音を手探りでたどってきた形跡 Rのデータフレームを使って説明しました 30