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
150
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
Transcript
32 slides
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
More Decks by florets1
See All by florets1
整数計画ソルバーで遊ぼう/using_an_integer_programming_solver_in_r
florets1
0
57
データ分析をはじめよう/lets_start_data_analysis
florets1
2
1.2k
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
900
Tableauとggplot2の背景/Background_of_Tableau_and_ggplot2
florets1
0
120
Rで学ぶデータハンドリング入門/Introduction_to_Data_Handling_with_R
florets1
0
190
人工知能はクロスジョインでできている/AI_Is_Built_on_Cross_Joins
florets1
0
150
仮説の取扱説明書/User_Guide_to_a_Hypothesis
florets1
4
510
複式簿記から純資産を排除する/eliminate_net_assets_from_double-entry_bookkeeping
florets1
1
540
カイ二乗検定は何をやっているのか/What_Does_the_Chi-Square_Test_Do
florets1
7
2.6k
Other Decks in Programming
See All in Programming
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
350
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
160
コード生成時代のAPI定義を支えるRequest Spec移行
pvcresin
0
150
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
130
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.4k
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
210
自宅サーバはどこまで再現できるのか - Proxmox VE上のVM環境をIaCとバックアップで戻してみた
youto
0
260
ローカルLLMの基本と近況 2611 / Local LLM basics and recent situation 2611
kishida
2
430
Claude Code ハーネスDeep Dive – 君はどこまで制御する? -
takateeen_knj
6
5.8k
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
350
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
240
SODA - FACT BOOK(EN)
sodainc
1
240
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1.7k
The agentic SEO stack - context over prompts
schlessera
0
1k
Raft: Consensus for Rubyists
vanstee
143
7.9k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.3k
It's Worth the Effort
3n
188
29k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
How STYLIGHT went responsive
nonsquared
100
6.4k
BBQ
matthewcrist
90
10k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
320
We Are The Robots
honzajavorek
0
440
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k