news 2026/8/23 11:15:17

React Guitar 声音合成指南:useSound Hook 如何让吉他组件在浏览器中 3 行代码弹出真声

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
React Guitar 声音合成指南:useSound Hook 如何让吉他组件在浏览器中 3 行代码弹出真声

React Guitar 声音合成指南:useSound Hook 如何让吉他组件在浏览器中 3 行代码弹出真声

【免费下载链接】react-guitarA beautiful and accessible guitar component for React. ⚛️ 🎸项目地址: https://gitcode.com/gh_mirrors/re/react-guitar

React Guitar是一款漂亮且可访问的 React 吉他组件。本篇指南带你快速掌握它的useSound Hook 声音合成方案:只需 3 行代码,就能让吉他在浏览器中弹出真实的琴声,并支持 9 种乐器音色切换、一键扫弦与静音控制,无需音频后端、无需服务器,纯浏览器发声。

3 行代码上手:让吉他组件在浏览器发声

先安装 3 个包:

npm i react-guitar react-guitar-sound react-guitar-tunings

核心代码只有 3 行:

import Guitar from 'react-guitar' import { standard } from 'react-guitar-tunings' import useSound from 'react-guitar-sound' function GuitarWithSound() { const strings = [0, 1, 2, 2, 0, -1] // A 小和弦 const { play, strum } = useSound({ fretting: strings, tuning: standard }) // ① 创建播放器 return <Guitar strings={strings} onPlay={play} /> // ② 拨弦即发声,想扫弦就调 strum() }

关键点对接:

  • fretting:当前按弦数组,每个数字是一根弦的品格(0= 空弦,-1= 静音),必须与传给<Guitar>strings一致;
  • tuning:每根弦的 MIDI 音高数组,standard即标准吉他 E2 A2 D3 G3 B3 E4,完整音阶表在 packages/react-guitar-tunings/src/index.ts,收录了吉他、贝斯、尤克里里、班卓琴等 40+ 种调弦;
  • onPlay={play}:把组件的"拨弦"事件绑给播放器,用户拨哪根、响哪根。

useSound返回 4 个属性(源码见 packages/react-guitar-sound/src/index.ts):

属性说明
play(string, when)弹奏第string根弦(0-5),when为秒级延迟
strum(up?)以 50ms 间隔一键扫过 6 根弦,传true为自高向低扫
playing每根弦当前是否正在鸣响的布尔数组
loading音源是否仍在加载

两种换音色方法:withSoundFont 与 withSamples

默认音色是尼龙弦木吉他,想换声音?react-guitar-sound内置两个"乐器工厂"(模块目录:packages/react-guitar-sound/):

方法一:withSoundFont,一个名字换音色

import useSound, { withSoundFont } from 'react-guitar-sound' const electricGuitar = withSoundFont('electric_guitar_clean')

底层基于开源 soundfont-player,直接传乐器名即可:acoustic_guitar_steel(钢弦木吉他)、electric_guitar_jazz(爵士电吉他)、banjo(班卓琴)、sitar(西塔琴)、acoustic_bass(木贝斯)……几十种音色随取随用,还支持 mp3/ogg 格式选择(实现见 packages/react-guitar-sound/src/instruments/sound-font.ts)。

方法二:withSamples,真实采样最逼真

import useSound, { withSamples } from 'react-guitar-sound' const flamenco = withSamples({ E2: '/samples/E2.mp3', D3: '/samples/D3.mp3', G3: '/samples/G3.mp3', E4: '/samples/E4.mp3', })

提供几个真实录音文件即可,内部用 Tone.js 的 Sampler 把每个品位映射到最近的采样来播放(实现见 packages/react-guitar-sound/src/instruments/samples.ts),官方演示站默认的"Flamenco Guitar"音色就是这样做出的,音色最接近真实吉他。

拨弦、扫弦、静音 3 个实用技巧

  • 悬停即发声:给<Guitar>playOnHover,鼠标划过琴弦即刻发声,做演示站就像真琴;
  • 静音:给useSoundmuted: trueplay调用会被忽略——官方演示在弹出和弦选择器时就用它临时静音(参考 site/components/Demo.tsx);
  • 键盘扫弦:官方演示把1-6键绑定 6 根弦、w/s键绑定上/下扫弦(实现见 site/hooks/sound.ts)。

文件路径速查

模块路径
吉他组件(外观与交互)packages/react-guitar/src/index.tsx
useSound Hookpackages/react-guitar-sound/src/index.ts
声音合成播放器packages/react-guitar-sound/src/util/player.ts
音字体乐器packages/react-guitar-sound/src/instruments/sound-font.ts
采样乐器packages/react-guitar-sound/src/instruments/samples.ts
演示站site/components/Demo.tsx

想本地跑起来看真声:

git clone https://gitcode.com/gh_mirrors/re/react-guitar cd react-guitar && yarn build && yarn start

常见问题

问:为什么刚加载时play没声音?答:音源加载期间loadingtrue,等其变false再播即可;另外浏览器要求用户交互(如点击)后才允许激活音频上下文,这是浏览器安全策略,属正常现象。

问:换调弦后音高会错吗?答:不会。tuning变化时 Hook 会自动重建播放器,声音与视觉始终同步;调弦表里还内置 Drop D、Open G 等 20 余种常用调弦。

问:左手吉他怎么办?答:给<Guitar>lefty即可,视觉镜像后声音依旧跟着指法走。

以上就是React Guitar useSound 声音合成的完整指南:3 行代码让浏览器弹出真吉他声,两种工厂换音色,拨弦/扫弦/静音随手控制,复制即用。

【免费下载链接】react-guitarA beautiful and accessible guitar component for React. ⚛️ 🎸项目地址: https://gitcode.com/gh_mirrors/re/react-guitar

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 11:00:41

TRACES基准:评估AI发现式智能的科学推理框架

这次我们来看一个在 AI 评估领域值得关注的新基准&#xff1a;TRACES。它不是一个新的模型或工具&#xff0c;而是一套用于衡量 AI 系统“发现式智能”的评估框架。简单来说&#xff0c;它要回答的问题是&#xff1a;当前的 AI&#xff0c;尤其是大语言模型&#xff0c;是否具备…

作者头像 李华
网站建设 2026/8/23 10:56:20

Java面试核心:JMM、HashMap与多线程精要解析

1. 为什么Java基础面试题如此重要&#xff1f; 作为一门诞生近30年依然活跃的编程语言&#xff0c;Java在TIOBE编程语言排行榜上长期稳居前三。根据2023年最新统计&#xff0c;全球有超过90%的财富500强企业使用Java开发关键业务系统。这种广泛的企业应用直接导致了Java开发岗位…

作者头像 李华
网站建设 2026/8/23 10:53:19

RigorBench:AI编码代理的工程纪律基准测试与评估

1. 项目概述&#xff1a;为什么我们需要一个“工程纪律”的基准&#xff1f;最近和几个在搞AI编程助手落地的朋友聊天&#xff0c;大家不约而同地提到了一个痛点&#xff1a;现在的AI编码代理&#xff08;Autonomous AI Coding Agents&#xff09;写单段代码、修单个bug的能力越…

作者头像 李华
网站建设 2026/8/23 10:51:32

BiliBiliTool:把B站每日任务和大会员福利自动做完的任务工具

BiliBiliTool&#xff1a;把B站每日任务和大会员福利自动做完的任务工具 【免费下载链接】BiliBiliTool .Net 5 编写的B站&#xff08;哔哩哔哩&#xff09;任务工具&#xff0c;通过GitHub Actions实现每日线上自动运行任务&#xff1a;每日自动登录、观看、分享、投币视频&am…

作者头像 李华