Android SDK
Profiler Audio

Photogallery Login

SDK audio spatializer menyediakan kontrol untuk mengubah cara aplikasi Anda mentransmisikan audio dari audio sourceKomponen yang memainkan kembali Klip Audio dalam adegan ke pendengaran audio atau melalui mixer audio. More info
Lihat di Glossary
ke ruang sekitarnya. Ini adalah ekstensi dari SDK plugin audio asli.

Panning built-in sumber audio adalah bentuk sederhana spasialisasi. Ini mengambil sumber dan mengatur keuntungan dari kontribusi telinga kiri dan kanan berdasarkan jarak dan sudut antara Audio ListenerKomponen yang bertindak seperti mikrofon, menerima suara dari sumber audio di tempat kejadian dan output ke speaker komputer. More info
Lihat di Glossary
dan Sumber Audio. Ini menyediakan kubus arah sederhana untuk pemain di pesawat horizontal.

The Unity Audio Spatializer SDK dan implementasi contoh

Untuk memberikan fleksibilitas dan dukungan untuk bekerja dengan spasialisasi audio, Unity memiliki antarmuka terbuka, SDK Audio Spatializer, sebagai ekstensi di atas SDK Plugin Audio Asli. Anda dapat mengganti panner standar di Unity dengan yang lebih maju, dan memberikan akses ke meta-data penting tentang sumber dan pendengar yang diperlukan untuk perhitungan.

Sebagai contoh dari plugin audio spasializer asli, lihat Facebook Twitter Google Plus Pinterest Email. Plugin hanya mendukung Fungsi Transfer Bertemu Kepala Langsung (HRTF), dan dimaksudkan untuk tujuan contoh saja.

Anda dapat menggunakan reverb sederhana, termasuk dalam plugin, untuk mengarahkan data audio dari plugin spatializer ke plugin reverb. Filter HRTF didasarkan pada versi yang dimodifikasi dari set data KEMAR. Untuk informasi lebih lanjut tentang set data KEMAR, lihat Login Dokumentasi dan pengukuran Media Lab.

Jika Anda ingin menjelajahi set data yang diperoleh dari subjek manusia, merujuk ke set data IRCAM.

Memastikan Spasializer Audio Unity %

Unity menerapkan efek spasialisasi langsung setelah data audio decodes sumber audio. Ini menghasilkan aliran data audio di mana setiap sumber memiliki instance efek terpisah sendiri. Satu-satunya proses audio dari sumber itu dengan instance efek yang sesuai.

Untuk mengaktifkan plugin untuk beroperasi sebagai spasializer, Anda perlu mengatur bendera di bidang deskripsi efek:

definition.flags |= UnityAudioEffectDefinitionFlags_IsSpatializer;

Jika Anda mengatur bendera UnityAudioEffectDefinitionFlags_IsSpatializer, Unity mengenali plugin sebagai spasializer selama fase pemindaian plugin. Ketika Unity menciptakan contoh plugin, ia mengalokasikan struktur UnityAudioSpatializerData untuk anggota spatializerdata struktur UnityAudioEffectState.

Untuk menggunakan spasializer dalam proyek, pilih dalam pengaturan Proyek Anda (menu: Edit > Project Settings > Audio):

Spatializer plugin selector
Mozilla Firefox

Kemudian, di jendela InspectorJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
Lihat di Glossary
untuk Sumber Audio yang ingin Anda gunakan dengan plugin spasializer, memungkinkan Spatialize:

Spatializer checkbox on Audio Source
Checkbox Spatializer di Sumber Audio

Anda juga dapat mengaktifkan spasializer untuk sumber Audio melalui skrip C#, menggunakan properti AudioSource.spatialize.

Dalam aplikasi dengan banyak suara, Anda mungkin ingin hanya mengaktifkan spasializer pada suara terdekat Anda, dan gunakan panning tradisional pada yang jauh, untuk mengurangi beban CPU pada benang pencampuran untuk efek spasializer.

Jika Anda ingin Unity untuk lulus data spasial ke plugin mixer audio yang bukan spasializer, Anda dapat menggunakan bendera berikut dalam deskripsi bit-field:

definition.flags |= UnityAudioEffectDefinitionFlags_NeedsSpatializerData;

Jika plugin menginisialisasikan dengan bendera UnityAudioEffectDefinitionFlags_NeedsSpatializerData, plugin menerima struktur UnityAudioSpatializerData, tetapi hanya bidang listenermatrix valid. Untuk informasi lebih lanjut tentang UnityAudioSpatializerData, lihat Spatializer efek meta-data bagian.

