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
Androidだって音楽アプリが作りたい(M5Stackによる実演付き)
Search
Kenta Harada
April 09, 2020
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Androidだって音楽アプリが作りたい(M5Stackによる実演付き)
Kenta Harada
April 09, 2020
More Decks by Kenta Harada
See All by Kenta Harada
元組み込みエンジニアがKotlinのビット演算を使ってみた
kharada_bt
0
87
ATOM Matrixで作る BLE MIDIコントローラー
kharada_bt
0
220
M5Stackで作るBLE MIDIコントローラー
kharada_bt
0
880
Other Decks in Programming
See All in Programming
アクセシビリティから考える情報設計
high_g_engineer
0
400
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.3k
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
250
Verilogで学ぶCPU自作入門.pdf
uyuki234
8
3.2k
スマート反転とウェブアクセシビリティ
camiha
0
210
Webの地図
yosuke_furukawa
PRO
6
4.7k
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
160
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.8k
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
530
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
930
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
820
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
220
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.7k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
How to make the Groovebox
asonas
2
2.5k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
610
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Ethics towards AI in product and experience design
skipperchong
2
380
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
370
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
340
Mind Mapping
helmedeiros
1
370
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の恩恵 を受ける活⽤も可能です。
ご清聴ありがとうございましました。