Dokumen ini menjelaskan antarmuka plugin audio asli bawaan Unity 5.0. Kami akan melakukan ini dengan melihat beberapa plugin contoh tertentu yang tumbuh dalam kompleksitas saat kita bergerak. Cara ini, kami mulai dengan konsep yang sangat dasar dan memperkenalkan lebih banyak kasus penggunaan yang kompleks di dekat akhir dokumen.
Hal pertama yang perlu Anda lakukan adalah untuk Unduh SDK plugin audio terbaru.
Sistem plugin audio asli terdiri dari dua bagian:
Plugin DSP (Digital Signal Processing) asli yang harus diimplementasikan sebagai .dll (Windows) atau .dylib (OSX) di C atau C++. Tidak seperti scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary dan karena tuntutan tinggi pada kinerja ini harus dikompilasi untuk setiap platform yang ingin Anda dukungan, mungkin dengan optimasi spesifik platform.
GUI yang dikembangkan di C#. Perhatikan bahwa GUI adalah opsional, sehingga Anda selalu memulai pengembangan plugin dengan membuat plugin DSP asli dasar, dan biarkan Unity menunjukkan UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary berbasis slider default untuk deskripsi parameter yang diekspos plugin asli. Kami merekomendasikan pendekatan ini untuk bootstrap setiap proyek.
Perhatikan bahwa Anda pada awalnya dapat prototipe file C# GUI sebagai file .cs yang Anda hanya turun ke folder Aset / Editor (hanya seperti script editor lainnya). Kemudian pada Anda dapat memindahkan ini menjadi proyek Visual Studio yang tepat sebagai kode Anda mulai tumbuh dan membutuhkan modularisasi yang lebih baik dan dukungan IDE yang lebih baik. Ini memungkinkan Anda untuk menyusunnya ke dalam .dll, membuat lebih mudah bagi pengguna untuk menjatuhkan ke proyek dan juga untuk melindungi kode Anda.
Juga dicatat bahwa kedua DSP asli dan GUI DLLs dapat mengandung beberapa plugin dan mengikat hanya terjadi melalui nama efek dalam plugin terlepas dari apa file DLL disebut.
Sisi asli dari SDK plugin sebenarnya hanya terdiri dari satu file (AudioPluginInterface.h), tetapi untuk memudahkan untuk memiliki beberapa efek plugin dalam DLL yang sama kami telah menambahkan kode pendukung untuk menangani definisi efek dan pendaftaran parameter dengan cara yang sederhana (AudioPluginUtil.h dan AudioPluginUtil.cpp). Perhatikan bahwa proyek NativePluginDemo mengandung sejumlah plugin contoh untuk memulai dan menunjukkan berbagai jenis plugin yang berbeda yang berguna dalam konteks permainan. Kami menempatkan kode ini di domain publik, jadi jangan ragu untuk menggunakan kode ini sebagai titik awal untuk penciptaan Anda sendiri.
Pengembangan plugin dimulai dengan mendefinisikan parameter yang harus dimiliki plugin Anda. Anda tidak perlu memiliki rencana master rinci dari semua parameter yang plugin akan diletakkan sebelum Anda memulai, tetapi membantu untuk kira-kira memiliki ide tentang bagaimana Anda ingin pengalaman pengguna dan komponen apa yang Anda butuhkan.
Plugin contoh yang kami berikan memiliki banyak fungsi utilitas yang membuatnya mudah Mari kita lihat plugin contoh "Ring Modulator". Plugin sederhana ini menggandakan sinyal masuk dengan gelombang sinus, yang memberikan resepsi radio-noise / rusak yang bagus seperti efek, terutama jika beberapa efek modulasi cincin dengan frekuensi yang berbeda dirantai.
Skema dasar untuk berurusan dengan parameter dalam plugin contoh adalah untuk mendefinisikan mereka sebagai nilai-nilai yang kita gunakan sebagai indeks ke dalam array pelampung untuk kenyamanan dan kekeliruan.
enum Param
{
P_FREQ,
P_MIX,
P_NUM
};
int InternalRegisterEffectDefinition(UnityAudioEffectDefinition& definition)
{
int numparams = P_NUM;
definition.paramdefs = new UnityAudioParameterDefinition [numparams];
RegisterParameter(definition, "Frequency", "Hz",
0.0f, kMaxSampleRate, 1000.0f,
1.0f, 3.0f,
P_FREQ);
RegisterParameter(definition, "Mix amount", "%",
0.0f, 1.0f, 0.5f,
100.0f, 1.0f,
P_MIX);
return numparams;
}
Jumlah dalam panggilan RegisterParameter adalah nilai minimum, maksimum dan default yang diikuti oleh faktor scaling yang digunakan untuk ditampilkan hanya, yaitu dalam kasus nilai persentase dari nilai aktual dari 0 sampai 1 dan disalurkan oleh 100 ketika ditampilkan. Tidak ada kode GUI kustom untuk ini, tetapi seperti yang disebutkan sebelumnya, Unity akan menghasilkan GUI default dari definisi parameter dasar ini. Perhatikan bahwa tidak ada pemeriksaan yang dilakukan untuk parameter yang tidak ditentukan, sehingga sistem AudioPluginUtil mengharapkan bahwa semua nilai enum yang dinyatakan (kecuali P_NUM
) cocok dengan definisi parameter yang sesuai.
Di balik fungsi RegisterParameter mengisi entri di array UnityAudioParameterDefinition dari struktur UnityAudioEffectDefinition yang terkait dengan plugin tersebut (lihat "AudioEffectPluginInterface.h"). Sisa yang perlu diatur dalam UnityAudioEffectDefinition adalah callback ke fungsi yang menangani mengulang plugin (CreateCallback), menetapkan parameter (scenesAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary), melakukan pemrosesan aktual (SetFloatParameterCallback/UnityAudioEffect_GetFloatParameterCallback
) dan akhirnya menghancurkan instance plugin saat dilakukan (UnityAudioEffect_ProcessCallback
).UnityAudioEffect_ReleaseCallback
).
Untuk memudahkan untuk memiliki beberapa plugin di DLL yang sama, setiap plugin direvisi di ruang namanya sendiri, dan konvensi naming khusus untuk fungsi callback digunakan seperti DEFINE_EFFECT
dan makro DECLARE_EFFECT
dapat mengisi struktur UnityAudioEffectDefinition. Di bawah kap semua definisi efek disimpan dalam array yang pointer dikembalikan oleh satu-satunya titik masuk perpustakaan UnityGetAudioEffectDefinitions.
Ini berguna untuk mengetahui jika Anda ingin mengembangkan plugin jembatan yang peta dari format plugin lain seperti VST atau AudioUnits ke atau dari antarmuka plugin audio Unity, di mana Anda perlu mengembangkan cara yang lebih dinamis untuk mengatur deskripsi parameter pada waktu beban.
Hal berikutnya adalah data untuk instance dari plugin. Dalam plugin contoh, kami menempatkan semua ini ke dalam struktur EffectData. Alokasi ini harus terjadi di CreatCallback yang sesuai yang disebut untuk setiap contoh plugin di mixer. Dalam contoh sederhana ini hanya ada satu gelombang sinus yang dikalikan ke semua saluran, plugin lain yang lebih canggih perlu mengalokasikan data tambahan per saluran input.
struct EffectData
{
struct Data
{
float p[P_NUM]; // Parameters
float s; // Sine output of oscillator
float c; // Cosine output of oscillator
};
union
{
Data data;
unsigned char pad[(sizeof(Data) + 15) & ~15];
};
};
UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK CreateCallback(
UnityAudioEffectState* state)
{
EffectData* effectdata = new EffectData;
memset(effectdata, 0, sizeof(EffectData));
effectdata->data.c = 1.0f;
state->effectdata = effectdata;
InitParametersFromDefinitions(
InternalRegisterEffectDefinition, effectdata->data.p);
return UNITY_AUDIODSP_OK;
}
UnityAudioEffectState mengandung berbagai data dari host seperti tingkat pengambilan sampel, jumlah total sampel diproses (untuk waktu), atau apakah plugin dilewati, dan dilewati ke semua fungsi callback.
Dan jelas untuk membebaskan instance plugin ada fungsi yang sesuai juga:
UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK ReleaseCallback(
UnityAudioEffectState* state)
{
EffectData::Data* data = &state->GetEffectData<EffectData>()->data;
delete data;
return UNITY_AUDIODSP_OK;
}
Pemrosesan utama audio terjadi di ProsesCallback:
UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK ProcessCallback(
UnityAudioEffectState* state,
float* inbuffer, float* outbuffer,
unsigned int length,
int inchannels, int outchannels)
{
EffectData::Data* data = &state->GetEffectData<EffectData>()->data;
float w = 2.0f * sinf(kPI * data->p[P_FREQ] / state->samplerate);
for(unsigned int n = 0; n < length; n++)
{
for(int i = 0; i < outchannels; i++)
{
outbuffer[n * outchannels + i] =
inbuffer[n * outchannels + i] *
(1.0f - data->p[P_MIX] + data->p[P_MIX] * data->s);
}
data->s += data->c * w; // cheap way to calculate a sine-wave
data->c -= data->s * w;
}
return UNITY_AUDIODSP_OK;
}
Fungsi GetEffectData di bagian atas hanyalah fungsi helper casting bidang data dari variabel state ke EffectData: Data dalam struktur yang kami deklarasikan di atas.
Plugin sederhana lainnya termasuk adalah plugin NoiseBox, yang menambahkan dan menyisipkan sinyal input dengan kebisingan putih pada frekuensi variabel, atau plugin Lofinator, yang melakukan downsampling sederhana dan permintaan sinyal. Semua ini dapat digunakan dalam kombinasi dan dengan parameter animasi berbasis permainan untuk mensimulasikan apa pun dari ponsel ke penerimaan radio yang buruk pada walkies, pengeras suara yang rusak dll.
StereoWidener, yang menentukan sinyal input stereo ke dalam komponen mono dan samping dengan penundaan variabel dan kemudian rekombines ini untuk meningkatkan efek stereo yang dirasakan.
Plugin audio asli menggunakan skema yang sama dengan plugin asli atau dikelola lainnya di dalamnya mereka harus dikaitkan dengan platform masing-masing melalui pengelola plugin 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. Anda dapat membaca lebih banyak tentang subfolder di mana untuk menempatkan plugin here. asosiasi platform diperlukan sehingga sistem tahu plugin mana yang termasuk pada setiap target build di build yang berdiri sendiri, dan dengan pengenalan dukungan 64-bit ini bahkan harus ditentukan dalam platform. Plugin OSX khusus dalam hal ini karena format Biner Universal memungkinkan mereka untuk mengandung varian 32 dan 64 bit dalam bundel yang sama.
Plugin asli di Unity yang disebut dari kode yang berhasil dimuat melalui atribut [DllImport] merujuk fungsi yang diimpor dari DLL asli. Namun, dalam kasus plugin audio asli hal-hal berbeda. Masalah khusus yang muncul di sini adalah bahwa plugin audio perlu dimuat sebelum Unity mulai menciptakan aset mixer yang mungkin memerlukan efek dari plugin. Dalam editor ini tidak ada masalah, karena kita hanya dapat memuat ulang dan membangun kembali mixer yang tergantung pada plugin, tetapi dalam membangun plugin harus dimuat sebelum kami membuat aset mixer. Untuk memecahkan ini, konvensi saat ini adalah untuk memperbaiki DLL dari plugin “audioplugin” (case insensitif) sehingga sistem dapat mendeteksi ini dan menambahkannya ke daftar plugin yang akan secara otomatis dimuat pada awal. Ingat bahwa hanya definisi di dalam plugin yang menentukan nama efek yang muncul di dalam mixer Unity, sehingga DLL dapat disebut apa pun, tetapi perlu memulai dengan string "audioplugin" untuk terdeteksi seperti itu.
Untuk platform seperti IOS kode plugin perlu dihubungkan secara statis ke biner Unity yang diproduksi oleh proyek XCode yang dihasilkan dan ada - seperti perangkat rendering plugin - pendaftaran plugin harus ditambahkan secara eksplisit ke kode startup aplikasi.
Pada OSX satu bundel dapat mengandung versi 32- dan 64 bit dari plugin. Anda juga dapat membaginya untuk menghemat ukuran.
Sekarang mari kita lihat sesuatu yang sedikit lebih maju: Efek untuk equalisasi dan multiband compressionMetode menyimpan data yang mengurangi jumlah ruang penyimpanan yang dibutuhkan. Kompresi Tekstur, Kompresi Animasi, Kompresi Audio, Membangun Kompresi.
Lihat di Glossary. Plugin seperti itu memiliki sejumlah parameter yang jauh lebih tinggi daripada plugin sederhana yang disajikan di bagian sebelumnya dan juga ada beberapa kopling fisik antara parameter yang memerlukan cara yang lebih baik untuk memvisualisasikan parameter daripada hanya banyak slider sederhana. Pertimbangkan equalizer misalnya: Setiap band memiliki 3 filter yang berbeda yang secara kolektif berkontribusi pada kurva equalisasi akhir dan masing-masing filter ini memiliki frekuensi 3 parameter, Q-factor dan gain yang secara fisik terkait dan menentukan bentuk setiap filter. Jadi membantu pengguna banyak, jika plugin equalizer memiliki tampilan besar yang bagus menunjukkan kurva yang dihasilkan, kontribusi filter individu dan dapat dioperasikan dengan cara seperti itu beberapa parameter dapat diatur secara bersamaan dengan operasi seret sederhana pada kontrol daripada mengubah slider satu pada waktu.
GUI kustom dari plugin Equalizer. Seret tiga band untuk mengubah keuntungan dan frekuensi kurva filter. Tahan bergeser ke bawah sambil menyeret untuk mengubah bentuk setiap band.
Jadi sekali lagi, definisi, penginisialisasi, deinitialisasi dan penanganan parameter mengikuti metode berbasis um yang sama persis yang digunakan plugin sederhana, dan bahkan kode ProcessCallback agak pendek. Nah, waktu untuk berhenti melihat kode asli dan membuka proyek AudioPluginDemoGUI.sln di Visual Studio. Di sini Anda akan menemukan kelas C# terkait untuk kode GUI. Cara kerjanya sederhana: Setelah Unity telah memuat plugin asli DLLs dan mendaftarkan plugin audio yang terkandung, itu akan mulai mencari GUI yang sesuai dengan nama plugin yang terdaftar. Ini terjadi melalui properti Nama dari kelas EqualizerCustomGUI yang, seperti semua plugin kustom GUIs, harus mengherit dari IAudioEffectPluginGUI. Hanya ada satu fungsi penting di dalam kelas ini yang bool OnGUI (IAudioEffectPlugin plugin) fungsi. Melalui argumen plugin IAudioEffectPlugin fungsi ini mendapat pegangan pada plugin asli yang dapat digunakan untuk membaca dan menulis parameter yang plugin asli telah didefinisikan. Jadi untuk membaca parameter yang panggilannya:
plugin.GetFloatParameter("MasterGain", out masterGain);
yang kembali benar jika parameter ditemukan, dan untuk mengaturnya, panggilan:
plugin.SetFloatParameter("MasterGain", masterGain);
yang juga kembali benar jika parameter ada. Meme it Dan pada dasarnya mengikat yang paling penting antara kode GUI dan asli. Anda juga dapat menggunakan fungsi
plugin.GetFloatParameterInfo("NAME", out minVal, out maxVal, out defVal);
untuk mengukur parameter "NAMA" untuk nilai minimum, maksimum dan default untuk menghindari definisi duplikat ini dalam kode asli dan UI. Perhatikan bahwa jika fungsi OnGUI Anda kembali benar, Inspektur akan menunjukkan slider UI default di bawah GUI kustom. Ini lagi berguna untuk bootstrap perkembangan GUI Anda karena Anda memiliki semua parameter yang tersedia sambil mengembangkan GUI kustom Anda dan memiliki cara mudah untuk memeriksa bahwa tindakan yang tepat dilakukan pada hasil dari perubahan parameter yang diharapkan.
Kami tidak akan membahas rincian tentang pemrosesan DSP yang akan berada di plugin Equalizer dan Multiband di sini, bagi mereka yang tertarik, filter diambil dari Robert Bristow Johnson Audio EQ Cookbook yang sangat baik dan untuk plot kurva Unity menyediakan beberapa fungsi API internal untuk menggambar kurva antialias untuk respons frekuensi.
Satu lagi hal untuk menyebutkan meskipun adalah bahwa kedua plugin Equalizer dan Multiband juga menyediakan kode untuk overlay input dan spektral output untuk memvisualisasikan efek dari plugin, yang membawa titik yang menarik: Kode GUI berjalan pada tingkat pembaruan yang jauh lebih rendah (nilai bingkai) dari pemrosesan audio dan tidak memiliki akses ke aliran audio, sehingga bagaimana kami membaca data ini? Untuk ini, ada fungsi khusus untuk ini dalam kode asli:
UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK GetFloatParameterCallback(
UnityAudioEffectState* state,
int index,
float* value,
char *valuestr)
{
EffectData::Data* data = &state->GetEffectData<EffectData>()->data;
if(index >= P_NUM)
return UNITY_AUDIODSP_ERR_UNSUPPORTED;
if(value != NULL)
*value = data->p[index];
if(valuestr != NULL)
valuestr[0] = 0;
return UNITY_AUDIODSP_OK;
}
Ini hanya memungkinkan membaca array data floating-point dari plugin asli. Apa pun data itu, sistem plugin tidak peduli, selama permintaan tidak terlalu lambat UI atau kode asli. Untuk kode Equalizer dan Multiband ada kelas utilitas yang disebut FFTAnalyzer yang memudahkan feed dalam input dan output data dari plugin dan mendapatkan spektrum kembali. Data spektrum ini kemudian diampirkan oleh GetFloatBufferCallback dan diserahkan ke kode UI C #. Alasan bahwa data harus diresampled adalah bahwa FFTAnalyzer menjalankan analisis pada resolusi frekuensi tetap sementara GetFloatBufferCallback hanya mengembalikan jumlah sampel yang diminta, yang ditentukan oleh lebar tampilan yang menampilkan data. Untuk plugin yang sangat sederhana yang memiliki sejumlah kode DSP minimal yang mungkin Anda juga melihat plugin CorrelationMeter, yang hanya me plot amplitudo saluran kiri terhadap amplitudo saluran kanan untuk menunjukkan "bagai stereo" sinyal.
Kiri: GUI Khusus Korelasi Login
Kanan: Equalizer GUI dengan analisis spektrum overlaid ( kurva hijau adalah sumber, merah diproses).
Pada titik ini kita juga ingin menunjukkan bahwa efek Equalizer dan Multiband disimpan secara sengaja sederhana dan tidak dioptimalkan, tetapi kami pikir mereka berfungsi sebagai contoh yang baik dari UI yang lebih kompleks yang didukung oleh sistem plugin. Ada banyak pekerjaan masih dalam melakukan optimasi spesifik platform yang relevan, ton parameter tweak untuk membuatnya jatuh benar-benar tepat dan merespon dengan cara yang paling musik dll.... Kami juga dapat menerapkan beberapa efek ini sebagai plugin built-in di Unity pada beberapa titik hanya untuk kenyamanan meningkatkan repertoire standar Unity, tetapi kami dengan tulus berharap bahwa pembaca juga akan mengambil tantangan untuk membuat beberapa plugin yang benar-benar mengagumkan - dan yang tahu, mereka mungkin pada beberapa titik berakhir sebagai plugin built-in.;-)
Convolution reverb contoh plugin. Respon impuls adalah menentukan kebisingan acak, didefinisikan oleh parameter. Ini hanya untuk tujuan demonstrasi, sebagai plugin produksi harus memungkinkan pengguna untuk memuat impuls yang direkam sewenang-wenang, algoritma konveksi yang mendasari tetap sama tidak pernah.
Contoh tingkat pengukuran alat pemantauan kekerasan pada skala 3 waktu yang berbeda. Juga hanya untuk tujuan demonstrasi, tetapi tempat yang baik untuk mulai membangun alat monitor yang sesuai dengan standarisasi kekeringan modern. Kode rendering kurva dibangun menjadi Unity.
Waktu untuk beberapa latihan menyenangkan. Mengapa tidak menggunakan sistem plugin untuk menghasilkan suara bukan hanya memprosesnya? Mari kita coba untuk melakukan beberapa bassline sederhana dan drum synthesizers yang harus akrab bagi orang-orang yang mendengarkan asam trance - beberapa klon sederhana dari beberapa sintetik utama yang mendefinisikan genre ini. Plugin_TeeBee.cpp Sinst sederhana ini hanya menghasilkan pola dengan catatan acak dan memiliki beberapa parameter untuk mengubah filter, amplop dan sebagainya di mesin sintesis. Sekali lagi, kita tidak akan membahas rincian tersebut di sini, tetapi hanya menunjukkan bahwa state->dsptick parameter dibaca di ProcessCallback untuk menentukan posisi di "song". Counter ini adalah posisi sampel global, jadi kami hanya membaginya dengan panjang setiap catatan yang ditentukan dalam sampel dan api acara catatan ke mesin sintesis ketika divisi ini memiliki sisa nol. Cara ini, semua efek plugin tetap disinkronkan ke jam berbasis sampel yang sama, dan jika Anda akan misalnya memainkan sepotong musik yang telah ditentukan dengan tempo yang diketahui melalui efek tersebut, Anda dapat menggunakan info waktu untuk menerapkan efek filter tempo-synchronized atau penundaan musik.
SDK plugin audio asli adalah fondasi SDK Spatialization yang memungkinkan mengembangkan efek spasialisasi kustom yang sesaat per audio sourceKomponen yang memainkan kembali Klip Audio dalam adegan ke pendengaran audio atau melalui mixer audio. More info
Lihat di Glossary. Informasi lebih lanjut tentang ini dapat ditemukan here.
Ini hanya awal upaya untuk membuka bagian sistem suara untuk berkinerja tinggi kode asli. Kami memiliki rencana untuk mengintegrasikan ini di bagian lain dari Unity serta untuk membuat efek yang dapat digunakan di luar mixer serta memperluas SDK untuk mendukung jenis parameter lain daripada mengapung dengan dukungan untuk GUI default yang lebih baik serta penyimpanan data biner.
Memiliki banyak menyenangkan membuat plugin Anda sendiri. Harapan untuk melihat mereka pada asset storeSebuah perpustakaan yang berkembang dari aset gratis dan komersial yang diciptakan oleh Unity dan anggota komunitas. Menawarkan berbagai aset, dari tekstur, model dan animasi ke seluruh contoh proyek, tutorial dan ekstensi Editor. More info
Lihat di Glossary. ;-)
Meskipun ada banyak kesamaan dalam desain, SDK audio asli Unity tidak dibangun di atas SDK plugin lain seperti Steinberg VST atau Apple AudioUnit. Perlu disebutkan bahwa itu akan mudah bagi pembaca yang tertarik untuk menerapkan pembungkus dasar untuk ini menggunakan SDK ini yang memungkinkan menggunakan plugin tersebut untuk digunakan dalam Unity. Hal ini bukan salah satu tim Unity yang bertujuan untuk dilakukan. Hosting yang tepat dari setiap plugin dengan cepat mendapatkan sangat kompleks, dan berurusan dengan semua selisih pesanan panggilan yang diharapkan dan menangani jendela GUI kustom yang didasarkan pada kode asli dengan cepat tumbuh dengan lompatan dan batas yang membuatnya kurang berguna sebagai kode contoh.
Meskipun kita memahami bahwa itu berpotensi cukup berguna untuk memuat plugin VST atau AU Anda atau bahkan efek untuk hanya memomunikkan / menguji desain suara, ingatlah bahwa menggunakan VST / AU juga membatasi Anda untuk beberapa platform tertentu. Potensi menulis plugin audio berdasarkan SDK Unity adalah bahwa itu meluas ke semua platform yang mendukung pencampuran perangkat lunak dan kode asli yang dimuat secara dinamis. Yang mengatakan, ada kasus penggunaan yang valid untuk memotivasi desain suara awal dengan alat favorit Anda sebelum memutuskan untuk mencurahkan waktu untuk mengembangkan plugin kustom (atau hanya dapat menggunakan plugin metering di editor yang tidak mengubah suara dengan cara apa pun), jadi jika ada yang ingin membuat solusi yang bagus untuk itu, silakan lakukan.
2018-10-19 Login
MonoDevelop digantikan oleh Visual Studio dari 2018.1