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
48
ATOM Matrixで作る BLE MIDIコントローラー
kharada_bt
0
170
M5Stackで作るBLE MIDIコントローラー
kharada_bt
0
760
Other Decks in Programming
See All in Programming
Kaigi on Railsに初参加したら、その日にLT登壇が決定した件について
tama50505
0
110
【re:Growth 2024】 Aurora DSQL をちゃんと話します!
maroon1st
0
810
Jakarta EE meets AI
ivargrimstad
0
280
Effective Signals in Angular 19+: Rules and Helpers
manfredsteyer
PRO
0
130
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
530
週次リリースを実現するための グローバルアプリ開発
tera_ny
1
110
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
[JAWS-UG横浜 #76] イケてるアップデートを宇宙いち早く紹介するよ!
maroon1st
0
510
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
150
Zoneless Testing
rainerhahnekamp
0
120
良いユニットテストを書こう
mototakatsu
8
3.1k
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
130
Featured
See All Featured
Done Done
chrislema
182
16k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
KATA
mclloyd
29
14k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
910
Building Adaptive Systems
keathley
38
2.3k
Designing Experiences People Love
moore
138
23k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Git: the NoSQL Database
bkeepers
PRO
427
64k
What's in a price? How to price your products and services
michaelherold
244
12k
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の恩恵 を受ける活⽤も可能です。
ご清聴ありがとうございましました。