อัลกอริทึมเพื่อผสมสัญญาณเสียงโดยไม่ต้องตัด


49

ฉันต้องการผสมผสานช่องสัญญาณเสียง PCM สองช่องขึ้นไป (เช่นตัวอย่างที่บันทึก) แบบดิจิทัลในลักษณะที่แสดงถึงความเชื่อทางเสียงโดยเฉพาะอย่างยิ่งในเวลาใกล้เคียงแบบเรียลไทม์

วิธีที่ "ถูกต้อง" ทางกายภาพในการทำเช่นนี้คือการสรุปตัวอย่าง อย่างไรก็ตามเมื่อคุณเพิ่มสองตัวอย่างโดยพลการค่าผลลัพธ์อาจเป็นค่าสูงสุดสองเท่า

ตัวอย่างเช่นหากตัวอย่างของคุณมีค่า 16 บิตผลลัพธ์จะมากถึง 65536 * 2 ผลลัพธ์นี้ในรูปวาด

ทางออกที่ไร้เดียงสาที่นี่คือการหารด้วย N โดยที่ N คือจำนวนช่องสัญญาณที่ถูกผสม อย่างไรก็ตามผลลัพธ์นี้ในแต่ละตัวอย่างมีค่า 1 / Nth ดังซึ่งไม่สมจริงอย่างสมบูรณ์ ในโลกแห่งความจริงเมื่อทั้งสองเครื่องดนตรีเล่นพร้อมกันแต่ละเครื่องดนตรีจะไม่กลายเป็นครึ่งดัง

จากการอ่านรอบ ๆ วิธีการผสมทั่วไปคือ: result = A + B - AB โดยที่ A และ B เป็นสองตัวอย่างที่ถูกทำให้เป็นมาตรฐานและ AB เป็นคำศัพท์เพื่อให้แน่ใจว่าเสียงดังดังขึ้น

อย่างไรก็ตามสิ่งนี้แนะนำการบิดเบือนของสัญญาณ ระดับการบิดเบือนนี้ยอมรับได้ในการสังเคราะห์เสียงคุณภาพสูงหรือไม่?

มีวิธีอื่นใดอีกบ้างในการแก้ไขปัญหานี้ ฉันสนใจอัลกอริธึมที่มีคุณภาพต่ำกว่าและอัลกอริธึมคุณภาพสูงที่มีประสิทธิภาพน้อยลง

ฉันกำลังถามคำถามของฉันในบริบทของการสังเคราะห์เพลงดิจิทัลเพื่อจุดประสงค์ในการผสมแทร็กที่หลากหลายเข้าด้วยกัน เพลงสามารถสังเคราะห์เสียงตัวอย่างที่บันทึกล่วงหน้าหรืออินพุตไมโครโฟนแบบเรียลไทม์


ฉันสงสัยว่าเป็นไปได้บ่อยเพียงใดที่จะหลีกเลี่ยงการตัดโดยการเปลี่ยนสัญญาณเพียงเล็กน้อย
Sebastian Reichelt

ความคิดที่ดีแม้ว่าฉันคิดว่ามันไม่ง่ายนักโดยเฉพาะอย่างยิ่งเมื่อคุณไม่มี lookahead มาก (เช่นในแบบเรียลไทม์) ปัญหาคือคุณต้องรู้ตัวอย่างล่วงหน้าเพื่อให้ทราบว่าการเปลี่ยนเวลาแบบใดที่เหมาะสม ที่กล่าวไว้ในเพลงส่วนใหญ่คุณมีโอกาสสูงที่จะมีความสัมพันธ์กันดังนั้นการเปลี่ยนเวลาแบบสุ่มอาจทำได้ดีมาก ใครมีประสบการณ์วาดที่นี่?
bryhoyt

2
@bryhoyt: เครื่องผสมจริงรวมสัญญาณเข้าด้วยกัน แค่นั้นแหละ. ไม่มีความล่าช้าเวลาหรือการประมวลผลที่ไม่ใช่เชิงเส้น การคลิปไม่ได้เป็นปัญหาเพราะสัญญาณดั้งเดิมไม่ได้ดังขนาดนั้น
endolith

2
16 + 16bit = 17bits ;-)
nikwal

