Unity에서 ExoPlayer를 사용하여 사운드 파일 재생

16803 단어 ExoplayerAndroidUnity
유니티에서 엑소플레이어를 사용해 애니소닉 사운드 파일을 재생하고 싶어서 해봤어요.

안드로이드 라이브러리 만들기


먼저 안드로이드 스튜디오에서 안드로이드 라이브러리의 프로젝트를 제작하고 다음과 같은 종류를 제작한다.이 클래스는 ExoPlayer의 인스턴스를 만들거나 URI를 읽는 방법을 제공합니다.
import android.content.Context;
import android.net.Uri;

import com.google.android.exoplayer2.DefaultRenderersFactory;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.audio.AudioProcessor;
import com.google.android.exoplayer2.ext.gvr.GvrAudioProcessor;
import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.util.Util;

public class UnityExoPlayer {

    private final GvrAudioProcessor audioProcessor = new GvrAudioProcessor();
    private final SimpleExoPlayer player;
    private final ExtractorMediaSource.Factory factory;

    public UnityExoPlayer(Context context) {

        final DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(context) {
            @Override
            protected AudioProcessor[] buildAudioProcessors() {
                return new AudioProcessor[]{audioProcessor};
            }
        };

        player = ExoPlayerFactory.newSimpleInstance(renderersFactory, new DefaultTrackSelector());
        factory = new ExtractorMediaSource.Factory(new DefaultDataSourceFactory(context, Util.getUserAgent(context, "UnityExoPlayer")));
    }

    public void prepare(String uri) {
        ExtractorMediaSource mediaSource = factory.createMediaSource(Uri.parse(uri));
        player.prepare(mediaSource);
    }

    public void play() {
        player.setPlayWhenReady(true);
    }

    public void pause() {
        player.setPlayWhenReady(false);
    }

    public void stop() {
        player.stop();
    }

    public void release() {
        player.release();
    }

    public void updateOrientation(float w, float x, float y, float z) {
        audioProcessor.updateOrientation(w, x, y, z);
    }

}
이 코드를 컴파일하기 위해서는 다음과 같은dependenciesbuild.gradle가 필요합니다.
dependencies {
    implementation 'com.google.android.exoplayer:exoplayer-core:2.8.1'
    implementation 'com.google.vr:sdk-audio:1.150.0'
}
그리고Gradle의assemble빌딩을 이동해서aar파일을 만듭니다.

Unity 프로젝트에 aar 파일 불러오기


↑ 제작된 aar에는 ExoPlayer와 GVR 오디오의 종류가 포함되지 않기 때문에 aar 파일을 따로 가지고 Unity 프로젝트에 들어가야 한다.다음 링크에서 아라를 다운로드할 수 있습니다.2018/06/15시 최신 버전은 엑소플레이어 2.8.1, GVR 오디오는 1.150.0이다.
  • ExoPlayer
  • GVR Audio
  • Unity 범주 만들기


    다음은 ↑의 자바 클래스를 C#에서 호출하는 호각을 쓰십시오.
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class UnityExoPlayer
    {
    
      private AndroidJavaObject javaInstance;
    
      public UnityExoPlayer()
      {
        using (AndroidJavaClass javaUnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
          using (var currentActivity = javaUnityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
          {
            //                                   ↓ここのクラス名はパッケージ名に合わせて書き換える
            javaInstance = new AndroidJavaObject("com.niusounds.unityexoplayer.UnityExoPlayer", currentActivity);
          }
        }
      }
    
      public void Prepare(string uri)
      {
        javaInstance.Call("prepare", uri);
      }
    
      public void Play()
      {
        javaInstance.Call("play");
      }
    
      public void Pause()
      {
        javaInstance.Call("pause");
      }
    
      public void Stop()
      {
        javaInstance.Call("stop");
      }
    
      public void SetTexture(int texPtr)
      {
        javaInstance.Call("setTexture", texPtr);
      }
    
      public void Release()
      {
        javaInstance.Call("release");
      }
    
      public void UpdateOrientation(float w, float x, float y, float z)
      {
        javaInstance.Call("updateOrientation", w, x, y, z);
      }
    
    }
    

    사용


    이렇게 하면 UnityExoPlayer 클래스를 사용하여 ExoPlayer를 사용하여 공간 사운드를 재생할 수 있습니다.
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class ExoPlayerComponent : MonoBehaviour
    {
      private UnityExoPlayer player;
    
      void Awake()
      {
        player = new UnityExoPlayer();
      }
    
      void Start()
      {
        player.Prepare("/path/to/audio");
        player.Play();
      }
    
      void Update()
      {
        var orientation = Quaternion.Inverse(Camera.main.transform.rotation);
        player.UpdateOrientation(orientation.w, orientation.x, orientation.y, orientation.z);
      }
    }
    

    비디오 대응 정보

    player.Prepare 애니메이션 URI를 통해 Anvisonic 사운드가 있는 애니메이션 사운드만 재생할 수 있습니다.그리고 유닛의 텍스쳐를 엑소플레이어에게 넘겨주고, 유닛 장면 속 공의 표면에 영상을 띄우면 Anvisonic이 들어간 360 영상을 만들 수 있는 완전 플레이어... 도전한 사람이 있다면 알려주세요.

    좋은 웹페이지 즐겨찾기