Generator musik API Audio Web Pengalaman Pemula

Konteks dan Latar Belakang


Saya 62. Tiga tahun lalu saya memutuskan untuk mencoba menulis sistem yang cukup rumit, sebelum itu hanya ada 20 baris di dasar pada tahun 1981, ketika 3 bulan ilmu komputer terjebak di tahun ke-5 fakultas radio (NSTU, sebelumnya NETI). Profesional dianggap sebagai orang yang memiliki subjek dan menghasilkannya, jadi sebenarnya saya seorang pemula.

Di sisi lain, saya telah berurusan dengan algoritma yang berhubungan dengan musik untuk sebagian besar hidup saya, menemukan proses pengembangan dan perangkat keras, dan perangkat lunak, dan sejauh yang saya bisa, berpartisipasi di dalamnya. Pada tahun 1978, ia mengembangkan dan merakit synthesizer Mini-Moog (saya percaya itu adalah yang pertama di Ural), dikembangkan dan diproduksi pertama di kartu suara USSR dengan synthesizer untuk Agat7 (9) - analog Soviet Apple II, merancang modul sintesis FM untuk salah satu pabrik, berkolaborasi dengan Cakewalk (AS), PGMusic (Kanada), PowerFX (Swedia) - lebih sering di bawah skema: "ide dan implementasi dari kami, anggarannya dari mereka", berpartisipasi dalam pameran musik internasional MusikMesse (Jerman), NAMM (AS), dll.Semua ini adalah bagian kecil dari apa yang saya lakukan, tentu saja, tidak sendirian, tetapi dengan tim yang telah saya kumpulkan pada saat tertentu.

Selain itu, ia berperan aktif dalam mengorganisir Departemen Informatika (nomor 1 di Uni Soviet) di Novosibirsk Conservatory. Dari tahun 1983 hingga 2004, ia juga mengajar Akustik Musikal, Informatika, Teknik Suara, dan menyiapkan disertasi tentang pemodelan komputer tentang kinerja musik (ISBN 5-9294-0023-7) ...

Ya, semuanya dimulai dengan monitor hitam-putih, floppy disk, RAM 256 kB, PC pribadi perakitan musik ... Para musisi harus menjelaskan semuanya dengan jari mereka, karena sebagian besar orang-orang hebat ini jauh dari segalanya yang ketat dan teratur. Dan jika seorang trombonis dapat mengisi satu halaman teks, dia keren, dan pemain cello yang memprogram Chizhik-fawn hanyalah bintang. Ngomong-ngomong, beberapa guru aktif menolak seluruh topik ini - tetapi sekarang cobalah untuk merampas mereka dari komputer!

Pengalaman ini telah menjadi sangat berguna untuk pengembangan, pelatihan dan pendalaman saya dalam subjek. Ilmu komputer, seperti pendidikan jasmani, adalah wajib untuk semua fakultas dan aliran konstan siswa memungkinkan kami untuk melakukan banyak tes, eksperimen dalam psikoacoustics, pengenalan pola, berkomunikasi dengan musisi teoretis dan ... memahami bahwa mereka praktis tidak memiliki data dan formula yang tepat. Setidaknya itu yang dibutuhkan oleh pengembang peralatan dan program musik. Sayangnya, ahli musik pada dasarnya adalah sejarawan yang menggambarkan masa lalu. Jika mereka memiliki ilmu pengetahuan, maka ... mungkin, mendapatkan konsultasi mereka akan menjadi tambahan, daripada ke walikota kota dengan populasi lebih dari satu juta. Berapa banyak musisi terkenal akan membayar untuk "formula hit" dan "perkiraan penjualan"?

Jadi, katakanlah kita perlu mendapatkan jawaban yang berfungsi untuk algoritme tersebut, misalnya:

a) melodi terdengar (baik, bahkan jika sudah direkam dengan "catatan" di MIDI), bagaimana menentukan di mana tonik berada? - Musisi akan melakukannya dengan mudah, tetapi jawaban yang jelas (algoritma) tidak akan memberi Anda;

b) ada melodi, bagaimana memilih akord yang tepat untuk itu? .. Ya, konduktor paduan suara mungkin akan melakukannya lebih baik daripada vokalis, tetapi keduanya, bahkan jika mereka memberikan instruksi, tidak terlalu jelas. Tentu saja, dari sudut pandang mereka, itu akan ketat. Hanya ketika insinyur mulai menerjemahkannya ke dalam suatu algoritma akan ada beberapa sulit untuk diatasi ...

c) atau apakah drummer memainkan sesuatu yang cukup rumit, atau apakah pemain saksofon berimprovisasi - bagaimana "melepas" ukuran, ketukan kuat / lemah, awal / akhir dari frasa musik, pelambatan / akselerasi ekspresif? Ini bukan tentang EDM (Electronic Dance Music). Musisi pemain merasa dan mematuhi "aturan" yang disampaikan oleh guru dengan cara "lakukan apa yang saya lakukan", tetapi seorang insinyur membutuhkan angka, grafik, proporsi, dan semua ini praktis mustahil diperoleh baik dari pemain atau ahli teori musik-teoretisi.

Tetapi pada pertanyaan-pertanyaan seperti itulah saya ingin menemukan jawaban. Memang, sebuah karya yang terdengar nyata mungkin memiliki model kasar - komposisi musik dalam format MIDI, yang pada dasarnya adalah "skor elektronik". Ini adalah data yang pasti, tetapi bagaimana cara menggunakannya? Secara umum, yang paling menarik bagi saya pada akhirnya adalah analisis dan konversi data MIDI dan algoritma * seperti:

Pemodelan kinerja 1) ,
Morphing 2) ,
Generasi musik 3)

Dan untuk semua ini, definisi nada suara, auto-harmonisasi, auto-phrasing hanya sub-tugas yang terpisah ... Seiring waktu, jawaban yang dapat diterima diterima untuk semua topik ini, algoritma dan program dibuat yang bahkan masuk ke Cakewalk / Sonar.

* Dekripsi kecil:

1) analisis data MIDI terkuantisasi, pengenalan "objek musik" (frasa, angka) dan perubahannya di bagian Kecepatan, NoteOn, Durasi, serta pengenaan Tempo, PitchWeel, Ekspresi, Kurva modulasi untuk memanfaatkan sumber daya synthesizer secara lebih penuh dan mencapai ekspresi yang lebih besar.

2) analisis seluruh pekerjaan dan bagian-bagian individu dengan tujuan mengubah mereka dari satu ukuran ke ukuran lain (misalnya, dari 4/4 ke 6/8 atau 7/4), dari satu harmoni / harmoni ke yang lain. Selain itu, bahwa hasilnya akan "dapat dimakan" - sedemikian rupa, menurut pendapat musisi, adalah musik yang "benar" tanpa pelanggaran yang jelas.

3) generasi “skor elektronik” - suatu sistem yang, ketika menggunakan 1) dan 2) dan memainkan data MIDI, akan menghasilkan output yang serupa dalam bunyi dengan yang dihasilkan oleh musisi, arranger menggunakan komputer atau instrumen live. Itu bukan sesuatu yang abstrak, dihasilkan oleh AI, tidak hanya untuk demonstrasi dalam lingkaran sempit spesialis, tetapi sepenuhnya "manusia" dan cocok untuk digunakan.

Dalam cerita panjang ini, ada beberapa momen lucu, jika Anda melihat dari masa sekarang, misalnya, untuk PC 386 pertama saya harus memberikan 2 Chignon "Chignon" Moskow baru (IL 2715), masing-masing dari 290 ribu rubel. Atau, sebagai konservatori, saya hampir memperoleh Minsk 32 bekas di cabang Siberia di Akademi Ilmu Pengetahuan - saya percaya monster ini, lebih lemah dari smartphone, tampaknya menempati 60-80 m 2 dan mengonsumsi listrik, mungkin seperti bar + sauna ...

