Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

255
Views
Blazor reproduce sonido generado sin archivo

En un proyecto de Blazor, genero señales de sonido/ruido como el ejemplo de ruido rosa de @DanW, que genera un double[] con valores entre -1.0 y 1.0. ¿Es posible reproducir esta matriz directamente como audio en el navegador? Todo lo que he encontrado sobre sonido/audio y navegadores hasta ahora ha sido reproducir audio de un archivo existente.

EDITAR: estoy filtrando usando algunos dll nativos en C # y me siento más cómodo en C # que en javascript, por lo tanto, trato de hacer la mayor parte del trabajo en C # y no en javascript.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Así que me las arreglé con la API de WebAudio para descubrir cómo:

JavaScript:

 // for cross browser compatibility const AudioContext = window.AudioContext || window.webkitAudioContext; audioCtx = {}; function initAudio() { // creation of audio context cannot not be done on loading file, must be done afterwards audioCtx = new AudioContext(); return audioCtx.sampleRate; } // floats is a 1-D array with channel data after each other: // ch1 = floats.slice(0,nSamples) // ch2 = floats.slice(nSamples,nSamples*2) function playNoise(floats, nChannels) { const bufferSize = floats.length / nChannels; let arrayBuffer = audioCtx.createBuffer(nChannels, bufferSize, audioCtx.sampleRate); for (var i = 0; i < nChannels; i++) { let f32arr = new Float32Array(floats.slice(i * bufferSize, (i + 1) * bufferSize)); arrayBuffer.copyToChannel(f32arr, i, 0); } // Creating AudioBufferSourceNode let noise = audioCtx.createBufferSource(); noise.buffer = arrayBuffer; noise.connect(audioCtx.destination); noise.start(); return true; }

Página de Blazor (yo uso Blazorise ( Button )):

 @page "/Tests" @inject IJSRuntime js <h3>Test</h3> <Button Clicked="@(async () => await TestJS())" Color="Color.Primary">Test JS</Button> @code { double fs; protected override async Task OnInitializedAsync() { fs = await js.InvokeAsync<double>("initAudio"); await base.OnInitializedAsync(); } private async Task TestJS() { var nChannels = 2; var nSecs = 5; var nSampels = (int)fs * nSecs * nChannels; var floats = new float[nSampels]; var freq = 440; for (int i = 0; i < nSampels / nChannels; i++) { floats[i] = (float)Math.Sin(i * freq * 2 * Math.PI / fs); floats[i + nSampels / 2] = (float)Math.Sin(i * freq * 2 * 2 * Math.PI / fs); } var ok = await js.InvokeAsync<bool>("playNoise", floats, nChannels); } }

El botón reproduce un tono de 440 Hz en el canal izquierdo (canal 1) y un tono de 880 Hz en el canal derecho (canal 2).

EDITAR: la frecuencia de muestreo no tiene que ser la misma que en AudioContext . Consulta aquí las especificaciones.

about 4 years ago · Juan Pablo Isaza Report

0

No tuve problemas para generar archivos usando Java (Spring Framework) y descargar el PCM sin procesar a las variables de Javascript en el html a través de Thymeleaf y reproducirlos a través de la API de audio web, por ejemplo, usando un objeto AudioBuffer . ¿Hay algún aspecto de Blazor que impida o inhiba el uso de objetos de audio web? IDK cómo funciona HTML cuando hay etiquetas de script que designan diferentes idiomas, si hay una forma de comunicarse entre ellos.

about 4 years ago · Juan Pablo Isaza Report

0

Blazor no viene preempaquetado con capacidades de edición de sonido, pero ahora cuenta con aislamiento JS, lo que significa que los componentes pueden cargar los módulos JS necesarios.

Mi consejo es hacer todo el material de audio directamente en JavaScript utilizando la API de WebAudio, etc. en una colección de componentes personalizados.

Puede usar C# para generar formas de onda, etc., pero no estoy seguro de que haya alguna ventaja al hacerlo, a menos que quiera usar una biblioteca de C# existente.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!