Rเป็นแพลตฟอร์มข้ามและฟรี / โอเพนซอร์ส
โหลดและโหลดtuneR
และseewave
ไลบรารี (ติดตั้งจากผู้จัดการแพ็กเกจหากยังไม่ได้ติดตั้ง)
library(tuneR)
library(seewave)
จากนั้นโหลดไฟล์ MP3 หรือ WAV ของคุณ:
w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")
ทีนี้มาวางแผนสเปกตรัมและจุดสูงสุด
fpeaks(meanspec(w), nmax=1)
ผลลัพธ์:
ผลตัวเลข:
fpeaks(meanspec(w), nmax=1, plot=FALSE)
12.05859
ข้อมูลด้านบนใช้ได้กับข้อมูลที่ไม่ใช่ดนตรีเท่านั้น เมื่อคุณวิเคราะห์ความถี่ของเพลงคุณจะพบว่าความถี่สูงสุดจะอยู่ที่ประมาณ 12-20 kHz ขึ้นอยู่กับอุปกรณ์ที่เกี่ยวข้อง อย่างไรก็ตามความถี่สูงสุดนี้จะไม่ให้การประมาณของโน้ตที่กำลังเล่นอยู่เนื่องจากโน้ตดนตรีเมื่อเล่นโดยเครื่องดนตรีจะประกอบด้วยหลายความถี่
นี่คือสิ่งที่เรียกว่า "เสียงต่ำ" ของเครื่องดนตรีและคุณจะพบว่า A ที่ 440 เฮิร์ตซ์โดยขลุ่ยจะมีส่วนประกอบความถี่ที่แตกต่างกันเมื่อเทียบกับ A ที่เล่นโดยกีตาร์ไฟฟ้า
ทางออกที่ดีที่สุดของคุณคือการใช้การวิเคราะห์ความถี่ที่โดดเด่นโดยดูที่ความถี่สูงสุดเหนือช่วงเวลาที่เลื่อนออกไปและตรวจสอบว่ามีค่าใดเกิดขึ้นสูงสุด
แม้ว่าจะไม่มีสิ่งเช่น "ความถี่ในช่วงเวลา" คุณสามารถแปลงค่าเฉลี่ย (หรือที่โดดเด่น) ความถี่ในช่วงบางเวลาเลื่อนหน้าต่าง Seewave มีฟังก์ชั่นบางอย่างเกี่ยวกับการเลือกหน้าต่างเวลา แต่มันค่อนข้างซับซ้อน
คุณสามารถใช้
s = specprop(meanspec(w, from=10, to=11))
เพื่อรับคุณสมบัติสเปกตรัมจาก 10 ถึง 11 วินาทีจากนั้นเรียกs$centroid
หรือs$mean
รับ centroid หรือความถี่เฉลี่ยของช่วงเวลานั้น (แม้ว่า 1 วินาทีนั้นค่อนข้างใหญ่สำหรับการวิเคราะห์เสียง)
หากไฟล์ Wave ของคุณใช้การสุ่มตัวอย่าง 44.1 kHz คุณสามารถลดขนาดไฟล์ลงเพื่อลดความพยายามในการคำนวณเช่นถึง 16 kHz
w = downsample(w, 16000)
แต่จำไว้ว่าตามทฤษฎีของ Nyquistนั้นความถี่สูงสุดที่สามารถแทนได้ในขณะนี้คือ 8 kHz
คุณสามารถหาซอฟต์แวร์ตรวจจับระดับเสียง เช่นนี้ซึ่งต้องใช้ MATLAB
fpeaks
คุณรู้หรือไม่ว่ามีฟังก์ชั่นที่สามารถแปลงกราฟความถี่เทียบกับเวลาได้หรือไม่?