1
เพียงแค่หารด้วยจำนวนอินพุตจากนั้นการตัดจะไม่สามารถทำได้ และถ้าเสียงเงียบเกินไปให้เปิดเครื่องขยายเสียง…
Sarge Borsch

คำตอบ:


14

เป็นการยากมากที่จะชี้ให้คุณเห็นถึงเทคนิคที่เกี่ยวข้องโดยไม่ทราบบริบทของปัญหาของคุณ

คำตอบที่ชัดเจนคือบอกให้คุณปรับอัตราขยายของแต่ละตัวอย่างเพื่อให้การตัดไม่เกิดขึ้น ไม่ใช่ว่าไม่สมจริงที่จะสมมติว่านักดนตรีจะเล่นนุ่มนวลกว่าในวงดนตรีมากกว่าเมื่อถูกขอให้เล่นเดี่ยว

การบิดเบือนที่แนะนำโดย A + B - AB นั้นไม่เป็นที่ยอมรับ มันสร้างภาพสะท้อนของ A ในแต่ละด้านของฮาร์โมนิกส์ของ B ซึ่งเทียบเท่ากับการมอดูเลตวงแหวนซึ่งน่ากลัวมากถ้า A และ B มีสเปกตรัมที่สมบูรณ์พร้อมฮาร์โมนิกซึ่งไม่ได้อยู่ในอัตราส่วนจำนวนเต็ม ลองใช้กับคลื่นสองลูกที่ความถี่ 220 และ 400 Hz

ฟังก์ชั่นการตัดที่เป็น "ธรรมชาติ" ที่ทำงานบนพื้นฐานตัวอย่างต่อตัวอย่างคือฟังก์ชัน tanh ซึ่งจริง ๆ แล้วมันตรงกับพฤติกรรมการ จำกัด ที่อ่อนนุ่มขององค์ประกอบอะนาล็อกบางตัว นอกเหนือจากนั้นคุณสามารถดูเทคนิคการบีบอัดแบบไดนามิกคลาสสิก - หากระบบของคุณสามารถมองไปข้างหน้าและดูยอดเขามาล่วงหน้าสิ่งนี้จะดียิ่งขึ้น


4
การเพิ่มและการตัดฮาร์ด แค่มองไปที่เครื่องเล่น mod แบบโอเพ่นซอร์ส ใช้การเพิ่มสำหรับการผสมโดยมีการปรับอินพุตให้เหมาะสมเพื่อลดการตัดให้เหลือน้อยที่สุดแล้วตัว จำกัด ฮาร์ด (ตัวเลือกแบบนุ่ม) เป็นบรรทัดฐานไม่ใช่ข้อยกเว้น ...
pichenettes

4
ในสถานการณ์ส่วนใหญ่นี่ไม่ใช่ความรับผิดชอบของนักพัฒนาในการแก้ปัญหา คุณให้ผู้ใช้ / ผู้แต่งมีความเป็นไปได้ในการปรับระดับเสียงของแต่ละช่องและมันก็ขึ้นอยู่กับผู้ใช้ในการทำมิกซ์เพื่อให้การคลิปเป็นที่ยอมรับของพวกเขา ตัวอย่างเช่นใน Renoise ตามค่าเริ่มต้นกำไรของแต่ละเครื่องดนตรี / โน้ตคือ 1 และสิ่งต่าง ๆ เริ่มต้นการคลิปไม่ดีเมื่อเพิ่มแทร็ก - มันขึ้นอยู่กับผู้ใช้ที่จะปรับระดับเสียงของโน้ตหรือเครื่องดนตรีในโมดูลเพื่อป้องกันการตัดบน แทร็กหลัก (ยกเว้นกรณีที่ต้องการ) นี่คือภาพหน้าจอที่แสดงให้เห็นว่า: i.imgur.com/KVxDt.png
pichenettes

2
IIRC, FastTracker ค่อนข้างอนุรักษ์นิยมมากกว่าโดยใช้การลดทอนในแต่ละแทร็กจากนั้นมี "การเพิ่มขึ้นของการแต่งหน้า" ทั่วโลกในกล่องโต้ตอบการกำหนดค่าตามความชอบจาก x1 ถึง x32 ฉันจำได้ว่าเมื่อฉันต้องทำให้โมดูลทั้งหมดของฉันเป็น. WAV สำหรับแผ่นซีดีฉันต้องลองค่าที่ได้รับจนกว่าฉันจะได้พบสิ่งที่ต่ำที่สุดที่ไม่ทำให้เกิดการตัด ...
pichenettes

