
Jika Anda pernah mengunjungi bioskop, Anda mungkin mendengar
Deep Note ,
merek dagang suara THX . Ini adalah salah satu suara pertama yang terdengar di awal trailer di aula bersertifikat THX. Saya selalu menyukai crescendo-nya yang mudah dikenali, dimulai dengan campuran catatan yang mengerikan dan diakhiri dengan finale (
suara ) yang cerah dan megah. Sungguh menyenangkan bagi telinga!
Kemarin (mungkin) tanpa alasan saya tertarik pada asal suara ini, dan saya melakukan sedikit riset. Saya sangat tersentuh oleh ceritanya, yang ingin saya bagikan dengan Anda. Lalu kami melanjutkan - dan kami akan membuat suara ini sendiri, menyiapkan gunting dan lem!
Sumber informasi terbaik tentang suara yang dapat saya temukan - menurut pendapat saya, adalah komposisi elektro-akustiknya yang lengkap, yang diterbitkan di
Blog Musik yang luar biasa pada tahun 2005. Inilah
tautan ke pos .
Beberapa fakta tentang suara:
- Ini dibuat oleh Dr. James Andy Moorer pada tahun 1982.
- Suatu hari dalam sejarah, itu hilang 4.000 kali sehari, hampir setiap 20 detik! Kutipan dari Dr. Moorer:
“Saya ingin mengatakan bahwa suara THX adalah karya musik komputer paling populer di dunia. Mungkin benar atau tidak, tapi kedengarannya keren! ”
- Ini dibuat pada komputer ASP (Audio Signal Processor) yang dapat mensintesis suara secara real time.
- Program 20.000 baris kode C menghasilkan data untuk diputar di ASP. Data yang dihasilkan terdiri dari 250.000 baris yang diproses oleh ASP.
- Osilator suara menggunakan nada sello digital sebagai sinyal. Murer ingat bahwa ada sekitar 12 harmonisa dalam sampel. ASP dapat menjalankan 30 osilator ini secara real time (sebagai perbandingan, laptop saya sekarang dapat memproses lebih dari 1000 ini tanpa kegagalan).
- Suara itu sendiri dilindungi oleh hak cipta, tetapi inilah masalahnya: Kode Dr. Murer bergantung pada generator nomor acak (proses generatif) dan setiap kali suara sedikit berbeda. Oleh karena itu, saya tidak berpikir bahwa aman untuk mengatakan bahwa prosesnya sendiri atau dapat "dilindungi oleh hak cipta". Suara itu sendiri, ya, sampel spesifik dilindungi.
- Suara debutnya di trailer THX "Return of the Jedi" sebelum pemutaran perdana pada tahun 1983.
- Karakteristik generatif dari proses di beberapa titik menjadi bermasalah. Setelah rilis The Return of the Jedi, catatan Deep Note asli hilang. Dr. Murer menciptakan kembali pekerjaan untuk perusahaan, tetapi mereka terus-menerus mengeluh bahwa itu tidak terdengar seperti aslinya. Pada akhirnya, rekaman asli ditemukan dan disimpan di tempat yang aman.
- Dr. Dre meminta izin untuk menggunakan sampel dalam musiknya, tetapi ia ditolak. Dia tetap menggunakannya dan mendapat gugatan.
- Dalam karya Metastaseis oleh Janis Xenakis (1954) ada crescendo pembuka yang sangat mirip (seperti dalam karya-karya lain dari berbagai komposer). Tapi itu dimulai dengan nada tunggal dan diakhiri dengan kluster nada semi-tuned bukan sepenuhnya konsonan, seperti dalam Catatan Jauh. Rekaman suara dari aplikasi paten dapat didengar di sini .
Pastikan untuk mendengarkan suara, karena ketika kita menciptakan Catatan Jauh, kita akan merujuk pada rekaman khusus ini.
Berikut adalah beberapa fakta teknis / teoritis sebelum memulai sintesis suara:
- Pengamatan saya: pada entri asli dari situs web Kantor Paten, nada utama adalah antara D dan Eb, dan dalam versi yang lebih baru nilai dasarnya adalah antara E dan F. Kami akan menggunakan konstanta D / Eb asli. Opsi baru biasanya lebih pendek, jika tidak salah. Jelas, saya lebih suka opsi yang diajukan ke kantor paten.
- Menurut Dr. Murer (dan juga dikonfirmasi oleh telingaku), fragmen dimulai dengan osilator yang disetel ke frekuensi acak antara 200 Hz dan 400 Hz. Tetapi osilator tidak hanya berdengung - frekuensinya dimodulasi secara acak, dan mereka menggunakan filter penghalus untuk memperlancar transisi nada secara acak. Ini berlanjut sampai dimulainya crescendo.
- Di dalam crescendo dan di akhir segmen suara, pengacak masih memodulasi frekuensi osilator, sehingga tidak ada yang stabil pada waktu tertentu. Tetapi jangkauan sapuan acak sangat sempit sehingga hanya menambahkan suara alami / paduan suara.
- Murer ingat bahwa ada sekitar 12 harmonisa yang berbeda dalam spektrum suara sello digital.
- Sejauh yang saya tahu, nilai-nilai untuk generator (yang digunakan untuk mendapatkan hak cipta) secara tertulis belum pernah dipublikasikan. Moorer berkata dia bisa merekamnya jika kita mendapat izin dari THX. Tapi saya pikir itu tidak perlu untuk menciptakan ulang suara.
- Suara di akhir (secara teknis bukan akord) - di telingaku, hanya penambahan oktaf dari nada dasar. Jadi, ketika merekonstruksi, kita mulai dengan osilator yang disetel secara acak (antara 200 dan 400 Hz), melakukan sapuan yang lebih rumit atau selesai dengan menerapkan oktaf ke nada antara D / Eb rendah.
Jadi mari kita mulai. Alat kerja saya di sini adalah SuperCollider. Mari kita mulai dengan sampel sederhana. Saya ingin menggunakan gelombang gigi gergaji sebagai sumber, ia memiliki spektrum yang kaya dan harmonis komponen genap dan ganjil. Kemudian saya berencana untuk menyaring simpul. Berikut ini cuplikan dari bagian awal kode:
Saya memilih 30 osilator untuk menghasilkan suara, sesuai dengan kemampuan komputer ASP, seperti yang dikatakan Dr. Murer. Saya membuat array 30 frekuensi acak antara 200 dan 400 Hz, didistribusikan secara acak di bidang stereo menggunakan Pan2.ar dengan argumen rrand (-0,5, 0,5), frekuensi yang ditugaskan untuk osilator gigi gergaji (30 salinan).
Begini bunyinya .
Jika Anda mempelajari informasi dari Dr. Moorer dan / atau dengan hati-hati mendengarkan fragmen aslinya, Anda dapat mendengar bahwa frekuensi osilator digeser secara acak ke atas dan ke bawah. Saya ingin menambahkan efek ini untuk suara yang lebih organik. Skala frekuensi adalah logaritmik, sehingga pada frekuensi yang lebih rendah harus ada rentang osilasi yang lebih sempit daripada yang lebih tinggi. Ini dapat dilakukan dengan menyortir frekuensi yang dihasilkan secara acak dengan LFNoise2 (yang menghasilkan nilai acak yang diinterpolasi secara kuadratik) dari argumen awal dalam rangka di dalam makro Mix kami. Dan saya juga menambahkan filter low-pass untuk osilator dengan frekuensi cutoff lima kali frekuensi osilator dan moderat 1 / q:
Begini cara sampel terdengar dengan pengeditan terbaru.
Ini sudah terlihat seperti titik awal yang baik, jadi mari kita mulai menerapkan sapuan, sangat kasar pada awalnya. Untuk menerapkan sapuan, pertama-tama Anda perlu menentukan frekuensi akhir untuk setiap osilator. Ini tidak terlalu sederhana, tetapi juga tidak terlalu sulit. Nada utama harus antara D rendah dan Eb, sehingga frekuensi rata-rata untuk nada ini adalah 14,5 (0 adalah C, menghitung secara kromatis, tanpa oktaf pertama). Jadi untuk 30 osilator, kami menerjemahkan frekuensi acak antara 200 dan 400 Hz menjadi nilai 14,5 dan oktaf yang sesuai. Di telinga, saya memilih 6 oktaf pertama. Jadi, susunan frekuensi terakhir adalah sebagai berikut:
(numVoices.collect({|nv| (nv/(numVoices/6)).round * 12; }) + 14.5).midicps;
Kami akan menggunakan sapuan dari 0 hingga 1. Frekuensi acak dikalikan dengan nilai
(1 − )
, dan frekuensi target dikalikan dengan sapuan itu sendiri. Karena itu, ketika sapuannya adalah 0 (awal), maka frekuensinya akan acak. Ketika sapuan adalah 0,5, ternyata
(( + ) / 2)
, dan ketika 1, maka frekuensi akan menjadi nilai akhir. Berikut adalah kode yang dimodifikasi:
Suara itu ada di
sini .
Seperti yang saya katakan, ini adalah pemindaian yang sangat kasar. Ini meningkat secara linear dari 0 ke 1, yang tidak konsisten dengan komposisi asli. Anda mungkin juga telah memperhatikan bahwa oktaf terakhir terdengar mengerikan karena disetel untuk menyempurnakan oktaf dan bergabung satu sama lain seperti nada dasar dan nada. Kami akan memperbaiki ini dengan menambahkan ayunan acak pada tahap akhir - sama seperti yang dilakukan di awal, dan itu akan terdengar jauh lebih organik.
Pertama, Anda perlu memperbaiki rumus sapuan frekuensi umum. Yang sebelumnya hanya untuk diadili. Jika kita melihat aslinya, kita perhatikan bahwa dalam 5-6 detik pertama ada sedikit perubahan dalam suara. Setelah ini, sapuan cepat dan eksponensial terjadi, yang mengarahkan osilator ke interval oktaf yang terbatas. Inilah opsi yang saya pilih:
sweepEnv = EnvGen.kr(Env([0, 0.1, 1], [5, 8], [2, 5]));
Di sini, transisi dari 0 ke 0,1 membutuhkan waktu 5 detik, dan transisi dari 0,1 ke 1 membutuhkan waktu 8 detik. Lengkungan untuk segmen ini diatur ke 2 dan 5. Nanti kita mendengarkan apa yang terjadi, tetapi pertama-tama kita perlu memperbaiki interval akhir lagi. Seperti sebelumnya, kami menambahkan osilasi acak dengan LFNoise2, kisarannya sebanding dengan frekuensi akhir osilator. Ini akan membuat finale lebih organik. Berikut adalah kode yang dimodifikasi:
Di sini saya juga menyesuaikan frekuensi cutoff filter low-pass dengan selera saya. Saya suka memperbaiki keadaan jika hasilnya tidak menjadi lebih buruk ... Bagaimanapun,
inilah yang terjadi .
Saya tidak begitu suka pola pemindaian ini. Perlu meregangkan awal dan mempercepat finish. Atau tunggu ... apakah benar-benar perlu untuk menerapkan rangkaian yang sama untuk semua osilator? Sama sekali tidak! Setiap osilator harus memiliki sirkuit sendiri dengan nilai waktu dan kelengkungan yang sedikit berbeda - saya yakin itu akan lebih menarik. Nada frekuensi tinggi dari cluster sawtooth acak masih sedikit mengganggu, jadi kami menambahkan secara keseluruhan filter low-pass, cut-off yang dikendalikan oleh nilai "eksternal" global yang tidak ada hubungannya dengan sirkuit osilator. Berikut adalah kode yang dimodifikasi:
Perubahan kecil membuat pemindaian sedikit lebih menarik. Filter low-pass 2000 Hz membantu menjinakkan cluster awal.
Begini bunyinya .
Ada satu hal lagi yang akan membuat proses lebih menarik. Ingat, kami mengurutkan osilator acak di awal? Nah, sekarang kita dapat mengurutkannya dalam urutan terbalik dan memastikan bahwa osilator pada frekuensi acak yang lebih tinggi berakhir di suara yang lebih rendah setelah kresendo, dan sebaliknya. Ini akan menambah lebih banyak "gerakan" ke crescendo dan konsisten dengan bagaimana fragmen asli terstruktur. Saya tidak yakin bahwa Dr. Murer memprogramnya seperti itu, tetapi ada proses ini pada catatan, dan kedengarannya keren, apakah itu produk acak dari proses generatif atau pilihan khusus. (Oh, apakah saya mengatakan itu? Jika prosesnya memberikan opsi seperti itu, maka ini adalah pilihan ... atau tidak?). Dengan demikian, kita akan mengubah urutan penyortiran dan struktur kode sehingga gigi gergaji dengan frekuensi yang lebih tinggi jatuh ke suara yang lebih rendah di final, dan sebaliknya.
Satu hal lagi: Anda membutuhkan bass yang lebih keras. Sekarang semua suara memiliki amplitudo yang sama. Saya ingin suara rendah terdengar sedikit lebih keras dan memudar sebanding dengan peningkatan frekuensi. Oleh karena itu, kami memodifikasi argumen mul untuk Pan2 sesuai. Sesuaikan kembali frekuensi cutoff dari filter low-pass untuk masing-masing osilator. Dan saya akan menambahkan skema penskalaan amplitudo yang dengan lancar akan berpengaruh dan menghilang pada akhirnya, dan membebaskan scserver. Beberapa pengaturan numerik lagi di sana-sini - dan ini adalah kode terakhir:
Dan inilah
rekaman terakhir dari karya itu .
Anda dapat membandingkan dengan yang
asli .
Ya, ini interpretasi saya. Dan tentu saja, itu dapat dioptimalkan sampai mati dengan mengubah pola, frekuensi, distribusi, apa pun ... meskipun demikian, saya pikir ini adalah upaya yang layak untuk melestarikan warisan suara. Saya ingin mendengar komentar Anda dan / atau upaya Anda sendiri untuk mensintesis crescendo ini.
Ya, dan inilah hal lain yang saya lakukan untuk bersenang-senang. Ingat, saya katakan kepada Anda bahwa butuh 20.000 baris kode C untuk menghasilkan yang asli. Saya cukup yakin bahwa Dr. Moorer harus menulis semuanya dengan tangan, jadi angka ini tidak mengejutkan. Tapi tahukah Anda, karena popularitas Twitter, kami mencoba memeras semuanya menjadi 140 karakter kode. Untuk kesenangan, saya mencoba mereproduksi elemen dasar komposisi dalam 140 karakter kode. Saya pikir sampel masih terdengar keren, ini kodenya (di sini dengan nada utama F / E):
play{Mix({|k|k=k+1/2;2/k*Mix({|i|i=i+1;Blip.ar(i*XLine.kr(rand(2e2,4e2),87+LFNoise2.kr(2)*k,15),2,1/(i/a=XLine.kr(0.3,1,9))/9)}!9)}!40)!2*a}
Dan
inilah suara yang dihasilkan versi ini.
Dalam
satu dokumen - semua kode dari halaman ini untuk percobaan Anda.
Selamat datang, teman-teman!