Jadi, karyawan saya diprogram (kami bekerja dengan Z80, MOS 6502, "Electronics-60", pada PC Win pertama dari GDR, dengan prosesor sinyal TMS dan Perangkat Analog ...), setiap hari saya melihat "krakozyabra" di layar dan berpikir bahwa mereka semua (programmer) "bukan dari dunia ini." Meskipun skor musiknya tidak mudah! Dan bagaimanapun, beberapa musisi mendengar musik, melihat catatan, dan bahkan mendapatkan kesenangan estetika jika mereka menyukainya! Secara umum, tampak bagi saya bahwa setiap orang yang menulis kode adalah genius dan ini bukan milik saya sama sekali ... Tapi, seperti yang ditunjukkan masa depan, saya keliru. Saya tidak bisa mengatakan bahwa banyak waktu yang hilang, tetapi mungkin nasib banyak proyek akan sangat berbeda ...

Pengalaman praktis pertama


Dari pengalaman sebelumnya, saya belajar bahwa hal-hal yang paling "sulit", "tidak menyenangkan" untuk seorang programmer adalah 2 hal: GUI dan antarmuka (yaitu, beralih dari satu lingkungan ke yang lain. Misalnya, menerima data MIDI dari perangkat eksternal), terutama ketika Tidak ada solusi siap pakai yang cocok.

Pertama saya mengambil AutoPlay Media Studio (Indigo Rose Software) - itu sedikit desainer untuk boneka. Awalnya, tampaknya dirancang untuk dengan cepat membuat CD, menu DVD, dan autorun.exe. Tapi ternyata ada lautan fungsi, dan di dalam (pada LUA) Anda dapat melakukan hampir semua hal: animasi, bermain ogg. Jadi, sebagian besar pekerjaan "tidak menyenangkan" (omong-omong, saya pikir, pendatang baru berhenti pada saat-saat seperti itu) tidak dapat dilakukan - semuanya sudah siap.

Sebagai hasilnya, selama 2 bulan di rumah setelah jam saya menulis analog dari program musik pelatihan yang kami kembangkan dan secara resmi disampaikan. Selain itu, dengan GUI lain, fungsionalitas yang lebih menarik - baik membuat konten audio dan grafik dan mengujinya tidak sulit. Dia menunjukkannya di kantor dan bertanya kepada salah satu presenter berapa banyak waktu yang dia butuhkan untuk membuat versi seperti itu, jawabannya adalah 6 bulan! Di sini, rupanya, saya berpikir untuk pertama kalinya: mungkin saya seharusnya tidak hanya memanjakan diri sendiri, tetapi mulai mempelajari sesuatu dan mencoba melakukan sesuatu yang serius dan ... apakah saya mengatur pekerjaan dengan benar. Sebenarnya, jawabannya jujur ​​- sederhana, "mereka" tidak akan menggunakan konstruktor, tetapi mereka akan menulis semuanya sendiri.

Sejak 2009, saya menghabiskan sebagian waktu untuk bekerja di studio rekaman dan membuat iklan video. Suatu kali, seorang teman bertanya apakah mungkin untuk dengan cepat (dan tidak mahal) membuat seratus 1 menit klip (tampaknya untuk promosi di YouTube). Sangat menyukai tugas-tugas seperti itu! (Omong-omong, saya sudah lama tahu bahwa jika seorang programmer dipaksa untuk melakukan sesuatu yang tidak terlalu kreatif 3 kali, ia akan menulis naskah). Saya bertanya kepada para programmer, dan jika ada program seperti itu, apa yang bisa ia “tekan” tombol di layar? Wow, ini AutoIt!

Secara umum, untuk bersenang-senang, saya menulis sebuah skrip yang:

  1. Meluncurkan Opera, membuka situs beberapa (tampaknya, Belanda) perusahaan yang berspesialisasi dalam text-to-speech;
  2. Pada halaman saya menggulir ke RU (akting suara dalam bahasa Rusia);
  3. membuka file * .txt di Notepad, tempat 20-30 lelucon disalin sebelumnya dari jaringan, paragraf;
  4. menyalin satu lelucon, menempelkannya ke bidang di situs;
  5. Diluncurkan SoundForge pada catatan, dan di situs dihidupkan pemutaran;
  6. direkam dan disimpan hasilnya dalam folder di mp3 dengan nama - "nomor seri + 15 karakter pertama dari teks lelucon itu sendiri".

