Gambar musik: Tari peti mati di Pure Data

Pemrograman dan Memes


Pemrograman adalah proses di ambang sains dan kreativitas. Tanpa program yang dirancang dengan baik, komputer adalah unit yang tidak berdaya yang menghabiskan listrik. Kebanyakan spesialis modern bekerja dengan bahasa simbolik deklaratif - mereka menyusun program dari perintah teks: penugasan sederhana, penggandaan; dan kondisi pengecekan kompleks, menjalankan rutin dalam satu lingkaran.

Tetapi tidak semua bahasa pemrograman dirancang untuk memecahkan masalah sistem. Beberapa dibuat untuk pelatihan, presentasi, dan pertunjukan digital. Ketika kinerja dan fungsi memudar ke latar belakang, solusi asli seperti lingkungan pemrograman visual Pure Data muncul.

Pada tahun 2020, tarian dari video arsip upacara pemakaman agensi Dada Awu dari Ghana menjadi meme paling populer di Rusia. Hari ini kita harus selangkah demi selangkah menciptakan kembali tema musik legendaris Coffin Dance, menggunakan lingkungan deskripsi suara algoritmik Data Murni.

Tentang pemrograman visual


Dengan pemrograman visual, sudah lazim untuk memahami proses menggambarkan suatu program untuk perangkat komputasi yang menggunakan elemen grafis fungsional. Jadi, penggunaan form designer WPF di lingkungan pengembangan Visual Studio dapat disebut pemrograman visual dari antarmuka. Desainer grafis muncul bersama dengan komputer pribadi pertama. Sekarang di pelajaran dalam ilmu komputer, Visual Pascal sedang dipelajari di beberapa sekolah. dan setengah dari peningkatan standar dalam 1C dapat dilakukan tanpa menulis sederet kode.

Tetapi lingkungan pemrograman visual yang lengkap muncul kemudian. Ketika datang untuk menciptakan bahasa pemrograman yang hanya terdiri dari perintah grafis, sejumlah kesulitan muncul, karena itu fungsi bahasa itu sendiri harus dibatasi.
Jadi, beberapa panggilan dari subprogram yang sama di berbagai bagian kode C ++ adalah wajar bagi programmer. Dalam lingkungan grafis, panggilan subrutin dapat direpresentasikan, misalnya, dengan panah dari objek dalam teks program utama ke subrutin-objek, dan ketika ada terlalu banyak panah seperti itu, kode grafik menjadi tidak dapat dibaca. Pengembang lingkungan pengembangan pelatihan sering memaksakan batasnya sendiri (pada jumlah panggilan, objek dalam program, variabel yang digunakan) untuk melindungi pengguna dan membuat proses pemrograman visual lebih visual.
Contoh program Sanscript sederhana:

gambar

Tetapi jika Anda mengalihkan perhatian dari pemrograman dalam arti luas, Anda dapat menemukan masalah terapan penting yang diselesaikan secara grafis lebih mudah dan lebih efisien daripada secara simbolis. Satu tugas seperti itu: deskripsi instrumen virtual. Kembali di tahun 80-an abad terakhir, sebagian besar rekaman musik disiarkan langsung. Synthesizer digital lebih rendah dalam kualitas suara daripada instrumen akustik, dan sistem digital yang benar-benar "musikal" mahal.

Semuanya telah berubah dengan diperkenalkannya teknologi VST, diperkenalkan pada tahun 1996 sebagai perpustakaan yang banyak untuk bekerja dengan suara. Fungsionalitas VST memungkinkan kami untuk mendeskripsikan arsitektur synthesizer digital nyata, pengolah efek dan sangat akurat meniru pekerjaan mereka di komputer. Namun, hanya tim programmer dan teknisi suara yang memenuhi syarat yang dapat membuat deskripsi seperti itu. Pertanyaan tentang membuat instrumen virtual khusus tetap terbuka.

Pada tahun-tahun yang sama, dalam upaya mempopulerkan sintesis suara di antara para amatir, proyek Pure Data eksperimental muncul - sebuah lingkungan pengembangan visual yang berfokus pada menggambarkan synthesizer sederhana. Sekitar Pure Data, sekelompok kecil "penggemar" dibentuk yang mempromosikan pemrograman visual di FB, Youtube: mereka menulis dan menerjemahkan materi pelatihan, menerbitkan contoh synthesizer dan campuran musik keseluruhan pada satu tambalan (ini adalah nama program Pure Data dengan analogi dengan tambalan di synthesizer perangkat keras modular ) Tetapi lingkungan belum menerima distribusi luas di dunia.

Dasar Data Murni


