Ana içeriğe geç

Streaming Sound Wave

Bir streaming ses dalgası, oynatma sırasında bile dinamik olarak ses verisi eklemeyi destekleyen bir tür içe aktarılmış ses dalgasıdır. İçe aktarılmış bir ses dalgasıyla aynı işlevselliği sunar, örneğin geri sarma, ve SoundCues vb. içinde kullanılabilir.

ipucu

Ses Aktivitesi Algılama (VAD) için, bu sayfaya bakın.

Bir streaming ses dalgası oluşturma

İlk olarak bir streaming ses dalgası oluşturmalısınız. Lütfen erken yok olmayı ö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).

Create Streaming Sound Wave node

Ses dalgasını çalma

Daha sonra o ses dalgasını çalabilirsiniz. Ancak bunu şimdi yapmak gerekli değildir, ses dalgasını daha sonra çalmaya başlayabilirsiniz.

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

Ses verilerini önceden ayırma

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

Pre Allocate Audio Data düğümü

Ses verisi ekleme

Mevcut tamponun sonuna ses verisi eklemek için, ses verisini dinamik olarak eklemeye yönelik uygun işlevleri kullanın. Oynatma, bu eklemelerin sıraya dizilmiş sırasını takip edecektir.

Append Audio Data node

Hızlanmış veya bozulmuş ses oynatımını önleme

Ses dalgası oynatılırken ses verilerini akış halinde gönderirken, 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ış gerektiren 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ı, kesintili 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ını önlemek için OnPopulateAudioState kullanımı

Not: Ses verilerini doldurmayı istediğiniz zaman 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 (örneğin, ağ bağlantı sorunları) ek tamponlama gecikmesi ekleyin.

Örnek kullanım

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

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

On Populate Audio State

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 Verileriyle Çalışma

Oynatma sırasında PCM verilerine gerçek zamanlı erişim için bkz. PCM Veri İşleme.