2
เกี่ยวกับระดับการลดทอนในกรณีที่คุณไม่สามารถมีผู้ใช้ในลูป 1/32 เป็นระดับที่ปลอดภัยอย่างยิ่ง (ไม่มีการตัด) สมมติว่าช่องทางนั้นไม่มีความสัมพันธ์กัน (ซึ่งไม่เป็นความจริงมากนักสำหรับเพลง - ถูกต้องมากขึ้นเมื่อผสมบรรยากาศแบบพื้นหลัง) ค่า 1 / sqrt (32) จะเป็นการประนีประนอมที่ดีระหว่างความดังและความน่าจะเป็นในการตัด ทางออกที่ดีที่สุดยังคงใช้ 1/32 จากนั้นประมวลผลตัวอย่างของคุณด้วยคอมเพรสเซอร์แบบไดนามิก
pichenettes

3
เพิ่ม นั่นคือสิ่งที่ตัวผสมฮาร์ดแวร์ทำอยู่แล้วและเป็นวิธีที่ผู้คนคาดหวังว่าจะมีพฤติกรรม เครื่องผสมระดับระบบสามารถตัดได้ง่าย มันจะเป็นปัญหาใหญ่ถ้าไดรเวอร์ระบบใช้การประมวลผลที่ไม่ใช่เชิงเส้นใด ๆ - ฉันจะจินตนาการถึงความเจ็บปวดของวิศวกรผู้เชี่ยวชาญที่พยายามจะรู้ว่าสิ่งที่พวกเขาได้ยินคือการตั้งค่าปลั๊กอินของคอมเพรสเซอร์หรือการประมวลผลแบบไดนามิกในระดับระบบ ซอฟต์แวร์การผลิตเพลงนำเสนอปลั๊กอินการบีบอัดไดนามิกที่หลากหลายขึ้นอยู่กับผู้ใช้เพื่อให้แน่ใจว่าการผสมของพวกเขาจะไม่ถูกตัดออก
pichenettes

16

วิธีที่ "ถูกต้อง" ทางกายภาพในการทำเช่นนี้คือการสรุปตัวอย่าง อย่างไรก็ตามเมื่อคุณเพิ่มสองตัวอย่างโดยพลการค่าผลลัพธ์อาจเป็นค่าสูงสุดสองเท่า ... ทางออกที่ไร้เดียงสาที่นี่คือการหารด้วย N โดยที่ N คือจำนวนช่องสัญญาณที่ถูกผสม

นั่นไม่ใช่ทางออกที่ไร้เดียงสาแต่เป็นทางออกเดียว นั่นคือสิ่งที่เครื่องผสมสัญญาณอนาล็อกและดิจิตอลทุกเครื่องทำเพราะเป็นสิ่งที่อากาศทำและเป็นสิ่งที่สมองของคุณทำ

น่าเสียดายที่สิ่งนี้ดูเหมือนจะเป็นความเข้าใจผิดที่พบบ่อยซึ่งแสดงให้เห็นโดยอัลกอริทึม "การผสม" (การบิดเบือน) อื่น ๆ ที่ไม่ถูกต้องเหล่านี้:

"การหารด้วย N" เรียกว่าheadroom ; ห้องพิเศษสำหรับจุดสูงสุดที่จัดสรรเหนือระดับ RMS ของรูปคลื่น ปริมาณของ headroom ที่จำเป็นสำหรับการส่งสัญญาณจะถูกกำหนดโดยสัญญาณของปัจจัยยอด (ความเข้าใจผิดเกี่ยวกับระดับสัญญาณดิจิตอลและส่วนหัวอาจเป็นส่วนหนึ่งที่ทำให้เกิดความผิดพลาดในสงครามเสียงดังและเอเลเฟนunk )