Untuk menghentikan Unity dari menerapkan koneksi jarak atas nama plugin spasializer, gunakan bendera berikut:

definition.flags |= UnityAudioEffectDefinitionFlags_AppliesDistanceAttenuation;

Bendera UnityAudioEffectDefinitionFlags_AppliesDistanceAttenuation menunjukkan kepada Unity bahwa spatializer menangani penerapan pemberatangan jarak. Untuk informasi lebih lanjut tentang aktivitas jarak, lihat bagian Kurva audibility dan audibility.

Spatializer efek meta-data

Tidak seperti Unity audio effectsSetiap efek yang dapat memodifikasi output komponen Audio Mixer, seperti menyaring rentang frekuensi suara atau menerapkan verba. More info
Lihat di Glossary
lain yang berjalan pada campuran suara, Unity menerapkan spatializer secara langsung setelah data audio decode Sumber Audio. Setiap kasus efek spasializer memiliki contoh sendiri UnityAudioSpatializerData, terutama terkait dengan data tentang Sumber Audio.

struct UnityAudioSpatializerData
{
    float listenermatrix[16];   // Matrix that transforms sourcepos into the local space of the listener
    float sourcematrix[16];     // Transform matrix of the Audio Source
    float spatialblend;         // Distance-controlled spatial blend
    float reverbzonemix;        // Reverb zone mix level parameter (and curve) on 
                                // the Audio Source
    float spread;               // Spread parameter of the Audio Source (0..360 degrees)
    float stereopan;            // Stereo panning parameter of the Audio Source (-1: fully left, 1: fully right)
                                // The spatializer plugin may override the distance attenuation to
                                // influence the voice prioritization (leave this callback as NULL 
                                // to use the built-in Audio Source attenuation curve)
    UnityAudioEffect_DistanceAttenuationCallback distanceattenuationcallback;
    float minDistance;          // The minimum distance of the Audio Source. 
                                // This value may be useful for determining when to apply near-field effects. 
    float maxDistance;          // The maximum distance of the Audio Source, or the 
                                // distance where the audio becomes inaudible to the listener. 
    
};

Struktur mengandung bidang yang sesuai dengan sifat komponen Sumber Audio di Inspektur: Spatial Blend, Reverb Zone Mix, Spread, Stereo Pan, Minimum Distance, dan Maximum Distance.

Struktur UnityAudioSpatializerData mengandung 4x4 mengubah matriks untuk Audio Listener dan Audio Source. Matriks pendengar terbalik sehingga Anda dapat melipatgandakan dua matriks untuk mendapatkan agen arah relatif. Matriks pendengar selalu ortonormal, sehingga Anda dapat dengan cepat menghitung matriks terbalik.

Sistem audio Unity hanya menyediakan suara sumber baku sebagai sinyal stereo. Sinyal stereo bahkan ketika sumbernya mono atau multi-channel, dan Unity menggunakan campuran atas atau turun, seperti yang diperlukan.

Konvensi matriks

Bidang sourcematrix mengandung salinan matriks transformasi sumber audio. Untuk sumber Audio default pada GameObjectObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary
yang tidak diputar, matriks adalah matriks terjemahan di mana posisi dikodekan dalam elemen 12, 13 dan 14.

Bidang listenermatrix mengandung terbalik matriks transformasi AudioListener.

Anda dapat menentukan arah vektor dari AudioListener ke Sumber Audio seperti yang ditunjukkan di bawah ini, di mana L adalah listenermatrix dan S adalah sourcematrix:

float dir_x = L[0] * S[12] + L[4] * S[13] + L[ 8] * S[14] + L[12];
float dir_y = L[1] * S[12] + L[5] * S[13] + L[ 9] * S[14] + L[13];
float dir_z = L[2] * S[12] + L[6] * S[13] + L[10] * S[14] + L[14];

Posisi di (L[12], L[13], L[14]) sebenarnya nilai negatif dari apa yang Anda lihat di jendela Inspektur Unity untuk matriks cameraKomponen yang menciptakan gambar sudut pandang tertentu di tempat kejadian Anda. Output ditarik ke layar atau ditangkap sebagai tekstur. More info
Lihat di Glossary
. Jika kamera juga telah diputar, Anda juga harus membatalkan efek rotasi terlebih dahulu. Untuk mengalihkan matriks Transformasi-Rotasi, mentranspose matriks rotasi 3x3 kiri atas, dan menghitung posisi seperti yang ditunjukkan di bawah ini:

