Anotasi
Halo semuanya. Artikel ini adalah yang pertama dari seri tentang topik menghasilkan konten berdasarkan musik dan suara. Pada kenyataannya, generasi seperti itu adalah tugas teknis yang agak rumit, oleh karena itu materi ini akan menjadi pengantar, lebih fokus pada desain game dan pemahaman umum tentang subjek, setelah itu kita akan membenamkan diri dalam aspek teknis dari topik ini.
Dalam artikel ini kami akan mempertimbangkan genre permainan tertentu di mana konten dihasilkan berdasarkan suara dan musik. Teori umum suara tidak akan diberikan di sini, tetapi dalam materi Anda dapat menemukan tautan ke sumber informasi dan deskripsi singkat tentang istilah yang akan kami gunakan. Materi, meskipun berisi informasi teknis tentang teori dan pemrograman suara, dirancang untuk audiens pemula. Ilustrasi dibuat sendiri dan, karena saya bukan seorang seniman, tolong jangan menganggapnya serius, mereka diperlukan hanya untuk pemahaman materi yang lebih baik. Selamat membaca!
Pendahuluan
Generasi prosedural yang didasarkan pada musik dalam permainan video adalah topik yang, bagi saya pribadi, selalu diselimuti sentuhan mistisisme tertentu. Ada sesuatu yang luar biasa dalam bagaimana bentuk suara tidak hanya divisualisasikan, tetapi juga secara langsung mempengaruhi gameplay. Itu semua terlihat aneh, tapi sangat menyenangkan. Itulah sebabnya game semacam itu memiliki audiens yang kecil tetapi stabil. Steam menambahkan tag terpisah untuk game-game ini: “Generasi berdasarkan musik” dan “Game ritme”. Saat ini, tag ini dapat ditemukan sekitar 200 proyek, meskipun ada lebih banyak game yang menggunakan mekanisme ini.
Faktanya, generasi berbasis suara memberikan ruang lingkup tak terbatas untuk pengembangan gameplay, tetapi sejauh ini ide-ide seperti itu tetap menjadi takdir proyek indie, sementara di game AAA (dengan pengecualian Guitar Hero) percobaan seperti itu tidak berlaku karena ketidakstabilan dan ketidaknormalan gameplay mereka .
Contoh proyek bagus
Sebelum beralih ke esensi generasi berbasis suara (jangan bingung dengan generasi suara!), Saya ingin memberikan contoh-contoh permainan yang sukses yang menggunakan mekanik yang sama. Jika Anda belum memainkannya, cobalah! Anda mungkin belum pernah melihat ini sebelumnya. Banyak dari proyek ini telah menerima penghargaan dari pemain dan pers.
Sebenarnya, generasi murni hanya digunakan di Audiosurf. Sisa gim yang saya gunakan salah satu dari elemen-elemennya. Beberapa game lebih fokus pada pelacakan bit, beberapa pada volume trek, dll.
Proyek-proyek semacam itu sangat sulit untuk dievaluasi dengan tangkapan layar atau deskripsi, jadi jika Anda tidak punya waktu untuk bermain, tonton saja videonya di YouTube.
Audiosurf

Bagi banyak pemain, Audiosurf adalah game pertama yang menggunakan generasi konten berbasis musik. Proyek ini dibuat oleh pengembang independen Invisible Handlebar - perusahaan Dylan Fiterer. Ketika Audiosurf muncul di Steam, pasar ini baru saja mulai berkembang, dan tingkat pertumbuhan mengerikan saat ini masih jauh. Audiosurf terlihat sangat segar dan tidak biasa, di samping itu, itu adalah game pertama di Steam (kecuali untuk game Valve), yang berisi pencapaian!
Slogan Audiosurf - "Ride your music" - sangat akurat mencerminkan gameplay: berdasarkan trek musik Anda, trek yang Anda butuhkan untuk mengemudi dibuat. Gim ini memperhitungkan kecepatan lintasan, perubahan dinamis (peningkatan dan penurunan volume) dan bit. Di dalamnya Anda dapat menggunakan genre musik yang berbeda dan menggabungkannya dengan mode permainan yang berbeda. Selain itu, setiap lagu memiliki tabel catatan sendiri, dan Anda mungkin akan terkejut mengetahui bahwa "Death metal undeground" favorit Anda didengarkan oleh sepuluh orang lagi.