Lingkungan pengembangan Pure Data dapat diunduh secara gratis dari situs web resmi. Program ini mendistribusikan open source dan tersedia untuk pengguna Windows, Linux dan MacOS X. Instal dan jalankan Pure Data. Di menu File, buat tambalan baru. Jendela pengeditan berikut akan muncul:

gambar

Menu Put berisi daftar objek grafis dari mana kita akan membuat synthesizer pertama kita. Setelah memilih item yang sesuai, elemen ditambahkan ke bidang grafik (Kanvas) dari tambalan saat ini. Elemen dapat diedit (mengubah tanda tangan, yang mempengaruhi perilaku mereka, serta dipindahkan) dan dihubungkan dengan garis (dengan menahan tombol kiri mouse pada salah satu output dari objek sumber, memindahkan kursor ke input objek tujuan dan melepaskannya). Sebagai contoh, kita akan membuat satu elemen tipe "Object" dengan kunci nama dan satu elemen tipe "Number". Input elemen disorot dalam warna hitam dan terletak di atas bingkai elemen itu sendiri, dan output di bawahnya. Hubungkan output dari objek kunci ke input dari elemen Number.
Kita mendapatkan:

gambar

Selama ini kami berada dalam mode edit tambalan. Untuk masuk ke mode run, buka menu Edit dan hapus centang item Edit Mode. Pointer mouse pada garis harus berubah dari tangan ke panah. Sekarang tekan tombol apa saja pada keyboard utama. Kita akan melihat bagaimana nilai Number berubah ketika ditekan:

gambar

Mari kita menganalisis hasil tambalan. Setelah menetapkan kunci nama ke objek, ia memiliki satu output, tetapi tidak ada input. Objek dengan nama ini mendengarkan keyboard dan mengirimkan kode kunci setiap kali ditekan dalam runtime. Elemen Number memiliki satu input dan satu output. Mengambil nomor sebagai input, Number menampilkannya di layar dan mengirimkan nilai yang sama ke output. Perhatikan bahwa setelah melepaskan kunci, angka terus ditampilkan. Ini menunjukkan bahwa input mempertahankan nilai terakhir yang mereka terima.

Kembali ke mode edit dan tambahkan objek lain bernama sel 49. Ini akan memiliki dua input dan dua output. Objek ini mengirimkan sinyal ke output pertama setiap kali nilai tiba di salah satu input dan cocok dengan nilai yang disimpan pada input lainnya. Jika input menerima nilai selain dari akumulasi, sinyal dikirim ke output kedua. Bagian pertama dari nama sel menentukan jenis objek, yang kedua 49 - menulis nilai default untuk input kedua. 49 adalah kode kunci "1".

Sinyal adalah tipe data khusus yang tidak dapat dengan mudah di-output, misalnya, dengan mengirim Nomor ke input. Tetapi dengan bantuan sinyal, Anda dapat "memulai" pekerjaan beberapa elemen.

Kembali ke menu Put dan tambahkan elemen Bang ke tambalan kami. Hubungkan output Number ke input sel 49 pertama dan output sel 49 pertama ke input Bang. Kami akan menerima tambalan berikut:

gambar

Kami akan beralih ke mode eksekusi. Dengan menekan berbagai tombol, kode mereka akan muncul. Ketika Anda menekan "tombol khusus" dengan kode 49, objek sel akan menghasilkan singal, yang, ketika menekan tombol bang, akan secara otomatis menekannya:

gambar

Objek bang menghasilkan sinyal pada outputnya hanya ketika ditekan dalam mode run, sinyal atau nilai masuk ke input. Tambahkan sedikit suara ke proyek kami. Agar tambalan bekerja dengan benar dengan data audio, menu Media harus memiliki tanda centang di sebelah item DSP On. Anda juga perlu masuk ke menu Pengaturan Midi dan menginstal perangkat output. Di Windows:

gambar

Klik OK dan kembali ke mode edit. Untuk bekerja dengan sinyal Midi, 2 elemen paling sering digunakan: objek makenote dan noteout. Tambahkan satu objek seperti itu dan buat beberapa pesan Pesan dengan nilai-nilai berikut:

gambar

Pesan adalah elemen pemrograman visual dengan perilaku kompleks. Jika pesan disebut nomor tertentu, maka dengan mengklik pesan atau setelah menerima sinyal pada inputnya, dalam kedua kasus nomor ini dan sinyal akan dikeluarkan secara bersamaan.

