Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

254
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda