Bir ses dosyası içindeki en yüksek perdeyi belirleyebilecek bir program var mı?


14

Bir ses dosyasında (örneğin mp3 dosyası) bulunan "en yüksek ses dalgası frekansını" belirleyebilen bir Windows programı var mı?

Örneğin, Dog-Whistle-0 dosyasını analiz edebilmeli ve dosyada bulunan en yüksek frekansın kabaca ~ 12000 Hz olduğunu belirleyebilmelidir.

Ayrıca, Piano.mp3'ü analiz edebilmeli ve en yüksek notayı belirleyebilmelidir.

Yanıtlar:


13

R , platformlar arası ve serbest / açık kaynaktır.

Yükleyin tuneRve seewavekitaplıkları yükleyin (henüz yüklenmediyse paket yöneticisinden yükleyin).

library(tuneR)
library(seewave)

Ardından, MP3 veya WAV dosyanızı yükleyin:

w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")

Şimdi, spektrumu ve zirvelerini çizelim:

fpeaks(meanspec(w), nmax=1)

Sonuç:

Sayısal sonuç:

fpeaks(meanspec(w), nmax=1, plot=FALSE)
12.05859

Yukarıdaki sadece müzikal olmayan verilerle çalışır. Müzik frekanslarını analiz ettiğinizde, en yüksek frekansların ilgili enstrümanlara bağlı olarak her zaman 12-20 kHz civarında olacağını göreceksiniz. Bununla birlikte, bu en yüksek frekans size çalınan notanın bir tahminini vermeyecektir, çünkü bir enstrüman tarafından çalındığında bir nota birden fazla frekanstan oluşacaktır.

Bu, bir enstrümanın "tınısı" dır ve bir flütle 440 Hz'deki A'nın, bir elektro gitarın çaldığı A ile karşılaştırıldığında farklı frekans bileşenleri içerdiğini göreceksiniz.

En iyi seçeneğiniz, kayan zaman pencerelerindeki frekans zirvelerine bakarak baskın bir frekans analizi yapmak ve en yüksek olanın nerede olduğunu kontrol etmektir.

Yine de "zaman içindeki frekans" diye bir şey yoktur. Ortalama (veya baskın) frekansı yalnızca belirli kayan zaman aralıklarına çizebilirsiniz . Seewave zaman pencerelerini seçmekle ilgili birkaç işlev sunar, ancak oldukça karmaşıklaşır.

Kullanabilirsin

s = specprop(meanspec(w, from=10, to=11)) 

spektrum özelliklerini 10 ila 11 saniye arasında almak ve daha sonra o zaman penceresinin merkez veya ortalama frekanslarını çağırmak s$centroidveya s$meanalmak için (ses analizi için 1 saniye oldukça büyük olmasına rağmen).

Wave dosyanız 44,1 kHz örnekleme kullanıyorsa, hesaplama çabasını azaltmak için örneğin 16 kHz'e indirmek için altörnekleyebilirsiniz.

w = downsample(w, 16000)

Ancak, Nyquist Teoremine göre , şimdi temsil edilebilecek maksimum frekansın 8 kHz olduğunu unutmayın.

Ayrıca bir perde algılama yazılımı da arayabilirsiniz. Bu gibi , ama MATLAB gerektirir.


Btw yerine, fpeaksfrekans grafiğini zamana karşı çizen bir işlev olup olmadığını biliyor musunuz?
Pacerier

Güncellememe bakın. O kadar önemsiz değil. Daha iyi bir şey olup olmadığını bilmek için çok fazla sesle çalışmadım, üzgünüm.
slhck

8

Audacity'yi denediniz mi? Analiz -> Çizim Spektrumu'ndan erişilen bir Çizim Spektrumu komutu da dahil olmak üzere oldukça karmaşık analiz araçlarına sahip ücretsiz bir araçtır .

Ekran görüntüsü

MP3 sıkıştırması dalga formunu değiştirdiği ve yapay nesneler / kenar yumuşatma getirdiğinden, dosyanın MP3 sürümü ile WAV sürümüne göre farklı sonuçlar elde edeceğinizi unutmayın.

Düzenleme: Bağlantı verdiğiniz ses dosyaları bunun iyi örnekleri değildir. Daha yüksek frekanslı dosyalar yalnızca insan işitmesine göre ayarlanan 44.1KHz'de örneklenir (maksimum 20KHz civarında). Örnek hızını artırmadan ultrason frekanslarını temsil edemezsiniz.


Hmm, Piano.mp3 dosyasıyla çalışmıyor gibi görünüyor . Benim için 10121 Hz (D # 9) ekran görüntüsü gösteriyor. Me/uZZ2N0, ancak piyanodaki en büyük tuş C8 (4186Hz) olduğu için bu pek olası değil. Yanlış bir şey mi yapıyorum?
Pacerier

3
@Pacerier Hayır, ancak sorunuzu biraz değiştirdiniz. Köpek düdüğü örneğinin tanımlanması kolaydır, çünkü spektrumda en yüksek zirveye sahip frekans aynı zamanda en yüksek frekanstır ve aynı zamanda baskın notadır. Müzik için, en yüksek frekans mutlaka en yüksek not değildir, çünkü bir enstrüman tarafından çalınan bir nota birden fazla frekanstan oluşur.
slhck

@slhck Ic, frekansımız olsaydı notu tahmin edebileceğimizi düşünürdüm , çok basit değil gibi görünüyor ..
Pacerier

@Pacerier: Size değerini daha yüksek bir değere ayarlarsanız, bunun daha kesin sonuçlar verebileceğine ve bazı harmonikleri ortadan kaldırabileceğine inanıyorum.
James P

2
@Pacerier Hayır, gerçekten o kadar basit değil. Pitch algılama, önce dalga formunu bir frekans spektrumuna (Hızlı Fourier Dönüşümü) dönüştürmenizi, ardından filtreleri (çoğunlukla düşük geçişli) ve başka bir filtre turunu kullanmanızı gerektirir. Zaman içinde perdeyi izleyen bir araç bulamazsanız, aradığınız şey gerçekten zor olacaktır. Melodyne gibi vokal düzeltme araçlarına bakabilirsiniz .
slhck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.