ในฮาร์ดแวร์อะนาล็อก headroom อาจจะเป็น 20 เดซิเบล ในฮาร์ดแวร์ DSP มักใช้จุดคงที่พร้อมกับส่วนหัวคงที่ ตัวอย่างเช่นSigmaDSP ของ ADมีขนาด 24 เดซิเบล ในซอฟต์แวร์คอมพิวเตอร์การประมวลผลเสียงมักจะดำเนินการในจุดลอยตัว 32 บิตดังนั้น headroom จึงมีขนาดใหญ่มาก

เป็นการดีที่คุณไม่จำเป็นต้องหารด้วย N เลยคุณแค่รวมสัญญาณเข้าด้วยกันเพราะสัญญาณของคุณจะไม่ถูกสร้างขึ้นที่ 0 dBFS ในตอนแรก

โปรดทราบว่าสัญญาณส่วนใหญ่ไม่ได้มีความสัมพันธ์ซึ่งกันและกันดังนั้นจึงเป็นเรื่องผิดปกติสำหรับช่องทางทั้งหมดของมิกเซอร์ที่จะเข้าไปแทรกแซงการก่อสร้างในเวลาเดียวกัน ใช่การผสมคลื่นไซน์ในเฟสเดียวกัน 10 รายการจะเพิ่มระดับสูงสุด 10 เท่า (20 เดซิเบล) แต่การผสมแหล่งกำเนิดเสียงที่ไม่สอดคล้องกัน 10 แหล่งจะเพิ่มระดับสูงสุดเพียง 3.2 เท่า (10 เดซิเบล) สำหรับสัญญาณจริงค่าจะอยู่ระหว่างสุดขั้วเหล่านี้

ในการรับสัญญาณมิกซ์จาก DAC โดยไม่ต้องเล็มคุณก็จะได้รับการมิกซ์ หากคุณต้องการรักษาระดับ RMS ของการมิกซ์ไว้สูง ๆ โดยไม่ต้องตัดอย่างหนักคุณจะต้องใช้การบีบอัดบางชนิดเพื่อ จำกัด ยอดของรูปคลื่น แต่นี่ไม่ใช่ส่วนหนึ่งของการผสมมันเป็นขั้นตอนที่แยกต่างหาก คุณผสมก่อนด้วยเฮดรูมมากมายจากนั้นใส่ผ่านการบีบอัดช่วงไดนามิกในภายหลังหากต้องการ


1
ฉันเข้าใจแนวคิดเหล่านี้ แต่ฉันไม่แน่ใจว่ามันค่อนข้างถูกต้อง แน่นอนว่าถ้าฉันเพิ่มกลุ่มตัวอย่าง 16 บิต 32 บิตให้จำนวนห้องพักเป็นจำนวนมาก แต่ฉันยังต้องเล่นมิกซ์เสียงที่ได้รับกลับมาในระดับเสียงปกติบนระบบเสียงในโลกแห่งความเป็นจริง ฉันต้องการให้ 2 ช่องเสียงดังกว่าที่แต่ละช่องเล่นแยกกัน แต่ฉันไม่ต้องการตัดภาพ การทำเงินก้อนของฉันเป็น 32 หรือ 64 บิตไม่ได้ช่วยอะไร บางทีฉันอาจเริ่มตอบคำถามของฉันเอง: ตัวอย่างดั้งเดิมควรถูกทำให้เป็นมาตรฐานในระดับที่เงียบกว่าแอมพลิจูดสูงสุด ตามที่คุณแนะนำออกจากห้องผสม
bryhoyt

3
@bryhoyt: ใช่ แต่คุณต้องจำไว้ว่าคลื่นนั้นไม่ค่อยมีความสัมพันธ์ซึ่งกันและกันดังนั้นการเพิ่ม 5 เสียงเข้าด้วยกันไม่ได้ทำให้ยอดเขาสูงถึง 5 เท่า
endolith

1
ขอบคุณ @endolith ฉันคิดว่ามันเป็นหัวใจของสิ่งนี้ทั้งหมดและอธิบายให้ฉันฟังว่าทำไมมันถึงไม่ใหญ่เท่าปัญหาอย่างที่ฉันคิดไว้ครั้งแรก
bryhoyt

