我正在开发一个Voip应用程序,并且我想同时播放两个原始文件。
当我有来自应用程序的来电时,我正在创建一个新的Mediaplayer并播放自定义铃声。当我还收到一个GSM呼叫后不久,我创建了一个新的媒体播放器并播放敲门声,以向用户反馈也有一个GSM呼叫传入。同时,我希望自定义铃声继续播放。
private fun setAudioAttributesForFile(audioUsage: Int): AudioAttributes {
return AudioAttributes.Builder()
.setUsage(audioUsage)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
}
private fun startRingtone(fileToPlay: Int): MediaPlayer {
return MediaPlayer().apply {
reset()
if (fileToPlay == R.raw.ring {
setAudioAttributes(setAudioAttributesForFile(AudioAttributes.USAGE_NOTIFICATION_RINGTONE))
} else {
setAudioAttributes(setAudioAttributesForFile(AudioAttributes.USAGE_MEDIA))
}
isLooping = true
Main.get().resources.openRawResourceFd(fileToPlay).use {
setDataSource(
it.fileDescriptor,
it.startOffset,
it.length
)
}
setOnPreparedListener { start() }
prepareAsync()
}
}
我在这段代码中遇到的问题是,一旦敲响声音,铃声就会被系统静音,而一旦敲响声音停止,铃声就会继续。
我也尝试过:
仅使用
AudioAttributes.USAGE_NOTIFICATION_RINGTONE
。敲门声开始播放后,两个mediaPlayers都将静音。
如果我离开了setAudioAttributes()
电话,并将这四行替换为
if (fileToPlay == R.raw.ring) {
setAudioAttributesForFile(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
} else {
setAudioAttributesForFile(AudioAttributes.USAGE_MEDIA)
}
然后我可以同时播放这两个文件。然后的问题是,铃声文件未显示为铃声,而是仅显示为媒体文件。因此,当我增加或减少铃声音量时,该标志不会表明它是铃声。
有没有一种方法可以将一种声音作为铃声播放,另一种声音可以作为普通媒体声音播放?
先谢谢了。任何帮助表示赞赏。
答案 0 :(得分:0)
如果您想同时播放两种声音,请使用声音池。