首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >加载带有声音板按钮的音频剪辑时出错

加载带有声音板按钮的音频剪辑时出错
EN

Stack Overflow用户
提问于 2022-09-28 12:11:08
回答 1查看 24关注 0票数 1

https://editor.p5js.org/hvgrajciar/full/KIOn1sX6h

我有问题,让这些音频文件与我的声音板地图工作。我想把每个音频文件附加到地图上的相应按钮上,但是每次我在另一个音频文件中加载时,它都会破坏其他音频文件和它们所连接的按钮。

例如,在预加载加载第二个音频文件之后,我将按下第一个音频按钮,第一个音频按钮将开始播放第二个音频文件而不是第一个音频文件。即使我已经尽了最大努力将按钮声明为附加到函数的变量,当按下按钮时,这些函数也会播放正确的音频文件,也会发生这种情况。

这是我在p5js的第一次任务,我觉得我很接近,但我错过了一些重要的东西。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var scotland;
let mySound;
var button1;
var button2;
var button3;
var button4;
var button5;
var button6;

function preload() {
  scotland = createImg("https://i.redd.it/czyk6caeln921.png");
  mySound = loadSound("audio/1clip.ogg");
  mySound2 = loadSound("audio/2clip.mp3");
  mySound3 = loadSound("audio/3clip.mp3");
  mySound4 = loadSound("audio/4clip.mp3");
}

function setup() {
  createCanvas(700, 900);
  button1 = createButton("Shetland");
  button1.position(600, 100);
  button2 = createButton("Glasgow");
  button2.position(320, 730);
  button3 = createButton("Aberdeen");
  button3.position(540, 520);
  button4 = createButton("Isle of Lewis");
  button4.position(200, 380);
  button5 = createButton("The Scottish Borders");
  button5.position(400, 800);
  button6 = createButton("Argyll");
  button6.position(290, 620);
  button7 = createButton("Ross Sutherland");
  button7.position(320, 400);

  // Header Text for Map
  var div = createDiv("");

  div.html("Scottish Regions and Accents");
  div.position(60, 80);
  div.style("font-size", "32px");
  div.style("textStyle", "Impact");
}

function mousePressed(button1) {
  if (mySound.isPlaying()) {
    // .isPlaying() returns a boolean
    mySound.stop();
  } else {
    mySound.play();
  }
}

function mousePressed(button2) {
  if (mySound2.isPlaying()) {
    // .isPlaying() returns a boolean
    song.stop();
  } else {
    mySound2.play();
  }
}

function mousePressed(button3) {
  if (mySound3.isPlaying()) {
    // .isPlaying() returns a boolean
    mySound3.stop();
  } else {
    mySound3.play();
  }
}

function mousePressed(button4) {
  if (mySound4.isPlaying()) {
    // .isPlaying() returns a boolean
    mySound4.stop();
  } else {
    mySound4.play();
  }
}

function draw() {
  background(220);
  scotland.position(0, 0);
  scotland.size(700, 950);
}
EN

回答 1

Stack Overflow用户

发布于 2022-09-28 16:06:12

正如我在注释中提到的,function mousePressed() {}是一个全局函数,而不是按按钮处理程序。参数名称不像您可能认为的那样将其作为处理程序附加到该按钮变量。

将侦听器附加到特定元素的正确方法是调用Element.mouseClicked(handlerFunc) (或mousePressed)。

虽然这不是主要问题,但是通过使用包含按钮的原始数据的对象数组而不是一堆松散的变量,您的代码将得到相当大的改进。当您对数组的元素进行循环以将相同的逻辑应用于每个元素时,数组的威力就会活跃起来,从而减少代码的重复。

另外,noLoop()也很有用,因为你的应用程序中还没有任何动画,所以你不需要每秒钟重复重复绘制同一张地图图像60次。