Sayangnya, dalam statika Audiosurf tidak dirasakan. Perlu bermain.
Berbicara tentang gameplay, Audiosurf luar biasa. Misalnya, jika trek dimulai dengan pengantar yang tenang, perahu Anda perlahan-lahan merayap naik, tetapi ketika tekstur musik menjadi lebih jenuh dan bertubuh penuh, kecepatan meningkat dan Anda bergegas turun setiap saat. Yang disebut Drop sangat dirasakan dengan baik, di mana suara "terputus" di tengah pengembangan, dan kemudian kembali pada saat klimaks. Drum kit yang beragam dapat mengubah trek Anda menjadi jalan berbukit, serta memengaruhi spesial. efek. Selain itu, blok yang harus Anda kumpulkan saat melewati jejak yang dihasilkan juga ditempatkan di bawah bit.
10 tahun telah berlalu sejak rilis game, tetapi masih sangat populer di kalangan pemain. Saat ini, dua bagian dari permainan dirilis, dan pengembang Dylan Fitterer terus mengembangkan ide-idenya dan menciptakan Audioshield, di mana Anda menangkis blok realitas virtual yang terbang ke arah Anda di bawah ketukan bit.
Kami merekomendasikan bermain di trek seperti:
- System of a Down - Chop Suey!
- Martin Garrix - Hewan
- Skrillex - Bangarang
Bagikan lagu favorit Anda untuk Audiosurf di komentar!
Permainan bisa dibeli di Steam .
Atasi bahaya
Dalam proyek ini, pencipta mengambil mekanik standar Shoot'em dan menambahkan analisis trek musik Anda di sana. Ternyata sangat keren. Musik memengaruhi segalanya: kekuatan kapal Anda, jumlah lawan, kecepatan keseluruhan permainan. Yang terbaik dari semuanya, permainan dapat dirasakan dengan musik, di mana ada transisi tajam dari keheningan ke suara yang kuat, maka layar Anda hanya meledak dari efeknya, dan kapal mulai menembak dalam sinar yang sangat besar.
Gim ini memiliki mekanik yang cukup kaya, beberapa mode dan bos besar. Secara umum, semua yang Anda butuhkan untuk bersenang-senang!

Kami merekomendasikan bermain di trek seperti:
- The Prodigy - Invaders Must Die!
- Jamur Terinfeksi - Legenda Black Shawarma
- Daft Punk - Kontak
Tulis di komentar yang paling Anda sukai untuk menghancurkan kapal musuh!
Permainan bisa dibeli di Steam .
Soundodger +
Permainan ini adalah semacam campuran dari Beat Hazzard dan Super Hexagon yang populer. Inti dari gameplay adalah Anda harus menghindari objek yang aktivitasnya tergantung pada trek musik Anda. Prosesnya sangat rumit dan karenanya - sangat mengasyikkan.

Permainan bisa dibeli di Steam .
Crypt dari necrodancer
Gim yang dengan gila mentransfer irama dengan akurat dan membuat Anda menari dengan gamepad. Crypt of the NecroDancer adalah proyek Roguelike di mana Anda dan monster harus bergerak secara ketat ke musik. Jika Anda tidak mengikuti ritme permainan, Anda akan dikenakan denda saat bergerak. Seluruh lokasi pada saat yang sama berdenyut dengan irama, yang menciptakan suasana yang tidak nyata. Soundtrack ini ditulis oleh Danny Baranowsky (Super Meat Boy, The Binding of Isaac) yang terkenal. Ngomong-ngomong, gim ini mendukung tikar dansa!

