HarmonyOS 不同的soundpool加载不同的声音,播放时只要soundid相同播放的声音也相同怎么解决?

由于现在需要加载60个声音如果只创建一个soundpool加载60个声音时会出现界面卡死,所以需要创建多个soundpool但是出现以下问题。以下代码soundPool1加载的声音是“one.ogg(对应按钮测试一)和“two.ogg(对应按钮测试二)”,soundPool2加载的声音是“three.ogg(对应按钮测试三)”和“four.ogg(对应按钮测试四)“,播放的时候按钮一却播放"three.ogg"声音,请问怎么解决。

import { media } from '@kit.MediaKit'; 
import { audio } from '@kit.AudioKit'; 
import { BusinessError } from '@kit.BasicServicesKit'; 
import { common } from '@kit.AbilityKit'; 
import fs from '@ohos.file.fs'; 
let audioRendererInfo: audio.AudioRendererInfo = { 
  usage: audio.StreamUsage.STREAM_USAGE_MOVIE, 
  rendererFlags: 0 
} 
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; 
@Entry 
@Component 
struct BorderExample3 { 
  soundId1 : number = 0; 
  soundId2 : number = 0; 
  soundId3 : number = 0; 
  soundId4 : number = 0; 
  soundPool1?: media.SoundPool 
  soundPool2?: media.SoundPool 
  async aboutToAppear(): Promise<void> { 
    let file1 = context.resourceManager.getRawFdSync('one.ogg'); 
    let file2 = context.resourceManager.getRawFdSync('two.ogg'); 
    let file3 = context.resourceManager.getRawFdSync('three.ogg'); 
    let file4 = context.resourceManager.getRawFdSync('four.ogg'); 
    this.soundPool1 = await media.createSoundPool(2,audioRendererInfo); 
    this.soundId1 = await this.soundPool1.load(file1.fd, file1.offset, file1.length) 
    this.soundId2 = await this.soundPool1.load(file2.fd, file2.offset, file2.length) 
    console.log("sound1",this.soundId1)//1 
    console.log("sound2",this.soundId2)//2 
    this.soundPool2 = await media.createSoundPool(2,audioRendererInfo); 
    this.soundId3 = await this.soundPool2.load(file3.fd, file3.offset, file3.length) 
    this.soundId4 = await this.soundPool2.load(file4.fd, file4.offset, file4.length) 
    console.log("sound3",this.soundId3)//1 
    console.log("sound4",this.soundId4)//2 
  } 
  build() { 
    Column() { 
      Button("测试1").onClick(() => { 
        this.soundPool1?.play(this.soundId1) 
      }) 
      Button('测试2').onClick(() => { 
        this.soundPool1?.play(this.soundId2) 
      }) 
      Button('测试3').onClick(() => { 
        this.soundPool2?.play(this.soundId3) 
      }) 
      Button('测试4').onClick(() => { 
        this.soundPool2?.play(this.soundId4) 
      }) 
    } 
  } 
 
}
HarmonyOS
2024-08-14 16:35:54
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

soundpool不支持多实例,多次创建对应的是同个实例,同时media.createSoundPool()会清空内容重新初始化。soundpool当前最多支持32个并行流,可以在需要加载第33个音频时,将之前加载的音频通过unload卸载掉。

分享
微博
QQ
微信
回复
2024-08-14 20:55:00
相关问题
HarmonyOS soundpool播放声音问题
450浏览 • 1回复 待解决
后台播放声音会直接无声
1715浏览 • 1回复 待解决
SoundPool播放音频是否支持WMV格式
1856浏览 • 1回复 待解决
SoundPool实现音频播放功能
1247浏览 • 1回复 待解决
js采集声音出现问题怎么处理?
3270浏览 • 1回复 待解决
HarmonyOS 怎么获取视频播放时长?
124浏览 • 1回复 待解决
怎么控制播放不息屏?
6239浏览 • 1回复 待解决