Itu berhasil dan saya senang ketika kecil. Setelah itu, saya memberi tahu teman saya - tidak ada masalah membuat 100 klip murah (berkualitas baik), cukup mengambil gambar, musik, tajuk, subtitle, deskripsi, dll. - Saya akan mengatur semuanya (ukuran, warna), meletakkannya di folder, membuat template + Saya akan menentukan variasinya (acak!) Dan ... Saya bisa membuat Anda bukan 100, tetapi 200 klip ini (di Vegas Pro dengan AutoIt itu mudah), menontonnya secara selektif, dan Anda sudah memilih jumlah yang tepat untuk diri Anda sendiri ... Anda tidak harus melakukan semua ini, tetapi terima kasih untuk pertanyaannya!

Kemudian, saya secara bertahap mulai memperbaiki sesuatu di situs, membaca sesuatu, mencoba sesuatu demi minat olahraga. Secara khusus, untuk melakukan skrip pada JavaScript / CSS untuk animasi sederhana yang diperlukan untuk pembuatan video. Jadi beberapa ide umum dan sedikit pengalaman muncul di PHP, HTML, jQuery, JavaScript, CSS, MySQL. "Crack-overs" hampir menghilang dan saya berhenti takut pada topik "pemrograman" ini. Titik balik terakhir sehubungan dengan dia dan kemampuannya terjadi ketika saya mengerti 2 poin:

  • seluruh bidang ini adalah dunia tanpa akhir dan bahkan seorang programmer yang kuat tidak akan selalu menjawab pertanyaan jika itu bukan wilayahnya. Sama seperti di bidang lainnya. Secara umum - ya, baik, dan nuansa - mencari spesialis yang sempit, tetapi gali diri Anda sendiri. Untungnya ada jaringannya.
  • Saya memecahkan 99% pertanyaan yang saya miliki selama pengembangan sendiri, dan kadang-kadang lebih efisien daripada dalam contoh-contoh yang ditemukan di Internet. Pada saat yang sama, saya mengerti bahwa dengan gaya penulisan, kode saya bisa sangat buruk.

Generator musik


Saya tidak ingat bagaimana saya menemukan Web Audio API, saat ini saya tidak memiliki LLC, IP, atau tim, tetapi setelah 2-3 percobaan, ketika "suara pergi", saya mengayunkan yang paling serius bagi saya proyek ini adalah generator musik (yang sekarang saya sebut AlexAr ). Memang, di Web Audio ada semua yang diperlukan - generator, filter, amplop, mixer, prosesor (dalam C ++), dan jQuery, JavaScript dan CSS memungkinkan kami untuk menyelesaikan semua masalah dengan GUI. Bahkan, di Web Audio, Anda dapat melakukan, seperti yang tampak bagi saya, baik pemrosesan dan sintesis suara dari segala kompleksitas.

Di sini pekerjaan nyata dimulai, hampir, seperti di masa muda, ketika Anda berusia 25 tahun ke atas. 3-4 kali saya mulai lagi, membuang satu versi sistem dan mengumpulkan yang baru. Terkadang, secara radikal mengubah pendekatan untuk merancang modul tertentu. Pada saat yang sama saya melakukan banyak percobaan dan menguji algoritma baru yang belum pernah saya gunakan sebelumnya. Dia membuat beberapa penemuan untuk dirinya sendiri yang tidak akan terjadi tanpa memulai sistem. Khususnya, dalam psychoacoustics, dalam persepsi "kesamaan" trek musik - yang parameternya akan memberikan musik "berbeda", dan yang, dengan perbedaan formalnya, "sama" di telinga. Beberapa hal yang sangat berguna ditemukan dalam penerapan harmoni, imitasi dalam sintesis yang dipetik, dalam pengungkapan kata saat mengganti akor, dan dalam pemahaman yang lebih baik tentang "ketepatan gaya". Mungkin saja semua ini terbuka dan dijelaskan. Namun dalam kehidupan itu sering terjadiyang lebih mudah (dan lebih bermanfaat) untuk memikirkan diri sendiri.

