有没有办法将内存中的原始数据作为样本添加到 Web Audio Api?我想添加一个 Int8Array (或 Int16Array)作为缓冲区,该缓冲区只有样本,没有 WAV 或 MP3 格式。我尝试过 audioContext.createBuffer 等但没有成功。
像这样的东西:
var buffer = audioContext.createBuffer(1,8192, 22000);
var intArray = new Int8Array(....);
// -- fill intarray
buffer.buffer = intArray;
...
var source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的,是否有一种与 contetx.decodeAudio() 兼容的声音格式,很容易在内存中“模拟”?即只是一个标题或其他东西。
我正在获取一个包含音频和视频的远程媒体流。在此流中,我获得单声道音频,而我需要立体声音频。
那么我如何使用 Web Audio API 将单声道音频转换为立体声音频
WebAudio的AnalyserNode具有FFT来获取声音信号的频域数据。我不明白FFT的加窗函数是如何定义的。是否可以更改窗口大小甚至窗口函数(即汉宁或布莱克曼)?如果窗口不可调节,窗口大小是多少以及使用哪种窗口函数?
不幸的是我无法在文档中找到它。
我想使用网络音频带通滤波器来强调 300Hz 到 3kHz 的频率。
然而,Web Audio API 中的带通滤波器只有一个频率值(代表中心)和一个Q值(代表八度音程?)。
如何正确设置它们来代表我的to频率from范围?
我有几个关于 Web Audio API 的简单问题。我正在使用 JavaScript (AngularJS) 进行开发。
我正在使用的一个很棒的演示应用程序位于: https: //webaudiodemos.appspot.com/AudioRecorder/index.html
一旦我使用音频 API 在 Chrome 浏览器中授予对音频麦克风的访问权限,是否可以:
我在 StackOverflow 上找到了一些链接,但他们没有给我可以满足我的需要的关键信息:
我想为视频元素中播放的音频创建一个分贝计。视频元素正在播放 WebRTC 流。
\n\n目前,WebRTC 流无法传递到 Web 音频分析器中。(尽管这可能很快就会改变 \xe2\x80\xa6\xc2\xa0)(请参阅Web Audio API 分析器节点 getByteFrequencyData 返回空白数组)
\n\n目前是否有另一种方法可以从远程媒体流获取分贝信息?
\n我在使用 Safari(桌面和移动设备)创建 AudioContext 时遇到了麻烦。似乎即使在用户交互时创建,它仍然被暂停。
我的代码:
<button onclick="test()">Test</button>
Run Code Online (Sandbox Code Playgroud)
const test = () => {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
audioContext = new AudioContext();
console.log(audioContext.state); // Suspended
}
Run Code Online (Sandbox Code Playgroud)
这应该是一个最低限度的工作示例,对吗?这里有什么问题?
safari mobile-safari webkitaudiocontext audiocontext web-audio-api
我正在尝试编写一个 React Hook 来处理流式音频到使用 Meyda 分析的 AudioContext。
我已经设法让流工作并且能够提取我想要的数据。但是,我在取消初始化音频时遇到了麻烦。
如果有人可以为我提供正确设置此挂钩的指导,我将不胜感激。
当我使用这些钩子离开页面时,我目前收到以下错误:
警告:无法对卸载的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请取消 useEffect 清理函数中的所有订阅和异步任务。
我试图在钩子的末尾添加一个清理功能,但我的尝试经常以音频立即切断或任何其他奇怪的错误而告终。
带有 Meyda Analyzer 的麦克风音频挂钩
export const useMeydaAnalyser = () => {
const [running, setRunning] = useState(false);
const [features, setFeatures] = useState(null);
const featuresRef = useRef(features);
const audioContext = useRef(new AudioContext());
const getMedia = async() => {
try {
return await navigator
.mediaDevices
.getUserMedia({audio: true, video: false});
} catch(err) {
console.log('Error:', err);
}
};
useEffect(
() => {
const audio = audioContext.current;
let unmounted …Run Code Online (Sandbox Code Playgroud) getUserMedia(constrains).then(stream => {
var recorder = new MediaRecorder(stream)
})
recorder.start()
recorder.pause()
// get new stream getUserMedia(constrains_new)
// how to update recorder stream here?
recorder.resume()
Run Code Online (Sandbox Code Playgroud)
是否可以?我尝试创建 MediaStream 并使用addTrack和removeTrack方法来更改流轨道但没有成功(当我尝试使用更新的流恢复它时,记录器停止)
有任何想法吗?
我目前正在开展一个项目,该项目由一个图表组成,该图表显示由另一台设备拾取的音频电平。图表是通过浮点 API 制作的,我具有缩放和选择功能,以便在图表上选择一个时间范围并放大到该选定区域。我的下一步是允许用户收听与图表该区域对应的音频。我将音频文件存储在共享服务器上,所有文件都是单独的,一分钟一分钟,RAW 数据文件。我没有在网页中使用音频的经验,目前正在努力研究如何完成这项任务。据我所知,<audio>HTML 标签无法处理用于播放的 RAW 数据文件。我一直在研究 Web Audio API,但对它的工作原理和实现方式感到困惑。
我的第一个问题是如何从服务器解码 RAW 音频文件并将它们显示在 HTML 页面上以供客户端收听?
我的第二个任务是抓取与所选范围相对应的所有音频文件,并将它们组合成一个音频输出。例如,如果客户选择了 1:00pm - 1:50pm 的时间范围,我需要每分钟访问 50 个 RAW 数据音频文件。然后我想将它们组合在一起以产生一个单一的播放声音。因此,我的第二个问题是是否有人知道如何顺利完成此操作。
感谢您提供任何帮助!
web-audio-api ×10
javascript ×5
audio ×2
html5-audio ×2
audiocontext ×1
fft ×1
filtering ×1
html ×1
raw-data ×1
react-hooks ×1
reactjs ×1
safari ×1
webrtc ×1