在下面的示例中,我使用了随机的wikimedia共用剪辑作为音频占位符。你应该在这里使用你的原始文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const buttons = [
  {text: "Shetland", x: 600, y: 100, clip: "https://upload.wikimedia.org/wikipedia/commons/2/22/30_second_sample_of_Agnus_Dei_by_Ernesto_Herrera%2C_performed_by_BYU_Singers.ogg"},
  {text: "Glasgow", x: 320, y: 730, clip: "https://upload.wikimedia.org/wikipedia/en/d/d3/Aphex_Twin%2C_Green_Calx%2C_1992.ogg"},
  {text: "Aberdeen", x: 540, y: 520, clip: "https://upload.wikimedia.org/wikipedia/en/8/8a/AphexTwin4.ogg"},
  {text: "Isle of Lewis", x: 200, y: 300, clip: "https://upload.wikimedia.org/wikipedia/en/7/7d/Aphex_Twin_-_XMAS_EVET10_sample.ogg"},
  {text: "The Scottish Borders", x: 400, y: 800, clip: "https://upload.wikimedia.org/wikipedia/en/9/9b/Excerpt_of_F%C3%BCnf_geistliche_Lieder_f%C3%BCr_Sopran_und_f%C3%BCnf_Instrumente%2C_Op._15%2C_V._Fahr_hin%2C_o_Seel%2C_zu_deinem_Gott%3B_Anton_Webern%2C_composer%2C_1917%3B_Peter_Rosegger%2C_poet%2C_1900%3B_and_Halina_Lukomska%2C_soprano_and_Pierre_Boulez%2C_conductor%2C_1969.ogg"},
  {text: "Argyll", x: 290, y: 620, clip: "https://upload.wikimedia.org/wikipedia/en/8/81/Messiaen-ascension-3-latry.ogg"},
  {text: "Ross Sutherland", x: 320, y: 400, clip: "https://upload.wikimedia.org/wikipedia/en/d/d5/Messiaen-livre-7-soixante.ogg"},
];
let scotland;

function preload() {
  buttons.forEach(e => {
    e.clip = loadSound(e.clip);
  });
  scotland = createImg(
    "https://i.redd.it/czyk6caeln921.png",
    "Image of Scotland"
  );
}