Permainan bisa dibeli di Steam .
Tanda hubung geometri
Ini adalah pelari yang sangat hardcore di mana Anda mengandalkan tidak hanya pada reaksi Anda, tetapi juga pada rasa irama, karena semua rintangan dipukuli dengan jelas dan pada akhir trek (jika Anda mencapai) Anda sudah bergerak pada level intuitif. Sebenarnya, tidak ada generasi seperti itu, tetapi pengembang menggunakan analisis trek musik untuk membangun level dengan lebih baik.

Seperti hampir semua gim genre ini, Geometry Dash terlihat sangat cerah
Permainan bisa dibeli di Steam .
Beatbuddy: kisah para wali
Platformer musik yang megah, aksi yang terjadi di dunia bawah laut, hidup di bawah ketukan ayunan elektro yang cerah. Setiap makhluk dalam game ini menghasilkan suaranya sendiri. Krabik mengetuk ketukan cepat, anemon bertanggung jawab atas laras ... Pada saat yang sama, karakter utama dapat memengaruhi penghuni dunia dan mengubah musik dan gameplay itu sendiri. Untuk permainan, trek musisi seperti Parov Stelar, Austin Wintory, Sabrepulse dan La Rochelle Band digunakan.

Permainan bisa dibeli di Steam .
Setelah kami terinspirasi oleh proyek-proyek yang sangat baik, kami dapat melanjutkan untuk mempelajari pertanyaan "bagaimana cara kerjanya?"
Opsi suara dasar
Opsi Audio Analog
Karena topik yang dipilih tidak terlalu sederhana dan mengandung banyak aspek teknis, saya memutuskan untuk tidak mengembang artikel dengan teori, tetapi untuk mendefinisikan konsep dasar. Jika Anda ingin mempelajari teori suara lebih dekat, maka pada Habr ada banyak artikel tentang topik ini. Di akhir artikel Anda akan menemukan banyak tautan bermanfaat.
Parameter dasar suara kami akan mencakup yang berikut:
- Frekuensi atau nada gelombang suara, Hz
- Amplitudo gelombang suara atau volume suara, dB
- Koefisien atenuasi adalah tingkat penurunan amplitudo dari waktu ke waktu.
- Bentuk gelombang - tampilan umum gelombang suara. Dengan menggunakan parameter ini, Anda dapat membagi suara menjadi beberapa kelompok (tajam, halus, derau, dll.)
Untuk lebih jelasnya, saya mengutip karakteristik utama gelombang suara dalam grafik berikut (unit tidak diatur, saya minta maaf):

Suara keras dengan amplitudo besar

Suara tenang dengan amplitudo kurang

Nada tinggi, frekuensi tinggi

Suara rendah dengan frekuensi lebih sedikit