Objek noteout, ketika menerima nilai pada input pertama, menghasilkan suara pada salah satu saluran MIDI. Nomor saluran dapat ditunjukkan secara eksplisit atas nama objek (dalam kasus kami 1 - piano) atau ditransfer ke input input ketiga. Input pertama mengambil pitch dalam hal midi: (60 - ini ke oktaf pertama dan kemudian +1 - peningkatan setengah nada, -1 - penurunan setengah nada), dan yang kedua - deskripsi catatan: volume, durasi, sifat produksi suara.
Objek makenote menerima pitch ke input pertama dan ke volume kedua (0 - diam, volume maksimum 127) menerjemahkan pitch ke output pertama, dan menghasilkan deskripsi catatan untuk catatan input kedua pada output kedua. Nilai default untuk input makenote pertama dan kedua ditentukan segera setelah nama objek. Hubungkan elemen-elemen seperti yang ditunjukkan pada gambar dan pergi ke mode run:

gambar

Ketika Anda mengklik pesan, sebuah nada akan berbunyi sesuai dengan pitch dalam nama pesan. 60 - catatan untuk, 62 - re, 67 - la. Sekarang dalam mode edit, hubungkan output pertama pemilih (objek sel) dengan pesan 60. Tambahkan 2 penyeleksi lebih banyak dengan kode untuk tombol 2 dan 3 pada keyboard dan dapatkan synthesizer paling sederhana:

gambar

Menekan tombol 1-3 dalam makenote akan mengirim pesan dengan nada yang sesuai dan nada akan berbunyi. Pada bagian selanjutnya, kami akan mencoba menggambarkan melodi rumit yang akan dimainkan secara berurutan dengan catatan saat mengirim hanya satu sinyal.

Menarikan Tari Peti Mati


Musik


Untuk menggambarkan melodi yang kompleks, kita perlu mempelajari 2 objek penting - metro dan f, serta sejumlah objek tambahan. Pertimbangkan contoh sederhana:

gambar

Objek metro memiliki dua input. Sinyal pertama diterima. Sinyal apa pun selain berhenti termasuk metronom. Untuk menonaktifkan, gunakan sinyal keluaran pesan dengan penghentian teks. Input kedua, metro, diberikan interval dalam milidetik. Ketika metronom dihidupkan, ia akan segera mengirim sinyal ke output-nya saja dan akan mengirim kembali sinyal setiap n milidetik. Interval n dapat ditentukan oleh nilai default dalam nama objek atau ditransfer ke input kedua. Setelah memasuki mode jalankan, kita dapat memulai metronom dengan tombol bang di atasnya dan melihat bagaimana tombol di bawahnya ditekan setiap 0,4 detik. Dengan mengirim pesan dengan interval baru, kami akan mempercepat atau memperlambat frekuensi pengiriman sinyal. Setelah pesan berhenti dikirim, pensinyalan berhenti.

Ingat kembali musik dari Coffin Dance:


Melodi utama dapat dijelaskan dengan urutan 64 catatan dan jeda dari durasi ke-8, yaitu. pada 8 langkah dalam 4/4. Jadi, kita perlu mengatur pengiriman siklik dari sinyal ke-64 ke pesan catatan yang sesuai. Untuk melakukan ini, gunakan objek f.

F - from float - mewakili variabel nyata. Objek f memiliki dua input. Pada input kedua, Anda dapat mengirimkan nilai numerik (misalnya, dari output pesan atau output Number), yang ditulis sebagai nilai variabel. Nilai default adalah 0. Dengan masuk dan keluar pertama, hal-hal sedikit lebih rumit. Pertimbangkan sebuah contoh:

gambar

Jadi, kami menemukan hubungan ajaib antara meme "Tekan F untuk memberi hormat" dan "Tarian Peti Mati". Mari kita beralih ke menjalankan mode. Ketika Anda mengklik pesan 3, nilainya akan ditulis ke variabel objek f, tetapi dalam jumlah kita tidak akan melihat ini. Jika Anda mengirimkan sinyal ke input pertama f dengan tombol bang, apa yang terjadi dalam hal Data Murni adalah iterasi, yaitu:

  • Output f akan mengirimkan nilai variabel saat ini (3)
  • Objek + 5 akan menerima angka 3 pada input pertama dan akan mengembalikan jumlah dua input 8 (di sini nilai pada input kedua diatur secara default setelah nama + objek tambahan)
  • Objek% 40 akan menerima angka 8 pada input pertama dan mengembalikan sisa dari membagi 8 dengan 40 (nilai input kedua diatur secara default)
  • Variabel f ​​akan menerima nilai (3 + 5)% 40 = 8 pada input kedua. Iterasi selesai

