Jetpack SceneCore'daki üç boyutlu ses özellikleri, Android XR uygulamalarınızda etkileyici ses deneyimleri oluşturmanıza olanak tanır.
Üç boyutlu ses, kullanıcıların sesi 3 boyutlu bir ortamda nasıl algıladığını simüle eder. Kullanıcının üstü ve altı da dahil olmak üzere her yönden gelen ses hissi yaratır. Sistem bunu, 3D uzaydaki belirli konumlarda bir veya daha fazla "sanal hoparlör" simüle ederek yapar.
Android XR için tasarlanmamış veya Android XR'a göre değiştirilmemiş mevcut uygulamaların sesleri, Android XR'da otomatik olarak uzamsallaştırılır. Kullanıcı alanında hareket ederken tüm uygulama sesleri, uygulamanın kullanıcı arayüzünün oluşturulduğu panelden çıkar. Örneğin, bir saat uygulamasında zamanlayıcı çaldığında ses, uygulama paneli konumundan geliyormuş gibi duyulur. Android XR, konumsal gerçekçilik için sesi otomatik olarak değiştirir. Örneğin, uygulama paneli ile kullanıcı arasındaki algılanan mesafe, daha fazla gerçekçilik için ses düzeyini hafifçe etkiler.
Mevcut uygulamaların uzamsal sesi nasıl oluşturduğu hakkında daha fazla bilgi için bu sayfadaki Uygulamanıza stereo ve surround ses ekleme başlıklı makaleyi inceleyin.
Uygulamanızı XR için optimize ediyorsanız Jetpack SceneCore, gelişmiş üç boyutlu ses özelleştirmesi için araçlar sağlar. Sesleri 3D ortamda hassas bir şekilde konumlandırabilir, gerçekçi ses alanları için ambisonik ses kullanabilir ve yerleşik surround ses entegrasyonundan yararlanabilirsiniz.
Android XR'da kullanılabilen üç boyutlu ses türleri
Android XR; konumsal, stereo, surround ve ambisonik sesleri destekler.
Konumsal ses
Konumsal ses, 3D uzayda belirli bir noktadan çalınacak şekilde konumlandırılabilir. Örneğin, sanal ortamınızın köşesinde havlayan bir köpeğin 3D modelini oluşturabilirsiniz. Her biri kendi konumundan ses yayan birden fazla öğe olabilir. Konumsal sesin işlenmesi için dosyalar mono veya stereo olmalıdır.
Uzamsallaştırılmış stereo ve surround ses
Konumsal, stereo ve surround ses için tüm Android medya biçimleri desteklenir.
Stereo ses, iki kanallı ses biçimlerini ifade eder. Surround ses ise 5.1 surround ses veya 7.1 surround ses yapılandırmaları gibi ikiden fazla kanallı ses biçimlerini ifade eder. Her kanalın ses verileri bir hoparlörle ilişkilendirilir. Örneğin, müziği stereo olarak çalarken sol hoparlör kanalı sağ hoparlör kanalından farklı enstrüman parçaları yayabilir.
Çoklu hoparlör kanalları kullanılarak gerçekçiliği ve etkileyiciliği artırmak için filmlerde ve televizyon programlarında genellikle surround ses kullanılır. Örneğin, diyaloglar genellikle merkez hoparlör kanalından çalınırken uçan bir helikopterin sesi, helikopterin 3D alanınızda uçtuğu hissini vermek için sırayla farklı kanalları kullanabilir.
Ambisonik ses
Ambisonik ses (veya ambisonik) ses için bir skybox gibidir ve kullanıcılarınıza sürükleyici bir ses ortamı sunar. Arka plandaki ortam sesleri veya dinleyiciyi çevreleyen tam küresel bir ses alanı oluşturmak istediğiniz diğer senaryolar için ambisonik ses kullanın. Android XR, birinci, ikinci ve üçüncü derece ambisonics'te AmbiX ambisonic ses biçimini destekler. Opus (.ogg
) ve
PCM/Wave (.wav
) dosya türlerini öneririz.
Jetpack SceneCore ile üç boyutlu ses kullanma
Jetpack SceneCore ile üç boyutlu ses özelliğini uygulamak için üç boyutlu ses özelliklerini kontrol etmeniz ve üç boyutlu ses yüklemek için bir API seçmeniz gerekir.
Uzamsal özellikleri kontrol etme
Üç boyutlu ses özelliklerini kullanmadan önce Session
cihazının üç boyutlu sesi desteklediğinden emin olun. Aşağıdaki bölümlerdeki tüm kod snippet'lerinde, uzamsallaştırılmış ses çalınmaya çalışılmadan önce özellikler kontrol edilir.
Üç boyutlu ses yükleme
Jetpack SceneCore'da kullanılmak üzere üç boyutlu ses yüklemek için aşağıdaki API'lerden herhangi birini kullanabilirsiniz.
SoundPool
: Boyutu 1 MB'tan küçük olan kısa ses efektleri için idealdir. Önceden yüklenir ve sesler tekrar tekrar kullanılabilir. Bu, konumsal ses için ses yüklemenin harika bir yoludur.ExoPlayer
: Müzik ve video gibi stereo ve surround ses içeriklerini yüklemek için idealdir. Ayrıca arka planda medya oynatmaya da olanak tanır.MediaPlayer
: Ambisonik ses yüklemenin en basit yolunu sunar.AudioTrack
: Ses verilerinin nasıl yükleneceği konusunda en fazla kontrolü sağlar. Ses arabelleklerinin doğrudan yazılmasına veya kendi ses dosyalarınızı sentezlemenize ya da kodunu çözmenize olanak tanır.
Uygulamanıza konumsal ses ekleme
Konumsal ses kaynakları PointSourceParams
ve ilişkili bir Entity
ile tanımlanır. Entity
öğesinin konumu ve yönü, PointSourceParams
öğesinin 3D uzayda nerede oluşturulacağını belirler.
Konumsal ses örneği
Aşağıdaki örnekte, bir ses efekti ses dosyası ses havuzuna yüklenir ve Entity
konumunda oynatılır.
// Check spatial capabilities before using spatial audio if (session.scene.spatialCapabilities .hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_SPATIAL_AUDIO) ) { // The session has spatial audio capabilities val maxVolume = 1F val lowPriority = 0 val infiniteLoop = -1 val normalSpeed = 1F val soundPool = SoundPool.Builder() .setAudioAttributes( AudioAttributes.Builder() .setContentType(CONTENT_TYPE_SONIFICATION) .setUsage(USAGE_ASSISTANCE_SONIFICATION) .build() ) .build() val pointSource = PointSourceParams(entity) val soundEffect = appContext.assets.openFd("sounds/tiger_16db.mp3") val pointSoundId = soundPool.load(soundEffect, lowPriority) soundPool.setOnLoadCompleteListener { soundPool, sampleId, status -> // wait for the sound file to be loaded into the soundPool if (status == 0) { SpatialSoundPool.play( session = session, soundPool = soundPool, soundID = pointSoundId, params = pointSource, volume = maxVolume, priority = lowPriority, loop = infiniteLoop, rate = normalSpeed ) } } } else { // The session does not have spatial audio capabilities }
Kodla ilgili önemli noktalar
- İlk adım olarak
spatialCapabilities
kullanarak üç boyutlu ses özelliklerinin şu anda kullanılıp kullanılamadığını kontrol edin. - contentType'ı
CONTENT_TYPE_SONIFICATION
, usage'ı iseUSAGE_ASSISTANCE_SONIFICATION
olarak ayarladığınızda sistem bu ses dosyasını ses efekti olarak değerlendirir. - Önceki örnekte, ses dosyası havuzda hemen yüklenir ve ardından kodu basit tutmak için kullanılır. İdeal olarak, uygulamanızı yüklerken tüm ses efektlerinizi eşzamansız olarak yüklemelisiniz. Böylece, ihtiyacınız olduğunda tüm ses dosyaları havuzda kullanılabilir.
Uygulamanıza stereo ve surround ses ekleme
Uygulamanıza stereo ve surround ses eklemenin önerilen yolu Exoplayer
kullanmaktır. Üç boyutlu ses özelliğini Exoplayer
ile kullanma hakkında daha fazla bilgi için Üç boyutlu ses kılavuzu'na bakın.
Stereo ve surround ses hoparlör konumlandırması
Surround ses hoparlör konumlandırmasıyla, sanal surround ses hoparlörler, standart bir ITU yapılandırmasında kullanıcının etrafında, merkezi bir hoparlöre göre konumlandırılır ve yönlendirilir.
Varsayılan olarak, merkez kanalı hoparlörü uygulamanın mainPanelEntity
bölümüne yerleştirilir. Buna, Android XR tarafından otomatik olarak uzamsallaştırılan seslere sahip mobil uygulamalar da dahildir.
Stereo için hoparlör yerleşimi, surround sese benzer. Ancak yalnızca sol ve sağ kanallar panelin sırasıyla sol ve sağ tarafına yerleştirilir.
Birden fazla paneliniz varsa ve hangi panelin ses yayını yapacağını seçmek istiyorsanız veya stereo ya da surround sesin başka bir Entity
'ya göre oluşturulmasını istiyorsanız orta kanalın konumunu tanımlamak için PointSourceAttributes
simgesini kullanabilirsiniz. Geri kalan kanallar daha önce belirtildiği gibi yerleştirilir. Bu durumlarda MediaPlayer
de kullanmanız gerekir.
Kullanıcı alanında hareket ettikçe stereo ve surround ses sanal hoparlörleri, hoparlörlerin her zaman optimum konumda olmasını sağlamak için hareket eder ve ayarlanır.
MediaPlayer
veya ExoPlayer
simgesini arka planda stereo veya surround ses çalmaya devam edecek şekilde yapılandırdıysanız uygulama arka plana alındığında sanal hoparlör konumlandırması değiştirilir. Sesi sabitleyecek bir panel veya başka bir nokta olmadığı için uzamsal ses, kullanıcıyla birlikte hareket eder (diğer bir deyişle "kafa kilidi" uygulanır).
Surround ses örneği
Aşağıdaki örnekte, MediaPlayer
kullanılarak 5.1 ses dosyası yüklenir ve dosyanın merkez kanalı Entity
olarak ayarlanır.
// Check spatial capabilities before using spatial audio if (session.scene.spatialCapabilities.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_SPATIAL_AUDIO)) { // The session has spatial audio capabilities val pointSourceAttributes = PointSourceParams(session.scene.mainPanelEntity) val mediaPlayer = MediaPlayer() val fivePointOneAudio = appContext.assets.openFd("sounds/aac_51.ogg") mediaPlayer.reset() mediaPlayer.setDataSource(fivePointOneAudio) val audioAttributes = AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .setUsage(AudioAttributes.USAGE_MEDIA) .build() SpatialMediaPlayer.setPointSourceParams( session, mediaPlayer, pointSourceAttributes ) mediaPlayer.setAudioAttributes(audioAttributes) mediaPlayer.prepare() mediaPlayer.start() } else { // The session does not have spatial audio capabilities }
Kodla ilgili önemli noktalar
- Konumsal ses örneğinde olduğu gibi, ilk adım
spatialCapabilities
kullanarak üç boyutlu ses özelliklerinin kullanılabilir olup olmadığını kontrol etmektir. contentType
ayarınıAudioAttributes.CONTENT_TYPE_MUSIC
, kullanım ayarını iseAudioAttributes.USAGE_MEDIA
olarak belirlediğinizde sistem bu ses dosyasını surround ses olarak değerlendirir.
Uygulamanıza ambisonik ses alanları ekleme
Ambisonik ses alanlarını oynatmanın en basit yolu, dosyayı MediaPlayer
ile yüklemektir. Ambisonik ses, tüm ses ortamı için geçerli olduğundan konum sağlamak üzere Entity
belirtmeniz gerekmez. Bunun yerine, kanal sayısını belirten uygun ambisonik sırasıyla SoundFieldAttributes
örneği oluşturursunuz.
Ambionics örneği
Aşağıdaki örnekte, MediaPlayer
kullanılarak ambisonik bir ses alanı çalınmaktadır.
// Check spatial capabilities before using spatial audio if (session.scene.spatialCapabilities.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_SPATIAL_AUDIO)) { // The session has spatial audio capabilities val soundFieldAttributes = SoundFieldAttributes(SpatializerConstants.AMBISONICS_ORDER_FIRST_ORDER) val mediaPlayer = MediaPlayer() val soundFieldAudio = appContext.assets.openFd("sounds/foa_basketball_16bit.wav") mediaPlayer.reset() mediaPlayer.setDataSource(soundFieldAudio) val audioAttributes = AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .setUsage(AudioAttributes.USAGE_MEDIA) .build() SpatialMediaPlayer.setSoundFieldAttributes( session, mediaPlayer, soundFieldAttributes ) mediaPlayer.setAudioAttributes(audioAttributes) mediaPlayer.prepare() mediaPlayer.start() } else { // The session does not have spatial audio capabilities }
Kodla ilgili önemli noktalar
- Önceki snippet'lerde olduğu gibi, ilk adım
hasCapability()
kullanarak üç boyutlu ses özelliklerinin kullanılabilir olup olmadığını kontrol etmektir. contentType
ve kullanım tamamen bilgilendirme amaçlıdır.AMBISONICS_ORDER_FIRST_ORDER
, SceneCore'a ses alanı dosyasının dört kanal tanımladığını bildirir.