Suara keras dan tinggi (jaga telinga Anda!)
Secara umum, data ini cukup untuk mendapatkan pemahaman yang cukup tentang suara apa itu dan melanjutkan. Tetapi jika Anda tertarik pada topik ini, maka, tentu saja, Anda perlu mempelajarinya lebih dalam.
Opsi Audio Digital
Saat menulis game dan program lain, kami akan bekerja dengan bentuk suara digital. Suara digital diperoleh dengan mengambil sampel (membagi menjadi titik-titik kecil dalam waktu), kuantisasi (pembulatan ke tingkat tertentu) dan pengkodean (sebenarnya, mengubah suara menjadi nol dan yang). Anda dapat menemukan banyak informasi tentang topik ini di artikel Theory of Sound. Apa yang perlu Anda ketahui tentang suara untuk bekerja dengannya. Pengalaman Yandex.Music , yang sangat saya sukai. Di sana Anda akan menemukan informasi tentang mengukur volume dan deskripsi filter yang akan saya sebutkan.
Hal utama yang perlu kita ketahui tentang sinyal digital adalah:
Laju pengambilan sampel - menandakan seberapa akurat suara Anda akan didigitalkan. Misalnya, ketika kita mengatakan bahwa laju sampling adalah 44,1 kHz, ini berarti bahwa sinyal diukur 44.100 kali dalam satu detik. Saat ini, laju sampel yang paling umum adalah 44,1 kHz dan 48 kHz.
Kedalaman sinyal digital - mencirikan seberapa lebar rentang dinamis "pas" ke digital Anda. Ini diukur dalam bit dan biasanya 16, 24 dan 32 bit. Rentang dinamis adalah perbedaan antara suara paling keras dan paling tenang, dinyatakan dalam desibel. Misalnya, untuk sinyal 8-bit adalah 48 dB, untuk sinyal 16-bit adalah 96 dB, untuk sinyal 24-bit adalah 144 dB, dan untuk sinyal 32-bit adalah 192 dB.
Bitrate adalah apa yang dilihat oleh semua pengguna internet pada tahun 2002 ketika mereka mengunduh musik. Bitrate adalah jumlah bit yang digunakan untuk mengirim atau memproses data per unit waktu. Dalam format streaming video dan audio (misalnya, MPEG dan MP3) yang menggunakan kompresi dengan kehilangan kualitas, parameter "bitrate" menyatakan rasio kompresi aliran.
Selain parameter suara itu sendiri, kita dapat menggunakan informasi yang disembunyikan dalam file suara itu sendiri. Informasi ini biasanya disebut Tag dan setiap format file memiliki format tag sendiri. Kami akan berbicara tentang file mp3 sebagai yang paling umum.
Tag paling mudah dibaca menggunakan pustaka siap pakai, misalnya menggunakan TagLib .
Format mp3 berisi metadata dalam struktur ID3-nya, di mana kita dapat menyimpan banyak informasi. Ada beberapa opsi untuk format ID3, tetapi kita akan berbicara tentang ID3 v2.3, di mana Anda dapat menyimpan sebagian besar data. Dari informasi yang berguna Anda perlu memperhatikan: nama, tahun rekaman, genre, BPM (jumlah ketukan per menit), durasi trek . Bagaimana bidang ini dapat membantu kami saat menghasilkan konten? Jika semuanya jelas dengan BPM, ini digunakan selama pembuatan setiap saat dan kita akan membicarakannya secara terpisah, lalu mengapa kita perlu bidang lain? Di sini Anda perlu menunjukkan imajinasi.
Misalnya, kita membaca genre dan tahun. Untuk memulainya, kita perlu sedikit memproses informasi ini. Untuk kesederhanaan, kami hanya akan mempertimbangkan bahasa Inggris. Tag Mp3 (dan tag lain) sering diisi secara manual, dari sini ikuti ejaan genre yang berbeda, tanda baca yang berbeda, dll. Lebih baik membawa tag yang dihasilkan ke format tunggal sehingga lebih mudah untuk dibandingkan dengan yang lain. Dianjurkan untuk menghapus semua tanda baca, spasi, dan mengonversi string menjadi huruf kecil. Ini dapat dilakukan dengan menggunakan ekspresi reguler.
Setelah manipulasi seperti itu, akan lebih mudah bagi Anda untuk membandingkan genre lagu. Selanjutnya, Anda perlu membuat basis genre, berdasarkan beberapa sumber, dan melewatinya untuk mengkompilasi database tag Anda. Berikut adalah contoh daftar semua genre: musicgenreslist.com . Tentu, Anda hanya perlu memilih yang paling dasar.
Saya tidak menjawab, mengapa kesulitan seperti itu? Saya akan memberikan contoh (sangat disederhanakan).
Berdasarkan genre kita dapat:
- Ubah lokasi (hutan rock-suram, musik elektronik - ruang, negara - gurun, kota pop, dll.)
- Ubah karakter
- Ubah musuh, dll.

