HarmonyOS soundPool问题

使用下边这个加载完立即播放,测试播放不出声音,是哪里出问题了吗?

MyUtils.context.resourceManager.getRawFd(name).then(file => { 
  MyUtils.soundPool.load(file.fd, file.offset, file.length).then((soundId => { 
    console.log('guojs index:' + index + " name:" + name + ' soundId:' + soundId); 
    MyUtils.soundPool.play(soundId); 
    // MyUtils.soundIds.set(index, soundId); 
  }), (reason: string) => { 
    console.log('guojs error:' + index + " error:" + reason); 
  }).catch((reason: string) => { 
    console.log('guojs catch error:' + index + " error:" + reason); 
  }) 
});

log打印出来有加载成功。

soundPool.on('playFinished'

这个playFinished事件是什么时候调用的呢?

如何判断一个sound是否已经播放完成呢?

HarmonyOS
2024-11-12 10:07:51
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

​加载音频资源时,soundPool.load()的回调中并未真正加载成功,不能在load的回调中直接play,可以在media.createSoundPool()创建soundPool实例后,在soundPool实例的回调监听soundPool.on('loadComplete')中调用play方法;

如下是我本地的样例demo,可以参考使用:​

import { media } from '@kit.MediaKit'; 
import { audio } from '@kit.AudioKit'; 
import { BusinessError } from '@kit.BasicServicesKit'; 
import { common } from '@kit.AbilityKit'; 
 
@Entry 
@Component 
struct Index { 
  private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; 
 
  build() { 
    Button("测试").onClick(() => { 
      let soundPool: media.SoundPool; 
      let audioRendererInfo: audio.AudioRendererInfo = { usage: audio.StreamUsage.STREAM_USAGE_MUSIC, rendererFlags: 1 } 
      media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => { 
        if (error) { 
          return; 
        } else { 
          console.info(`createSoundPool success`) 
          this.setCallBack(soundPool_); 
          let file = this.context.resourceManager.getRawFdSync("y1491.mp3"); 
          soundPool = soundPool_; 
          soundPool.load(file.fd, file.offset, file.length).then((soundId: number) => { 
            console.info('soundPool load uri success'); 
          }) 
        } 
      }) 
    }) 
  } 
 
  setCallBack(soundPool: media.SoundPool) { 
    soundPool.on('loadComplete', (soundId: number) => { 
      console.info('[SoundPoolDemo] loadComplete success,soundId:' + soundId); 
      let playParameters: media.PlayParameters = { 
        loop: 1, // 循环4次 
        rate: audio.AudioRendererRate.RENDER_RATE_NORMAL, // 正常倍速 
        leftVolume: 0.5, // range = 0.0-1.0 
        rightVolume: 0.5, // range = 0.0-1.0 
        priority: 0, // 最低优先级 
      } 
      soundPool.play(soundId, playParameters).then((streamId: number) => { 
        console.info('play success'); 
      }, (err: BusinessError) => { 
        console.error('soundpool play failed and catch error is ' + err.message); 
      }); 
    }); 
    soundPool.on('playFinished', () => { 
      console.info('[SoundPoolDemo] playFinished success'); 
    }); 
    soundPool.on('error', (error: BusinessError) => { 
      console.error(`error happened,and error is ${JSON.stringify(error)}`); 
    }); 
  } 
}
分享
微博
QQ
微信
回复
2024-11-12 17:35:05
相关问题
HarmonyOS soundpool使用问题
455浏览 • 1回复 待解决
HarmonyOS soundpool播放声音的问题
551浏览 • 1回复 待解决
SoundPool实现音频播放功能
1359浏览 • 1回复 待解决
SoundPool播放的音频是否支持WMV格式
1924浏览 • 1回复 待解决
HarmonyOS Toggle问题
511浏览 • 0回复 待解决
HarmonyOS setResponseData问题
395浏览 • 1回复 待解决
HarmonyOS gridcell问题
259浏览 • 1回复 待解决
HarmonyOS interface 问题
310浏览 • 1回复 待解决
HarmonyOS CustomDialogController问题
530浏览 • 1回复 待解决
HarmonyOS startAbility问题
371浏览 • 1回复 待解决
HarmonyOS notificationManager问题
0浏览 • 1回复 待解决
HarmonyOS ImageData问题
180浏览 • 1回复 待解决
HarmonyOS HarmonyOS社区组件问题
314浏览 • 1回复 待解决
HarmonyOS CustomDialogController组件问题
375浏览 • 1回复 待解决
HarmonyOS 权限配置问题
345浏览 • 1回复 待解决
HarmonyOS TextInput焦点问题
404浏览 • 1回复 待解决
HarmonyOS应用签名问题
382浏览 • 1回复 待解决
HarmonyOS 画布问题咨询
232浏览 • 1回复 待解决
HarmonyOS Grid相关问题
381浏览 • 1回复 待解决
HarmonyOS 弹窗异常问题
371浏览 • 1回复 待解决
HarmonyOS 组件复用问题
339浏览 • 1回复 待解决
HarmonyOS 开发@Prop问题
332浏览 • 1回复 待解决