Blazor项目如何直接播放生成的double[]音频数据无需依赖音频文件
Blazor 直接播放原始音频数组实现方案
完全可以实现你的需求,你可以依托成熟的Blazor Web Audio封装库,几乎不需要编写JavaScript代码,核心逻辑全部在C#侧完成。
实现步骤
- 首先安装NuGet包
Blazor.WebAudio,该包是对浏览器原生Web Audio API的C#封装,已经内置了JS互操作逻辑,不需要你自行开发JS代码 - 在项目的
Program.cs中注册音频服务:
builder.Services.AddWebAudio();
- 在需要播放音频的Blazor组件中注入服务,编写播放逻辑,你已经生成好的
double[](取值范围-1.0~1.0)可以直接传入使用:
@inject IWebAudioProvider AudioProvider @code { // 你的音频采样率,和生成粉噪声时使用的采样率保持一致即可,比如44100Hz private const int SampleRate = 44100; private async Task PlayAudio(double[] audioData) { // 创建音频上下文 using var audioContext = await AudioProvider.CreateAsync(); // 创建音频缓冲区,单声道 var audioBuffer = await audioContext.CreateBufferAsync(1, audioData.Length, SampleRate); // 将你的音频数组拷贝到缓冲区 await audioBuffer.CopyToChannelAsync(audioData, 0); // 创建缓冲区源节点 var sourceNode = await audioContext.CreateBufferSourceAsync(); // 绑定音频数据 sourceNode.Buffer = audioBuffer; // 连接到音频输出 await sourceNode.ConnectAsync(audioContext.Destination); // 开始播放 await sourceNode.StartAsync(); } }
- 你需要的滤波处理逻辑完全可以在C#侧调用原生DLL处理完成后,再把最终的
double[]传给上述播放方法即可,全程不需要涉及JavaScript开发。
注意事项
浏览器出于用户体验限制,音频播放必须由用户交互事件触发,你只需要将播放逻辑绑定到按钮点击等用户主动触发的事件中即可,不需要额外编写JS代码适配。
内容的提问来源于stack exchange,提问作者Erik Thysell
相关产品推荐
相关产品推荐