Contoh karakter berdasarkan tag rock, electro, pop.
Dan kemudian Anda dapat menemukan apa pun! Tahun rilis album: 1960-1970? Pakaian karakter dalam pakaian periode ini. Durasi trek 10 menit? Biarkan "ular yang dihasilkan secara musik" Anda memiliki ekor yang panjang. Ada banyak peluang, dan selalu ada peluang untuk mengejutkan pemain.
Representasi file audio dalam Unity

Segalanya tampak sederhana ...
Unity memiliki beberapa komponen utama untuk bekerja dengan suara:
- Audio Listener (pendengar) berperilaku seperti mikrofon. Ia menerima input dari sumber suara apa pun (Sumber Audio) dalam adegan dan memutar suara melalui speaker. Untuk sebagian besar aplikasi, masuk akal untuk menambahkan pendengar ke kamera utama - objek Kamera Utama.
- Sumber Audio memutar Klip Audio di adegan. Jika Klip Audio adalah klip 3D, sumber diputar dalam posisi tertentu di ruang dan akan dibisukan tergantung pada jarak.
- Klip Audio (klip) berisi data audio yang digunakan dalam sumber audio. Unity mendukung aset audio mono, stereo, dan multi-channel. Unity dapat mengimpor jenis file berikut: .aif, .wav, .mp3, dan .ogg.

Jika Anda sangat tenggelam dalam bekerja dengan suara, Anda perlu berinteraksi langsung dengan klip audio. Klip audio berisi larik bingkai suara (sampel) yang dapat Anda baca dan timpa. Dengan ini (dan banyak matan) Anda dapat menentukan parameter trek suara dan membuat efek suara.
Pengaturan Track Musik
Jadi, kami membaca beberapa data awal dari trek kami dan kami mendapatkan dasar generasi pertama. Sekarang Anda dapat beralih ke bagian yang lebih sulit. Kita perlu memahami parameter dinamis apa dari trek yang dapat kita tentukan dan bagaimana mereka dapat digunakan dalam gameplay. Bagian dari materi didasarkan pada blog studio Parallelcube . Orang-orang membuat aset dan tutorial untuk Unreal Engine, yang banyak terima kasih kepada mereka.
Tugas-tugas berikut dapat dibedakan:
- Mendefinisikan barel sebagai pemicu efek khusus
- Menentukan momen hening dan nyaring di trek
- Menggunakan data ini untuk membangun level
- Menggunakan data ini untuk membuat efek
Mendeteksi kick drum di trek dan menggunakan suara ini sebagai pemicu.
Untuk mulai bekerja menentukan parameter trek, Anda harus memilih musik. Untuk membuatnya lebih mudah untuk bekerja, Anda perlu trek di mana ada laras yang jelas dan, lebih disukai, transisi volume yang tajam. Saya memilih trek Perturbator - Future Club , yang dapat Anda dengar di game Hotline Miami 2: Wrong Number.
Berikut ini adalah analisis kecil tentang entri trek ini (trek audio telah dipersingkat secara khusus)

