알림으로 mp3 사운드를 재생하는 적절한 방법

마이클 베드포드

내 응용 프로그램에서 알림 소리로 재생하려는 작은 mp3 파일이 있습니다. 명확히하기 위해 이미 Resources 아래에 "raw"폴더를 만들고 거기에 내 mp3 파일을 추가했습니다. 첫 번째 패스로 다음과 같이 MediaPlayer를 사용했습니다.

MediaPlayer mPlayer;

mPlayer = MediaPlayer.Create(context, Resource.Raw.warning);

mPlayer.Start();

그리고 그것은 효과가 있었지만 오디오 트랙을 재생하는 것이 아니라 알림으로 사용하고 싶을 때 약간 어색해 보였습니다. 나는 또한 플레이어가 플레이, 처분 등을 완료했는지 확인하기 위해 그 접근 방식에 더 많은 오버 헤드가 있다고 생각합니다.

그래서 SoundPool을 찾아 구현했습니다. 예를 들어 SoundPool에 사운드를로드 할 때 SoundID에 대한 int를 반환 한 다음 나중에 재생할 사운드에 대한 참조로 사용하는 것과 같은 초기 질문이있었습니다. 따라서 이러한 속성을 처리하기 위해 별도의 클래스를 만들어야했습니다.

이것은 내가 지금까지 가지고 있고 작동하는 것처럼 보이지만 이것이 가장 좋은 방법인지 궁금합니다.

먼저 SoundPool을 래핑하는 클래스를 만들었고 SoundID에 대한 클래스도 있습니다.

using Android.Content;
using Android.Media;

namespace PocketPacTracAndroid.Media
{
    public class Sounds
    {
        SoundPool soundPool;
        Context context;
        int maxStreams = 1;
        bool isLoaded = false;

    public bool IsLoaded
    {
        get { return isLoaded; }
    }

    public Sounds(Context oContext)
    {
        soundPool = new SoundPool(maxStreams, Stream.Music, 0);
        context = oContext;
        loadSoundPool();
    }

    public Sounds(Context oContext, int streams)
    {
        maxStreams = streams;
        soundPool = new SoundPool(maxStreams, Stream.Music, 0);
        loadSoundPool();
    }

    private void loadSoundPool()
    {
        soundPool.LoadComplete += SoundPool_LoadComplete;
        SoundIDs sid = new SoundIDs();
        sid.Scan = soundPool.Load(context, Resource.Raw.scan, 1);
        sid.PackageAdded = soundPool.Load(context, Resource.Raw.packageAdded, 1);
        sid.HubTransfer = soundPool.Load(context, Resource.Raw.hubtransfer, 1);
        sid.Alert = soundPool.Load(context, Resource.Raw.alert, 1);
        sid.Warning = soundPool.Load(context, Resource.Raw.warning, 1);
        sid.ScanChange = soundPool.Load(context, Resource.Raw.scanchange, 1);
    }

    private void SoundPool_LoadComplete(object sender, SoundPool.LoadCompleteEventArgs e)
    {
        isLoaded = true;
    }

    public void playSound(int sid)
    {
        if (isLoaded)
        {
            soundPool.Play(sid, 1f, 1f, 1, 0, 1f);
        }
    }
}

public class SoundIDs
{
    int scan;
    int packageAdded;
    int hubTransfer;
    int alert;
    int warning;
    int scanChange;


    public int Scan
    {
        get { return scan; }
        set { scan = value; }
    }

    public int PackageAdded
    {
        get { return packageAdded; }
        set { packageAdded = value; }
    }

    public int HubTransfer
    {
        get { return hubTransfer; }
        set { hubTransfer = value; }
    }

    public int Alert
    {
        get { return alert; }
        set { alert = value; }
    }

    public int Warning
    {
        get { return warning; }
        set { warning = value; }
    }

    public int ScanChange
    {
        get { return scanChange; }
        set { scanChange = value; }
    }
}
}

