Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Androidだって音楽アプリが作りたい(M5Stackによる実演付き)
Search
Kenta Harada
April 09, 2020
Programming
0
240
Androidだって音楽アプリが作りたい(M5Stackによる実演付き)
Kenta Harada
April 09, 2020
Tweet
Share
More Decks by Kenta Harada
See All by Kenta Harada
元組み込みエンジニアがKotlinのビット演算を使ってみた
kharada_bt
0
66
ATOM Matrixで作る BLE MIDIコントローラー
kharada_bt
0
180
M5Stackで作るBLE MIDIコントローラー
kharada_bt
0
830
Other Decks in Programming
See All in Programming
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
110
Laravel Boost 超入門
fire_arlo
3
220
Kiroで始めるAI-DLC
kaonash
2
620
スケールする組織の実現に向けた インナーソース育成術 - ISGT2025
teamlab
PRO
2
160
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
Testing Trophyは叫ばない
toms74209200
0
890
🔨 小さなビルドシステムを作る
momeemt
4
690
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
510
ファインディ株式会社におけるMCP活用とサービス開発
starfish719
0
2k
今だからこそ入門する Server-Sent Events (SSE)
nearme_tech
PRO
3
250
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
710
Swift Updates - Learn Languages 2025
koher
2
510
Featured
See All Featured
Gamification - CAS2011
davidbonilla
81
5.4k
Fireside Chat
paigeccino
39
3.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Being A Developer After 40
akosma
90
590k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
530
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Into the Great Unknown - MozCon
thekraken
40
2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Transcript
Proprietary and Confidential ©2014 Schawk, Inc. All Rights Reserved 原⽥
賢太 Kenta Harada Androidだって ⾳楽アプリが作りたい (M5Stackによる実演付き) Droidkaigi 2020
⾃⼰紹介 ・Android アプリ ・組み込み ・株式会社Mobility Technologies ・Bluetoothエンジニア
本⽇お伝えしたいこと Androidって ⾳が出るんです
iOSには⾳楽アプリが いっぱいあるのに Androidは少ないなぁ・・・
iOS⽤⾳楽アプリ
GarageBand(iOS)
KORG Gadget(iOS)
iOS⽤⾳楽アプリ • シンセサイザーで⾳作り • シーケンサーでの曲作り • MIDI機器との連携 • SoundCloudへのアップロード
どうして私の⼤好きな Androidには無いんだ
⾳楽アプリを作ってみる
⽬標(理想) iMPC Pro 2
こんなアプリ(現実) M5Stack Gray BLE MIDI
BLE-MIDI(ミディ)とは MIDI over Bluetooth Low Energy Musical Instrument Digital Interface
電⼦楽器の演奏データを機器間で転送・共有するための共通規格 1981年にMIDI 規格化開始。38年後の2019年にMIDI 2.0が策定開始。 接続にはMIDIケーブル、USBケーブルが使われることが多い。 BLEを使い無線でMIDIデータを送信する
BLE-MIDI MIDI over Bluetooth Low Energy
BLE MIDI MIDI over Bluetooth Low Energy 0x9n:ノートオン 0xXX:ノートナンバー(⾳の⾼低) 0xYY:ベロシティ(⾳の強弱)
何かがおかしい。。
⾳が遅れて聞こえる ・・・ような気がする
やっぱり⾳が遅れて聞こえる ボタンを押してから ⾳が聞こえるまでに時間がかかる BLE-MIDI
レイテンシ(遅延)
レイテンシ(遅延) レイテンシとは、信号がシステムを移動 する際にかかる時間を指します。 https://developer.android.com/ndk/guides/audio/audio-latency?hl=ja から引⽤
Android端末から⾳が出るまで Androidでは⾳が出るとき どんなルートを通るのか?
App Android Framework Driver JNI/HAL Hardware
App Android Framework Driver JNI/HAL Hardware Java C/C++(Native)
App Android Framework Driver JNI/HAL Hardware Java Native おそい! はやい!
C/C++(Native)
機種依存問題 "OESPJE04WFSTJPO %SJWFS )BSEXBSF x x
レイテンシの原因は複雑 • Java(仮想マシン) • 機種依存 • OSバージョンによる違い • 低レイヤーのバッファ •
BLE MIDI(無線通信) • その他
Androidに⾳楽アプリが少ない原因 レイテンシ(遅延) が⼤きな要因の1つ
Android Compatibility Definition Document(CDD) https://developer.android.com/ndk/guides/audio/audio-latency?hl=ja から引⽤ CDD では、ラウンドトリップ レイテンシを 20
ms 以下と指定しています。 (ただし、⾳楽家は通常 10 ms を要求します) 20 ms であれば、さまざまな重要なユースケースを 実現することができます。 ※Android 互換デバイスに関するハードウェア要件とソフトウェア要件が記された⽂書
実際のレイテンシ https://superpowered.com/latency から引⽤ iPhone 6(12.4.2) 8 ms Pixel 3(Android 10)
12 ms Pixel 3a(Android 10) 12 ms Nexus 5X(Android 6.0.1) 17 ms Zenfone 5(Android 9) 39 ms Huawei P20 Lite(Android 9) 132 ms
どうすれば低レイテンシな アプリを作れるのか?
解決策 1. ハイエンド端末を使う 2. BLE MIDIの通信を早くする 3. Javaで重い処理をしない 4. 低レイテンシオーディオ
解決策 1. ハイエンド端末を使う 2. BLE MIDIの通信を早くする 3. Javaで重い処理をしない 4. 低レイテンシオーディオ
解決策 BLE MIDIの通信を早くする
BLE MIDI BLE MIDI おそい!
BLE MIDIの通信速度 BLEの1パケットで送信できる データ量 たったの 20バイト
BLE MIDIの通信速度 MIDI規格: Bluetooth 4.0: 31.25Kbps 10~50 kbps
BLE MIDIの通信速度 ぎりぎり間に合うけど・・・
MTU更新 Bluetooth 4.0: 27 byte Maximum Transmission Unit Bluetooth 4.2:
247 byte
BLE MIDIの通信速度 Bluetooth 4.2:267 kbps
解決策 1. ハイエンド端末を使う 2. BLE-MIDIの通信を早くする 3. Javaで重い処理をしない 4. 低レイテンシオーディオ
解決策 Javaで重い処理をしない
Javaでやっている処理 M5Stack Gray BLE MIDI
Javaで重い処理をしない Android 9までのMIDIは JavaでMIDIデータを扱う必要があった。
Javaで重い処理をしない Android 10で追加された Native MIDI API(AMidi) ではNativeでMIDIデータを扱えるようになった。 Java Native
C/C++でMIDIデータの受信が可能 https://developer.android.com/ndk/guides/audio/midi?hl=ja から引⽤
解決策 1. ハイエンド端末を使う 2. BLE-MIDIの通信を早くする 3. Javaで重い処理をしない 4. 低レイテンシオーディオ
解決策 低レイテンシオーディオ
2つのオーディオライブラリ OpenSL ES(Gingerbread) AAudio(Oreo)
Oboe
Oboe • C++のオーディオライブラリ。 • 低レイテンシ、99%のAndroid端末で動作する。 • Oreo以降ではAAudio、それ以前ではOpenSL ES。 • OpenSLに⽐べてシンプルなコードで記述できる。
• Googleのエンジニアがメンテナンスしている。 • オープンソース。
解決策 1. ハイエンド端末を使う 2. BLE-MIDIの通信を早くする 3. Javaで重い処理をしない 4. 低レイテンシオーディオ
実演1 M5Stack Gray BLE-MIDI
実演2 M5Stackでシンセをコントロール
まとめ
·ͱΊ 1. ミッドレンジ〜ハイエンド端末 2. Bluetooth 4.2以上 3. MIDIと重い処理はNativeで 4. Oboe(AAudio)を使う
ソースコード • Androidアプリ • M5Stack Gray⽤BLE MIDIコントローラー https://github.com/kenta-bt/oboe https://github.com/kenta-bt/m5stack-midi-controller
͓·͚ Native MIDI API 応⽤編 MIDIデータは楽器のデータ専⽤という わけではありません。 IoT機器のセンサーデータをMIDIプロト コルを通すことでNatie MIDI
APIの恩恵 を受ける活⽤も可能です。
ご清聴ありがとうございましました。