- Yang disebut fade in, atau pengantar. Pada saat ini, trek naik volumenya.
- Kekuatan guncangan utama muncul - laras. Saat-saat penampilan laras sangat mudah dibaca pada representasi visual dari trek audio. Selain itu, synthesizer latar belakang berbunyi di sini, dan suaranya terlihat di trek. Jika trek tidak dikompresi, itu akan menjadi lebih jelas. (detail tentang kompresi di sini )
- Sebuah synthesizer tambahan muncul, yang sedikit mengikis kejelasan representasi visual laras
- Jeda yang muncul sebelum momen cerah di trek (drop).
- Bagian utama, di mana, selain laras, synthesizer bass muncul, yang sangat mendistorsi representasi visual dari sinyal, tetapi laras masih dapat dibedakan.
Jadi, tugas utama kita adalah menentukan pada titik apa laras suara kita. Ini adalah tugas yang agak sulit, dimana perpustakaan audio khusus biasanya digunakan. Ingat, jika ada opsi yang sudah jadi, dan Anda memiliki tujuan untuk membuat efek, dan tidak mempelajari matras. sebagian, ambil opsi yang sudah jadi. Jika game Anda memiliki anggaran dan tambahan $ 25, maka Anda dapat membeli aset khusus dari pengembang 3y3net, yang disebut Beat Detection . Selain itu, Anda dapat mempertimbangkan opsi hebat dari pengembang Allan Pichardo . Jika Anda ingin memahami cara kerja algoritma seperti itu, maka, tentu saja, tulis sendiri dari awal.
Seperti yang kita lihat dari trek audio, irama selalu jelas dibedakan oleh tingkat suara. Inilah esensinya. Musisi secara khusus memproses dan mengompres trek sehingga ketukan tidak menjadi tersumbat dengan suara lain dan memiliki tempatnya di rentang frekuensi trek. Bit selalu lebih keras daripada tingkat volume rata-rata (Rata-rata). Jika suaranya lebih keras dari ambang batas tertentu (ambang batas), maka kita, hanya dengan melihat tampilan grafik dari gelombang suara, kita dapat mengatakan dengan percaya diri "Ya, ini sedikit!".

Saya ingin mengeluarkan deskripsi teknis yang lebih rinci dan algoritma spesifik untuk menentukan sedikit dalam artikel yang terpisah (akan diposting setelah beberapa saat), karena topik ini jauh melampaui ruang lingkup materi ini. Singkatnya, dalam algoritma tersebut, suara pertama kali melewati filter untuk membuatnya lebih mudah untuk diproses, setelah itu dinamika energi suara dianalisis. Berikut ini adalah contoh dari algoritma semacam itu (perhatian, matlab!) .
Deskripsi matematis lengkap dari algoritma ini dapat ditemukan di artikel ini: Desain dan implementasi algoritma Beat Detector .
Oleh karena itu, mari kita bayangkan bahwa kami dapat menulis skrip yang menentukan secara real time pada titik apa per barel tendangan. Selain itu, dengan bantuan algoritme, kami juga dapat menentukan BPM umum dan memahami di mana ritme utama “berdetak” bersama kami. Apa yang dapat kita lakukan dengan informasi yang diterima?
Anda dapat mengambil Beathazard sebagai contoh dan memastikan bahwa untuk setiap irama ritme utama kapal kami menembak dengan laser konvensional biasa, dan ketika larasnya mengenai sasaran, kami menembak dengan laser super. Akan terlihat seperti ini:

Selain itu, kami dapat menambahkan lebih banyak spesial. efek. Dan buat level berdenyut bersama dengan bit:

Algoritma yang sama yang menentukan bit secara real time, dapat kita gunakan untuk menghitung BPM (denyut per menit atau jumlah denyut per menit). Informasi BPM dapat digunakan, misalnya, untuk menghasilkan tingkat kesulitan dan menghitung poin bonus. Jika lintasan cepat (150 - 180 BMP), maka pemain menerima bonus X5, dll.
Menentukan momen hening dan nyaring di trek
Salah satu cara untuk menentukan momen keras dan sunyi adalah dengan memproses trek dengan filter low-pass dan mendapatkan rata-rata bergerak untuk level volume. Setelah itu, kita dapat menyimpan level volume ini dalam format yang nyaman bagi kita, misalnya, dalam array float.
, . , , , . , . , .

.
, , , , ( ). , , 2D-? . :

3D, 2D . , Audiosurf , .

Elastomania, ? !?
, , , - .
Kesimpulan
, , . , , , , . , , , . , , . Unity. !
Tautan yang bermanfaat