그런 다음 앱의 어느 곳에서나 클래스를 인스턴스화합니다.

    Sounds sounds;
    SoundIDs sid;

    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        context = Context;
        getServiceTypes();
        sounds = new Sounds(context);
        sid = new SoundIDs();
    }

마지막으로 이것을 호출하여 파일을로드 할 때 반환 된 내 soundID를 기반으로 사운드를 재생할 수 있습니다. 또한 외부에서 확인하고 싶은 경우를 대비하여 IsLoaded를 노출했지만 playSound가 호출되면 내부적으로 확인됩니다.

sounds.playSound(sid.Scan);

이것이 좋은 접근 방식처럼 보입니까? 최고인가요? 모든 제안을 주시면 감사하겠습니다. 작동하는 것 같지만 애플리케이션 수명주기 동안 동일하거나 다른 알림을 반복해서 호출하는 경우 리소스 문제 나 재생 문제가 없는지 확인하고 싶습니다.

감사!

Usajnf

예, SoundPool은 갈 길입니다. 스레드가 동시에 다른 소리를 재생하는지주의하십시오. 대기열에 구축하지 않는 한 일부 사운드는 스피커가 하나뿐이므로 다른 사운드를 차단합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Android : Mp3 사운드를 알림으로 재생하는 방법?

Public void 메서드 내에서 미디어 (MP3)를 연속적으로 재생하는 방법

Angular 2로 mp3를 재생하는 방법은 무엇입니까?

다운로드 한 팟 캐스트 mp3를 Banshee에 등록하는 방법은 무엇입니까?

AVPlayer를 사용하여 파일 관리자에 다운로드 한 mp3 파일 재생

Swift 4로 iOS 11에서 사운드를 재생하는 방법은 무엇입니까? 그리고 MP3 파일을 어디에 두나요?

.flac 파일을 320 kBit / sec .mp3로 변환하는 적절한 방법은 무엇입니까?

ffmpeg를 사용하여 mp3를 mp3 노래방으로 변환

URL에서 mp3를 재생하는 방법

바이트에서 mp3를 재생하는 방법?

ASP.NET MVC 5 및 Entity Framework를 사용하여 MP3 파일을 다운로드하는 방법

정적 폴더에서 html로 mp3 파일을 재생하는 방법은 무엇입니까?

Banshee에서 MP3 플레이어로 재생 목록을 복사하는 방법은 무엇입니까?

Banshee에서 MP3 플레이어로 재생 목록을 복사하는 방법은 무엇입니까?

AS3가 백그라운드 모드에서 MP3 파일을 다운로드하고 재생하는 방법은 무엇입니까?

DirectSound를 사용하여 Stream에서 MP3를 재생하는 방법

iOS가 mp3를 다운로드 한 On-Demand 리소스를 제거하고 있습니다.이를 방지하는 방법은 무엇입니까?

Kalarm은 ogg 사운드 알람을 재생하지만 mp3는 재생하지 않습니다.

Python으로 mpeg / mp3를 다운로드하는 방법은 무엇입니까?

Jquery에서 JS var를 사용하는 방법 (MP3 재생 목록)

javascript 또는 jquery를 사용하여 버튼 클릭으로 여러 mp3 파일을 차례로 재생하는 방법은 무엇입니까?

Swift : Text-to-Speech 생성 오디오를 .mp3로 변환하는 방법?

텍스트에서 생성 된 사운드를 파이썬에서 mp3 또는 웨이브로 저장하는 방법

안드로이드에서 틈없이 mp3 사운드 파일을 반복하는 방법

Rails를 사용하여 mp3 파일 업로드 / 재생

인앱 다운로드 mp3 파일을 구현하는 방법

CMD "Track? .mp3"을 "T00? .mp3"로 사용하여 파일 이름을 바꾸는 방법

봇이 재생한 mp3 파일을 삭제하는 방법

WIndows 미디어 플레이어에서 MP3 태그를 편집하여 적절한 트랙 목록을 만드는 방법

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관