Jadi, setelah iterasi pertama, kita melihat nilai 3 pada nomor input dan memiliki nilai nyata 8 untuk variabel f. Pada iterasi berikutnya, angka akan mendapatkan delapan yang disimpan sebelumnya, dan f akan meningkat 5 lagi dan mengambil nilai 13. Ketika sampai pada iterasi dengan output 38, kita mendapatkan nilai (38 + 5)% 40 = 3 untuk variabel f. Dengan demikian, nilai f dan nilai output akan diulang secara siklis. Menggunakan modulo penambahan dan pembagian memungkinkan Anda untuk mendapatkan siklus dengan periode apa pun dan nilai apa pun untuk iterasi.

Hubungkan output metronom ke input pertama f, dan atur beberapa selektor dan tombol pada output f. Luncurkan metronom dan lihat bagaimana tombol menyala pada gilirannya dan setelah secara otomatis menekan tombol terakhir, siklus berulang. Tambalan:

gambar

Agar loop berjalan setiap kali dari nilai 3, saya menghubungkan output dari pesan berhenti ke input pesan 3 mengirimkan nilai awal ke f.

Mari kita uraikan melodinya. Untuk melakukan ini, buat tambalan yang bersih dan jelaskan metronom pada interval 230 (tepatnya 230 milidetik yang terakhir satu not kedelapan dalam melodi) dan siklus 64 not. Untuk memilih nilai, kami menggunakan variabel f ​​dan moses elemen baru untuk kami, yang fungsinya akan dijelaskan di bawah ini. Kami juga menambahkan beberapa objek makenote, pesan dengan catatan, catatan dengan saluran 1 (piano) dan 10 (drum), dan menggabungkan penyeleksi mose setiap iterasi dengan catatan yang sesuai. Dapatkan tambalan:

gambar

Seperti yang Anda lihat, dengan pemrograman visual, penggunaan sejumlah besar objek mengurangi keterbacaan program. Bahkan, tambalan adalah kombinasi dari elemen-elemen sederhana. Pertimbangkan "rutin" berikut:

gambar

Objek moses menyimpan angka pada input kedua, yang dapat diatur secara default. Jika input pertama menerima angka lebih kecil dari nilai yang disimpan dari input kedua, maka sinyal dikirim dari output pertama moses, jika tidak, sinyal dikirim dari output kedua. Dengan demikian, output pertama dari moses 1 berperilaku serupa dengan output pertama dari sel 0. Mari kita lihat sekelompok + 63% 64. Ini memungkinkan Anda untuk mengurangi nilai-nilai dalam loop dengan satu. Jika salah satu input, maka output akan menjadi 0, untuk input 0 output akan menjadi 63 - kita akan mendapatkan siklus 64 elemen dalam urutan terbalik. Jika kita menghubungkan output bundel ini ke input konstruksi berikut + 63% 64 dan menghubungkan moses 1 ke output masing-masing bundel, tetapi untuk masing-masing 64 kemungkinan nilai f, tepat satu moses akan mengirim sinyal ke output pertama. Jadi, angka 7 perlu dikurangi 7 kali sebanyak 1,untuk mendapatkan 0, maka mose ke-7 1 pada iterasi 7 akan menerima 0 pada input pertama dan mengirim sinyal ke catatan yang sesuai. Jika untuk 64 penyeleksi, Anda perlu mengedit nilai default parameter secara manual, maka rutin + 63% 64 moses 1 dapat disalin dan menghubungkan output dari% 64 sebelumnya ke input + 63 mendapatkan pemilih siklik 64-posisi yang kompleks.

Patch melodi menggunakan duplikasi objek catatan. Teknik ini memungkinkan Anda untuk meningkatkan volume melewati batas tanda. Jadi, jika Anda menghubungkan makenote yang sama 67 127 ke 2 noteout 1, tetapi ketika mengirim sinyal dari input makenote pertama, note la (kode 67, oktaf pertama) akan dimainkan dengan volume 127 * 2 = 254. Instrumen MIDI di Pure Data sangat sunyi, jadi teknik ini berguna untuk membuat melodi ensembel (dalam kasus kami, 2 piano dimainkan di saluran 1 dan 5 dan drum kit 10 dengan volume tiga kali lipat).

Untuk menghias simulasi (proses memindahkan data antara objek kode patch dalam runtime), akan lebih mudah untuk menggunakan tombol duplikat. Pada contoh di atas, objek 6 bang mereka memiliki siluet tombol Play, yang secara otomatis disorot ketika tombol bang ekstrim ditekan di sebelah kanan. Pemrosesan sinyal bang adalah proses yang membutuhkan banyak sumber daya, tetapi di bagian selanjutnya kita akan menempatkan seluruh jajaran tombol seperti itu dan mencoba menggambarkan tarian dari video dengan bantuan mereka.