ดังนั้นถ้า 10 แหล่งที่ไม่เชื่อมโยงกันให้ 10 เดซิเบลจะหารด้วย sqrt (จำนวนแหล่งที่มา) เป็นฮิวริสติกที่สมเหตุสมผลหรือไม่ นั่นคือถ้าคุณมี 3 แหล่งรวมและหารด้วย sqrt (3)? (ขออภัยที่แสดงความคิดเห็นในกระทู้โบราณ)
nerdfever.com

@ nerdfever.com นั่นเป็นวิธีที่ระดับ RMS รวมกันดังนั้น ... อาจจะ?
endolith

6

สูตร

ผลลัพธ์=A+B-AB

AB=A* * * *B

ผลลัพธ์=ก.(A+B)

ก.1

ก.=0.5ก.=1/2

ก.

ผลลัพธ์[ผม]=ก.[ผม](A[ผม]+B[ผม])

ก.[ผม]ABก.ผลลัพธ์

บางทีนี่อาจเป็น:

ก.[ผม]=(A[ผม]+B[ผม],ก.[ผม-1])

UPDATE: ตามคำแนะนำของ hotpaw2 คุณสามารถหน่วงสัญญาณอินพุทได้ แต่ไม่ใช่การระงับการรับสัญญาณ สิ่งนี้เรียกว่า "ตัว จำกัด การดูล่วงหน้า"


โดย "AB" ฉันหมายถึง "A * B" ฉันเข้าใจว่าแอมพลิจูดสามารถเป็นได้ทั้งบวกหรือลบ คุณพูดถูกสมการของฉันไม่สมเหตุสมผลสำหรับการรวมกันที่เกี่ยวข้องกับแอมพลิจูดลบ
bryhoyt

ฉันต้องผสมคลื่นไซนัสที่แตกต่างกัน 8 ถึง 10 (N) สังเกตุฉันรู้ว่าค่าที่ถูกต้องคือประมาณ 0.3 ... 1 / √Nดูเหมือนจะถูกต้อง ... ลิงก์ใด ๆ ที่ทำให้สูตรนั้นถูกต้อง?
Zibri

5

วิธีนี้สามารถทำได้สำหรับการผสมแบบเรียลไทม์เพื่อใช้ AGC ที่ดูล่วงหน้าซึ่งการได้รับหนึ่งหรือทั้งสองช่องสัญญาณจะลดลงในอัตราที่ยากต่อการรับรู้ก่อนที่แอมพลิจูดรวมจะเกินขีด จำกัด การคลิป ยิ่งมองไปข้างหน้าน้อยลงการปรับอัตราขยาย AGC จะได้ยินได้มากขึ้นหรืออัตราขยายสูงสุดสำหรับการปรับอัตราขยายที่นุ่มนวลจะเข้าใกล้มากขึ้นถึง 0.5 ต่อช่องที่ขีด จำกัด สำหรับแหล่งเสียงที่มีความสามารถคาดการณ์ได้เราสามารถใช้สถิติเกี่ยวกับพฤติกรรมของซองจดหมายเมื่อเวลาผ่านไปเพื่อคาดเดาขีด จำกัด การปรับตัว แต่มีความเป็นไปได้ที่จะเกิดความล้มเหลว (ซึ่งอาจเป็นการปรับค่า AGC แบบฉับพลัน)


นี่เป็นตัว จำกัด การมองล่วงหน้าไม่ใช่ AGC การมองล่วงหน้า
Bjorn Roche

2
@BjornRoche: ไม่สามารถพิจารณาผู้ จำกัด ประเภท AGC ได้หรือไม่
endolith

ตัว จำกัด บางตัวเป็น AGC แต่ตัว จำกัด Lookahead ไม่ใช่ AGC
Bjorn Roche

1
@BjornRoche มันเป็นไปโดยอัตโนมัติและควบคุมการได้รับ ...
Olli Niemitalo

2

ฉันได้พูดคุยกับนักออกแบบเครื่องผสมในช่วงปลายปี 1990 และปี 2000 คนแรกที่เกิดขึ้นในคลื่นดิจิตอล ฉันคิดว่าผู้ชายคนนี้เป็นนักออกแบบสำหรับ SPL แต่อาจจะไม่ใหญ่ขนาดนั้นฉันจำไม่ได้เลยว่าไม่ใช่ทั้งชื่อและแบรนด์ฉันแค่จำได้ว่าตัวเครื่องใหญ่และแพงจริงๆ

