player.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import request from 'umi-request'
  2. const ac = new (window.AudioContext || (window as any).webkitAudioContext)()
  3. export type IList = any[]
  4. export default class Player {
  5. list:any []
  6. arrayBuffer: ArrayBuffer[] = []
  7. constructor (list:any []) {
  8. this.list = list
  9. }
  10. load() {
  11. const promises = this.list.map(item => request.get(item, {responseType: 'arrayBuffer'}))
  12. return Promise.all(promises)
  13. .then(res => this.arrayBuffer = res)
  14. }
  15. async play() {
  16. if (!this.arrayBuffer.length) {
  17. await this.load()
  18. }
  19. const decodedDatas = this.arrayBuffer.map(async item => {
  20. const data = await ac.decodeAudioData(item)
  21. return data
  22. })
  23. const sources = decodedDatas.map(async item => {
  24. const source = await ac.createBufferSource()
  25. source.buffer = await item
  26. source.connect(ac.destination)
  27. return source
  28. })
  29. for (const item of sources) {
  30. const source = await item
  31. source.playbackRate.value = 1.5
  32. source.start()
  33. console.log(source)
  34. }
  35. // await Promise.all(sources)
  36. // .then(res => await res)
  37. // console.log(sources)
  38. }
  39. }