首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有AudioTrack的Android AudioTrack几乎不起作用

带有AudioTrack的Android AudioTrack几乎不起作用
EN

Stack Overflow用户
提问于 2021-09-21 14:51:09
回答 1查看 230关注 0票数 0

我使用AudioTrack来播放一些音频,就像GPS导航一样。当然,我需要一个音频焦点,但我丑陋的代码并没有像我预期的那样发挥作用。我听到了audioTrack的声音,但我不能说音乐播放器(另一个应用程序)减少了它的音量。

AudioTrack

代码语言:javascript
运行
复制
audioTrack = new AudioTrack.Builder()
    .setAudioAttributes(new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .build())
    .setAudioFormat(new AudioFormat.Builder()
            .setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
            .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
            .setSampleRate(SAMPLE_RATE)
            .build())
    .setTransferMode(AudioTrack.MODE_STREAM)
    .setBufferSizeInBytes(intBufferSize)
    .build();

audioTrack.play();

播放和焦点请求:

代码语言:javascript
运行
复制
maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

AudioAttributes playbackAttributes = new AudioAttributes.Builder()
    .setUsage(AudioAttributes.USAGE_MEDIA)
    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
    .build();
AudioFocusRequest focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)
    .setAudioAttributes(playbackAttributes)
//      .setAcceptsDelayedFocusGain(true)
//      .setOnAudioFocusChangeListener(afChangeListener)
    .build();


int afresult = audioManager.requestAudioFocus(focusRequest);
Log.d(TAG, "Music request focus, result: " + afresult);

if (afresult == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
    Log.d(TAG, "Audio Focus is granted ");

    audioTrack.setVolume(maxVolume*0.4f);
    audioTrack.write(myAudioData, 0, myAudioData.length);
}

else if (afresult == AudioManager.AUDIOFOCUS_REQUEST_FAILED){
    Log.d(TAG, "Audio Focus is failed ");
} else if (afresult == AudioManager.AUDIOFOCUS_REQUEST_DELAYED){
    Log.d(TAG, "Audio Focus is delayed ");
}

audioManager.abandonAudioFocusRequest(focusRequest);

我还没有OnAudioFocusChangeListener,但我会实现它。那么,为什么其他应用程序似乎不处理音频焦点丢失呢?AUDIOFOCUS_GAIN_TRANSIENT工作,但AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK不工作。我做错了什么?

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2021-09-30 20:48:43

我意识到我的代码不能工作,因为我试图静音一个音乐流和播放另一个。我不得不更改USAGECONTENT_TYPE属性。

它可以是CONTENT_TYPE_SONIFICATION + USAGE_ASSISTANCE_SONIFICATIONCONTENT_TYPE_SPEECH + USAGE_VOICE_COMMUNICATION,就像在文档中所说的那样。

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69271076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档