มีโปรแกรมที่สามารถกำหนดระดับเสียงสูงสุดในไฟล์เสียงได้หรือไม่?


14

มีโปรแกรม Windows ที่สามารถระบุ "ความถี่คลื่นเสียงสูงสุด" ที่พบในไฟล์เสียง (เช่นไฟล์ mp3) หรือไม่

ตัวอย่างเช่นมันควรจะสามารถวิเคราะห์ไฟล์Dog-Whistle-0และตรวจสอบว่าความถี่สูงสุดที่พบภายในไฟล์นั้นประมาณ ~ 12000 Hz

นอกจากนี้ควรวิเคราะห์Piano.mp3และกำหนดโน้ตสูงสุด

คำตอบ:


13

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คุณรู้หรือไม่ว่ามีฟังก์ชั่นที่สามารถแปลงกราฟความถี่เทียบกับเวลาได้หรือไม่?
Pacerier

ดูการปรับปรุงของฉัน มันไม่สำคัญเลย ฉันไม่ได้ทำงานกับเสียงที่รู้ว่ามีอะไรดีกว่านี้อีกแล้วขอโทษ
slhck

8

คุณเคยลองAudacity แล้วหรือยัง มันเป็นเครื่องมือฟรีแวร์ที่มีเครื่องมือในการวิเคราะห์บางส่วนที่มีความซับซ้อนอย่างเป็นธรรมรวมทั้งพล็อตสเปกตรัมคำสั่งเข้าถึงได้จากการวิเคราะห์ -> แปลง Spectrum ...

ภาพหน้าจอ

โปรดทราบว่าคุณได้รับผลลัพธ์ที่แตกต่างกันกับไฟล์เวอร์ชั่น MP3 เมื่อเทียบกับเวอร์ชั่น WAV เนื่องจากการบีบอัด MP3 ได้เปลี่ยนรูปแบบของคลื่นและแนะนำสิ่งประดิษฐ์ / นามแฝง

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


อืมก็ไม่ได้ดูเหมือนจะทำงานร่วมกับไฟล์Piano.mp3 สำหรับฉันมันแสดงให้เห็นว่า 1,0121 Hz (D # 9) screenshoot.me/uZZ2N0แต่สิ่งนี้ไม่น่าเป็นไปได้อย่างมากเพราะคีย์ที่ใหญ่ที่สุดบนเปียโนคือ C8 (4186Hz) ฉันกำลังทำอะไรผิดหรือเปล่า?
Pacerier

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

@slhck Ic ผมคิดว่าเราสามารถคาดเดาทราบถ้าเรามีความถี่ดูเหมือนว่ามันไม่ได้ตรงไปตรงมาเพื่อให้ ..
Pacerier

@Pacerier: หากคุณตั้งค่าขนาดเป็นค่าที่สูงกว่าฉันเชื่อว่ามันอาจให้ผลลัพธ์ที่แม่นยำมากขึ้นและกำจัดเสียงประสานบางอย่าง
James P

2
@Pacerier ไม่มันไม่ตรงไปตรงมา การตรวจจับระดับเสียงต้องให้คุณแปลงรูปคลื่นเป็นคลื่นความถี่ก่อน (การแปลงฟูริเยร์เร็ว) จากนั้นจึงใช้ฟิลเตอร์ (ส่วนใหญ่ผ่านต่ำ) และรอบฟิลเตอร์อื่น หากคุณไม่พบเครื่องมือที่ติดตามระยะเวลาสิ่งที่คุณกำลังมองหาอยู่นั้นยากมาก คุณสามารถมองเข้าไปในเครื่องมือแก้ไขแกนนำเช่นMelodyne
slhck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.