Ya, akan lebih bagus jika API Audio Web diizinkan untuk mengikat, menggunakan VSTi untuk sintesis, atau yang lainnya siap. Di sisi lain, ada kesempatan untuk menarik kembali kaum muda dan menulis semua synthesizer yang diperlukan, untuk menciptakan, mengoptimalkan, baik dalam struktur maupun dalam algoritma dan konten. Hampir, seperti di masa lalu, ketika seorang seniman tidak hanya melukis, tetapi juga membuat cat sendiri ...

Sebagai hasilnya, setelah beberapa suap dan perubahan, modernisasi (yang merupakan sekolah yang bagus dan pelatihan otak), sistem menjadi stabil dan beroperasi penuh. Ya, tidak dalam bentuk, tentu saja, ketika itu bisa ditransfer ke pihak ketiga. Ini kira-kira seperti mobil buatan sendiri yang hanya "mematuhi" pencipta dan jika rusak, tidak akan ada orang yang memperbaikinya ...

gambar

Secara umum, komposisi selesai selama 4-5 menit, ia buat dalam 40-50 detik. (pada Intel Core i5, 2.8GHz, 12GB RAM). Saya bertanya tugas, misalnya, "membuat 100 lagu Dance", beralih ke makan siang atau berjalan-jalan. Dia tiba dalam satu jam dan, jika sistem tidak crash, dia mendengarkan dan menentukan %% dari kesesuaian hasilnya. Lalu saya mengubah sesuatu di parameter dan mulai lagi. Jika saya berperilaku "cukup", mis. mengatur parameter yang tidak mengarah pada pengaburan gaya (misalnya, ini akan terjadi jika harmoni jazz diterapkan dalam EDM), maka 90-95% dari trek terdengar cukup baik, dan jika tidak, maka 60-70 %% dapat dibuang.

Sistem telah bekerja, Anda dapat bersukacita, tetapi tampaknya masalah yang konyol tetapi nyata dimulai: "Bagaimana saya bisa mendengarkan begitu banyak musik?" Dan terwujudnya satu momen lagi: "Dan siapa pengarangnya?" Teman baik "dalam subjek," mengatakan bahwa "penulis adalah komputer, termasuk. itu bukan milik Anda ”... Jika demikian, maka itu memalukan, saya memasukkan lagu, frasa, harmoni, formulir di sana, mengatur beberapa ratus parameter, di mana kadang-kadang 5 msec tercermin dalam hasil, dan sistem hanya menghasilkan hasilnya, lagi menggunakan algoritma Saya berinvestasi di dalamnya ... Saya mencari di jaringan - Saya tidak mengerti bahwa dalam kasus serupa dengan hak cipta ...

Akibatnya, saya merilis sekitar 3.500 lagu dengan total waktu bermain lebih dari 200 jam dan berhenti, atau lebih tepatnya beralih - Saya berencana untuk meluncurkan SongModeler - generator pengaturan online berdasarkan pendekatan yang dikerjakan di AlexAr. Nah, contoh generasi musik otomatis di AlexAr dapat ditemukan di sini .

Untuk pendengar yang terlalu pemilih, saya ingin mengatakan bahwa saya menghabiskan lebih banyak waktu untuk pemrograman, harmoni, melodi, bentuk (yaitu catatan), tetapi sintesis dan pencampuran, tentu saja, bisa jauh lebih baik. Pada akhirnya, saya memeriksa ide-ide, pendekatan itu sendiri - itu benar. Dan untuk proyek-proyek semacam itu, diperlukan sebuah tim, penyendiri jarang membahas topik interdisipliner. Benar, di sisi lain, pekerjaan menjadi jauh lebih nyaman ketika tidak ada seorang pun “di atas kamu maupun di bawah kamu”. Tapi ironi sebenarnya adalah ketika saya memiliki tim dan sumber daya, saya tidak bertujuan pada sesuatu seperti itu karena saya pikir itu terlalu rumit.

