Saya ingin mencampur dua atau lebih saluran audio PCM (misalnya sampel yang direkam) secara digital dengan cara yang akustik, lebih disukai dalam waktu yang hampir bersamaan (artinya sedikit atau tidak ada yang mengintip ke depan).
Cara yang "benar" secara fisik untuk melakukan ini adalah menjumlahkan sampel. Namun ketika Anda menambahkan dua sampel acak, nilai yang dihasilkan bisa hingga dua kali lipat nilai maksimum.
Misalnya, jika sampel Anda bernilai 16-bit, hasilnya akan mencapai 65536 * 2. Ini menghasilkan kliping.
Solusi naif di sini adalah untuk membagi dengan N, di mana N adalah jumlah saluran yang dicampur. Namun, ini menghasilkan setiap sampel 1 / N sebagai keras, yang sama sekali tidak realistis. Di dunia nyata, ketika dua instrumen dimainkan secara bersamaan, masing-masing instrumen tidak menjadi setengah keras.
Dari membaca sekitar, metode umum pencampuran adalah: hasil = A + B - AB, di mana A dan B adalah dua sampel yang dinormalisasi dicampur, dan AB adalah istilah untuk memastikan suara lebih keras semakin "jepretan lembut".
Namun, ini menimbulkan distorsi sinyal. Apakah tingkat distorsi ini dapat diterima dalam sintesis audio berkualitas tinggi?
Apa metode lain yang ada untuk mengatasi masalah ini? Saya tertarik pada algoritma berkualitas rendah yang kurang efisien serta algoritma berkualitas tinggi yang kurang efisien.
Saya mengajukan pertanyaan saya dalam konteks sintesis musik digital, untuk tujuan pencampuran beberapa trek instrumen bersama. Trek dapat berupa audio yang disintesis, sampel yang direkam sebelumnya, atau input mikrofon waktu nyata.
sumber
Jawaban:
Sangat sulit untuk mengarahkan Anda ke teknik yang relevan tanpa mengetahui konteks apa pun untuk masalah Anda.
Jawaban yang jelas adalah untuk memberitahu Anda untuk menyesuaikan perolehan setiap sampel sehingga kliping jarang terjadi. Bukanlah hal yang tidak realistis untuk mengasumsikan bahwa musisi akan bermain lebih lembut dalam sebuah ensemble daripada ketika diminta untuk bermain solo.
Distorsi yang diperkenalkan oleh A + B - AB tidak dapat diterima. Ini menciptakan gambar cermin A di setiap sisi harmonik B - setara dengan modulasi cincin - yang cukup mengerikan jika A dan B memiliki spektrum yang kaya dengan harmonik yang tidak pada rasio integer. Cobalah dua gelombang persegi pada 220 dan 400 Hz misalnya.
Fungsi kliping yang lebih "alami" yang bekerja berdasarkan sampel per sampel, adalah fungsi tanh - itu benar-benar cocok dengan perilaku pembatas lunak beberapa elemen analog. Di luar itu, Anda dapat melihat teknik kompresi dinamis klasik - jika sistem Anda dapat melihat ke depan dan melihat puncaknya di muka, ini bahkan lebih baik.
sumber
Itu bukan solusi "naif", itu satu - satunya solusi. Itulah yang dilakukan oleh setiap mixer analog dan digital, karena itulah yang dilakukan udara, dan itulah yang dilakukan otak Anda.
Sayangnya, ini tampaknya merupakan kesalahpahaman yang umum, seperti yang ditunjukkan oleh algoritma "pencampuran" (distorsi) non-linear yang salah ini:
Mencampur audio digital(dengan cara yang salah)Teknik pencampuran sampel audio cepat dan kotor untuk menghindari kliping(jangan lakukan ini)"Membagi dengan N" disebut ruang kepala ; ruang ekstra untuk puncak yang dialokasikan di atas level RMS dari bentuk gelombang. Jumlah ruang kepala yang diperlukan untuk suatu sinyal ditentukan oleh faktor puncak sinyal . (Kesalahpahaman tingkat sinyal digital dan ruang kepala mungkin sebagian disalahkan untuk perang Kenyaringan dan Elephunk .)
Dalam perangkat keras analog, ruang kepala mungkin 20 dB. Dalam DSP perangkat keras, titik tetap sering digunakan, dengan ruang kepala tetap; SigmaDSP AD , misalnya, memiliki ruang kepala 24 dB. Dalam perangkat lunak komputer, pemrosesan audio biasanya dilakukan dalam floating point 32 bit, sehingga ruang kepala sangat besar.
Idealnya, Anda tidak perlu membagi dengan N sama sekali, Anda hanya perlu menjumlahkan sinyal bersama, karena sinyal Anda tidak akan dihasilkan pada 0 dBFS di tempat pertama.
Perhatikan bahwa sebagian besar sinyal tidak berkorelasi satu sama lain, jadi tidak umum untuk semua saluran mixer untuk secara konstruktif mengganggu pada saat yang sama. Ya, mencampurkan 10 gelombang sinus in-phase yang identik akan meningkatkan level puncak sebesar 10 kali (20 dB), tetapi mencampur 10 sumber kebisingan yang tidak koheren hanya akan meningkatkan level puncak sebesar 3,2 kali (10 dB). Untuk sinyal nyata, nilainya antara ekstrem ini.
Untuk mendapatkan sinyal campuran dari DAC tanpa kliping, Anda cukup mengurangi gain dari campuran. Jika Anda ingin agar level RMS dari campuran tetap tinggi tanpa kliping keras, Anda perlu menerapkan beberapa jenis kompresi untuk membatasi puncak gelombang, tetapi ini bukan bagian dari pencampuran, ini merupakan langkah terpisah. Anda mencampurnya terlebih dahulu, dengan banyak ruang kepala, dan kemudian menempatkannya melalui kompresi rentang dinamis nanti, jika diinginkan.
sumber
formulanya
Mungkin ini:
PEMBARUAN: Seperti yang disarankan oleh hotpaw2, Anda dapat menunda sinyal input tetapi tidak menekan penguatan. Ini disebut "look-ahead limiter".
sumber
Salah satu cara ini dapat dilakukan untuk pencampuran non-real-time menggunakan AGC lihat-depan, di mana keuntungan dari satu atau kedua saluran diturunkan pada tingkat yang sulit dilihat sebelum amplitudo jumlah melebihi batas kliping. Semakin sedikit pandangan ke depan yang tersedia, baik penyesuaian gain AGC akan menjadi lebih terdengar, atau kenaikan maksimal untuk ramp penyesuaian gain yang lebih lembut akan semakin dekat dan lebih dekat ke 0,5 per saluran pada batas. Untuk sumber suara dengan beberapa prediktabilitas, seseorang juga dapat menggunakan statistik mengenai perilaku amplop dari waktu ke waktu untuk menebak batas kenaikan secara adaptif, tetapi dengan beberapa kemungkinan kegagalan (yang akan menjadi penyesuaian perolehan AGC yang tiba-tiba).
sumber
Saya telah berbicara dengan desainer mixer akhir 1990-an dan 2000-an pertama yang terjadi pada gelombang digital (setelah berjinjit). Saya pikir orang itu adalah desainer untuk SPL, tapi mungkin tidak sebesar itu, saya sama sekali tidak ingat nama maupun mereknya, saya hanya ingat betapa sangat besar dan mahalnya mesin itu.
Kami berbicara lama, dan akhirnya berbicara tentang teknik untuk benar-benar menjamin bahwa saluran 64/128 @ 24bits mereka bercampur menjadi satu tetap 24 bit akurat saluran keluaran campuran tanpa kliping.
Teknik yang dia jelaskan agak sederhana. 64 trek (pada 24 bit) ditambahkan dalam saluran 48 bit, di mana kliping tidak dapat terjadi. Lurus.
Saya tidak bisa mengatakan bagaimana sinyal itu kemudian diputar 48 kembali dari ke 24 bit. Mungkin di situlah resep dapur yang rumit diterapkan.
Dan mungkin ada banyak teknik untuk mencapai itu, di atas semua berbeda apakah dilakukan secara real-time atau dengan semua sinyal yang sudah direkam dengan puncak-puncak tinggi yang sederhana untuk menentukan ... semua jenis normalisasi yang saya bayangkan.
sumber
Turunkan volume global. Pelacak impuls secara klasik menghasilkan saluran sekitar 33% volume maks secara default.
Itu tampaknya cukup keras untuk musik dengan beberapa saluran (4 kanal Amiga MOD) dan cukup lunak untuk lagu dengan 50 saluran (karena konten saluran biasanya tidak berkorelasi sehingga volume tidak bertambah cepat melewati tingkat tertentu ... ditambah beberapa saluran akan menghasilkan pada volume maksimal dengan banyak hal yang terjadi). Ini juga menyisakan ruang kepala yang cukup untuk saluran panahan hard-left atau hard-right (yang menggunakan 66% dari jangkauan).
Anda juga tidak ingin menambahkan saluran bersama dalam 16 bit, Anda ingin menambahkannya bersama dalam 32 bit, lalu jepitkan hasilnya dan kurangi menjadi 16 bit di bagian paling akhir. Anda akan memerlukan rentang yang lebih tinggi sehingga tidak membungkus saat melakukan matematika. Pilihan lain adalah menggunakan floating point 32bit (yang nyaman untuk melakukan filter, efek dll).
sumber
Saya pikir kuncinya adalah, jika Anda memiliki nilai 16 bit dan menambahkan 2 nilai Anda bersama-sama yang berpotensi menjadi lebih dari nilai maksimum, maka Anda memiliki 2 opsi:
1) masukkan keduanya ke 32 bit tambah kemudian kembalikan nilai maksimum jika penambahan melebihi nilai itu. Kemudian masukkan kembali ke 16 bit. Misalnya jika nilai Anda adalah 32768 dan 34567 itu melebihi 65535 dan kuncinya adalah untuk mengembalikan 65535. Anda akan melakukan hal yang sama jika menggunakan nilai yang ditandatangani pada akhir nilai minimum.
2) kompres kedua nilai, lalu tambahkan bersama.
Yang pertama pada dasarnya kliping keras, yang kedua kliping lembut. Sistem analog semuanya kliping keras.
sumber
Mereka hanya akan menjadi dua kali ruang jika frekuensi di kedua trek menggunakan frekuensi ruang yang sama. Gunakan persamaan dan kompresi untuk menyiasatinya dengan mengukir area spektrum frekuensi untuk setiap suara dan mengendalikan transien dan menopang suara sehingga semuanya menyembul di tempat yang seharusnya. Mungkin itu tidak menjawab pertanyaan. Anda dapat menunda sinyal frekuensi yang lebih rendah hingga 2 ms. Itu tidak akan membatalkan melalui fase karena panjang gelombang lebih panjang dari frekuensi yang lebih tinggi dan itu akan menambah ruang karena transien tidak sepenuhnya tepat waktu dengan sinyal bass haus daya. Sesuatu yang secara linear menambahkan lebih banyak penundaan, semakin rendah sinyalnya akan menarik untuk diuji.
sumber
Yaitu, jika A dan B berbagi tanda, terapkan offset pembatas. Besarnya offset adalah produk dari A dan B. Arah offset berlawanan dengan A dan B.
Jika A dan B tidak membagikan tanda, tidak ada batas yang diterapkan, karena tidak ada cara untuk meluap.
sumber
Saran saya:
Pengguna mungkin ingin memproses aliran campuran ini dengan kompresi dan / atau membatasi sebelum dithering dan konversi ke format titik tetap 16bit (dengan asumsi konversi ini ... campuran untuk diserahkan kepada insinyur ahli biasanya dibiarkan pada format resolusi yang lebih tinggi)
sumber