float listenerpos_x = -(L[0] * L[12] + L[ 1] * L[13] + L[ 2] * L[14]);
float listenerpos_y = -(L[4] * L[12] + L[ 5] * L[13] + L[ 6] * L[14]);
float listenerpos_z = -(L[8] * L[12] + L[ 9] * L[13] + L[10] * L[14]);

Sebagai contoh dalam kode untuk plugin Audio Spatializer, lihat garis 215 di WordPress.org.

Kurva audibility

Kecuali Anda menentukan bendera UnityAudioEffectDefinitionFlags_AppliesDistanceAttenuation, sebagaimana ditentukan dalam bagian Memastikan Spasializer Audio Unity, sistem audio Unity masih mengontrol jarak-tarik. Unity menerapkan umur jarak ke suara sebelum memasuki tahap spasialisasi, dan memungkinkan sistem audio untuk mengetahui ketajaman perkiraan sumber. Sistem audio menggunakan ketajaman perkiraan untuk virtualisasi dinamis suara berdasarkan penting untuk mencocokkan batas Max Real Voices yang ditentukan pengguna.

Unity tidak mengambil informasi audibility dari pengukuran tingkat sinyal yang sebenarnya, tetapi menggunakan kombinasi nilai yang dibaca dari kurva atenuasi yang dikendalikan jarak, properti Volume, dan attenuasi yang diterapkan mixer.

Anda dapat langsung menimpa kurva atenuasi, atau Anda dapat menggunakan nilai yang dihitung oleh kurva Sumber Audio sebagai dasar untuk modifikasi. Untuk menimpa atau memodifikasi nilai, gunakan callback di struktur UnityAudioSpatializerData seperti yang ditunjukkan di bawah ini:

typedef UNITY_AUDIODSP_RESULT (UNITY_AUDIODSP_CALLBACK* UnityAudioEffect_DistanceAttenuationCallback)(
    UnityAudioEffectState* state,
    float distanceIn,
    float attenuationIn,
    float* attenuationOut);

Anda juga dapat menggunakan kurva logarimik kustom sederhana, seperti yang ditunjukkan di bawah ini:

UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK SimpleLogAttenuation(
    UnityAudioEffectState* state,
    float distanceIn,
    float attenuationIn,
    float* attenuationOut)
{
    const float rollOffScale = 1.0f; // Similar to the one in the Audio Project Settings
    *attenuationOut = 1.0f / max(1.0f, rollOffScale * distanceIn);
    return UNITY_AUDIODSP_OK;
}

Menggunakan skrip C# dari API Unity

Ada dua metode pada Sumber Audio yang memungkinkan pengaturan dan mendapatkan parameter dari efek spasializer: SetSpatializerFloat dan GetSpatializerFloat. Metode ini bekerja sama dengan metode SetFloatParameter dan GetFloatParameter dalam antarmuka plugin audio asli generik. Namun, SetSpatializerFloat dan GetSpatializerFloat mengambil indeks pada parameter yang harus mereka set atau membaca, sementara SetFloatParameter dan GetFloatParameter merujuk pada parameter dengan nama.

Properti boolean AudioSource.spatializer terkait dengan opsi Spatialize di jendela Inspektur Unity untuk Sumber Audio. Properti mengontrol bagaimana Unity instantiates dan menemukan efek spasializer, berdasarkan plugin yang dipilih di Audio Project SettingsPengumpulan yang luas dari pengaturan yang memungkinkan Anda untuk mengkonfigurasi bagaimana Fisika, Audio, Jaringan, Grafik, Input dan banyak bidang lain dari jangkauan proyek Anda. More info
Lihat di Glossary
Anda.

Jika sekiasi efek spasializer Anda sangat intensif sumber daya, dalam hal memori atau sumber daya lainnya dalam proyek Anda, mungkin efektif untuk mengalokasikan efek spasialisasi Anda dari preset "pool", sehingga Unity tidak perlu membuat instance baru spasializer setiap kali Anda perlu menggunakannya. Jika Anda menjaga antarmuka plugin Unity Anda mengikat efek audio yang sangat ringan dan dinamis, Anda dapat menghindari drop bingkai atau masalah kinerja lainnya dalam proyek Anda.

Batasan yang diketahui dari plugin contoh

Karena algoritma cembung cepat, gerakan cepat menyebabkan beberapa artefak ritsleting, yang dapat Anda hapus melalui penggunaan konvilasi berlipat atau penyangga lintas.

Kode juga tidak mendukung memiringkan kepala pendengar, apakah pendengar langsung melekat pada karakter pemain, atau kamera yang terletak di tempat lain.

Android SDK
Profiler Audio