Sudah di suatu tempat di tengah bekerja pada AlexAr, saya menyadari bahwa sangat mungkin bahwa jika saya mulai pemrograman sebelumnya, maka 10 programmer (kadang-kadang saya memiliki lebih banyak staf) dapat digantikan oleh tiga :

Saya sendiri (desain, pemrograman, pengujian, konten);
sangat cerdas - hingga kemacetan, pendekatan intelijen, perpustakaan baru, layanan (segera setelah sekolah menengah atau dari 3-4 kursus);
gila kerja produktif untuk tugas-tugas rutin, tanpa imajinasi, yang tidak gatal tangannya untuk menerapkan hari ini apa yang muncul kemarin.

Saya yakin bahwa tugas itu akan diselesaikan lebih cepat, dan berapa banyak saraf dan uang akan diselamatkan! Dari mana simpanan itu berasal? Jadi, sebelum makan siang, saya duduk untuk menguji sesuatu - "well, tombolnya tidak nyaman, dan indikatornya akan lebih bergeser ke kanan." OK - saya duduk dan melakukannya dalam setengah jam, suasananya 5+. Dan bagaimana ini akan diputuskan sebelumnya di kantor saya dengan tim, ketika Anda sendiri tidak menulis? Pada awalnya saya akan bertanya berapa lama, kemudian saya menggambar di PhotoShop, menghitung piksel, menulis TK, memasukkannya ke dalam rencana, menunggu beberapa hari atau ... menolaknya sama sekali - itu berfungsi, sudah bagus. Dan terus menerus.

Kesimpulan dan motivasi


Saya tidak tahu betapa harmonisnya saya akan dapat merumuskan kesimpulan yang sebenarnya, tetapi belum di bidang saya, tetapi saya akan mencoba.

  1. , . , , , , . , . , 10 , ( ?).
  2. — . , - macOS Android, . , , . , .
  3. GUI , — . , - . , , -.
  4. - - , - — , , . , , - — . — «». 7 , 6 . — , — . , - . ? — , . - , « » — .. , «» .
  5. , , (software engineer, !) . , , ( ) -, . , , engineer, , «, », .. «Copy Paste».
  6. , , «» , , - . . - … , . . — . , , , , , .
  7. , . , , IDE, . , , — NotePad++, FireFox ZIP- — , . «» . , « », .
  8. ? . , , — UnDo/ReDo. JavaScript , , — . , , , . UnDo — , , , .

Secara umum, bagi saya tampaknya orang dewasa, terutama mereka yang memiliki latar belakang teknik yang belum terlibat dalam pemrograman dalam kehidupan, harus mencoba. Jika Anda tahu subjek Anda, maka 50% sudah dilakukan. Anda membutuhkan logika, pemahaman yang jelas tentang "fisika, sifat" dari wilayah Anda, dan ini, kemungkinan besar, Anda miliki. Tidak ada yang perlu dikhawatirkan dalam "mantel bengkok" dan JavaScript jauh lebih sederhana daripada bahasa Rusia atau Inggris. Pada akhirnya, Anda mungkin tidak menjadi insinyur perangkat lunak sejati, tetapi keterampilan ini, bahkan yang kecil, akan menambah opsi lain untuk kualifikasi teknik Anda. Ya, Anda akan segera berhenti memandang orang-orang TI sebagai orang-orang dengan lingkaran cahaya di atas kepala mereka, dan Anda akan dapat menetapkan tugas untuk mereka di tingkat yang lebih kompeten. Lagi pula, mereka pergi ke daerah Anda, di mana Anda pro. Atau mungkin Anda sedang mengimplementasikan proyek Anda pada data Anda, yang telah lama Anda impikan,tetapi kondisi untuk penerapannya tidak berhasil - saya tidak tahu, saya pikir saya beruntung karena saya tidak takut untuk mencoba. Lagi pula - pemrograman untuk seorang insinyur, KEBEBASAN INI!

Salam hangat untuk semuanya.

PS: Jika seseorang tertarik dengan sejarah pekerjaan saya selama bertahun-tahun dalam bentuk yang lebih terperinci, maka itu ada di sini .

All Articles