async playPause()

in charts/shared/sonic.js [786:876]


  async playPause() { 

    // This needs to be here to make Safari work because of its strict autoplay policies

    Tone.context.resume()

    let self = this
    console.log("isPlaying", self.isPlaying, "inProgress", self.inProgress, "usedCursor", self.usedCursor, "furniturePlayer", self.furniturePlaying, "furniturePaused", self.furniturePaused)
    
    // Audio has not played through, so start with the furniture

    if (!self.runOnce && !self.inProgress && !self.furniturePlaying) {
      console.log("playing furniture")
      Tone.start()
      self.synth.context.resume();
      self.runOnce = true
      // self.inProgress = true
      
      await self.playFurniture()
    }
    
    // Furniture is playing, so clear speech on second press

    else if (self.furniturePlaying && !self.furniturePaused) {
      console.log("pausing furniture")
  
      self.speech.pause()
      self.furniturePaused = true
      
    }
    else if (self.furniturePlaying && self.furniturePaused) {
      self.speech.resume()
      self.furniturePaused = false
    }

    // it's not playing, and not paused so play it from the start
  
    if (!self.isPlaying && !self.inProgress && !self.usedCursor && !self.furniturePlaying) {
      console.log("playing")
      // self.isPlaying = true
      // self.inProgress = true
      
        for await (const key of this.dataKeys) {
          
          console.log(key)
          // setTimeout(async () => {
          let speakKey = await self.speaker(`${key}`)
          
          await self.playAudio(key)

          // },100)
        }
  
    }
  
    // Function to resume after using the cursor here

    else if (!self.isPlaying && self.inProgress && self.usedCursor) {
      console.log("playing from cursor")
      // self.isPlaying = true
      // self.inProgress = true
      console.log("yeh")
      
      let currentKeyIndex = self.dataKeys.indexOf(self.currentKey)

      for (let i = currentKeyIndex; i < self.dataKeys.length; i++) {
        self.currentKey = self.dataKeys[i]
        let speakKey = await self.speaker(`${self.currentKey}`)
        await self.playAudio(self.currentKey)
      }

    }

    // it is playing so pause 
  
    else if (self.isPlaying && self.inProgress) {
      console.log("pause")
      self.isPlaying = false
      Tone.Transport.pause();
    }
  
    // it has been paused, so restart 
  
    else if (!self.isPlaying && self.inProgress) {

      console.log("restart")
      self.isPlaying = true
      Tone.Transport.start();
    }
    
  }