PC環境での心理学実験におけるレイテンシとジッタの再検証
2019年4月 長嶋 洋一
20年前に多くの機器/システムの遅延(レイテンシ)とばらつき(ジッタ)について計測実験を行った。 そして、音楽心理学実験の領域で便利/高性能な「道具」として普及したテクノロジーを正しく理解せずに使用することは、研究の基盤そのものを無意味にしてしまうと警鐘を鳴らした。 現在では当時に比べてPCの性能が約100倍ほど向上し、多種の周辺環境が整備されてきたが、情報技術/情報科学の本質としてのレイテンシ/ジッタは依然として存在している。 そこでネットワーク環境や物理コンピューティングの進展を受けて、改めて当時と同様の問題点に関する計測実験を行ってみた。背景
筆者の紹介など
- Art & Science Laboratory(ASL) http://nagasm.org/ASL/
- 静岡文化芸術大学1106長嶋研究室 http://nagasm.org/1106/
- コンピュータと音楽の世界—基礎からフロンティアまで, 共立出版 https://www.kyoritsu-pub.co.jp/bookdetail/9784320029422
- コンピュータサウンドの世界, CQ出版 http://www.cqpub.co.jp/hanbai/books/20/20061.htm
- 作るサウンドエレクトロニクス http://nagasm.org/ASL/mse/index.html
- 音楽的ビートが映像的ビートの知覚に及ぼす引き込み効果 http://nagasm.org/ASL/beat/index.html
用語の確認: 「レイテンシ」と「ジッタ」
レイテンシ(latency)[潜伏時間、潜時、待ち時間、反応時間。レイテンシーとも表記される]とは、デバイス/システムに対してデータ転送などを要求してから、その結果が返送されるまでの不顕性(病気の過程が始まっているがまだ症状が表れていないことを表す医学用語)の高い[原理的な理由により発生してしまう本質的な]遅延時間のこと。一般的にレイテンシが小さければ小さいほど、そのデバイス/システムは高性能で高価である。(Wikipedia改)ジッタ(Jitter)[いらいらするという意味の英語"Jitter"に由来する。ジッターとも表記される]とは、電気通信などの分野において、時間軸方向での信号波形の揺らぎの事であり、その揺らぎによって生じる映像等の乱れのことも指す。デジタル信号でのジッタは、ランダムジッタ(正規分布に従う時間軸方向での信号波形のランダムな時間的揺らぎ)とデターミニスティックジッタ(データやクロックに依存して受信信号の波形タイミングが本質的に変化するジッタ)に分類される。 (Wikipedia改)約20年前に音楽心理学実験に影響する「レイテンシとジッタ」に警鐘を鳴らした研究発表論文
- ハード音源/ソフト音源のMIDI発音遅延と音楽心理学実験環境における問題点の検討, 平成11年度前期全国大会講演論文集2, 情報処理学会, 1999 http://nagasm.org/ASL/ipsj1999/index.html
- MIDI音源の発音遅延と音源アルゴリズムに関する検討, 情報処理学会研究報告 Vol.99,No.68 (99-MUS-31), 情報処理学会, 1999 http://nagasm.org/ASL/paper/ss1999.pdf
- MIDI音源の発音遅延と音楽心理学実験への影響, 日本音響学会音楽音響研究会資料 Vol.18,No.5, 日本音響学会, 1999 http://nagasm.org/ASL/paper/onchi99.pdf
- 生体センサによるパフォーマンスとシステムの遅延/レスポンスについて, 平成14年度前期全国大会講演論文集4, 情報処理学会, 2002 http://nagasm.org/ASL/ipsj2002/IPSJ0203.pdf
- Measurement of Latency in Interactive Multimedia Art, Proceedings of International Conference on New Interfaces for Musical Expression, NIME, 2004 http://nagasm.org/ASL/paper/NIME04.pdf
それ以外の過去の「レイテンシ/ジッタ」関連研究
- Real-Time Control System for "Pseudo" Granulation, Proceedings of 1992 International Computer Music Conference, ICMA, 1992 http://nagasm.org/ASL/icmc1992/paper.html
- ネットワーク上で相互作用するアルゴリズム作曲系を用いた音楽教育システム, 平成9年度前期全国大会講演論文集II, 情報処理学会, 1997 http://nagasm.org/ASL/ipsj1997/index.html
- "Improvisession":ネットワークを利用した即興セッション演奏支援システム, 情報処理学会研究報告 Vol.97,No.67 (97-MUS-21), 情報処理学会, 1997 http://nagasm.org/ASL/paper/sigmus3.txt
- ネットワーク上の分散マルチメディア環境とセンサを活用した即興セッションシステム, 平成10年度前期全国大会講演論文集2, 情報処理学会, 1998 http://nagasm.org/ASL/ipsj1998/index.html
- "IMPROVISESSION-II" : A Perfprming/Composing System for Improvisational Sessions with Networks, Proceedings of International Workshop on Entertainment Computing, ICEC, 2002 http://nagasm.org/ASL/iwec2002/index.html
- GDS Music--- ネットワーク遅延を伴う音楽セッション・モデル, 情報処理学会研究報告 Vol.2002,No.41 (2001-MUS-46), 情報処理学会, 2002 http://nagasm.org/ASL/GDSM/index.html
- GDS(global delayed session) Musicの拡張モデルについて, 情報科学技術フォーラム2002講演論文集, 情報処理学会・電子情報通信学会, 2002 http://nagasm.org/ASL/paper/FIT2002.pdf
- GDS (Global Delayed Session) Music - new improvisational music with network latency, Proceedings of 2003 International Computer Music Conference, ICMA, 2003 http://nagasm.org/ASL/paper/icmc2003-2.pdf
- 音楽的ビートが映像的ビートの知覚に及ぼす引き込み効果, 芸術科学会論文誌 Vol.3 No.1, 芸術科学会, 2003 http://nagasm.org/ASL/beat/index2.html, Drawing-in effect on perception/cognition of musical beats and visual beats, Proceedings of International Symposium on Musical Acoustics 2004, ICA, 2004 http://nagasm.org/ASL/paper/ISMA2004.pdf
- サウンドの空間的予告による映像酔いの抑止について, 情報処理学会研究報告 Vol.2007,No.127 (2007-MUS-73), 情報処理学会, 2007 http://nagasm.org/ASL/paper/sigmus0712.pdf
- グロッケン音色の利用に関する考察, 日本音楽知覚認知学会2013年春季研究発表会資料, 日本音楽知覚認知学会), 2013 http://nagasm.org/ASL/paper/onchi201305.pdf http://nagasm.org/ASL/Glocken/index.html 非斉次倍音の強い音色に関する実験心理学的検討, 情報処理学会研究報告 (2013-MUS-101), 情報処理学会, 2013 http://nagasm.org/ASL/paper/sigmus201312.pdf
- 脳波センサ”MUSE”は新楽器として使えるか, 情報処理学会研究報告 (2015-MUS-110), 情報処理学会, 2016 http://nagasm.org/ASL/paper/SIGMUS201603.pdf
- 「触覚バイオフィードバック」汎用プラットフォームの提案 -メディアアートのウェルネスデザイン応用を目指して-, 電子情報通信学会ヒューマン情報処理研究会資料(技術研究報告) HIP2018-39, 電子情報通信学会, 2018 http://nagasm.org/ASL/paper/HIP201808.pdf
- Realtime Musical Composition System for Automatic Driving Vehicles, Proceedings of 2018 International Conference on Entertainment Computing, IFIP TC14 ICEC, 2018 http://nagasm.org/ASL/paper/ICEC2018_nagasm.pdf http://nagasm.org/ASL/paper/SIGMUS201802.pdf
今回の実験のきっかけ
ある日、ふと手元にあるMacで「ターミナル」を開いて「いま現在、このMacで走っている全プロセス」を表示してみると、以下のようになった。 つまり、これはMacに限らずLinuxマシンでもWindowsでもRaspberry Piでも全て同じように、ほとんど何もしていない状態でも、コンピュータはその裏で200本ぐらいのプロセスが常に起動されて走っている。 果たしてこのような環境で、心理学実験のツールとして「使える」ようなレイテンシとジッタの状況にあるのか? ・・・という素朴な疑問が生じた。 これが、今回の実験のスタートライン(動機)である。nagasm-Mac-mini-2:~ nagasm$ ps -A -O%cpu,%mem,nice,rss PID %CPU %MEM NI RSS TT STAT TIME COMMAND 1 0.0 0.1 0 12192 ?? Rs 0:09.10 /sbin/launchd 41 0.0 0.0 0 1960 ?? Rs 0:02.74 /usr/sbin/syslogd 42 0.0 0.2 0 19888 ?? Ss 0:01.11 /usr/libexec/UserEventAgent (System) 44 0.0 0.2 0 17708 ?? Ss 0:01.34 /usr/libexec/kextd 45 0.0 0.1 0 4360 ?? Ss 0:01.36 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/Support/fseventsd 49 0.0 0.1 0 6668 ?? Us 0:00.12 /System/Library/CoreServices/appleeventsd --server 50 0.0 0.1 0 7660 ?? Ss 0:02.22 /usr/libexec/configd 51 0.0 0.0 0 3276 ?? Ss 0:00.61 /System/Library/CoreServices/powerd.bundle/powerd 57 0.0 0.1 0 10528 ?? Ss 0:00.34 /usr/libexec/airportd 59 0.0 0.1 10 10324 ?? SNs 0:00.12 /usr/libexec/warmd 60 0.0 1.1 0 88740 ?? Rs 1:00.25 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Support/mds 64 0.0 0.1 0 5068 ?? Ss 0:00.02 /System/Library/CoreServices/iconservicesd 65 0.0 0.1 0 5000 ?? Ss 0:00.02 /System/Library/CoreServices/iconservicesagent 66 0.0 0.0 0 3552 ?? Ss 0:00.30 /usr/libexec/diskarbitrationd 68 0.0 0.2 0 18912 ?? Ss 0:01.07 /usr/libexec/coreduetd 69 0.0 0.1 0 8012 ?? Ss 0:00.04 /usr/libexec/wdhelper 71 0.0 0.1 0 12508 ?? Us 0:01.92 /usr/libexec/opendirectoryd 72 0.0 0.1 0 5712 ?? Ss 0:00.05 /usr/sbin/wirelessproxd 74 0.0 0.2 0 15364 ?? Ss 0:00.77 /System/Library/PrivateFrameworks/ApplePushService.framework/apsd 75 0.0 0.1 0 7688 ?? Ss 0:01.43 /System/Library/CoreServices/launchservicesd 76 0.0 0.1 0 6524 ?? Ss 0:00.09 77 0.0 0.1 0 5056 ?? Ss 0:00.05 /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd -launchd 78 0.0 0.1 0 4872 ?? Ss 0:00.65 /usr/sbin/securityd -i 80 0.0 0.1 0 9788 ?? Ss 0:00.21 /usr/libexec/locationd 82 0.0 0.1 0 6528 ?? Ss 0:00.19 /usr/libexec/displaypolicyd 83 0.0 0.1 0 6924 ?? Ss 0:00.11 /usr/sbin/blued 84 0.0 0.0 0 3628 ?? Ss 0:00.02 autofsd 88 0.0 0.1 0 6856 ?? Ss 0:00.38 /usr/sbin/mDNSResponder 90 0.0 0.1 0 6640 ?? Ss 0:00.11 /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/Support/revisiond 91 0.0 0.4 0 31444 ?? Ss 0:00.93 /System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow console 92 0.0 0.0 0 3964 ?? Ss 0:00.02 /System/Library/CoreServices/logind 93 0.0 0.0 0 1872 ?? Ss 0:00.01 /usr/sbin/KernelEventAgent 97 0.0 0.0 0 1416 ?? Ss 0:00.05 /usr/libexec/hidd 98 0.0 0.1 0 8632 ?? Ss 0:00.10 /usr/libexec/AirPlayXPCHelper 99 0.0 0.0 0 1728 ?? Ss 0:01.14 /usr/sbin/notifyd 100 0.0 0.1 0 7808 ?? Ss 0:00.21 /System/Library/Frameworks/Security.framework/Versions/A/XPCServices/authd.xpc/Contents/MacOS/authd 101 0.0 0.0 0 2556 ?? Ss 0:00.10 /usr/sbin/distnoted daemon 104 0.0 0.0 0 3592 ?? Ss 0:01.08 /usr/sbin/cfprefsd daemon 121 0.0 0.1 0 7720 ?? Ss 0:00.37 /System/Library/CoreServices/coreservicesd 127 0.0 0.1 0 8048 ?? Ss 0:00.75 /usr/libexec/amfid 128 0.0 0.1 0 4428 ?? Us 0:00.76 aslmanager 129 0.0 0.0 0 4052 ?? Ss 0:00.07 /usr/libexec/diagnosticd 132 0.0 0.6 0 53984 ?? Rs 0:04.32 /usr/libexec/sandboxd 140 0.0 0.1 0 10416 ?? Ss 0:00.39 /usr/sbin/coreaudiod 151 0.0 0.1 0 4748 ?? Ss 0:00.10 /System/Library/PrivateFrameworks/CoreSymbolication.framework/coresymbolicationd 152 0.0 0.1 0 5848 ?? Rs 0:00.07 /System/Library/PrivateFrameworks/WirelessDiagnostics.framework/Support/awdd 153 0.0 0.0 0 3408 ?? Ss 0:00.02 /System/Library/Frameworks/PCSC.framework/Versions/A/XPCServices/com.apple.ctkpcscd.xpc/Contents/MacOS/com.apple.ctkpcscd 154 0.0 0.0 0 3412 ?? Ss 0:00.02 /System/Library/Frameworks/CryptoTokenKit.framework/ctkd -s 155 0.0 0.1 0 9892 ?? Ss 0:00.06 /usr/libexec/secinitd 156 0.0 0.1 0 5828 ?? Ss 0:00.40 /usr/libexec/networkd 157 0.0 0.0 0 3496 ?? Ss 0:00.02 /usr/libexec/networkd_privileged 167 3.1 1.1 0 93936 ?? Ss 2:23.57 /System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Resources/WindowServer -daemon 174 0.0 0.0 0 1136 ?? Ss 0:00.04 /usr/libexec/watchdogd 182 0.0 0.0 0 3104 ?? Ss 0:00.04 /System/Library/Frameworks/CoreAudio.framework/Versions/A/XPCServices/com.apple.audio.DriverHelper.xpc/Contents/MacOS/com.apple.audio.DriverHelper 185 0.0 0.0 0 3476 ?? Ss 0:00.02 /usr/libexec/smd 186 0.0 0.2 0 14168 ?? Ss 0:00.06 /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper -launchd 187 0.0 0.1 0 7120 ?? Ss 0:00.03 /usr/libexec/nsurlsessiond --privileged 188 0.0 0.1 0 6036 ?? Ss 0:00.06 /usr/sbin/cupsd -l 189 0.0 0.1 0 6520 ?? Ss 0:00.06 /usr/libexec/nehelper 190 0.0 0.1 0 9060 ?? Ss 0:00.06 /usr/libexec/usbd 191 0.0 0.0 0 3604 ?? Ss 0:00.02 /System/Library/CryptoTokenKit/com.apple.ifdreader.slotd/Contents/MacOS/com.apple.ifdreader 192 0.0 0.1 0 8280 ?? Ss 0:00.06 /System/Library/Frameworks/CoreMediaIO.framework/Resources/VDC.plugin/Contents/Resources/VDCAssistant 193 0.0 0.3 0 22140 ?? Ss 0:00.10 /usr/libexec/lsd runAsRoot 196 0.0 0.1 0 6976 ?? Rs 0:00.36 /usr/libexec/symptomsd 197 0.0 0.1 0 9188 ?? Ss 0:00.06 /usr/libexec/findmydeviced 198 0.0 0.1 0 6324 ?? Ss 0:00.30 /System/Library/PrivateFrameworks/CacheDelete.framework/deleted 199 0.0 6.0 0 499868 ?? Ss 0:22.75 /System/Library/CoreServices/Software Update.app/Contents/Resources/softwareupdated 200 0.0 0.0 1 828 ?? SNs 0:00.01 /usr/libexec/periodic-wrapper daily 216 0.0 0.1 0 7212 ?? Ss 0:00.03 /System/Library/PrivateFrameworks/SoftwareUpdate.framework/Resources/suhelperd 266 0.0 2.1 0 172844 ?? Rs 0:18.90 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mds_stores 268 0.0 0.1 0 6648 ?? Ss 0:00.09 /usr/libexec/thermald 270 0.0 0.1 20 9068 ?? RNs 0:00.24 /usr/sbin/netbiosd 271 0.0 0.1 0 4796 ?? Ss 0:00.04 /usr/libexec/nsurlstoraged 276 0.0 0.1 0 7336 ?? Us 0:00.04 /System/Library/PrivateFrameworks/AmbientDisplay.framework/Versions/A/XPCServices/com.apple.AmbientDisplayAgent.xpc/Contents/MacOS/com.apple.AmbientDisplayAgent 278 0.0 0.0 0 3084 ?? Ss 0:00.06 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/CVMServer 290 0.0 0.0 0 3628 ?? Ss 0:00.07 /System/Library/Frameworks/Security.framework/Versions/A/XPCServices/com.apple.CodeSigningHelper.xpc/Contents/MacOS/com.apple.CodeSigningHelper 295 0.0 0.0 0 3408 ?? Ss 0:00.02 /System/Library/PrivateFrameworks/AccountPolicy.framework/XPCServices/com.apple.AccountPolicyHelper.xpc/Contents/MacOS/com.apple.AccountPolicyHelper 302 0.0 0.0 0 3888 ?? Ss 0:00.03 /usr/sbin/filecoordinationd 303 0.0 0.1 0 4804 ?? Ss 0:00.41 /usr/libexec/securityd_service 304 0.0 0.2 0 18512 ?? S 0:00.69 /usr/libexec/UserEventAgent (Aqua) 306 0.0 0.0 0 3724 ?? S 0:01.39 /usr/sbin/distnoted agent 307 0.0 0.1 0 10404 ?? U 0:00.29 /usr/sbin/universalaccessd launchd -s 308 0.0 0.1 0 5608 ?? S 0:01.57 /usr/sbin/cfprefsd agent 309 0.0 0.3 0 22408 ?? S 0:00.42 /System/Library/Frameworks/CoreTelephony.framework/Support/CommCenter 310 0.0 0.1 0 6700 ?? S 0:00.20 /usr/libexec/lsd 318 0.0 0.1 0 5700 ?? Ss 0:00.03 /usr/sbin/WirelessRadioManagerd 320 0.0 0.4 0 30000 ?? S 0:02.38 /System/Library/PrivateFrameworks/IDS.framework/identityservicesd.app/Contents/MacOS/identityservicesd 325 0.0 0.1 0 4324 ?? S 0:00.06 /usr/libexec/secd 326 0.0 0.1 0 7552 ?? S 0:00.33 /usr/sbin/usernoted 327 0.0 0.0 0 2728 ?? S 0:00.14 /Library/Printers/EPSON/InkjetPrinter/EPW/IJEPWAgent.app/Contents/MacOS/IJEPWAgent 328 0.0 0.3 0 24364 ?? S 0:00.87 /System/Library/PrivateFrameworks/CalendarAgent.framework/Executables/CalendarAgent 329 0.0 0.1 0 5288 ?? Ss 0:00.07 /usr/libexec/taskgated -s 331 0.0 0.1 0 5636 ?? S 0:00.05 /System/Library/PrivateFrameworks/AuthKit.framework/Versions/A/Support/akd 333 0.0 0.2 0 15288 ?? S 0:00.09 /System/Library/PrivateFrameworks/CloudDocsDaemon.framework/Versions/A/Support/bird 334 0.0 0.1 0 10924 ?? S 0:00.27 /usr/libexec/secinitd 335 0.0 0.2 0 15264 ?? S 0:00.97 /usr/libexec/nsurlstoraged 336 0.0 0.1 0 4240 ?? S 0:00.03 /System/Library/CoreServices/AirPort Base Station Agent.app/Contents/MacOS/AirPort Base Station Agent --launchd 337 0.0 0.1 0 10596 ?? S 0:00.19 /System/Library/Frameworks/Accounts.framework/Versions/A/Support/accountsd 338 0.0 0.2 0 17128 ?? S 0:00.21 /System/Library/PrivateFrameworks/TelephonyUtilities.framework/callservicesd 339 0.0 0.2 0 20352 ?? Ss 0:00.31 /System/Library/PrivateFrameworks/CalendarAgent.framework/Versions/A/XPCServices/CalNCService.xpc/Contents/MacOS/CalNCService 340 0.0 0.1 0 8452 ?? S 0:00.31 /System/Library/PrivateFrameworks/TCC.framework/Resources/tccd 341 0.0 0.2 0 13024 ?? S 0:00.18 /System/Library/CoreServices/mapspushd 343 0.0 0.1 0 10564 ?? S 0:00.08 /System/Library/Frameworks/AddressBook.framework/Versions/A/XPCServices/com.apple.AddressBook.ContactsAccountsService.xpc/Contents/MacOS/com.apple.AddressBook.ContactsAccountsService 344 0.0 0.2 0 15584 ?? S 0:00.11 /System/Library/PrivateFrameworks/IMCore.framework/imagent.app/Contents/MacOS/imagent 345 0.0 0.3 0 23456 ?? S 0:00.25 /System/Library/PrivateFrameworks/CoreSuggestions.framework/Versions/A/Support/suggestd 346 0.0 0.1 0 6252 ?? Ss 0:00.06 /System/Library/PrivateFrameworks/IMFoundation.framework/XPCServices/IMRemoteURLConnectionAgent.xpc/Contents/MacOS/IMRemoteURLConnectionAgent 347 0.0 0.1 0 12004 ?? S 0:00.06 /System/Library/PrivateFrameworks/IMDPersistence.framework/XPCServices/IMDPersistenceAgent.xpc/Contents/MacOS/IMDPersistenceAgent 348 0.0 0.1 0 10780 ?? S 0:00.05 /System/Library/PrivateFrameworks/UserActivity.framework/Agents/useractivityd 349 0.0 4.8 0 403096 ?? R 0:15.91 /Applications/Firefox.app/Contents/MacOS/firefox -psn_0_36873 350 0.0 0.2 0 19352 ?? S 0:00.21 /usr/libexec/sharingd 352 0.0 0.0 0 2404 ?? S 0:00.01 /usr/sbin/pboard 354 0.0 0.1 0 7328 ?? S 0:00.06 /System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Versions/A/printtool agent 355 0.0 0.2 0 17032 ?? S 0:00.12 /usr/libexec/fmfd 356 0.0 0.1 0 4912 ?? Ss 0:00.20 /System/Library/CoreServices/sharedfilelistd --enable-legacy-services 358 0.0 0.1 0 7504 ?? S 0:00.29 /System/Library/CoreServices/sharedfilelistd 365 0.0 0.1 0 12212 ?? S 0:00.55 /System/Library/PrivateFrameworks/GeoServices.framework/Versions/A/XPCServices/com.apple.geod.xpc/Contents/MacOS/com.apple.geod 366 0.0 0.0 0 4116 ?? Ss 0:00.02 /System/Library/CoreServices/CrashReporterSupportHelper server-init 367 0.0 2.4 0 204988 ?? R 0:12.00 /Applications/Thunderbird.app/Contents/MacOS/thunderbird -psn_0_57358 368 0.0 0.5 0 44736 ?? S 0:30.43 /Applications/Utilities/Activity Monitor.app/Contents/MacOS/Activity Monitor -psn_0_61455 369 1.5 0.4 0 31004 ?? U 0:35.16 /Applications/Intel Power Gadget/Intel(R) Power Gadget.app/Contents/MacOS/Intel(R) Power Gadget -psn_0_65552 370 0.0 0.5 0 43732 ?? S 0:02.78 /System/Library/CoreServices/Dock.app/Contents/MacOS/Dock 371 0.0 0.1 0 9472 ?? S 0:00.08 /System/Library/Frameworks/InputMethodKit.framework/Resources/imklaunchagent 372 0.0 0.3 0 29288 ?? S 0:02.84 /System/Library/CoreServices/SystemUIServer.app/Contents/MacOS/SystemUIServer 373 0.0 0.5 0 43232 ?? R 0:03.68 /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder 374 0.0 0.1 0 11288 ?? S 0:00.69 /usr/libexec/pkd 375 0.0 0.1 0 5356 ?? S 0:00.04 /usr/libexec/swcd 378 0.0 0.6 0 51100 ?? S 0:01.22 /System/Library/Input Methods/JapaneseIM.app/Contents/MacOS/JapaneseIM 379 0.0 0.1 0 7196 ?? Us 0:00.15 /usr/sbin/systemsoundserverd 380 0.0 0.1 0 5564 ?? Ss 0:00.03 /System/Library/PrivateFrameworks/TCC.framework/Resources/tccd system 381 0.0 0.2 0 12808 ?? S 0:03.86 /System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Support/fontd 386 0.0 0.4 0 36868 ?? S 0:00.86 /System/Library/CoreServices/Spotlight.app/Contents/MacOS/Spotlight 387 0.0 0.3 0 24648 ?? Ss 0:00.35 /System/Library/CoreServices/Dock.app/Contents/XPCServices/com.apple.dock.extra.xpc/Contents/MacOS/com.apple.dock.extra 388 0.0 0.2 0 14196 ?? Ss 0:00.07 /System/Library/CoreServices/backupd.bundle/Contents/Resources/TMCacheDelete 389 0.0 0.0 0 4008 ?? Ss 0:00.05 /System/Library/PrivateFrameworks/PackageKit.framework/Resources/installd 390 0.0 0.2 0 18328 ?? S 0:00.19 /System/Library/PrivateFrameworks/MessagesKit.framework/Resources/soagent.app/Contents/MacOS/soagent 391 0.0 0.1 0 5068 ?? Ss 0:00.04 /System/Library/PrivateFrameworks/CoreWLANKit.framework/Versions/A/XPCServices/WiFiProxy.xpc/Contents/MacOS/WiFiProxy 392 0.0 0.2 0 17068 ?? U 0:00.62 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeassetd 393 0.0 0.4 0 33620 ?? S 0:10.95 /System/Library/PrivateFrameworks/ParsecUI.framework/Versions/A/Support/SpotlightNetHelper.app/Contents/MacOS/SpotlightNetHelper 394 0.0 0.1 0 8064 ?? S 0:00.18 /System/Library/CoreServices/iconservicesagent 395 0.0 0.2 0 12616 ?? S 0:00.04 /System/Library/PrivateFrameworks/CallHistory.framework/Support/CallHistoryPluginHelper 396 0.0 0.1 0 4956 ?? Rs 0:16.28 sysmond 397 0.0 0.0 0 3428 ?? Ss 0:00.05 /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/XPCServices/com.apple.PerformanceAnalysis.animationperfd.xpc/Contents/MacOS/com.apple.PerformanceAnalysis.animationperfd 398 0.0 0.3 0 21448 ?? S 0:00.54 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeaccountd 399 0.0 0.1 0 4608 ?? S 0:00.03 /System/Library/Frameworks/Security.framework/Versions/A/Resources/IDSKeychainSyncingProxy.bundle/Contents/MacOS/IDSKeychainSyncingProxy 400 0.0 0.0 0 3880 ?? S 0:00.02 /System/Library/Frameworks/Security.framework/Versions/A/Resources/CloudKeychainProxy.bundle/Contents/MacOS/CloudKeychainProxy 401 0.0 0.1 0 9428 ?? S 0:00.05 /System/Library/Frameworks/InputMethodKit.framework/Versions/A/XPCServices/com.apple.InputMethodKit.TextReplacementService.xpc/Contents/MacOS/com.apple.InputMethodKit.TextReplacementService 402 0.0 0.2 0 13160 ?? S 0:00.11 /System/Library/CoreServices/FolderActionsDispatcher.app/Contents/MacOS/FolderActionsDispatcher 403 0.0 0.0 0 3960 ?? S 0:00.03 /usr/libexec/spindump_agent 405 0.0 0.1 0 8264 ?? S 0:00.03 /System/Library/CoreServices/SocialPushAgent.app/Contents/MacOS/SocialPushAgent 407 0.0 0.2 0 17264 ?? S 0:00.12 /System/Library/CoreServices/Keychain Circle Notification.app/Contents/MacOS/Keychain Circle Notification 410 0.0 0.4 0 31144 ?? S 0:00.67 /System/Library/CoreServices/NotificationCenter.app/Contents/MacOS/NotificationCenter 412 0.0 0.1 0 10192 ?? S 0:00.13 /System/Library/Image Capture/Support/icdd 413 0.0 0.2 0 16724 ?? S 0:00.14 /System/Library/CoreServices/AppleIDAuthAgent 417 0.0 0.2 0 13604 ?? S 0:00.04 /System/Library/PrivateFrameworks/AskPermission.framework/Versions/A/Resources/askpermissiond 418 0.0 0.1 0 10488 ?? S 0:00.13 /System/Library/CoreServices/AirPlayUIAgent.app/Contents/MacOS/AirPlayUIAgent --launchd 419 0.0 0.1 0 6592 ?? S 0:00.04 /System/Library/CoreServices/cloudpaird 421 0.0 0.1 0 9416 ?? R 0:00.19 /System/Library/PrivateFrameworks/HelpData.framework/Versions/A/Resources/helpd 423 0.0 0.1 0 10644 ?? S 0:00.10 /System/Library/CoreServices/WiFiAgent.app/Contents/MacOS/WiFiAgent 424 0.0 0.2 0 13612 ?? S 0:00.15 /System/Library/CoreServices/diagnostics_agent 428 0.0 0.2 0 13900 ?? S 0:00.23 /System/Library/CoreServices/Menu Extras/TextInput.menu/Contents/SharedSupport/TISwitcher.app/Contents/MacOS/TISwitcher 430 0.0 0.2 0 14748 ?? S 0:00.07 /System/Library/PrivateFrameworks/CallHistory.framework/Support/CallHistorySyncHelper 432 0.0 0.2 0 19368 ?? S 0:00.25 /System/Library/PrivateFrameworks/CloudKitDaemon.framework/Support/cloudd 433 0.0 0.1 0 7588 ?? S 0:00.03 /usr/libexec/nsurlsessiond 438 0.0 0.1 0 10832 ?? S 0:00.11 /System/Library/CoreServices/CoreServicesUIAgent.app/Contents/MacOS/CoreServicesUIAgent 440 0.0 0.1 0 8984 ?? S 0:00.09 /System/Library/CoreServices/pbs 450 0.0 0.1 0 7752 ?? Ss 0:00.05 /System/Library/CoreServices/SubmitDiagInfo server-init 454 0.0 0.0 0 2148 ?? S 0:00.04 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdflagwriter 455 0.0 0.0 0 2096 ?? S 0:00.01 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdflagwriter 461 0.0 0.3 0 23108 ?? S 0:00.32 /System/Library/CoreServices/cloudphotosd.app/Contents/MacOS/cloudphotosd 462 0.0 0.2 0 16804 ?? S 0:00.10 /System/Library/CoreServices/EscrowSecurityAlert.app/Contents/MacOS/EscrowSecurityAlert 463 0.0 0.2 0 15764 ?? S 0:00.07 /System/Library/PrivateFrameworks/CloudPhotoServices.framework/Versions/A/Frameworks/CloudPhotosConfigurationXPC.framework/Versions/A/XPCServices/com.apple.CloudPhotosConfiguration.xpc/Contents/MacOS/com.apple.CloudPhotosConfiguration 464 0.0 0.1 0 8412 ?? S 0:00.05 /System/Library/PrivateFrameworks/PhotoLibraryPrivate.framework/Versions/A/Support/photolibraryd 483 0.0 0.1 0 12164 ?? S 0:00.04 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storelegacy 484 0.0 0.2 0 17812 ?? S 0:00.18 /System/Library/PrivateFrameworks/CommerceKit.framework/Resources/LaterAgent.app/Contents/MacOS/LaterAgent 485 0.0 0.2 0 14400 ?? S 0:00.06 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storedownloadd 487 0.0 0.2 0 15048 ?? S 0:00.08 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 506 0.0 0.0 0 3628 ?? Rs 0:00.87 /usr/libexec/systemstatsd 510 0.0 0.1 0 9984 ?? Ss 0:00.02 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeinstalld 511 0.0 0.1 0 12296 ?? Ss 0:00.05 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/XPCServices/com.apple.CommerceKit.TransactionService.xpc/Contents/MacOS/com.apple.CommerceKit.TransactionService 523 2.4 2.1 0 174476 ?? U 1:55.41 /Applications/Free MP4 Converter.app/Contents/MacOS/Loader 524 0.0 0.4 0 32372 ?? Ss 0:00.51 /usr/sbin/spindump 525 0.0 0.1 0 5360 ?? S 0:00.03 /System/Library/CoreServices/ScopedBookmarkAgent 527 0.0 0.1 0 6320 ?? S 0:00.02 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/XPCServices/com.apple.hiservices-xpcservice.xpc/Contents/MacOS/com.apple.hiservices-xpcservice 528 0.0 0.7 0 55184 ?? Rs 0:06.79 /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/com.apple.appkit.xpc.openAndSavePanelService.xpc/Contents/MacOS/com.apple.appkit.xpc.openAndSavePanelService 529 0.0 0.1 0 11604 ?? S 0:00.22 /System/Library/PrivateFrameworks/ViewBridge.framework/Versions/A/XPCServices/ViewBridgeAuxiliary.xpc/Contents/MacOS/ViewBridgeAuxiliary 533 0.0 0.2 0 15392 ?? S 0:00.17 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeinappd 534 0.0 0.1 0 12132 ?? Ss 0:00.03 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/XPCServices/com.apple.CommerceKit.TransactionService.xpc/Contents/MacOS/com.apple.CommerceKit.TransactionService 545 59.9 1.0 0 80740 ?? R 21:39.04 /Applications/Free MP4 Converter.app/Contents/MacOS/../Resources/convertor /Users/nagasm/Library/Containers/com.anymp4.free-mp4-converter/Data/Documents/cmd/{cb1ff8c0-7bba-4773-a596-7b6db360906a}.cmd 546 84.5 1.2 0 98228 ?? R 33:05.28 /Applications/Free MP4 Converter.app/Contents/MacOS/../Resources/convertor /Users/nagasm/Library/Containers/com.anymp4.free-mp4-converter/Data/Documents/cmd/{e94d7195-c67c-477c-af4e-86fdbf67e461}.cmd 547 59.5 0.9 0 76884 ?? R 24:43.10 /Applications/Free MP4 Converter.app/Contents/MacOS/../Resources/convertor /Users/nagasm/Library/Containers/com.anymp4.free-mp4-converter/Data/Documents/cmd/{f419c8e9-5ee8-4f4c-9819-fd17765146fa}.cmd 548 101.9 1.1 0 91704 ?? R 32:28.80 /Applications/Free MP4 Converter.app/Contents/MacOS/../Resources/convertor /Users/nagasm/Library/Containers/com.anymp4.free-mp4-converter/Data/Documents/cmd/{ddcc796b-9c62-4e4c-b74b-705de0527b7f}.cmd 549 77.0 1.1 0 91596 ?? R 32:53.00 /Applications/Free MP4 Converter.app/Contents/MacOS/../Resources/convertor /Users/nagasm/Library/Containers/com.anymp4.free-mp4-converter/Data/Documents/cmd/{ba73b421-dbd4-4aa0-a13e-34aa348496d2}.cmd 557 0.0 0.1 0 6388 ?? Ss 0:00.02 /System/Library/Frameworks/AudioToolbox.framework/XPCServices/com.apple.audio.SandboxHelper.xpc/Contents/MacOS/com.apple.audio.SandboxHelper 601 0.3 1.0 0 80376 ?? S 1:01.64 /Applications/Jedit X Folder/Jedit X.app/Contents/MacOS/Jedit X 605 0.0 0.0 0 2956 ?? Ss 0:00.02 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/XPCServices/com.apple.ColorSyncXPCAgent.xpc/Contents/MacOS/com.apple.ColorSyncXPCAgent 606 0.0 0.0 0 1828 ?? Ss 0:00.01 /usr/libexec/syspolicyd 608 0.0 0.2 0 16692 ?? S 0:00.27 /System/Library/PrivateFrameworks/Noticeboard.framework/Versions/A/Resources/nbagent.app/Contents/MacOS/nbagent 610 0.0 0.1 0 4712 ?? S 0:00.05 /System/Library/Services/AppleSpell.service/Contents/MacOS/AppleSpell -psn_0_213044 622 0.0 0.1 0 6060 ?? Ss 0:00.04 /System/Library/PrivateFrameworks/Noticeboard.framework/Versions/A/Resources/nbstated 639 0.3 1.1 0 94588 ?? S 1:19.08 /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal 657 0.0 0.2 0 19600 ?? S 0:00.13 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 722 0.0 0.2 0 16316 ?? S 0:00.07 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 723 0.0 0.3 0 21484 ?? R 0:00.12 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 737 0.0 0.1 0 12440 ?? R 0:00.05 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 95 0.0 0.8 0 64992 ?? Ss+ 0:02.44 /Applications/Leap Motion.app/Contents/MacOS/leapd 640 0.0 0.0 0 4144 s000 Ss 0:00.05 login -pf nagasm 641 0.0 0.0 0 1612 s000 S 0:00.10 -bash 749 0.0 0.0 0 944 s000 R+ 0:00.01 ps -A -O%cpu,%mem,nice,rss nagasm-Mac-mini-2:~ nagasm$実験環境
- Max7から115200bpsのシリアルでArduinoのポートを叩いて、Arduinoから2つのディジタル出力を上げ下げしてPicoScope3205Aで計測する
- 時間差(遅れ)を計測するために、PicoScope3205Aはワンショット・トリガモードで立ち下がりエッジに反応する
- Max7から設定する時間精度としては、「OverDrive」とdefaultの「Scheduler:1msec」で、ほぼ1msecまで正確に動作する
- 数回〜10数回の試行実験により、シリアル通信やMax側(Mac内部)のレイテンシによるばらつき(ジッタ)は十分に小さいと確認できた
- 以上から、この「Max7+Arduino+PicoScope3205A」システムは、「遅延時間計測システム」として1msec精度の計測が可能と判断した
- (注) この実験環境の時間的特性の検証と妥当性についての詳細な解説は このページ を参照されたい
実験1 - OSCの能力テスト
- マルチプラットフォーム・プロトコルとして世界標準になっているOSC(OpenSoundControl)のレイテンシとジッタを計測する
- 「Arduino+PicoScope3205A」のシステム部分は上記と完全に共通
- SUAC北棟11階の1106研究室Mac(Mac mini)からSUAC学内ネットワーク(LAN)を介してSUAC南棟4階のマルチメディア室Mac(iMac)との間(約100メートル)でOSCメッセージ"0"を往復させてレイテンシを計測し、複数回の試行によってジッタの傾向を調べる
- 実験は平日の朝の始業前(07:30〜08:50)の時間帯で、SUAC学内ネットワーク(LAN)の使用率はほぼゼロに近い状況
上がOSC送信→受信の遅延を計測するメインMaxバッチ、下がOSCメッセージを即時に返送するサブMaxパッチ
OSC送信→受信の遅延を計測するメインMaxバッチが走る1106研究室Macの仕様
OSCメッセージを即時に返送するサブMaxパッチが走るマルチメディア室Macの仕様
- 実験はメインMaxパッチ側でOSCの往復回数を「1回」・「10回」・「100回」として行った
- 「OSCで1往復」の実験のレイテンシは約1.0msecであり、複数回の試行でばらつき(ジッタ)が無いことを確認した
- 「OSCで10往復」の実験のレイテンシは10〜12msecあたり
- 「OSCで100往復」の実験のレイテンシは118〜125msecあたり
実験2 - ネットワークを混雑させた環境でのOSC
- 上記「実験1」のメインMaxバッチが走る1106研究室Macに同時にブラウザFirefox(アドオンに対応したバージョン56.0b9)を走らせて、動画サイトから100MB〜800MBのmp4動画を16本、ダウンロードツール(アドオン)によって同時並行的にダウンロードを続ける状態とした
- 16本の動画ダウンロードプロセスのネットワークトラフィックはインターネット上の経路によって20KB/s〜300KB/s程度に大きくばらつくが、その合計としてはSUAC学内ネットワーク(LAN)の能力上限(約1MB/s)に近いところになり、1106研究室のLANは相当に混雑した(遅れの原因)状態となる
- この状態で「実験1」と同様の実験をメインMaxパッチ側でOSCの往復回数を「1回」および「10回」として行った
- 「OSC1往復」実験の6回の計測データを「95, 145, 130, 85, 120, 145」(msec)とすれば平均の遅延は「120msec」、最小値は85msec、最大値は145msecとなり、動画ダウンロードの影響と考えられる。
- 「OSC10往復」実験のデータは、1発のOSC往復がおよそ120msecであれば「およそ1.2秒〜1.4秒」というのは妥当な結果
- ばらつき幅(ジッタ)の「0.2秒」は、音楽で言えば「アップテンポ(150bpm)の8分音符」の長さ
- 音楽において「8分音符のズレ」幅のばらつきは音楽を完全に崩壊させるので、音楽情報科学的には「致命的な遅延」と言える
実験3 - OSCメッセージを1バイトの数値から「592文字/107ワードの英文」へ
- 上記「実験2」と同様の実験「OSC1往復」で、違いはOSCメッセージが1バイトの"0"だったのに対して、「592文字/107ワードの英文」というパケットに変わっただけ
- 上記「実験2」と同様に、動画サイトから100MB〜800MBのmp4動画を16本、ダウンロードツール(アドオン)によって同時並行的にダウンロードを続ける状態とした
- 9回の「OSC1往復」実験の計測データを「146, 63, 122, 135, 130, 125, 133, 82, 115」(msec)とすれば平均の遅延は「117msec」、最小値は63msec、最大値は135msecとなって実験2と大差ない
- OSCはより大きなデータパケット単位で処理されるため、中身のデータの大きさは影響しないと考えられる
実験4 - 複数のノートPCのWiFiを経由したOSC
- この実験4は1106研究室内で行い、SUAC学内ネットワーク(LAN)に接続した1106研究室Mac("mini"と呼ぶ)とともに、同じSUAC学内ネットワーク(LAN)に接続した3台のAirMac(WiFiルータ)を介して3台のMacBookAir(ノートMac)もネットワーク接続した
- ここでは3台のMacBookAirを"Air3"・"Air4"・"Air5"と呼ぶ
- それぞれのMacでは全てMaxパッチが走り、メインの"mini"は「実験1」と同様に、1バイトデータ"0"を"Air3"にOSCで送ったタイミングから、最終的に"Air5"からOSCで戻ってくるまでのレイテンシを計測する
- "Air3"のMaxパッチは、"mini"から受けたOSCメッセージを即時に"Air4"にOSC転送する
- "Air4"のMaxパッチは、"Air3"から受けたOSCメッセージを即時に"Air5"にOSC転送する
- "Air5"のMaxパッチは、"Air4"から受けたOSCメッセージを即時に"mini"にOSC転送する
3台のMacBookAirの並ぶ実験の風景
- 3台を経由して計3回のOSCメッセージ伝送が行われているが、何回か試行してみるとレイテンシは計4.5msecほどでほぼ一定
- 「実験1」のマルチメディア室のiMac G5は「3.2GHz i5」、次のお仕事Mac Miniは「2.6GHz i5」なのに対して、ここで使用した3台のMacBookAir3-5は「1.4GHz i5」・「2.2GHz i7」・「1.3GHz i5」とかなりクロックが低いので、「1106→マルチメディア室→1106」を1msecで行き来するOSCが、1106研究室内のMacBookAirでは1台あたり1.5msecで行き来する、というのは妥当なオーダである
- この実験から、OSCを使うのにLAN(有線)でもWiFi(無線)でも十分な能力があると考えられる
実験5 - CPU負荷の重いタスクを並列に多数走らせてみる
- 追試として、SUAC北棟11階の1106研究室Mac(Mac mini)をLANに、MacBookAir3をAirMacでWiFi接続して、SUAC南棟4階のマルチメディア室Mac(iMac)との間で「592文字、107ワード」というメッセージをOSCで「mini→(OSC)→MM室iMac→(OSC)→MacBookAir3→(OSC)→iMac→(OSC)→mini」と2往復させる実験を行った
- 以下のように、およそ8msecで2往復というレイテンシであり、ジッタとしても「7msecから12msecあたりでまずまず安定」という状態
- このレイテンシを計測しているMac mini自体はそのまま「最小限のタスク」(他にブラウザ等を起動しない)とし、OSC中継をしているMacBookAir3がWiFi接続しているWiFIルータのAirMac(5)とは異なる、別の2つのWiFIルータとして新たにAirMac(3)とAirMac(7)をLANに繋いで1106研究室内にWiFiを飛ばした
- この別の2つのWiFIルータにそれぞれ別々に接続したMacBookAir4とMacBookAir5が、それぞれYouTubeで長大な動画として有名な「車窓動画」(5時間以上)を2本ずつ同時並行ダウンロードをする(トラフィック値は合計1.5MB/秒ほど)、という「ネットワークがかなり混んでいる」状況を作った
- YouTube動画は全て最高品質(1920×1080HD)で、さらに異なるコンテンツとしてSUACのプロキシサーバでキャッシュ共用化されるのを避けた
- なお違法ダウンロードを避けるために、実験の途中で上の全てのダウンロード作業を強制終了させており、手元にはダウンロードファイルは生成されていない(経過ファイルはダウンロード中止とともに自動消滅して生成ファイルも消える)
- この条件で、「592文字、107ワード」というメッセージを「mini→(OSC)→MM室iMac→(OSC)→MacBookAir3→(OSC)→iMac→(OSC)→mini」という2往復させた実験の結果が以下である
- 30msec(これは非常に稀)から130msecまで、かなりの幅で「最善値で8msec」という基準に対して、大きくレイテンシが増大している事を確認できた
- 次に、上の実験でネットワークを混雑させていた「別の2台のMacBookAir」を停止させて、同じ条件のレイテンシを計測しているMac mini自体で同時に(並行して)ブラウザFirefoxを起動して、上の実験と同様の「長大なYouTube動画4本を全て最高品質(1920×1080HD)で同時並行ダウンロードをする」(トラフィック値は合計1MB/秒ほど)というテストを行った(これは実験2の追試)
- 注目点としては以下のスクリーンの「Intel Power Gadget」の最下段のCPU Tempetatureの表示が40℃程度のままであり、「Activity Monitor」のCPUもそこそこ低いことである
- このMac miniは4コアのi5でありCPUは最大で「合計400%」まで行けるので、この数値は「CPUはほとんど遊んでいるが、ネットワークトラフィックがとても重い」という条件となる。以下はこの条件での実験結果の一部
- レイテンシが130msecほどの時もあれば190msecほどになっている場合もあり、「他の2台のコンピュータによってネットワークが重い」という条件よりもさらに悪化している
- すなわち、高性能PCだからと言って「1台で実験の全部を行う(システムを分業させない)」事にはリスクがあると考えられる
- 次の実験では、SUAC北棟11階の1106研究室Mac(Mac mini)をLANに、MacBookAir3をAirMacでWiFi接続して、SUAC南棟4階のマルチメディア室Mac(iMac)との間で「592文字、107ワード」というメッセージをOSCで「mini→(OSC)→MM室iMac→(OSC)→MacBookAir3→(OSC)→iMac→(OSC)→mini」と2往復させるのは上記とまったく同じ
- この計測実験を行っているMac miniで、同時に(並行して)FirefoxとChromeとSafariとVivaldiという4種類のブラウザを同時に開いて、それぞれ全て「abema.tv」の同じライヴ中継をストリーミング視聴してみた
- 以下のスクリーンのように4種類のブラウザが同時に起動されているが、音声をOFFにしないと、各ブラウザによってabema.tvを表示する遅延が異なるので、同じライヴ中継なのにバラバラな音響が聞こえて来る
- スクリーンの右下の「Activity Monitor」を見ると、一般に「軽い」と言われるVivaldiは、その裏で「Vivaldi Helper」というプロセスを走らせてCPUを占有している模様(同様のプロセスはChromeにもあり)
- 以下はこの「同時に4つのブラウザでストリーミング視聴」という条件での実験結果の一部で、レイテンシとしては10msec以下の時もあれば、90msecほどになっている場合もあった
- ストリーミング視聴の場合には、「PCが忙しい時には映像が止まってもOK」というベストエフォート原理が強い上に、基本的に「細切れ」でデータが届く
- 1106研究室とマルチメディア室とでOSCパケットを2往復させる・・・という仕事がほとんど「邪魔無し」で走ることもあれば、それぞれのストリーミングでネットワークが重くなり、さらにCPUもそこそこ頑張っている(CPU温度は70℃あたりに上がっている)ので、このような成績となったと考えられる
- 次に「ネットワークが重い」のでなく「CPU処理量が重い」(CPU温度が高くなる)というタスクによる影響を実験するために、まず以下のようなMaxバッチで640*480ピクセル(30fps)の「画像もサウンドもホワイトノイズ」という1分ほどのmovieを書き出した
- これをQuickTime7Proでたくさんコピペ連結して20分ほど続くmovieを作り、「mp4 basic」フォーマットとしてExportした
- ファイルサイズは613.9MBと無駄に大きい(ある程度大きくないと処理が終わってしまうので必要な条件)
- この巨大な「画像も音響もホワイトノイズが20分続くだけ」movieをたくさん複製しリネームして「noise01.mp4」から「noise08.mp4」まで8本とした
- 以下は、これら8本を「Free MP4 Converter」によって、上記とまったく同じレイテンシ計測実験の裏で同時に一気に変換した様子
- 「Intel Power Gadget」のグラフではCPU温度は85℃ほどまで上がっている
- 「Activity Monitor」を見れば8本のレンダリングHelperが走っていてそれぞれのCPU専有率を合計すると300%以上
- CPUは超忙しいもののネットワーク遅延はびくともせず、何度計測してもほぼ8msec(影響ナシ)となった
- 以下は、QuickTime7Proで同じ8本の「mp4 basic」フォーマットのmp4ムービーを「H.264」フォーマットのmp4ムービーに変換する、という同時並行レンダリングの様子
- CPU温度は最高の90℃以上にまでになり、経験的には「もっとも重いタスク」
- QuickTime HelperのCPU専有率の合計も400%に近い凄いことになっている
- ネットワーク遅延はこちらもびくともせず、何度計測してもほぼ8msec
- CPUは忙しくても、「Helper」はその合間をスケジューリングして動作するらしく、計測実験の結果には影響しなかった
実験6 - Maxで10ミリ秒の純音(1000Hz)バーストを出す
- 上記と同様に、Max7から115200bpsのシリアルでArduinoのポートを叩いて、「スタート」タイミングとしてArduinoからディジタル出力を上げ下げしてPicoScope3205Aで計測する
- 時間差(遅れ)を計測するために、PicoScope3205Aはワンショット・トリガモードで立ち下がりエッジに反応する
- PicoScope3205Aのもう1チャンネルには、実験Mac miniのオーディオ出力を接続してサウンドの立ち上がりまでの遅延(レイテンシ)を計測し、そのばらつき(ジッタ)を調べた
- 以下のように、Arduinoの「スタート」タイミングと同時に「cycle~」オブジェクトで1000Hzの純音を10msecだけON→OFFとして、発音の遅延とともにMax7内で10msecとしているON→OFFの幅(duration)も調べた
- Max7のPreferenceのスケジューラとしては最高性能の「scheduler=1msec」・「slot=1msec」を設定し、もちろんOverdriveもON
- 実験結果は以下のように、イベントの遅延については「17msec」〜「25msec」というような幅があった
- 10msecバースト音の幅(duration)については「11msec」〜「20msec」というような幅があった
- Max7内のMSPで、bufferウインドウにデータを詰めてからCoreAudioに送るため、イベントの遅延としてはまずまず妥当だが、ばらつき(ジッタ)もかなりあった
- Max7内で「10msec固定」の筈のバースト音の幅が、約2倍というような幅でのばらつき(ジッタ)があったのは予想外
- ここまでのMax7に代えて、2018年9月に発表された新しい「Max8」を使って、まったく同じ実験を行ってみた
- Max8のPreferenceのスケジューラについても同様に最高性能の「scheduler=1msec」・「slot=1msec」を設定し、OverdriveもON
- Max8ではMax7に比べて発音イベントのスタートがやや遅かったので以下のようにサンプリングオシロスコープの時間軸を5msecから10msecにした
- 以下のように、Max8ではイベントの遅延については「24msec」〜「33msec」というような幅があってMax7よりも遅い
- Max8では、何度試行してもバースト音の幅がほぼ「きっちり10msec」となった
- Max7からMax8に改良される中で、「MSPでbufferウインドウにデータを詰めてからCoreAudioに送る遅延」というあたりの正確性のpriorityを上げていると推察できる
実験7 - Max7から内蔵音源(DLSシンセ)のピアノ音を鳴らす
- Max7から内蔵音源(DLSシンセ)のピアノ音を鳴らすという実験
- MSPの「cycle~」の代わりに、「noteon 127 30」という「最大ベロシティで短い音」で「ノートナンバ=96」を鳴らすものとした
- このDLSシンセ音源は全体として音量が小さいので、トラックボリュームも最大の127とした
- Max7ではイベントの遅延については「15msec」〜「23msec」というような幅があり、「cycle~」よりもむしろ早かった(遅れが小さかった)
- 内部的にDLSシンセにトリガ送出するだけ(→あとはDLSシンセが裏で何かやっている)というためか、ばらつき(ジッタ)はだいぶ小さく良好であった
- 次に同様に、Max7でなくMax8から内蔵音源(DLSシンセ)のピアノ音を鳴らすという実験を行った(track volumeはdefaultの100)
- Max8ではイベントの遅延については「15msec」〜「19msec」というような幅で、遅延のレンジとしてはほぼMax7と同等であった
- ただし何度やっても20msecまで遅れることがなく、ジッタ特性という意味では確かに改良されていた
実験8 - Max7からGarageBandを内部MIDI音源として鳴らす
- Max7からはDLSシンセだけでなく、GarageBandをMIDI音源として内部的に鳴らすことが出来る
- GarageBandを起動すると、「いまMIDI入力機器として◯台のデバイスを確認」などと出るが、これはMacOSとMaxとの連携の証拠
- 以下のようにMax7からMIDI送りするオブジェクトとして「IAC Driver(内部)バス」を選ぶだけで、同時に起動しているGarageBandを、defaultのDLSシンセとは別の内部音源として利用できる
- 実験では以下のように、発音のレイテンシ13msecという短時間で、GarageBandが(別プロセスとして)defaultのリバーブまでかけたピアノ音を鳴らす
- 以下のように、Max7でのイベントの遅延については「12msec」〜「18msec」というような幅で、内蔵音源(DLSシンセ)のピアノ音よりも成績はまずまず良好
- まったく同一の条件でMax7からMax8にしてみると、以下のように12msecと好成績が出た
- Max8で何度か試行してみると、以下のようにMax7とほぼ同等の結果となった
結論と考察
- 「実験環境」で検証したように、レイテンシとジッタの計測実験ツールとして「MaxとArduinoとサンプリングオシロスコープPicoScope3205A」という組み合わせは十分な性能がある(「遅延時間計測システム」として1msec精度の計測が可能)
- 「実験1」で検証したように、マルチプラットフォーム・プロトコルとして世界標準になっているOSC(OpenSoundControl)によるメッセージ伝送は、標準的なネットワーク(実験を行ったSUAC構内LAN)において、「OSCで1往復」実験のレイテンシは約1.0msecであり、複数回の試行でばらつき(ジッタ)が無いことを確認した
- 「実験1」のバックグラウンド(同時並行)にて16本の大容量データをインターネットからダウンロードする(ネットワーク負荷+コンピュータ内部負荷)という「実験2」で検証したように、OSC伝送のレイテンシが大幅に増加するだけでなく、そのばらつき(ジッタ)も非常に大きくなり、音楽情報科学的に問題となるオーダであることを確認した
- 「実験2」において1バイトデータだったOSCメッセージを「592文字/107ワードの英文」という大きさに変更した「実験3」で検証したように、OSCメッセージはパケット単位で処理するために実験結果はほぼ同じであった。すなわちOSCメッセージとして数百バイト程度まで大きくしても構わない
- 「実験1」が有線LANだったものを複数PCのWiFiに置換して行った「実験4」で検証したように、PCのCPUクロックに対応した範囲でLANでもWiFiでもOSCメッセージの伝送はほぼ同等の性能であり、実験をノートPCのWiFiによって行うことは妥当であると判明した
- 追試として行った「実験5」では、OSCメッセージ伝送のレイテンシやジッタの原因としてネットワークの混雑とCPU負荷の両方の可能性を検証した。まず別のPCによってネットワークを混雑させてもレイテンシ/ジッタの状況は同様に悪化すると判明した。また実験PCのバックグラウンド(同時並行)で4種類のブラウザが同時にライヴ放送をストリーミング視聴しても、ベストエフォート原理によってOSC伝送性能は低下しなかった。さらにCPU温度を相当に上げる同時並行レンダリング処理を行ったが、こちらもOSのベストエフォート原理によってOSC伝送性能は低下しなかった。結論としてネットワークが「重い」(混雑している)という状況を避ければ(極端には実験専用ネットワークとして閉じていれば)、OSC伝送を心理学実験の道具として使うことは可能であると確認した
- Max/MSPのリアルタイム音響処理機能による純音バースト(10msec)生成の「実験6」で検証したように、Max7では内部タイミング処理の影響で発音遅延(「17msec」〜「25msec」)およびバースト幅(「11msec」〜「20msec」)において、レイテンシおよびジッタの傾向としてかなり問題があると判断した。Max8で実験してみると、発音遅延(「24msec」〜「33msec」)のレイテンシはさらに大きくなったものの、バースト幅はほぼジッタ無しの正確な10msecが確保されるように改善されていることを確認した。このレイテンシのオーダ(絶対値)は過去の音楽心理学実験において「人間が音色の違いと認識する」レベル以上なので、Max内で設定した(つもりの)時間条件で音楽心理学実験を行うことは無意味となる危険性がとても高い
- MaxからMac内蔵音源(DLSシンセ)のピアノ音を鳴らすという「実験7」で検証したように、Max/MSPが内部DSPバッファ処理を行う「実験6」よりも、音源処理をMacOSに引き渡すことで、ジッタの幅はあるものの発音遅延はMax7/Max8ともにより良好になった
- MaxからOS内部メッセージによってMac内で起動したGarageBandのピアノ音源を鳴らすという「実験8」で検証したように、Max7およびMax8の発音遅延(「12msec」〜「18msec」)はMac内蔵音源(DLSシンセ)よりもさらに良好になった。しかし音楽心理学実験として問題あるオーダでのジッタは存在しているので注意が必要である