ฉันจะเปรียบเทียบไฟล์เสียง 2 ไฟล์ได้อย่างไรโดยคืนเปอร์เซ็นต์ความแตกต่าง


12

มีวิธีเปรียบเทียบไฟล์เสียง 2 ไฟล์โดยจะมีการคืนเปอร์เซ็นต์ที่แตกต่างกันหรือไม่? ฉันใช้C # VS08,. NET Framework 3.5

แก้ไข: ความแตกต่างของเสียง (เช่นเช่นเสียง 1 "HELP":, เสียง 2 "HELP ME PLEASE":, จะคืนความแตกต่างเป็นเปอร์เซ็นต์ระหว่างเสียง 2 นี้)

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

ความช่วยเหลือจะได้รับการชื่นชมอย่างมาก


7
สิ่งที่คุณกำลังอธิบายอยู่ในโดเมนของการประมวลผลสัญญาณดิจิตอล พูดจาโผงผางถ้าคุณต้องถามว่าจะทำอย่างไรคุณก็ไม่มีรูปร่างพร้อมที่จะทำ ฉันสงสัยอย่างมากว่า. NET มีบางสิ่งบางอย่างที่ซับซ้อนในตัว

ฉันได้เห็นงานวิจัยเกี่ยวกับเรื่องนี้เมื่อเร็ว ๆ นี้: อัลกอริธึมการค้นหาเสียงทางอุตสาหกรรม (PDF)พวกเขาเปรียบเทียบสเปกตรัมความถี่ เทคนิคที่ใช้ใน iPhone app ที่นิยมแซม

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

1
คุณกำลังพยายามที่จะเข้าถึงปัญหาการรู้จำเสียงพูดที่นักวิจัยอย่างจริงจังทั่วโลกได้แก้ปัญหามานานหลายทศวรรษ เท่าที่นี่เป็นสิ่งที่ยอดเยี่ยมที่สามารถทำได้ฉันไม่คิดว่ามันจะเป็นเรื่องง่ายสำหรับคนคนหนึ่งโดยปราศจากความรู้เกี่ยวกับ DSP, เครือข่ายเบย์, ตัวแยกประเภทและอื่น ๆ
Phonon

2
คุณต้องการเปรียบเทียบความแตกต่างของเสียงหรือเพียงแค่ในข้อความที่ถอดเสียงหรือไม่ ง่ายกว่ามากเมื่อคุณผ่านอุปสรรค์เริ่มแรก
Emre

คำตอบ:


8

คุณช่วยกำหนด "เปอร์เซ็นต์ของความแตกต่าง" ได้ไหม

ตัวอย่างเช่นโปรดบอกเราว่าคุณคาดหวังว่าจะได้รับคุณค่าใด:

  • ระหว่างไฟล์สองเวอร์ชันที่เข้ารหัสด้วยการตั้งค่าต่างกันหรือไม่?
  • ระหว่างไฟล์เดียวกันสองเวอร์ชันยกเว้นว่าไฟล์หนึ่งจะเร็วกว่าอีกเล็กน้อยหรือไม่
  • ระหว่างการบันทึกเสียงสองแบบเดียวกัน แต่ใช้ไมโครโฟน / อุปกรณ์บันทึกเสียงต่างกัน
  • ระหว่างสองบันทึกของคนคนเดียวกันพูดคำเดียวกันหรือไม่
  • ระหว่างการบันทึกของคนสองคนที่พูดคำเดียวกันกับฉันทลักษณ์ที่แตกต่างกัน (จังหวะ / ทำนอง)?
  • ระหว่างสองบันทึกของคนต่างพูดคำเดียวกัน
  • ระหว่างการบันทึกของคนสองคนที่พูดประโยคเดียวกันยกเว้นสองสามคำ?
  • ระหว่างการบันทึกของคนกับของวัว?
  • ระหว่างการบันทึกเครื่องบินและดนตรี?

คุณต้องการวัดอะไร เนื้อหาคำพูด (คำ)? ทำนองจังหวะ? ความคล้ายคลึงกันของเสียงโดยรวม? ความแตกต่างของการเข้ารหัส / การบันทึกอุปกรณ์?


3
อย่ากลั้นลมหายใจของเรา คำถามคือสองปีและ OP คือ AWOL
Emre

1
โอ๊ะโอฉันสังเกตเห็นเฉพาะวันที่ย้ายข้อมูล (ล่าสุด)
pichenettes

3

กรุณาดูที่ITU-T P.862 เป็นรูปแบบมาตรฐานของPESQ (Perceptual Evaluation of Speech Quality)ตระกูลมาตรฐานสำหรับการประเมินคุณภาพเสียงพูดตามประสบการณ์ของผู้ใช้ระบบโทรศัพท์

นี่เป็นเพียงคำพูด (ไม่ใช่ข้อมูลเสียงอื่น ๆ ) คุณเปรียบเทียบสองไฟล์เสียงแหล่งที่มาและเสื่อมโทรมและคุณได้รับค่าเป็นเปอร์เซ็นต์หรือเทียบเท่า MOS


2
ยินดีต้อนรับสู่ DSP.stackexchange! ขอบคุณที่ให้คำตอบ แต่ฉันแนะนำให้ดูคำถามที่พบบ่อยเพื่อปรับปรุงคำตอบ / คำถามของคุณ ลายเซ็นจะหมดกำลังใจ - คุณ "ลงชื่อ" ด้วยหมายเลขอ้างอิงที่ลงทะเบียนของคุณต่อไป นอกจากนี้ยังมีการเชื่อมโยงไปยังเนื้อหาภายนอกตัวอย่างและการชี้แจงสำหรับวิธีการที่คุณกล่าวถึงในคำตอบของคุณเป็นวิธีที่ดี :)
Penelope

-3

ฉันใช้ฟังก์ชั่นจาวาสคริปต์เพื่อเปรียบเทียบไฟล์เสียงพ่วง ด้วยการใช้ตรรกะเดียวกันคุณจะสามารถเปรียบเทียบไฟล์ใด ๆ ในภาษาใดก็ได้

function compireAudio(){ 
var audio1 = "http://soundjax.com/reddo/86502%5Ealarm.mp3"; 
var audio2 = "http://soundjax.com/reddo/44368%5EALARME.mp3";
var i,j,d;
var matching = 0;
var t = 0;var i,j,d;
var matching = 0;
var t = 0;
var audio1Arr = Array();
var audio1Len = audio1.length;
for (i = 1; i<=audio1Len; i++)
{
    //reverse so its like a stack
    d = audio1.charCodeAt(audio1Len-i);
    for (j = 0; j < 8; j++) 
    {
        audio1Arr.push(d%2);
        d = Math.floor(d/2);
    }
}
var audio2Len = audio2.length;
for (i = 1; i<=audio2Len; i++)
{
    //reverse so its like a stack
    d = audio2.charCodeAt(audio2Len-i);
    for (j = 0; j < 8; j++) 
    {
        if(d%2 == audio1Arr[t])
        {
            matching++;
        }
        d = Math.floor(d/2);
        t++;
    }
}
var avarage = Number(matching)/((Number(t)+Number(audio1Arr.length))/Number(2))*Number(100);
alert('The Matching with the two audio is '+avarage+' %.');

}


3
การเปรียบเทียบ bytestream โดยตรงไม่ทำงาน การบันทึกสองรายการสามารถแยกแยะความแตกต่างได้ แต่รับการเข้ารหัสเป็น bystreams ที่แตกต่างกันสองแบบด้วยการจับคู่ 0% ตามรหัสของคุณ
pichenettes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.