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
Rubyで音声「データ」を作る
Search
Shogo Kawahara
April 30, 2025
Programming
92
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyで音声「データ」を作る
Shogo Kawahara
April 30, 2025
More Decks by Shogo Kawahara
See All by Shogo Kawahara
strudel-rb について
kawahara
0
19
Google Apps Script で Ruby を動かす
kawahara
0
410
rspec の --tag オプションがこんなに便利だったなんて...
kawahara
0
24
データベースだけじゃないN+1とその対策
kawahara
0
1.4k
CoderDojo 千葉県総武線沿線の取り組み
kawahara
1
440
SendGrid Template Engine 奮闘記
kawahara
0
390
Other Decks in Programming
See All in Programming
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
270
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
180
Jetpack Compose メカニズム
skydoves
0
350
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
270
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
320
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
180
VueプロジェクトをTypeScript7に対応させる- Side-by-Side戦略による一部高速化 -
koukimiura
0
100
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
450
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
160
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
110
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
77
5.5k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
A Soul's Torment
seathinner
7
3.6k
We Are The Robots
honzajavorek
0
370
Designing for Timeless Needs
cassininazir
1
470
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Become a Pro
speakerdeck
PRO
31
6.2k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
Prompt Engineering for Job Search
mfonobong
0
450
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
Transcript
Rubyで 音声「データ」を作る Shogo Kawahara
[email protected]
kyobashi.rb 2025.04.30
RubyKaigi 2025 よかったね もちろん船でいきました
こんな内容が面白かったと思った • Ruby LSP が Conference 中リリースされてすげえと思った ◦ YARD で
Docs 書いてたけど、Ruby LSP に移行して結構時が立ったので、そろそろ inline rbs に よる型情報の補完とかをやり始めようと思った (何気に対応している ) ◦ Ruby LSP を介して、MCP に繋げていくところとか夢があるとは思った • ZJIT (ジージット) は夢があるよね • もちろん最後のトークはプログラマーとして考えさせられた ◦ AIが型を捕捉するようになる理論 ◦ たのしいプログラミングとは何か
こんな内容が面白かったと思った • Ruby LSP が Conference 中リリースされてすげえと思った ◦ YARD で
Docs 書いてたけど、Ruby LSP に移行して結構時が立ったので、そろそろ inline rbs に よる型情報の補完とかをやり始めようと思った (何気に対応している ) ◦ Ruby LSP を介して、MCP に繋げていくところとか夢があるとは思った • ZJIT (ジージット) は夢があるよね • もちろん最後のトークはプログラマーとして考えさせられた ◦ AIが型を捕捉するようになる理論 ◦ たのしいプログラミングとは何か • 音声
ちょっくら自分も音声やってみるか • ずっとこういうコードを書こうと思ってた。特に理由はない。単純にFUNとして。 • やりたいことは以下。 なんか文字列 なんか文字列
いまだにカセットで音楽を聞く • インディーズな感じの曲を探りたいと思ったらカセット • ゲーム音楽とかもカセットで売ってたりするよ • 自分で録音もできて最高 (?) ◦ つまりデータも記録できるってことだよね。
昔はカセットにデータを記録していたらしい • 私はここまで古い人間ではないので、先人の知恵を探る • MSXやファミコンは下記のような機器で、市販のカセットにデータを記録していたら しい • フロッピーは高いがカセットは安い時代 • 参考
◦ https://xtech.nikkei.com/atcl/nxt/column/18/00531/122600009/?P=2 ◦ https://yosshin4004.github.io/famibe/overview/index.html
データから音声に変換するやり方はいろいろあるらしい • 文字列「こんにちは」 -> バイナリ「111000…」 ◦ これは結局のところ、文字符号方式である ◦ UTF-8 にすれば、日本語も行けそうではある
• バイナリ「111000…」 -> 音声「アナログの波」 ◦ いろいろ探るとこれも単純に 1つ。というわけではなくいろいろ方式がある ◦ 「変調方式」というらしい ◦ https://www.ritsumei.ac.jp/se/re/izumilab/lecture/06comm/index.htm ◦ FSK (Frequency Shift Keying) ◦ ASK (Amplitude Shift Keying) ◦ PSK (Phase Shift Keying) ▪ Pre-Shared Key ではない ◦ QAM (Quadrature Amplitude Modulation)
データから音声に変換するやり方はいろいろあるらしい • 文字列「こんにちは」 -> バイナリ「111000…」 ◦ これは結局のところ、文字符号方式である ◦ UTF-8 にすれば、日本語も行けそうではある
• バイナリ「111000…」 -> 音声「アナログの波」 ◦ いろいろ探るとこれも単純に 1つ。というわけではなくいろいろ方式がある ◦ 「変調方式」というらしい ◦ https://www.ritsumei.ac.jp/se/re/izumilab/lecture/06comm/index.htm ◦ FSK (Frequency Shift Keying) => データにあわせ周波数を変える , 初期の「モデム」もこれ ◦ ASK (Amplitude Shift Keying) => 振幅の有無で制御する , ノイズに弱い ◦ PSK (Phase Shift Keying) => 位相をかえる (波をずらす) ▪ Pre-Shared Key ではない ◦ QAM (Quadrature Amplitude Modulation) => 位相もかえるし、振幅もかえる
FSKの仕組みはすげぇシンプル 周波数が低い = 0 周波数が高い = 1 普通は開始と終了を 示すプリアンブルをつ ける
(0, 1以外の周波 数) 011.. と読める
やってみよう • デモだよ。実演するよ。
楽しいかも、でやってみたけどこれは実用的なのでは? • 特に電子工作の分野では(本当に)実用性がありそう ◦ PCからデバイスに対して phone plug を通じてデータを送信する ◦ デバイスにマイクがあれば、スピーカを通じて一斉に何らかの動きをさせることはできる
▪ ただ、ノイズ除去とか、チェックパリティとか、ネットワークでいうところの物理層とかデータリン ク層がやるような実装はある程度考えなきゃいけない ◦ つまり、Bluetooth や WiFi のモジュールなしで通信ができる ! ◦ (配信機器のLiveShellはPCと機器を音声プラグで繋げて設定情報流せました ) • ステガノグラフィー (情報を他の情報に隠蔽する) ◦ 人間が聞こえない高周波にデータを載せて、可聴範囲には通常の音楽データを入れるといったテク ニックがありそう ◦ 実装的にはローパスフィルターでデータ部分だけ取り出すイメージ ◦ ただし、カセットテープやデッキがそこまで高周波に対応していない可能性もある • TRICK のお供にもどうぞ ◦ これを使えば音がコードとして機能できるようになる ◦ 聞くとテクノな音楽だが、デコードすると実行可能 ! みたいな技もできる。だれかやって。
次にやりたいこと • RubyでFAXを送受信する ◦ 文字が行けるなら画像だ ! という感じだが、FAXはQAMという方式で変調しているらしい。これもい つかやっておこう ◦ WiFi7
のキー技術はこの辺を使っているので (音ではなく電波だが ) 最新技術と関係ないわけでも ない