簡體   English   中英

無法使用STREAM_VOICE_CALL在Android Java中通過MediaPlayer播放音頻

[英]Can't use STREAM_VOICE_CALL to play audio via MediaPlayer in android java

我試圖通過MediaPlayer的setAudioStreamType(AudioManager.STREAM_VOICE_CALL)播放許多音頻(mp3)文件; 但是mp.start(); 不播放也不引發異常。 該設置可與SoundPool一起使用,但僅限於5秒,某些文件最多可播放8秒。 我在這里附加部分代碼:

    String s = absolutepath.get(position);
    Uri u = Uri.parse(s);
    playing = (MediaPlayer) MediaPlayer.create(MainActivity.this, u);
    playing.setOnPreparedListener(this);

onPrepared包括以下內容:

    @Override
public void onPrepared(MediaPlayer mp) {
    // TODO Auto-generated method stub
    spProgress.cancel();
    mp.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
    try {
    mp.start();
    } catch (IllegalStateException e) {
        Toast.makeText(this, "exception", Toast.LENGTH_SHORT).show();
    }
}

我已經嘗試了沒有try / catch甚至沒有監聽器的情況。 它唯一的播放時間是我不使用流類型STREAM_VOICE_CALL時。

可以使用SoundPool播放相同的文件:

SoundPool sp = new SoundPool(1, AudioManager.STREAM_VOICE_CALL, 0);
sp.load(s, 1);
sp.setOnLoadCompleteListener(this);

監聽器:

@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
    // TODO Auto-generated method stub
    if (status == 0) {
        spProgress.cancel();
        sp.play(sampleId, 1, 1, 1, 0, 1);
    } else {
        Toast.makeText(this, "failed to load", Toast.LENGTH_SHORT).show();
    }
}

實際上,我遇到了同樣的問題,這里的Google指南非常糟糕-確實有些棘手,但解釋起來很簡單:

當您需要更改STREAM,然后再次prepare()MediaPlayer時,您可以通過以下操作使其工作:

    Resources res = getResources();
    AssetFileDescriptor afd = res.openRawResourceFd(R.raw.tts_a);

    mp = new MediaPlayer();
    //mp.reset();
    mp.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
    mp.setLooping(false);
    try {
        mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        mp.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }

    mp.start();

實際的技巧是不要使用MediaPlayer.create,因為它本身就是在准備! 因此,您無法設置流。 通過使用AssetFileDescriptor設置File,您可以設置Stream並隨后調用您的prepare()!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM