Ana içeriğe geç

Akış Ses Dalgası

Ses Aktivite Tespiti (VAD) için, bu sayfaya bakın.

Bir akış ses dalgası, oynatma sırasında bile ses verilerini dinamik olarak eklemeyi destekleyen bir tür içe aktarılmış ses dalgasıdır. Geri sarma gibi bir içe aktarılmış ses dalgasıyla aynı işlevselliği sunar ve SoundCues vb. içinde kullanılabilir.

Bir akış ses dalgası oluşturma

Öncelikle bir akış ses dalgası oluşturmalısınız. Lütfen erken yok edilmeyi önlemek için onu güçlü bir referans olarak ele almanız gerektiğini unutmayın (örneğin, Blueprints'te ayrı bir değişkene atayarak veya C++'ta UPROPERTY() kullanarak).

Akış Ses Dalgası Oluştur düğümü

Ses dalgasını çalma

Daha sonra bu ses dalgasını oynatabilirsiniz. Ancak, bunu şimdi yapmak gerekli değildir, ses dalgasını daha sonra oynatmaya başlayabilirsiniz.

Bir ses dalgasını oynatmanın çeşitli örnekleri

Ses verilerini önceden ayırma

İsteğe bağlı olarak, her yeni ses verisi eklendiğinde tüm PCM tamponunun yeniden ayrılmasını önlemek için ses verilerini (bayt) önceden ayırabilirsiniz.

Pre Allocate Audio Data düğümü

Ses verisi ekleme

Mevcut tamponun sonuna ses verisi eklemek için, ses verilerini dinamik olarak eklemeye yönelik uygun fonksiyonları kullanın. Oynatma, bu eklemelerin sıra dizisini takip edecektir.

Ses Verisi Ekle düğümü

Hızlanmış veya bozulmuş ses oynatımından kaçınma

Ses dalgası oynatılırken ses verilerini akış halinde aktarırken, belirli senaryolarda hızlanmış veya bozulmuş ses oynatımı yaşayabilirsiniz. Bu sorun genellikle şu durumlarda ortaya çıkar:

  1. Ses dalgası oynatımı mevcut tamponun sonuna yakın/ulaşmış durumda
  2. Yeni ses verileri sürekli olarak akış halindeki ses dalgasına sıraya ekleniyor
  3. Oynatım, gelen veri akışına yetişiyor

Ses verilerini herhangi bir zamanda sorunsuz bir şekilde doldurmayı durdurabilirsiniz. Ancak, sürekli akış gereken senaryolar için (gerçek zamanlı ses akışı gibi), ses veri akışınızın güvenilirliğine bağlı olarak iki yaklaşım vardır:

Güvenilir, tutarlı akış için: İlk veri parçası alındıktan hemen sonra oynatımı başlatmak için OnPopulateAudioState temsilcisini kullanın.

Güvenilir olmayan akış için (ağ sorunları, aralıklı veri): Oynatımı başlatmadan önce daha büyük bir tampon oluşturmak için OnPopulateAudioState tetiklendikten sonra bile ek bir gecikme ekleyin.

Oynatım sorunlarından kaçınmak için OnPopulateAudioState kullanımı

Not: Ses verilerini herhangi bir zamanda doldurmayı durdurabilirsiniz, bu oynatma sorunlarına neden olmaz. Kesin yaklaşım, ses veri akışınızın güvenilirliğine bağlıdır - tutarlı akışlar için anında oynatma kullanın veya güvenilmez akışlar için (örn., ağ bağlantı sorunları) ek tamponlama gecikmesi ekleyin.

Örnek kullanım

Son olarak, uygulamanız şu şekilde görünebilir:

Bir akış ses dalgası kullanım örneği

Ses Durumunu Doldurma Üzerine

OnPopulateAudioState temsilcisi, OnPopulateAudioData ile benzer şekilde çalışır ancak doldurulan ses verilerini yayınlamaz. Bu, doldurulan ses verilerinin bir dizisini geçirmeden ses verilerinin ne zaman doldurulduğunu takip etmek istediğinizde kullanışlı olabilir ve bu performansı artırabilir.

On Populate Audio State delegate

PCM Verileri ile Çalışma

Oynatma sırasında PCM verilerine gerçek zamanlı erişim için PCM Veri İşleme bölümüne bakın.