portaldacalheta.pt
  • หลัก
  • การเพิ่มขึ้นของระยะไกล
  • ผู้คนและทีมงาน
  • การวางแผนและการพยากรณ์
  • การออกแบบ Ux
ส่วนหลัง

Shazam ทำงานอย่างไร? อัลกอริทึมการจดจำเพลงการพิมพ์ลายนิ้วมือและการประมวลผล



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

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



อัลกอริธึมการรับรู้เพลง shazam ภาพประกอบนามธรรม



แต่ Shazam ทำงานอย่างไร? อัลกอริทึมของ Shazam ได้รับการเปิดเผยไปทั่วโลกโดยนักประดิษฐ์ Avery Li-Chung Wang ในปี 2003 ในบทความนี้เราจะพูดถึงพื้นฐานของอัลกอริธึมการจดจำเพลงของ Shazam

อนาล็อกเป็นดิจิตอล - สุ่มตัวอย่างสัญญาณ

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

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

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

การแปลงเกี่ยวข้องกับ การหาปริมาณ ของอินพุตและจำเป็นต้องมีข้อผิดพลาดเล็กน้อย ดังนั้นแทนที่จะแปลงไฟล์ ตัวแปลงอนาล็อกเป็นดิจิตอล ทำการแปลงจำนวนมากกับสัญญาณชิ้นเล็ก ๆ ซึ่งเป็นกระบวนการที่เรียกว่า การสุ่มตัวอย่าง

การสุ่มตัวอย่างและสัญญาณ

ทฤษฎีบท Nyquist-Shannon บอกให้เราทราบว่าอัตราการสุ่มตัวอย่างใดที่จำเป็นในการจับความถี่ที่แน่นอนในสัญญาณต่อเนื่อง โดยเฉพาะอย่างยิ่งในการจับความถี่ทั้งหมดที่มนุษย์สามารถได้ยินในสัญญาณเสียงเราต้องสุ่มตัวอย่างสัญญาณที่ความถี่สองเท่าของช่วงการได้ยินของมนุษย์ หูของมนุษย์สามารถตรวจจับความถี่ได้ประมาณ 20 Hz ถึง 20,000 Hz ด้วยเหตุนี้เสียงมักจะถูกบันทึกด้วยอัตราการสุ่มตัวอย่าง 44,100 Hz นี่คืออัตราการสุ่มตัวอย่างของ คอมแพคดิสก์ และยังเป็นอัตราที่ใช้บ่อยที่สุดด้วย MPEG-1 เสียง ( วีซีดี , SVCD , MP3 ). (อัตราเฉพาะนี้ถูกเลือกโดย Sony เนื่องจากสามารถบันทึกลงในอุปกรณ์วิดีโอที่ดัดแปลงซึ่งทำงานด้วยความเร็ว 25 เฟรมต่อวินาที ( เพื่อน ) หรือ 30 เฟรมต่อวินาที (โดยใช้ไฟล์ NTSC เครื่องบันทึกวิดีโอขาวดำ) และครอบคลุมแบนด์วิดท์ 20,000 Hz ที่คิดว่าจำเป็นเพื่อให้เข้ากับอุปกรณ์บันทึกอนาล็อกระดับมืออาชีพในเวลานั้น) ดังนั้นเมื่อเลือกความถี่ของตัวอย่างที่ต้องการบันทึกคุณอาจต้องการใช้ 44,100 Hz

การบันทึก - การบันทึกเสียง

การบันทึกสัญญาณเสียงตัวอย่างเป็นเรื่องง่าย เนื่องจากการ์ดเสียงสมัยใหม่มาพร้อมกับตัวแปลงอนาล็อกเป็นดิจิตอลอยู่แล้วเพียงแค่เลือกภาษาการเขียนโปรแกรมค้นหาไลบรารีที่เหมาะสมตั้งค่าความถี่ของตัวอย่างจำนวนช่องสัญญาณ (โดยทั่วไปคือโมโนหรือสเตอริโอ) ขนาดตัวอย่าง (เช่นตัวอย่าง 16 บิต ). จากนั้นเปิดบรรทัดจากการ์ดเสียงของคุณเช่นเดียวกับสตรีมอินพุตใด ๆ และเขียนลงในอาร์เรย์ไบต์ นี่คือวิธีที่สามารถทำได้ใน Java:

private AudioFormat getFormat() { float sampleRate = 44100; int sampleSizeInBits = 16; int channels = 1; //mono boolean signed = true; //Indicates whether the data is signed or unsigned boolean bigEndian = true; //Indicates whether the audio data is stored in big-endian or little-endian order return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian); } final AudioFormat format = getFormat(); //Fill AudioFormat with the settings DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); final TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info); line.open(format); line.start();

เพียงอ่านข้อมูลจาก TargetDataLine (ในตัวอย่างนี้แฟล็ก running คือตัวแปรโกลบอลที่ถูกหยุดโดยเธรดอื่น - ตัวอย่างเช่นหากเรามี GUI พร้อมปุ่ม STOP)

OutputStream out = new ByteArrayOutputStream(); running = true; try { while (running) { int count = line.read(buffer, 0, buffer.length); if (count > 0) { out.write(buffer, 0, count); } } out.close(); } catch (IOException e) { System.err.println('I/O problems: ' + e); System.exit(-1); }

โดเมนเวลาและความถี่ - โดเมน

สิ่งที่เรามีในอาร์เรย์ไบต์นี้คือสัญญาณที่บันทึกในไฟล์ โดเมนเวลา . สัญญาณโดเมนเวลาแสดงถึงการเปลี่ยนแปลงแอมพลิจูดของสัญญาณเมื่อเวลาผ่านไป

ในช่วงต้นทศวรรษที่ 1800 Jean-Baptiste Joseph Fourier ได้ค้นพบที่น่าทึ่งว่าสัญญาณใด ๆ ในโดเมนเวลานั้นเทียบเท่ากับผลรวมของสัญญาณไซน์ไซน์ธรรมดาจำนวนหนึ่ง (อาจไม่มีที่สิ้นสุด) เนื่องจากส่วนประกอบแต่ละไซน์มีความถี่แอมพลิจูดที่แน่นอน และเฟส อนุกรมของไซนัสที่รวมกันเป็นสัญญาณโดเมนเวลาดั้งเดิมเรียกว่ามัน อนุกรมฟูริเยร์ .

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

หน่วยความจำรั่วมีลักษณะอย่างไร

การรับรู้เพลง - ความถี่

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

อนุกรมฟูริเยร์ของคลื่นสี่เหลี่ยม 1 เฮิรตซ์ ที่มา: René Schwarz

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

การแปลงฟูเรียร์แบบไม่ต่อเนื่อง

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

หนึ่งในอัลกอริทึมเชิงตัวเลขที่ได้รับความนิยมมากที่สุดสำหรับการคำนวณ DFT คือ การแปลงฟูเรียร์อย่างรวดเร็ว (FFT) โดยรูปแบบที่ใช้บ่อยที่สุดของ FFT คือไฟล์ อัลกอริทึม Cooley - Tukey . นี่คืออัลกอริทึมการแบ่งและพิชิตที่แบ่ง DFT แบบวนซ้ำออกเป็น DFT ขนาดเล็กจำนวนมาก ในขณะที่การประเมิน DFT ต้องใช้โดยตรง หรือ( n 2) การดำเนินการกับ Cooley-Tukey FFT ผลลัพธ์เดียวกันจะถูกคำนวณในรูปแบบ หรือ( n บันทึก n ) การดำเนินงาน

การหาไลบรารีที่เหมาะสมสำหรับ FFT ไม่ใช่เรื่องยาก นี่คือบางส่วนของพวกเขา:

  • ค - FFTW
  • C ++ - EigenFFT
  • Java - เจทรานส์ฟอร์ม
  • Python - NumPy
  • ทับทิม - ทับทิม FFTW3 (เชื่อมต่อกับ FFTW)

ด้านล่างนี้เป็นตัวอย่างของฟังก์ชัน FFT ที่เขียนด้วย Java (FFT ใช้จำนวนเชิงซ้อนเป็นอินพุตหากต้องการเข้าใจความสัมพันธ์ระหว่างจำนวนเชิงซ้อนกับฟังก์ชันตรีโกณมิติโปรดอ่าน สูตรของออยเลอร์ .)

public static Complex[] fft(Complex[] x) { int N = x.length; // fft of even terms Complex[] even = new Complex[N / 2]; for (int k = 0; k

และนี่คือตัวอย่างของสัญญาณก่อนและหลังการวิเคราะห์ FFT:

สัญญาณก่อนและหลังการวิเคราะห์ FFT

การจดจำเพลง: การพิมพ์ลายนิ้วมือเพลง

ผลข้างเคียงที่น่าเสียดายอย่างหนึ่งของ FFT คือเราสูญเสียข้อมูลจำนวนมากเกี่ยวกับเวลา (แม้ว่าในทางทฤษฎีจะสามารถหลีกเลี่ยงสิ่งนี้ได้ แต่ค่าใช้จ่ายในการแสดงก็มหาศาลมาก) สำหรับเพลงความยาว 3 นาทีเราจะเห็นความถี่และขนาดทั้งหมดของพวกเขา แต่เราไม่มีเงื่อนงำเมื่ออยู่ในเพลงที่พวกเขาปรากฏ แต่นี่คือคีย์ข้อมูลที่ทำให้เพลงมันคืออะไร! เราต้องรู้ว่าเวลาใดที่แต่ละความถี่ปรากฏขึ้น

นั่นคือเหตุผลที่เรานำเสนอหน้าต่างบานเลื่อนหรือส่วนข้อมูลและแปลงข้อมูลเพียงส่วนนี้ ขนาดของแต่ละชิ้นสามารถกำหนดได้หลายวิธี ตัวอย่างเช่นหากเราบันทึกเสียงในรูปแบบสเตอริโอด้วยตัวอย่าง 16 บิตที่ 44,100 Hz หนึ่งวินาทีของเสียงดังกล่าวจะเท่ากับ 44,100 ตัวอย่าง * 2 ไบต์ * 2 แชนเนล≈ 176 kB ถ้าเราเลือกขนาดของท่อน 4 kB เราจะมีข้อมูล 44 ชิ้นเพื่อวิเคราะห์ในทุก ๆ วินาทีของเพลง มีความหนาแน่นเพียงพอสำหรับการวิเคราะห์โดยละเอียดที่จำเป็นสำหรับการระบุเสียง

ตอนนี้กลับไปที่การเขียนโปรแกรม:

byte audio [] = out.toByteArray() int totalSize = audio.length int sampledChunkSize = totalSize/chunkSize; Complex[][] result = ComplexMatrix[sampledChunkSize][]; for(int j = 0;i

ในวงในเรากำลังใส่ข้อมูลโดเมนเวลา (ตัวอย่าง) ลงในจำนวนเชิงซ้อนโดยมีส่วนจินตภาพเป็น 0 ในวงนอกเราวนซ้ำผ่านชิ้นส่วนทั้งหมดและทำการวิเคราะห์ FFT ในแต่ละส่วน

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

อย่างไรก็ตามในเพลงหนึ่งช่วงของความถี่ที่หนักแน่นอาจแตกต่างกันไประหว่าง C - C1 ต่ำ (32.70 Hz) และ C - C8 สูง (4,186.01 Hz) นี่เป็นช่วงเวลาสำคัญที่จะครอบคลุม ดังนั้นแทนที่จะวิเคราะห์ช่วงความถี่ทั้งหมดในครั้งเดียวเราสามารถเลือกช่วงเวลาที่เล็กลงได้หลายช่วงโดยเลือกตามความถี่ทั่วไปของส่วนประกอบดนตรีที่สำคัญและวิเคราะห์แต่ละช่วงแยกกัน ตัวอย่างเช่นเราอาจใช้ช่วงเวลา ผู้ชายคนนี้ เลือกใช้อัลกอริทึม Shazam เหล่านี้คือ 30 Hz - 40 Hz, 40 Hz - 80 Hz และ 80 Hz - 120 Hz สำหรับเสียงต่ำ (เช่นครอบคลุมกีตาร์เบส) และ 120 Hz - 180 Hz และ 180 Hz - 300 Hz สำหรับเสียงกลางและสูงกว่า (ครอบคลุมเสียงร้องและเครื่องดนตรีอื่น ๆ ส่วนใหญ่)

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

public final int[] RANGE = new int[] { 40, 80, 120, 180, 300 }; // find out in which range is frequency public int getIndex(int freq) { int i = 0; while (RANGE[i]

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

เพื่อให้ค้นหาเสียงได้ง่ายลายเซ็นนี้จะกลายเป็นกุญแจสำคัญในตารางแฮช ค่าที่สอดคล้องกันคือเวลาที่ชุดความถี่นี้ปรากฏในเพลงพร้อมกับ ID เพลง (ชื่อเพลงและศิลปิน) นี่คือตัวอย่างว่าระเบียนเหล่านี้อาจปรากฏในฐานข้อมูลได้อย่างไร

แฮชแท็ก เวลาเป็นวินาที เพลง
30 51 99 121 195 53.52 เพลง A โดยศิลปิน A.
33 56 92 151 185 12.32 เพลง B โดยศิลปิน B
39 26 89 141 251 15.34 เพลง C โดยศิลปิน C
32 67 100 128 270 78.43 เพลง D โดยศิลปิน D
30 51 99 121 195 10.89 เพลง E โดยศิลปิน E
34 57 95 111 200 54.52 เพลง A โดยศิลปิน A.
34 41 93 161 202 11.89 เพลง E โดยศิลปิน E


หากเราเรียกใช้ไลบรารีเพลงทั้งหมดผ่านขั้นตอนการระบุเพลงนี้เราสามารถสร้างฐานข้อมูลด้วยลายนิ้วมือที่สมบูรณ์ของทุกเพลงในไลบรารี

ที่เกี่ยวข้อง: บทช่วยสอนการเรียนรู้เชิงลึก: จาก Perceptrons ไปจนถึง Deep Networks

อัลกอริทึมเพลง: การระบุเพลง

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

ในขณะที่เกิดขึ้นแท็กแฮชจำนวนมากจะตรงกับตัวระบุเพลงของหลายเพลง ตัวอย่างเช่นอาจเป็นไปได้ว่าบางท่อนของเพลง A ฟังดูเหมือนเพลง E บางท่อนแน่นอนว่าไม่น่าแปลกใจนักดนตรีมักจะ 'ยืม' เลียและริฟฟ์จากกันและกันและทุกวันนี้โปรดิวเซอร์ก็ลองฟังเพลงอื่น ๆ ทั้งหมด เวลา. ทุกครั้งที่เราจับคู่แฮชแท็กจำนวนการจับคู่ที่เป็นไปได้จะน้อยลง แต่มีแนวโน้มว่าข้อมูลนี้เพียงอย่างเดียวจะไม่ จำกัด การจับคู่ให้แคบลงเหลือเพียงเพลงเดียว ดังนั้นมีอีกสิ่งหนึ่งที่เราต้องตรวจสอบด้วยอัลกอริธึมการจดจำเพลงของเราและนั่นก็คือเวลา

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

ตัวอย่างเช่นหากคุณดูในตารางด้านบนคุณจะเห็นแฮชแท็กนั้น 30 51 99 121 195 สอดคล้องกับทั้งเพลง A และเพลง E หากหนึ่งวินาทีต่อมาเราจับคู่แฮช 34 57 95 111 200 นั่นคืออีกหนึ่งคู่ของเพลง A แต่ในกรณีนี้เรารู้ว่าทั้งแฮชและความแตกต่างของเวลาตรงกัน

// Class that represents specific moment in a song private class DataPoint { private int time; private int songId; public DataPoint(int songId, int time) { this.songId = songId; this.time = time; } public int getTime() { return time; } public int getSongId() { return songId; } }

มาดูกัน ผมหนึ่ง และ ผม2 เป็นช่วงเวลาในเพลงที่บันทึกไว้และ ญหนึ่ง และ ญ2 เป็นช่วงเวลาในเพลงจากฐานข้อมูล เราสามารถพูดได้ว่าเรามีการแข่งขันสองรายการที่มีการแข่งขันต่างเวลาหาก:

RecordedHash (iหนึ่ง) = SongInDBHash (ญหนึ่ง) และ RecordedHash (i2) = SongInDBHash (ญ2)

โปรแกรมที่ใช้ c++

และ

เอบีเอส (iหนึ่ง- ผม2) = abs (ญหนึ่ง- ญ2)

ซึ่งทำให้เรามีความยืดหยุ่นในการบันทึกเพลงตั้งแต่ต้นกลางหรือตอนท้าย

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

จากบนลงล่าง

เพื่อตอบคำถาม“ Shazam ทำงานอย่างไร” นี่คือภาพรวมของกระบวนการจดจำและการจับคู่เพลงทั้งหมดจากบนลงล่าง:

การจดจำเพลงและกระบวนการจับคู่

สำหรับระบบประเภทนี้ฐานข้อมูลอาจมีขนาดใหญ่มากดังนั้นจึงเป็นเรื่องสำคัญที่จะต้องใช้ฐานข้อมูลที่ปรับขนาดได้ ไม่จำเป็นต้องมีความสัมพันธ์เป็นพิเศษและแบบจำลองข้อมูลนั้นค่อนข้างเรียบง่ายดังนั้นจึงเป็นกรณีที่ดีสำหรับการใช้ฐานข้อมูล NoSQL บางประเภท

Shazam ทำงานอย่างไร? คุณรู้แล้วตอนนี้

ซอฟต์แวร์จดจำเพลงประเภทนี้สามารถใช้เพื่อค้นหาความคล้ายคลึงกันระหว่างเพลง ตอนนี้คุณเข้าใจวิธีการทำงานของ Shazam แล้วคุณจะเห็นว่าแอปพลิเคชั่นนี้มีแอพพลิเคชั่นที่นอกเหนือไปจาก Shazaming ที่เล่นเพลงคิดถึงบนวิทยุแท็กซี่ได้อย่างไร ตัวอย่างเช่นสามารถช่วยระบุการลอกเลียนแบบในดนตรีหรือเพื่อค้นหาว่าใครเป็นแรงบันดาลใจเริ่มต้นของผู้บุกเบิกดนตรีบลูส์แจ๊สร็อคป๊อปหรือแนวเพลงอื่น ๆ บางทีการทดลองที่ดีอาจเป็นการเติมเต็มฐานข้อมูลตัวอย่างเพลงด้วยดนตรีคลาสสิกของ Bach, Beethoven, Vivaldi, Wagner, Chopin และ Mozart และลองค้นหาความคล้ายคลึงกันระหว่างเพลง คุณคงคิดว่าแม้แต่ Bob Dylan, Elvis Presley และ Robert Johnson ก็เป็นนักลอกเลียนแบบ!

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

ที่เกี่ยวข้อง: บทนำเกี่ยวกับทฤษฎีแมชชีนเลิร์นนิงและการประยุกต์ใช้: บทช่วยสอนแบบภาพพร้อมตัวอย่าง

ทำความเข้าใจพื้นฐาน

อัลกอริทึม Shazam ทำงานอย่างไร

อัลกอริทึม Shazam กลั่นตัวอย่างเพลงเป็นลายนิ้วมือและจับคู่ลายนิ้วมือเหล่านี้กับลายนิ้วมือจากเพลงที่รู้จักโดยคำนึงถึงเวลาที่สัมพันธ์กันภายในเพลง

ลายนิ้วมือเสียงคืออะไร?

ลายนิ้วมือเสียงคือชุดของแท็กแฮชหรือลายเซ็นของตัวอย่างเพลง พวกเขาวัดว่าความถี่ใดในแต่ละตัวอย่างแรงที่สุด

Shazam ค้นหาเพลงได้อย่างไร?

Shazam ค้นหาเพลงโดยเปรียบเทียบลายนิ้วมือเสียงของการบันทึกที่ผู้ใช้จัดหาให้กับลายนิ้วมือของเพลงที่รู้จักจากฐานข้อมูล

การประชุมการออกแบบที่โดดเด่น 2020

การออกแบบ Ui

การประชุมการออกแบบที่โดดเด่น 2020
ถึงนักออกแบบด้วยความรัก (จดหมายจากนักพัฒนาส่วนหน้า)

ถึงนักออกแบบด้วยความรัก (จดหมายจากนักพัฒนาส่วนหน้า)

มือถือ

โพสต์ยอดนิยม
ความจริงเสมือนในอุตสาหกรรมยานยนต์
ความจริงเสมือนในอุตสาหกรรมยานยนต์
วิธีใช้ Bootstrap และสร้าง. NET Projects
วิธีใช้ Bootstrap และสร้าง. NET Projects
วิธีทำความเข้าใจและประเมินการลงทุนในกองทุนอสังหาริมทรัพย์ส่วนบุคคล
วิธีทำความเข้าใจและประเมินการลงทุนในกองทุนอสังหาริมทรัพย์ส่วนบุคคล
4 ไปวิจารณ์ภาษา
4 ไปวิจารณ์ภาษา
ข้อมูลเบื้องต้นเกี่ยวกับ Magento: การนำทางในระบบนิเวศอีคอมเมิร์ซยอดนิยม
ข้อมูลเบื้องต้นเกี่ยวกับ Magento: การนำทางในระบบนิเวศอีคอมเมิร์ซยอดนิยม
 
วีซ่า H-1B: การเดินทางของนักพัฒนา iOS จากฮอนดูรัสไปยัง Silicon Valley
วีซ่า H-1B: การเดินทางของนักพัฒนา iOS จากฮอนดูรัสไปยัง Silicon Valley
ข้อผิดพลาดทั่วไปในการสื่อสารกับลูกค้า: จะไม่ทำให้ลูกค้าของคุณผิดหวังได้อย่างไร
ข้อผิดพลาดทั่วไปในการสื่อสารกับลูกค้า: จะไม่ทำให้ลูกค้าของคุณผิดหวังได้อย่างไร
การออกแบบที่คาดหวัง: วิธีสร้างประสบการณ์ผู้ใช้ที่มีมนต์ขลัง
การออกแบบที่คาดหวัง: วิธีสร้างประสบการณ์ผู้ใช้ที่มีมนต์ขลัง
กราฟิก 3 มิติ: บทช่วยสอน WebGL
กราฟิก 3 มิติ: บทช่วยสอน WebGL
การออกแบบ VUI - Voice User Interface
การออกแบบ VUI - Voice User Interface
โพสต์ยอดนิยม
  • เกี่ยวกับผลกระทบโดยรวมของอัตราดอกเบี้ยติดลบต่อเศรษฐกิจ นักเศรษฐศาสตร์
  • บอทในความไม่ลงรอยกันคืออะไร
  • c-corp vs s-corp vs llc
  • การสร้างเว็บไซต์ด้วย angularjs
  • เว็บไซต์บูตสแตรปคืออะไร
  • วิธีการกำหนดราคาพุตออปชั่น
หมวดหมู่
  • การเพิ่มขึ้นของระยะไกล
  • ผู้คนและทีมงาน
  • การวางแผนและการพยากรณ์
  • การออกแบบ Ux
  • © 2022 | สงวนลิขสิทธิ์

    portaldacalheta.pt