You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在p5.js中当inData=RED时从歌曲数组随机选曲播放?

实现p5.js电台RED频道随机选曲播放

步骤1:创建RED频道歌曲数组

先在音频加载阶段完成数组初始化,通常放在preload函数中:

let redSounds = [];
let redSong1, redSong2;
// 其他频道音频变量按需定义

function preload() {
  redSong1 = loadSound('red_song_1.mp3');
  redSong2 = loadSound('red_song_2.mp3');
  // 加载其他频道音频...
  
  // 将RED频道歌曲存入数组
  redSounds = [redSong1, redSong2];
}

步骤2:适配频道切换逻辑

在频道切换检测函数中,处理RED频道的随机播放逻辑——先停止当前所有播放的音频,再从数组中随机选曲播放:

function switchChannel() {
  // 停止RED频道所有正在播放的歌曲,防止多轨重叠
  redSounds.forEach(song => {
    if (song.isPlaying()) song.stop();
  });
  
  // 停止其他频道的音频(根据你的项目实际情况补充)
  // if (blueSound.isPlaying()) blueSound.stop();
  // if (greenSound.isPlaying()) greenSound.stop();
  
  if (inData === RED) {
    // 从数组中随机选取一首歌曲并播放
    const selectedSong = random(redSounds);
    selectedSong.play();
  } else if (inData === BLUE) {
    // 原BLUE频道播放逻辑...
  } else if (inData === GREEN) {
    // 原GREEN频道播放逻辑...
  }
}

关键说明

你之前尝试的redSounds.play(random)无效,核心原因是数组本身没有play方法,play是p5.js中p5.SoundFile对象的专属方法。必须先通过random(redSounds)从数组中取出具体的音频文件实例,再调用它的play方法。

如果希望RED频道歌曲播放完毕后自动随机切换下一首,可以在setup中给数组内的歌曲绑定结束事件:

function setup() {
  // ...其他初始化代码
  redSounds.forEach(song => {
    song.onended(() => {
      // 随机选下一首,可选逻辑:避免重复选刚播放完的歌曲
      let nextSong = random(redSounds);
      while (nextSong === song) {
        nextSong = random(redSounds);
      }
      nextSong.play();
    });
  });
}

内容的提问来源于stack exchange,提问作者Sara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:25:24