เราพูดกันมานานและในที่สุดก็พูดถึงเทคนิคในการรับรองว่าช่องสัญญาณ 64/128 @ 24bits ของพวกเขารวมกันนั้นยังคงเป็นช่องสัญญาณผสมที่แม่นยำ 24 บิตโดยไม่มีการตัด

เทคนิคที่เขาอธิบายนั้นค่อนข้างง่าย 64 แทร็ก (ใน 24 บิต) ถูกเพิ่มเข้ามาในช่อง 48 บิตซึ่งการคลิปไม่สามารถเกิดขึ้นได้ ตรง.

ฉันไม่สามารถพูดได้ว่าวิธีการที่สัญญาณนั้น dithered 48 กลับจากที่ 24 บิต อาจจะเป็นที่ที่ใช้สูตรครัวที่ยุ่งยาก

และอาจมีเทคนิคมากมายที่จะทำให้สำเร็จเหนือสิ่งอื่นใดไม่ว่าจะเป็นในแบบเรียลไทม์หรือด้วยสัญญาณทั้งหมดที่บันทึกไว้ด้วยจุดสูงสุดที่ง่ายต่อการพิจารณา ... การปรับสภาพแบบปกติทุกอย่างที่ฉันคิด


2

ลดระดับเสียงของโลก ตัวติดตามแรงกระตุ้นส่งสัญญาณแบบคลาสสิกที่ระดับเสียงสูงสุด 33% โดยค่าเริ่มต้น

ดูเหมือนว่าทั้งสองดังพอสำหรับเพลงที่มีช่องไม่กี่ (4 ช่อง Amiga MODs) และเบาพอสำหรับเพลงที่มี 50 ช่อง (เนื่องจากเนื้อหาของช่องโดยทั่วไปจะไม่สัมพันธ์กันดังนั้นระดับเสียงจึงไม่เพิ่มขึ้นอย่างรวดเร็วในระดับหนึ่ง ... บวกสองสามแชนเนลที่จะส่งออกที่ระดับเสียงสูงสุด นอกจากนี้ยังมีพื้นที่ว่างเพียงพอสำหรับช่องแพนแพนด้านซ้ายหรือขวา (ซึ่งใช้ช่วง 66%)

นอกจากนี้คุณไม่ต้องการที่จะเพิ่มช่องของคุณเข้าด้วยกันใน 16 บิตคุณต้องการที่จะเพิ่มช่องของคุณเข้าด้วยกันใน 32 บิตจากนั้นตัดผลลัพธ์และลดลงเป็น 16 บิตในตอนท้าย คุณจะต้องมีช่วงที่สูงขึ้นเพื่อที่จะได้ไม่พันรอบในขณะที่ทำคณิตศาสตร์ อีกทางเลือกหนึ่งคือการใช้จุดลอยตัว 32 บิต (ซึ่งสะดวกสำหรับการทำฟิลเตอร์เอฟเฟกต์ ฯลฯ )


0

ฉันคิดว่ากุญแจสำคัญคือถ้าคุณมีค่า 16 บิตและเพิ่ม 2 ค่าของคุณเข้าด้วยกันซึ่งอาจเป็นมากกว่าค่าสูงสุดคุณก็มี 2 ตัวเลือก:

1) เพิ่มทั้ง 32 บิตเพิ่มจากนั้นส่งคืนค่าสูงสุดหากการเพิ่มเกินค่านั้น แล้วเหวี่ยงมันกลับไปที่ 16 บิต ตัวอย่างเช่นหากค่าของคุณคือ 32768 และ 34567 จะมีค่าเกิน 65535 และคีย์คือให้ส่งคืน 65535 คุณจะทำสิ่งเดียวกันหากใช้ค่าที่ลงชื่อในตอนท้ายสุดของค่าต่ำสุด

2) บีบอัดค่าทั้งสองแล้วเพิ่มเข้าด้วยกัน

อันแรกก็คือการตัดที่ยากเป็นหลักที่สองคือการตัดที่อ่อนนุ่ม ระบบอะนาล็อกนั้นถูกตัดอย่างหนัก


0

