提交 7d6146aa 编写于 作者: D DCloud_LXH

feat(App): InnerAudioContext、BackgroundAudioManager支持倍速

上级 9dbf5080
......@@ -70,6 +70,11 @@ const props = [
name: 'protocol',
readonly: true,
default: 'http'
},
{
name: 'playbackRate',
default: 1,
cache: true,
}
]
......@@ -114,7 +119,7 @@ class BackgroundAudioManager {
this._options[name] = value
invokeMethod('setBackgroundAudioState', Object.assign({}, this._options, {
audioId: this.id
}))
}), name)
}
}
Object.defineProperty(this, name, data)
......
......@@ -63,6 +63,10 @@ const props = [
},
{
name: 'sessionCategory'
},
{
name: 'playbackRate',
cache: true,
}
]
......
......@@ -86,9 +86,16 @@ function stopTimeUpdateTimer () {
}
}
function setMusicState (args) {
function setMusicState (args, name) {
initMusic()
const props = ['src', 'startTime', 'coverImgUrl', 'webUrl', 'singer', 'epname', 'title']
if (name && name === 'playbackRate') {
let val = args[name]
audio.playbackRate && audio.playbackRate(parseFloat(val))
return
}
const style = {}
Object.keys(args).forEach(key => {
if (props.indexOf(key) >= 0) {
......@@ -150,8 +157,8 @@ export function operateMusicPlayer ({
errMsg: `${api}:ok`
}
}
export function setBackgroundAudioState (args) {
setMusicState(args)
export function setBackgroundAudioState (args, name) {
setMusicState(args, name)
return {
errMsg: 'setBackgroundAudioState:ok'
}
......
......@@ -48,7 +48,7 @@ const initStateChage = audioId => {
}
}
export function createAudioInstance () {
export function createAudioInstance() {
const audioId = `${Date.now()}${Math.random()}`
const audio = audios[audioId] = plus.audio.createPlayer('')
audio.src = ''
......@@ -61,7 +61,7 @@ export function createAudioInstance () {
}
}
export function destroyAudioInstance ({
export function destroyAudioInstance({
audioId
}) {
if (audios[audioId]) {
......@@ -74,7 +74,7 @@ export function destroyAudioInstance ({
}
}
export function setAudioState ({
export function setAudioState({
audioId,
src,
startTime,
......@@ -82,7 +82,8 @@ export function setAudioState ({
loop = false,
obeyMuteSwitch,
volume,
sessionCategory = AUDIO_DEFAULT_SESSION_CATEGORY
sessionCategory = AUDIO_DEFAULT_SESSION_CATEGORY,
playbackRate
}) {
const audio = audios[audioId]
if (audio) {
......@@ -91,7 +92,9 @@ export function setAudioState ({
autoplay
}
if (src) {
audio.src = style.src = getRealPath(src)
// iOS 设置 src 会重新播放
const realSrc = getRealPath(src)
if (audio.src !== realSrc) audio.src = style.src = realSrc
}
if (startTime) {
audio.startTime = style.startTime = startTime
......@@ -103,6 +106,9 @@ export function setAudioState ({
if (sessionCategory) {
audio.setSessionCategory(sessionCategory)
}
if (playbackRate && audio.playbackRate) {
audio.playbackRate(playbackRate)
}
initStateChage(audioId)
}
return {
......@@ -110,7 +116,7 @@ export function setAudioState ({
}
}
export function getAudioState ({
export function getAudioState({
audioId
}) {
const audio = audios[audioId]
......@@ -137,7 +143,7 @@ export function getAudioState ({
}
}
export function operateAudio ({
export function operateAudio({
operationType,
audioId,
currentTime
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册