Zamana bağlı bir frekans dalgası nasıl oluşturulur?


0

Frekansı zamana bağlı bir ses yaratmak istiyorum, diyelim ki timems frekansının timeHz olduğunu, dolayısıyla 20 sn'de tüm duyulabilir frekanslara sahip olduğunuzu söyleyelim . Örnek olarak, ffmpeg ile bir videodaki her karenin zamanını kaplamak için zaman değişkenini (% T) kullanabilirsiniz. Böyle bir dalga üretmek için% T değişkenini kullanabileceğimi düşündüm. denedim

ffmpeg -f lavfi -i "sine=frequency=%T*1000:sample_rate=44100:duration=20" -c:a pcm_s16le allfreq.wav

ancak sinefiltrenin sabit bir frekansa sahip olması gerekiyor.

Ffmpeg kullanmaya çalıştım, ancak ücretsiz olduğu sürece hangi programı kullandığınız önemli değil (hafif indirmeler takdir edilir).


2
Bir videonun her karesini ve sadece ani sese geçiş yapmayı kapatabilirsiniz. İşleve gelince, sineaslında yapmaya çalıştığınız şey sadece sinüsün bir kısmını oluşturmaktır. Aksi halde, sinüs hala sinüs olmaya devam ederken, artan baz frekansınız olur. Belki Chirp Jeneratör'ü Audacity'den kullanabilirsiniz .
Seth,

Cıvıltı jeneratör mükemmel uyuyor. Düşünmediğim daha çok seçeneğe sahip ama yine de ilginç. Cevap olarak yazabilirsiniz.
cdlvcdlv

Yanıtlar:


2

Video hakkında konuşmaya başlarken, gerçekten sese ilgi duyuyor gibisiniz. sineİşlev hakkında fikriniz , temel frekansı bu şekilde ayarladığınız gibi sabit bir frekans gerektirdiği doğru. Hala bu frekansın etrafında "sinüs" olurdu.

Aslında yapmaya çalıştığınız şey, bir sinüsün bir parçasını ya da frekansı sürekli olarak artıran doğrusal bir fonksiyon oluşturmaktır. Bunu yapmak için Audacity gibi bir Program kullanmaya çalışabilirsiniz ve Chrip Generator gibi göründüğü gibi aradığınız şey bu olacaktır. X frekansından başlayan bir ses üretmenize ve N zamanından sonra Y'de bitmesine izin verir.


1
Haklısın, orijinal sorum biraz kafa karıştırıcı yazılmış. Gelecekteki okuyucular için daha net hale getirmek için düzenlemiştim.
cdlvcdlv

1

Eğer ffmpeg kullanıyorsanız, aevalsrc filtresine sahipsiniz:

ffmpeg -f lavfi -i "aevalsrc='sin(1000*t*2*PI*t)':s=44100:d=20" -c:a pcm_s32le allfreq.wav

Gerekli ifadeyi bulduktan sonra tüm chirp jeneratör parametrelerini taklit edebilmelisiniz :)

Audacity'nin çalışma formatı bu olduğundan 32 bit float'ı çıkış formatı olarak kullandım.


aevalsrcFiltreyi bilmiyordum . Sanırım ffmpegişe yarayabilir ama bu seçeneklerle değil. Komutunuz tarafından oluşturulan sesin frekansı 11.025 s'ye kadar artar; sonra azalmaya başlar. Değişken tve uyuşmazlık arasında bir ilişki görebiliyorum , ancak beklendiği gibi değil.
cdlvcdlv

1
Evet, anlıyorum. Muhtemelen iki şeyin birleşmesinden dolayı: 1) düşük örnekleme oranı 2) örnekleme oranının dörtte birine ulaştığında filtre frekans çıktısının renk değiştirmesi. Kullanın s=176400.
Gyan

Bir sorun daha var: içindeki formül sinyanlış. İle ffmpeg -f lavfi -i "aevalsrc='sin(1000*t*PI*t)':s=44100:d=20" -c:a pcm_s16le allfreq.wavdalga haklı.
cdlvcdlv

1
Bu formülle, yalnızca 10 kHz'lik bir üsse geçiyorsunuz. Sinüs dalgasının bir döngüsü 2*PI, yani 2*PI*tsaniyede bir dalga üretir. 1000*2*PI*tsaniyede 1000 üretir. Taşıyıcıyı değiştirmek için t ile daha da çarpın.
Gyan

Amacınızı anlıyorum ama Audition ve Audacity ffmpeg -f lavfi -i "aevalsrc='sin(1000*t*2*PI*t)':s=176400:d=20" -c:a pcm_s32le allfreq.wav, spektral görünümde 40kHz'e ulaşan dalgayı gösteriyor . Belki bir ffmpeg hata?
cdlvcdlv
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.