Vorrei creare un sistema di visualizzazione audio utilizzando il linguaggio C# e .NET Framework. Questo potrebbe apparire nell'applicazione Winamp. Forse esiste una biblioteca libera o alcuni articoli interessanti che descrivono come farlo? Esempio: alt text http://img44.imageshack.us/img44/9982/examplel.pngVisualizzazione audio C#
risposta
Si può provare questi collegamenti
OpenVP (è una piattaforma gratuita e open-source per lo sviluppo di visualizzazioni musica, scritto in C#), vedere il OpenVP Screenshots.
Play and Visualize WAV Files using Managed Direct Sound
Bye.
Ecco uno script che calcola la FFT di qualsiasi suono riprodotto sul computer utilizzando l'API WASAPI. Esso utilizza CSCore e nei WinformsVisualization esempio:
using CSCore;
using CSCore.SoundIn;
using CSCore.Codecs.WAV;
using WinformsVisualization.Visualization;
using CSCore.DSP;
using CSCore.Streams;
using System;
public class SoundCapture
{
public int numBars = 30;
public int minFreq = 5;
public int maxFreq = 4500;
public int barSpacing = 0;
public bool logScale = true;
public bool isAverage = false;
public float highScaleAverage = 2.0f;
public float highScaleNotAverage = 3.0f;
LineSpectrum lineSpectrum;
WasapiCapture capture;
WaveWriter writer;
FftSize fftSize;
float[] fftBuffer;
SingleBlockNotificationStream notificationSource;
BasicSpectrumProvider spectrumProvider;
IWaveSource finalSource;
public SoundCapture()
{
// This uses the wasapi api to get any sound data played by the computer
capture = new WasapiLoopbackCapture();
capture.Initialize();
// Get our capture as a source
IWaveSource source = new SoundInSource(capture);
// From https://github.com/filoe/cscore/blob/master/Samples/WinformsVisualization/Form1.cs
// This is the typical size, you can change this for higher detail as needed
fftSize = FftSize.Fft4096;
// Actual fft data
fftBuffer = new float[(int)fftSize];
// These are the actual classes that give you spectrum data
// The specific vars of lineSpectrum here aren't that important because they can be changed by the user
spectrumProvider = new BasicSpectrumProvider(capture.WaveFormat.Channels,
capture.WaveFormat.SampleRate, fftSize);
lineSpectrum = new LineSpectrum(fftSize)
{
SpectrumProvider = spectrumProvider,
UseAverage = true,
BarCount = numBars,
BarSpacing = 2,
IsXLogScale = false,
ScalingStrategy = ScalingStrategy.Linear
};
// Tells us when data is available to send to our spectrum
var notificationSource = new SingleBlockNotificationStream(source.ToSampleSource());
notificationSource.SingleBlockRead += NotificationSource_SingleBlockRead;
// We use this to request data so it actualy flows through (figuring this out took forever...)
finalSource = notificationSource.ToWaveSource();
capture.DataAvailable += Capture_DataAvailable;
capture.Start();
}
private void Capture_DataAvailable(object sender, DataAvailableEventArgs e)
{
finalSource.Read(e.Data, e.Offset, e.ByteCount);
}
private void NotificationSource_SingleBlockRead(object sender, SingleBlockReadEventArgs e)
{
spectrumProvider.Add(e.Left, e.Right);
}
~SoundCapture()
{
capture.Stop();
capture.Dispose();
}
public float[] barData = new float[20];
public float[] GetFFtData()
{
lock (barData)
{
lineSpectrum.BarCount = numBars;
if (numBars != barData.Length)
{
barData = new float[numBars];
}
}
if (spectrumProvider.IsNewDataAvailable)
{
lineSpectrum.MinimumFrequency = minFreq;
lineSpectrum.MaximumFrequency = maxFreq;
lineSpectrum.IsXLogScale = logScale;
lineSpectrum.BarSpacing = barSpacing;
lineSpectrum.SpectrumProvider.GetFftData(fftBuffer, this);
return lineSpectrum.GetSpectrumPoints(100.0f, fftBuffer);
}
else
{
return null;
}
}
public void ComputeData()
{
float[] resData = GetFFtData();
int numBars = barData.Length;
if (resData == null)
{
return;
}
lock (barData)
{
for (int i = 0; i < numBars && i < resData.Length; i++)
{
// Make the data between 0.0 and 1.0
barData[i] = resData[i]/100.0f;
}
for (int i = 0; i < numBars && i < resData.Length; i++)
{
if (lineSpectrum.UseAverage)
{
// Scale the data because for some reason bass is always loud and treble is soft
barData[i] = barData[i] + highScaleAverage * (float)Math.Sqrt(i/(numBars + 0.0f)) * barData[i];
}
else
{
barData[i] = barData[i] + highScaleNotAverage * (float)Math.Sqrt(i/(numBars + 0.0f)) * barData[i];
}
}
}
}
}
Poi durante il recupero del barData da uno script diverso è consigliabile per bloccarla prima poiché questa viene modificata in un thread separato.
Non sono sicuro di dove trovo lo GetSpectrumPoints
poiché non sembra essere nello Github Repo, ma eccolo qui. Basta incollarlo in quel file e il mio codice dovrebbe funzionare.
public float[] GetSpectrumPoints(float height, float[] fftBuffer)
{
SpectrumPointData[] dats = CalculateSpectrumPoints(height, fftBuffer);
float[] res = new float[dats.Length];
for (int i = 0; i < dats.Length; i++)
{
res[i] = (float)dats[i].Value;
}
return res;
}
Ho provato a utilizzare il codice di esempio, ma non sembra che ['GetSpectrumPoints()' sia una funzione più] (https://github.com/filoe/cscore/blob/29410b12ae35321c4556b072c0711a8f289c0544/Samples/ WinformsVisualization/Visualization/LineSpectrum.cs # L10), e il controllo della cronologia del repository git non lo mostra neanche. Ti dispiacerebbe chiarire/aggiornare la tua risposta? (* Sto cercando di integrare l'acquisizione/elaborazione audio su Windows con un'applicazione console multipiattaforma che aziona le luci a LED, i valori dei dati di frequenza da 0,0 a 1,0 bar sono tutto ciò che serve *) – Shane
@Shane Ci scusiamo! Ho aggiunto quel codice ora, spero che aiuti – Phylliida
- 1. Durata lettore audio HTML5 Visualizzazione di Nan
- 2. Cattura uscita audio in C#
- 3. migliore libreria audio c linux
- 4. Visualizzazione audio HTML5 solo per riprodurre i pulsanti di pausa e disattivazione audio
- 5. Visualizzazione audio (.wav/.mp3) come grafico in Java
- 6. Android: registrazione audio con visualizzazione a livello di voce
- 7. onde di visualizzazione del suono per la registrazione audio
- 8. Audio visualizzazione delle forme d'onda in Python/Django
- 9. Visualizzazione dell'algoritmo per C#
- 10. Importare dati da CD audio usando C#?
- 11. Come scrivere applicazioni di elaborazione audio C++?
- 12. decodifica audio libvorbis dalla memoria in C++
- 13. c programma per riprodurre file audio
- 14. Cattura audio in C++ da un microfono
- 15. Elaborazione audio "on-fly" (C#, WP7)
- 16. Ottieni il volume audio principale in C#
- 17. codifica binaria di audio Python o C
- 18. C# HTML stringa di visualizzazione
- 19. Croce (C/C++) Libreria audio per MP3, AAC, WAV
- 20. Streaming audio da SO
- 21. Sessione audio Core Audio (unità audio) e MPVolumeView
- 22. Audio stegnography
- 23. Libreria fingerprinting audio (java)
- 24. Amplifica audio con l'API Web Audio
- 25. Conversione di byte grezzi in audio audio
- 26. Software di visualizzazione classe/oggetto C#
- 27. Visualizzazione di una logica del metodo C#
- 28. Visualizzazione 3D in tempo reale in C++
- 29. Visual Studio C++ - Visualizzazione risorse vuota?
- 30. Visualizzazione del codice C# in Wordpress.com
Penso che andrà bene per l'avvio, grazie. –