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
66
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
47
データ分析をはじめよう/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
140
仮説の取扱説明書/User_Guide_to_a_Hypothesis
florets1
4
500
複式簿記から純資産を排除する/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
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
310
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
740
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
520
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
650
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
5.6k
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
150
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.3k
Workers Cache を知る
syumai
0
320
カツオ、ご期待ください
suneo3476
0
130
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
1
1.2k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
400
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
19
20k
Featured
See All Featured
Fireside Chat
paigeccino
43
4k
Design in an AI World
tapps
1
340
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
ラッコキーワード サービス紹介資料
rakko
1
5.1M
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Embracing the Ebb and Flow
colly
88
5.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
BBQ
matthewcrist
89
10k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
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