Native Audio
Exceed7 Experiments
$29.00
Date |
Price |
---|---|
日期和时间 |
价钱($) |
04/14(2018) |
20.0 |
09/08(2018) |
29.0 |
11/27(2018) |
14.5 |
12/11(2018) |
29.0 |
07/20(2020) |
14.5 |
07/27(2020) |
29.0 |
11/09(2022) |
14.5 |
11/14(2022) |
29.0 |
11/17(2024) |
29.0 |
Jump AssetStore
Lower audio latency via direct unmixed audio stream at native side.Requirements : For iOS and Android only. 2019.3 LTS or higher.Official Website : https://exceed7.com/native-audioUnity Forum : https://forum.unity.com/threads/native-audio-lower-audio-latency-via-oss-native-audio-library-ios-android.526837/E-mail : 5argon@exceed7.comDiscord : https://discord.gg/8gthuWASo your Unity game outputs WAY slower audio than other apps even on the same device? Turns out, Unity adds as much as 79% of the total latency you hear. Your devices can do better.Unity won't let you use only a subset of its hard-wired audio pipeline. But with Native Audio we can go native and make as much compromises as we want. Simplify, take dirty shortcuts, and aim for the lowest latency. Sacrificing functions and convenience that Unity was designed for as a friendly game engine.✴️ How is this possible?► Unity didn't intialize the native source with the lowest latency settings, but with the safest and defensive settings.► Unity need to mix audio internally with FMOD to enable any concurrent audio at all. Or else you can only hear an individual imported AudioClip at any point. (That would sucks as a game, we aren't here to make a music player, and we don't want to fire a single bullet that mutes an entire music, either.)► Unity has many convenient functions to be worthy enough to be called a game engine. Like AudioMixerGroup, volume faders, effects, limiting, AudioSource priority and spatial position, AudioClip flexible import settings that all "just works", etc. All combined, it is inevitable having to wait at some point.Native Audio allows us to break the norm and go for what normally would be considered crippled for a game engine :► Request the OS more native sources for our own, completely independent of the one Unity requested and is pumping mixed audio to, going through all the bells and whistles.► Export an AudioClip data to a new memory area that native side could read. Give the native side a pointer to this memory. Warm up and ready source as much as possible like a runner on a starting block ready to sprint.► At the critical moment, signal from C# to native side for our exclusive native source to play that memory. Just run through it. No mixing. Just want to hear this AudioClip with nothing else, just want to hear this file like I double clicked on it. Instantly at this line of code, not even waiting to the end of this frame. The Play call is now much closer to the HAL.► With multiple instances of native sources requested, we can have back limited concurrency while staying unmixed.► Still keep the Unity-way around for audio that aren't critical but require higher concurrency. Let them take time to mix. Selectively play critical audio in Native Audio's express laneNative Audio helps you do this across 2 platforms of iOS and Android, using the same common C# interface.Unfold the Technical details section for more.Unity Forum : https://forum.unity.com/threads/native-audio-lower-audio-latency-via-oss-native-audio-library-ios-android.526837/E-mail : 5argon@exceed7.comDiscord : https://discord.gg/8gthuWA✴️ Various use casesWhile not able to mix greatly reduce flexibility, and preparations for native play could be messy, this is very useful for small but critical audio.Imagine a drumming game that you have to hit at the correct moment. If you hit perfectly and the game says so, the sound will come later. If you hit early the game punishes you, the sound will instead be exact.Even with something generic like UI response sound, where hearing feedback slower than a certain threshold after the user feel the touchscreen's glass (which already took so much input latency time) will greatly deteriorate user experience.The key is response sound. If you can predict the future and know the precise future what time it will play, you can always use PlayScheduled. But if you must wait for input? You must wait for performance judgement? You must wait until the character collect that coin, until you can decide to play or not to play which sound? An objective is to play as fast as possible after that realization moment. The only solution is Native Audio.✴️ Android High-Performance Audio ReadyIt improves latency for iOS also, but I guess many came here in hope to fix the horrible Android latency, even before Unity added its things on top.I am proud to present that Native Audio follows all of Google's official best practices required to achieve High-Performance Audio in Android. For one thing, Native Audio uses NDK/C-based OpenSL ES and not Java-based MediaPlayer, SoundPool, or AudioTrack.Also because Native Audio is not as versatile, I can additionally fix all the latency-related tradeoffs that Unity have to pay for their more versatile audio engine.Of course, with publicly available thorough research and confirmations. This means it can perform even better than native Android app that was coded naively/lazily in regarding to audio. Even pure Android developers might not want to go out of Java to NDK/C.✴️ How much faster?This is not at all a standard latency measurement approach like loopback cable method. The number alone is not comparable between devices too. However the time difference of the same device truly show how much the latency improved because of Native Audio.XIAOMI MI A2 (2018 / 8.1.0 OREO) 321.2 ms ➡ 78.2 ms (-75.65%)XPERIA Z5 (2015 / 7.1.1 NOUGAT) 120.6 ms ➡ 69 ms (-42.79%)LENOVO A1000 (2015 / 5.1 LOLLIPOP) 366.2 ms ➡ 217.4 ms (-40.63%)ONEPLUS ONE (2014 / 9.0 PIE POSP ROM) 102.6 ms ➡ 59.4 ms (-42.11%)SAMSUNG GALAXY NOTE 5 (2015 / 7.0 NOUGAT) 260.4 ms ➡ 85.8 ms (-67.05%)SAMSUNG GALAXY NOTE 8 (2017 / 8.0.0 OREO) 263.6 ms ➡ 65.6 ms (-75.11%)SAMSUNG GALAXY S7 EDGE (2016 / 8.0.0 OREO) 243.4 ms ➡ 67.4 ms (-72.31%)SAMSUNG GALAXY S9 PLUS (2018 / 8.0.0 OREO) 98 ms ➡ 56.6 ms (-42.24%)IPOD TOUCH GEN 5 (2012 / 9.3.5) 94.6 ms ➡ 58.8 ms (-37.84%)IPAD 3 (2012 / 9.3.5) 115.6 ms ➡ 67.4 ms (-41.7%)Much more to discover at : https://exceed7.com/native-audioUnity Forum : https://forum.unity.com/threads/native-audio-lower-audio-latency-via-oss-native-audio-library-ios-android.526837/E-mail : 5argon@exceed7.comDiscord : https://discord.gg/8gthuWA
ネイティブオーディオ-ネイティブ側での直接のミックスされていないオーディオストリームにより、オーディオレイテンシを低減
iOSおよびAndroidの場合。
公式サイト|フォーラムで質問する|不和
それで、あなたのUnityゲームは同じデバイス上でさえ他のアプリよりも遅いオーディオを出力しますか?結局のところ、Unityは聞こえる合計遅延の79%を追加します。あなたのデバイスはより良いことができます。
Unityでは、ハードワイヤードオーディオパイプラインのサブセットのみを使用できません。しかし、ネイティブオーディオを使用すると、ネイティブに移行して、必要なだけ妥協することができます。簡素化し、汚いショートカットを取り、レイテンシの最小化を目指します。 Unityがフレンドリーなゲームエンジンとして設計された機能と利便性を犠牲にします。
✴️これはどのようにして可能ですか?
►Unityは、最小のレイテンシ設定でネイティブソースを初期化しませんでしたが、最も安全で防御的な設定で初期化しました。
►Unityは、同時オーディオを有効にするために、FMODでオーディオを内部でミックスする必要があります。または、インポートされた個々のAudioClipをいつでも聞くことができます。 (それはゲームとしてはうんざりです。音楽プレーヤーを作るためにここにいるわけではありません。また、音楽全体をミュートする単一の弾丸を発射したくもありません。)
►Unityには、ゲームエンジンと呼ばれるのに十分な数の便利な機能があります。 AudioMixerGroupのように、ボリュームフェーダー、エフェクト、制限、AudioSourceの優先順位と空間位置、すべてが「そのまま機能する」AudioClipの柔軟なインポート設定など。すべてを組み合わせると、ある時点で待機する必要があります。
ネイティブオーディオを使用すると、標準を打ち破って、ゲームエンジンで通常は不自由と見なされるものに進むことができます。
►リクエストされた1つのUnityとは完全に独立した独自のソースをOSに要求し、すべてのベルとホイッスルを介してミックスされたオーディオをポンピングします。
►オーディオクリップデータを、ネイティブ側が読み取れる新しいメモリ領域にエクスポートします。ネイティブ側にこのメモリへのポインタを与えます。スプリントの準備ができているスターティングブロックのランナーのように、できるだけウォームアップして準備が整ったソース。
►重要な瞬間に、C#からネイティブ側に信号を送り、排他的なネイティブソースがそのメモリを再生するようにします。ただそれを実行します。ミキシングなし。このAudioClipを他に何も聞こえないようにしたいのですが、このファイルをダブルクリックしたようにこのファイルを聞きたいだけです。このフレームの終わりまで待たなくても、このコード行で即座に。 PlayコールはHALに非常に近くなりました。
►ネイティブソースの複数のインスタンスが要求されると、混合されないまま、同時実行を制限することができます。
►重要ではないがより高い同時実行性が必要なオーディオについては、Unity方式を維持してください。混ぜるのに時間がかかるようにします。 Native Audioのエクスプレスレーンで重要なオーディオを選択的に再生する
ネイティブオーディオは、同じ共通のC#インターフェイスを使用して、iOSとAndroidの2つのプラットフォーム間でこれを行うのに役立ちます。
✴️さまざまなユースケース
ミックスすると柔軟性が大幅に低下し、ネイティブプレイの準備が煩雑になる可能性がありますが、これは小さくても重要なオーディオに非常に役立ちます。
正しいタイミングでヒットしなければならないドラミングゲームを想像してみてください。あなたが完全にヒットし、ゲームがそう言うなら、音は後で来ます。ゲームの早い段階でヒットすると、罰せられますが、サウンドは正確になります。
UI応答音などの一般的なものでも、ユーザーがタッチスクリーンのガラスを感じた後にフィードバックが特定のしきい値よりも遅く聞こえると(既に非常に多くの入力待ち時間がかかっている)、ユーザーエクスペリエンスが大幅に低下します。
キーはレスポンス音です。未来を予測して、それが再生される正確な未来を知ることができる場合は、いつでもPlayScheduledを使用できます。しかし、入力を待つ必要がある場合はどうでしょうか。パフォーマンスの判断を待つ必要がありますか?キャラクターがコインを集めるまで、どのサウンドを再生するかしないかを決定できるまで待つ必要がありますか?目標は、その実現の瞬間の後、できるだけ速くプレイすることです。唯一の解決策はネイティブオーディオです。
✴️Androidハイパフォーマンスオーディオ対応
iOSのレイテンシも改善されますが、Unityが追加する前でも、恐ろしいAndroidレイテンシを修正するために多くの人がここに来たと思います。
ネイティブオーディオが、Androidで高性能オーディオを実現するために必要なGoogleの公式のベストプラクティスのすべてに従っていることを誇りに思います。まず、Native AudioはJavaベースのMediaPlayer、SoundPool、AudioTrackではなく、NDK / CベースのOpenSL ESを使用します。また、Native Audioはそれほど用途が広いわけではないため、Unityがより用途の広いオーディオエンジンに対して支払うべきレイテンシ関連のトレードオフをすべて修正することもできます。
もちろん、一般に入手可能な徹底的な調査と確認を行います。これは、オーディオに関して単純または遅延的にコーディングされたネイティブのAndroidアプリよりもパフォーマンスが優れていることを意味します。純粋なAndroid開発者でさえ、JavaからNDK / Cに移行したくない場合があります。
✴️どれくらい速いですか?
これは、ループバックケーブル方式のような標準のレイテンシ測定アプローチではありません。数だけでもデバイス間で比較することはできません。ただし、同じデバイスの時差は、ネイティブオーディオによりレイテンシーがどれほど改善されたかを示しています。
XIAOMI MI A2(2018 / 8.1.0 OREO)321.2 ms➡78.2 ms(-75.65%)
XPERIA Z5(2015 / 7.1.1 NOUGAT)120.6ミリ秒➡69ミリ秒(-42.79%)
LENOVO A1000(2015 / 5.1 LOLLIPOP)366.2 ms➡217.4 ms(-40.63%)
ONEPLUS ONE(2014 / 9.0 PIE POSP ROM)102.6 ms➡59.4 ms(-42.11%)
SAMSUNG GALAXY NOTE 5(2015 / 7.0 NOUGAT)260.4ミリ秒➡85.8ミリ秒(-67.05%)
SAMSUNG GALAXY NOTE 8(2017 / 8.0.0 OREO)263.6 ms➡65.6 ms(-75.11%)
SAMSUNG GALAXY S7 EDGE(2016 / 8.0.0 OREO)243.4 ms➡67.4 ms(-72.31%)
SAMSUNG GALAXY S9 PLUS(2018 / 8.0.0 OREO)98ミリ秒➡56.6ミリ秒(-42.24%)
IPOD TOUCH GEN 5(2012 / 9.3.5)94.6 ms➡58.8 ms(-37.84%)
IPAD 3(2012 / 9.3.5)115.6 ms➡67.4 ms(-41.7%)
発見するはるかに:https://exceed7.com/native-audio