พวกเขาจะเป็นสองเท่าของพื้นที่ถ้าความถี่ในแทร็กทั้งสองนั้นใช้ความถี่ของพื้นที่เท่ากันอย่างชาญฉลาด ใช้ eq และการบีบอัดเพื่อหลีกเลี่ยงปัญหานี้โดยการแกะสลักส่วนต่าง ๆ ของสเปกตรัมความถี่สำหรับแต่ละเสียงและควบคุมเสียงชั่วครู่และเสียงคงที่เพื่อให้ทุกอย่างโผล่ออกมาในที่ที่ควร บางทีนั่นอาจไม่ตอบคำถาม คุณสามารถหน่วงสัญญาณความถี่ต่ำได้ถึง 2 ms มันจะไม่ยกเลิกผ่านเฟสเพราะความยาวคลื่นยาวกว่าความถี่ที่สูงขึ้นและมันจะเพิ่มพื้นที่ว่างเนื่องจากทรานแซคชันไม่ตรงตามเวลาด้วยสัญญาณเบสพลังเสียงหิว สิ่งที่เพิ่มความล่าช้าเชิงเส้นมากขึ้นสัญญาณที่ต่ำลงจะน่าสนใจในการทดสอบ


-1
A + B + {
    (|A| = A) = (|B| = B) = true: -AB;
    (|A| = A) = (|B| = B) = false: AB;
    else: 0
}

นั่นคือถ้าทั้ง A และ B แชร์สัญญาณให้ใช้ออฟเซ็ตขีด จำกัด ขนาดของ offset เป็นผลคูณของ A และ B ทิศทางของ offset ตรงข้ามกับ A และ B

หาก A และ B ไม่แชร์สัญญาณจะไม่มีการ จำกัด เนื่องจากไม่มีวิธีล้น


โปรดทราบว่านี่ไม่ใช่การสลับ หากคุณต้องการผสมผสานเสียงมากกว่า 2 เสียงคุณต้องผสมเสียงทั้งหมดในครั้งเดียว ในกรณีนี้คุณควร "แผ่" ทุกอย่างในทิศทางเดียว (ถ้าคุณสูงเกินไปให้แบนค่าบวกลงกับค่าลบถ้าคุณต่ำเกินไปให้ปรับค่าลบลงกับค่าบวก) เมื่อคุณคิดการชดเชย (ใช้สัดส่วนข้ามค่าที่เหลือ); ใช้วิธีการแบบไบนารี แต่ปรับขนาดตัว จำกัด โดยอิงตามจำนวนของค่าแบบผสม
รวย Remer

-1

คำแนะนำของฉัน:

  1. แปลงรูปแบบเสียงแทร็กจากจุดคงที่ 16 บิตเป็นจุดลอยตัว 32 บิต
  2. เพิ่มค่าตัวอย่างปัจจุบันของแทร็กทั้งหมดที่จะผสม
  3. อย่าทำอะไรอย่างอื่น

ผู้ใช้อาจต้องการประมวลผลสตรีมแบบผสมนี้ด้วยการบีบอัดและ / หรือการ จำกัด ก่อนการทำ dithering และ reconversion เป็นรูปแบบจุดคงที่ 16 บิต (สมมติว่าการแปลงนี้ ... มิกซ์ดาวน์เพื่อส่งไปยังวิศวกรผู้เชี่ยวชาญมักจะอยู่ในรูปแบบความละเอียดสูงกว่า)


2
สวัสดีและยินดีต้อนรับสู่ DSP.se เราขอขอบคุณสำหรับความพยายามที่มีส่วนร่วม แต่ฉันไม่รู้สึกเช่นนี้ตอบคำถามของ OP เลย OP ไม่ได้กล่าวถึง "ผู้ใช้" ของระบบของเขา: เขาอาจเล่นด้วยตัวเองหรือเขียนโปรแกรมตามความต้องการเฉพาะ ฉันขอโทษที่จะลงคะแนน: ฉันยินดีที่จะแก้ไขการลงคะแนนของฉันถ้าคุณทำให้คำตอบของคุณมากขึ้นถึงจุด นอกจากนี้โปรดดูแลการจัดรูปแบบของคุณ: ดูคำถามที่พบบ่อยเพื่อดูวิธีการเขียนคำตอบที่ดี
Penelope
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.