Animasi


Untuk animasi, kita membutuhkan semua variabel yang sama f, objek - operator aritmatika dan metronom, serta penyeleksi. Kali ini kita hanya membutuhkan 8 frame, jadi kita akan menggunakan objek sel. Buat bidang 20x10 dari tombol bang (kami akan menggunakan operasi salin). Setelah menempatkan tambalan dengan melodi di tengah, kita mendapatkan gambar berikut:

gambar

Anda cukup menghubungkan output kiri masing-masing pemilih ke tombol yang harus ditekan pada bingkai ini dan mengirim sinyal dari metronom ke input variabel siklus baru f. Tetapi pendekatan ini memiliki 2 kelemahan:

  • 0,23 detik per frame - terlalu cepat untuk tarian kita. Dan penggunaan metronom kedua akan mengalahkan kita: noteout dan bang memiliki penundaan yang berbeda dalam menanggapi sinyal;
  • tombol tetap ditekan selama 0,05 detik sejak sinyal diterima, yang berarti bahwa selama 0,18 detik "layar" animasi akan kosong dan gambar dalam loop akan berkedip.

Untuk mengatasi masalah ini, kami menggunakan divisi. Konstruksi berikut:

gambar

mengambil nilai input dari siklus-melodi utama. Setelah membaginya dengan 2, kita mendapatkan perlambatan dari perubahan frame: untuk 0 dan 1, frame 1 akan ditampilkan, untuk 2 dan 3, frame 2 dan seterusnya. Untuk setiap frame, satu sinyal masih dikirim setiap 0,23 detik. Sekarang mari kita gunakan loop lain:

gambar

Untuk menyinkronkan dengan melodi utama, penundaan telah ditambahkan ke dalamnya: sinyal inklusi melewati dari pemilih terlebih dahulu melalui tombol dan hanya kemudian ke input pertama dari metronom. Sekarang jika Anda membuat bang dan menghubungkan outputnya ke semua tombol pixel dari frame tertentu, maka frame di atas Anda dapat menyorot frame setiap 0,046 detik, yang lebih cepat daripada frekuensi pembaruan tombol, mis. frame akan menyala terus sampai frame berikutnya berubah. Siklus 5 iterasi memastikan bahwa frame tidak akan berlapis, karena 0,046 * 5 = 0,23 detik - periode penyeleksi frame.

Saat membuat animasi, komputer mogok secara teratur, tetapi dimungkinkan untuk menggambar 5 gambar berbeda dan membuat siklus 8 bingkai dari mereka dalam urutan:

1 2 3 2 1 4 5 2

Tambalan terakhir dengan Coffin Dance (banyak elemen dekoratif - tombol dan komentar ditambahkan) dalam mode edit:

gambar

Hampir tidak mungkin untuk menguraikan kode sumber simulasi dalam gambar neraka ini, namun tambalan bekerja dengan benar:

gambar

Di sudut kanan bawah penghitung digunakan untuk secara otomatis menghentikan pemain setelah ke-121 catatan. Awalnya, sebuah animasi 48x24 piksel seharusnya, tetapi komputer pasti menolaknya dengan raungan sedih dari pendingin dan restart Windows yang tidak terduga dalam mode aman. Seni piksel asli 48x24 dari artis LikaLou dilampirkan di akhir video. Jadi, setelah 3 hari “menggambar musik” kami memiliki Coffin Dance di Pure Data:


Kesimpulan


Pemrograman meme secara visual adalah kegiatan yang menyenangkan, walaupun itu membutuhkan banyak waktu dan kadang-kadang menghancurkan perangkat keras Anda. Bahkan tugas tarian pemakaman yang tampaknya sederhana ini membutuhkan pendekatan modular untuk membuat program, pengetahuan tentang fitur tidak hanya bahasa implementasi, tetapi juga lingkungan pengembangan.

Menggunakan contoh tambalan untuk Coffin Dance, Anda dapat menilai tingkat perkembangan pemrograman visual. Ada bahasa grafis yang dapat mengatasi dengan baik beberapa tugas aplikasi, jika lingkungan pengembangannya nyaman. Tetapi industri pemrograman visual secara keseluruhan masih dalam masa pertumbuhan.

Referensi


Situs web resmi Pure Data
Dasar-dasar pemrograman visual dalam Data Murni
Tentang artikel standar
Tari Coffin di Wikipedia
Tari Coffin di Data Murni: video asli

All Articles