function setup() {
  createCanvas(700, 900);
  buttons.forEach(e => {
    e.button = createButton(e.text);
    e.button.position(e.x, e.y);
    e.button.mouseClicked(() => {
      e.clip.isPlaying() ? e.clip.stop() : e.clip.play();
    });
  });

  // Header Text for Map
  const d = createDiv("Scottish Regions and Accents");
  d.position(60, 80);
  d.style("font-size", "32px");
  d.style("textStyle", "Impact");

  scotland.position(0, 0);
  scotland.size(700, 950);

  noLoop();
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.2/p5.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.2/addons/p5.sound.min.js"crossorigin="anonymous" referrerpolicy="no-referrer"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73887276

复制
相关文章
在 Ubuntu 发行版上重置遗忘的 WSL 密码
记下你的普通/常规用户名将是明智之举。如你所见,我的普通帐户的用户名是 abhishek。
用户8965210
2021/09/27
2.1K0
如何在Ubuntu 18.04上重置MySQL或MariaDB Root密码
忘记密码发生在我们最好的人身上。如果您忘记或丢失了MySQL或MariaDB数据库的root密码,如果您有权访问服务器和具有sudo权限的用户帐户,您仍然可以获得访问权限并重置密码。
你在哪里
2018/10/30
3.5K0
重置密码
当用户不小心忘记了密码时,网站需要提供让用户找回账户密码的功能。在示例项目中,我们将发送一封含有重置用户密码链接的邮件到用户注册时的邮箱,用户点击收到的链接就可以重置他的密码,下面是具体做法。 发送邮件设置 Django 内置了非常方便的发送邮件的功能,不过需要在 settings.py 中做一些简单配置。生产环境下通常需要使用真实的邮件发送服务器,配置步骤会比较多一点。不过 Django 为开发环境下发送邮件提供了一些方便的 Backends 来模拟真实邮件的发送,例如直接发送邮件到终端()。在 sett
追梦人物
2018/04/17
4.9K0
重置密码
qBittorrent重置密码
最近入坑pt,在nas上搭了一个qBittorrent用于外网访问,突然访问显示无效的用户名或密码。 应该是pptp推送种子的时候频繁了
overme
2022/01/17
14.9K1
qBittorrent重置密码
mysql 重置密码
当我们安装了mysql或者mariadb的时候,一不小心,就把密码给忘记了。这个时候,我们不管怎么尝试密码,都是错误的,都会显示如下错误:
魔王卷子
2019/05/28
4.9K0
如何在 Ubuntu 20.04 上管理根帐户?
在 Ubuntu 20.04 中,默认情况下是禁用了根帐户(root account)的。根帐户具有最高权限,可以执行系统的关键任务。然而,在大多数情况下,推荐使用普通用户帐户,并使用 sudo 命令来执行需要特权的任务。但是,有时可能需要启用根帐户来进行一些特定的操作。本文将详细介绍如何在 Ubuntu 20.04 上管理根帐户。
网络技术联盟站
2023/06/19
2180
如何在 Ubuntu 20.04 上管理根帐户?
重置Oracle密码
在系统运行中输入: sqlplus /nolog 在命令窗口分别执行: conn /as sysdba alter user scott identified by tiger; alter user scott account unlock; 这样就把“scott”用户密码修改为“tiger”了,用户可根据自己需求,重置密码。
磊哥
2018/05/08
2K0
Linux密码重置
在启动菜单选择启动内核: 按e编辑,编辑修改两处:ro改为rw,和找到rhgb quiet一行: 把rhgb quiet替换为init=/bin/bash(临时生效): 按CTRL+X进入单用户模式:
landv
2019/01/28
6.2K0
Linux密码重置
MySQL 重置密码
这里需要主要是了解你安装的是什么版本的包,如果不是最新版本,那就需要指定版本就停止:
魔王卷子
2022/02/15
4.7K0
MySQL  重置密码
linux mysql重置密码_linux系统重置
大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。 Jetbrains全系列IDE稳定放心使用
全栈程序员站长
2022/11/04
6.2K0
Ubuntu16.04忘记用户登录密码以及管理员密码,重置密码的解决方案[通俗易懂]
问题原因,搞不懂,只是修改了/etc/shadow和/etc/sudoers这俩文件
全栈程序员站长
2022/11/10
3.3K0
Ubuntu16.04忘记用户登录密码以及管理员密码,重置密码的解决方案[通俗易懂]
如何跳过MySQL的root密码
如果他提示你使用 alter user语句重置密码(不是每次都会出现这个,我在虚拟机里装了五次,出现过一次,也不知道是什么原因),那就改呗
宸寰客
2020/07/14
3.3K0
Oracle重置过期的密码
一、由于Oracle 11g在默认的default概要文件中设置了“PASSWORD_LIFE_TIME=180”天导致;
大江小浪
2018/07/24
1.2K0
重置mysql root密码
       mysqladmin –u root –p password “新密码”   回车后要求输入旧密码
红目香薰
2022/11/29
3.9K0
Linux 重置root密码
1、重启Linux 系统主机并出现引导界面时,按下键盘上的 e 键进入内核编辑界面,如图所示。
Alone-林
2023/03/17
12.6K0
Linux 重置root密码
正确重置MySQL密码
谁都不想弄丢家门钥匙,但不管多么小心,时间长了,这样的事情总会发生几次。MySQL密码也是一样,把它写在文档上不太安全,记在脑子里又难免会忘记。
LA0WAN9
2021/12/14
2.5K0
Grafana 重置 admin 密码
太久没用 Grafana 发现之前设置的密码给忘记了,又没有配置邮箱功能,所以只能看下暴力修改了。
Hsinyan
2022/08/30
2K0
Grafana 重置 admin 密码
【Mysql】ROOT 密码重置
1. 关闭权限验证。在 my.cnf 文件的[mysqld] 配置中增加 skip-grant-tables。
tonglei0429
2021/08/25
4.9K0
WordPress 如何重置密码
在本文中,我们将讨论两种在您忘记 WordPress 网站密码时让您重新登录 WordPress 网站的方法。
海拥
2022/10/06
3K0
WordPress 如何重置密码
点击加载更多

相似问题

CI/CD与Jenkins

25

Github CI/CD重用步骤

18

Maven的快照概念对CI/CD有什么用处吗?

13

CI/CD与Jenkins和Vagrant

22

Liferay dxp 7.2 jenkins CI/CD

19
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文