[SOLUCIONADO] ¿Como modificar el nivel de audio (ganancia) de un archivo wav?

Iniciado por Eleкtro, 13 Julio 2013, 05:46 AM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Pues eso, si alguien me puede explicar como puedo modificar la ganancia de un Wav...

En un form reproduzco un Wav que lo tengo como archivo de Recurso (my.resources.wave), lo que quiero es poder ajustar el nivel de audio de este Recurso para reproducirlo con un nivel más bajo del máximo (1.000f = Máximo).

Se supone que con la librería NAudio se puede conseguir esto, pero sólo he llegado hasta aquí:
Código (vbnet) [Seleccionar]
Public wavefile As New NAudio.Wave.WaveFileReader("C:\Archivo.wav")

la class tiene miles de métodos y no son nada claros para mi, no sé como hacerlo.

Si alguien conoce otro método para conseguir esto no tiene importancia, no dependo de dicha librería, sólo es que ...es lo único que he encontrado sobre el tema.






Aquí tienen la Lib, por si alguien puede ayudar echándole un vistazo:
http://naudio.codeplex.com/
PD: Los ejemplos son en C#,
hay una "demoApp" que hace exáctamente lo que quiero, pero todo el code es demasiado Pro para mi nivel a la hora de intentar trasladar lo que necesito a VB.



Creo que la parte interesante del source de la Demo está aquí:

Código (csharp) [Seleccionar]
       namespace NAudioDemo.AudioPlaybackDemo

       this.fileWaveStream = plugin.CreateWaveStream(fileName);
       var waveChannel =  new SampleChannel(this.fileWaveStream, true);
       this.setVolumeDelegate = (vol) => waveChannel.Volume = vol;
       waveChannel.PreVolumeMeter += OnPreVolumeMeter;

       var postVolumeMeter = new MeteringSampleProvider(waveChannel);
       postVolumeMeter.StreamVolume += OnPostVolumeMeter;

...Obviamente falta mucho más código necesario, pero es que es muy, muy, muy extensa.

Saludos








OmarHack

I like to test things.

Eleкtro

Cita de: OmarHack en 13 Julio 2013, 06:57 AMNo es justo lo que buscas pero te ayudará:

Era justo lo que necesitaba :), Gracias @OmarHack.








Eleкtro

Listo:

Código (vbnet) [Seleccionar]
Play_Sound(my.resources.WavFile)

Código (vbnet) [Seleccionar]
    ' Play Sound
    Private Sub Play_Sound(ByVal Sound As IO.UnmanagedMemoryStream)
        Dim Wave1 As New NAudio.Wave.WaveOut
        Wave1.Init(New NAudio.Wave.BlockAlignReductionStream(NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(New NAudio.Wave.WaveFileReader(Sound))))
        Wave1.Volume = Soundvolume ' Single num
        Wave1.Play()
    End Sub








OmarHack

Por si te interesa la clase volumen alterna los valores normales de entre 0 y 100 con  0 y 1. Es decir: Soundvolume = 1; 'valor máximo normal
Soundvolume = 0; 'valor mínimo

Lo que no sé es si pones: Soundvolume = 2; 'Te doblará el sonido o se ajustará al máximo normal?

Me alegro de que sirva. :)
I like to test things.

Eleкtro

Cita de: OmarHack en 13 Julio 2013, 16:30 PMLo que no sé es si pones: Soundvolume = 2; 'Te doblará el sonido o se ajustará al máximo normal?

No se puede doblar el volumen :P, al menos no con la Class de los Waves, con la Class de los MP3 no lo sé, aunque me imagino que será igual.

Saludos








OmarHack

Intenta buscar el ecualizador del vcl a ver si lo encuentras entre tanto código.
http://download.videolan.org/pub/videolan/vlc/2.0.7/vlc-2.0.7.tar.xz

Seguramente mirando su funcionamiento puedas recrear algo similar.
Suerte!
I like to test things.