Je voudrais créer un système de visualisation sonore utilisant le langage C# et .NET Framework. Cela pourrait ressembler à l'application Winamp. Peut-être exister bibliothèque gratuite ou des articles intéressants qui décrivent comment le faire? Exemple: alt text http://img44.imageshack.us/img44/9982/examplel.pngVisualisation sonore C#
Répondre
Vous pouvez essayer ces liens
OpenVP (est une plate-forme open-source libre et pour le développement de la musique, visualisations écrit en C#), voir le OpenVP Screenshots.
Play and Visualize WAV Files using Managed Direct Sound
Bye.
Voici un script qui calcule la FFT de tout son lu sur l'ordinateur à l'aide de l'API WASAPI. Il utilise CScore et son WinformsVisualization exemple:
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];
}
}
}
}
}
Ensuite, lors de la récupération du barData à partir d'un autre script, il est recommandé de verrouiller la première car cela est modifié sur un thread séparé.
Je ne sais pas où j'ai obtenu GetSpectrumPoints
car il ne semble pas être dans le Github Repo, mais le voici. Il suffit de coller cela dans ce fichier et mon code devrait fonctionner.
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;
}
J'ai essayé d'utiliser votre exemple de code, mais il ne semble pas que ['GetSpectrumPoints()' soit une fonction plus] (https://github.com/filoe/cscore/blob/29410b12ae35321c4556b072c0711a8f289c0544/Samples/ WinformsVisualization/Visualization/LineSpectrum.cs # L10), et la vérification de l'historique du dépôt git ne le montre pas non plus. Pourriez-vous clarifier/mettre à jour votre réponse? (* J'essaie d'intégrer la capture/le traitement audio sous Windows avec une application de console multiplateforme qui pilote les lumières LED, les valeurs de données de fréquence de 0,0 à 1,0 bar sont tout ce dont elle a besoin *) – Shane
@Shane Désolé! J'ai ajouté ce code maintenant, espérons que cela aide – Phylliida
- 1. Oracle Visualisation matérialisée Visualisation de l'heure
- 2. langue de visualisation (C/C++) référence/documentation dans CodeBlocks
- 3. Visualisation XSD?
- 4. Échantillonnage sonore aux basses fréquences
- 5. API de visualisation Google .net?
- 6. Multi-threads Visualisation de données scientifiques en C++
- 7. Bibliothèque de visualisation de données C++ Open Source
- 8. Mysql Outils de visualisation
- 9. Visualisation graphique dans Silverlight
- 10. Comment faire swoosh graphique/effet sonore?
- 11. Comment configurer l'intensité sonore sur Windows Mobile?
- 12. Comment désactiver le bip sonore dans Eclipse?
- 13. contrôle swfLoader et contenu sonore en flex
- 14. Struts tiles Visualisation du débogage
- 15. Visualisation des données en Java
- 16. Visualisation des messages d'erreur gcc
- 17. Site en cours de visualisation
- 18. Surveillance du niveau sonore du microphone en temps réel
- 19. Enregistrement sonore en .NET avec certaines exigences spécifiques
- 20. Visualisation de l'historique d'un objet métier
- 21. Besoin d'aide pour la visualisation flexible
- 22. jQuery load - Page de visualisation Google
- 23. Visualisation du modèle d'entité ActiveRecord/NHibernate
- 24. Zones de défilement dans ActionScript 3 Visualisation
- 25. Visualisation scientifique avec OpenGL et Qt
- 26. Performances du moteur de visualisation ASP.NET MVC
- 27. Comment faire un enregistrement sonore via un site Web?
- 28. Modifier le volume sonore à partir du code .net
- 29. dans flex, charge dynamiquement Objet sonore à partir d'octets codés
- 30. Ajustement du volume sonore java en temps réel
Je pense que ce sera bon pour commencer, merci. –