Utilisation de la bibliothèque CSCore pour obtenir un exemple de données et d'informations sur un fichier MP3
Question
J'aimerais utiliser la bibliothèque NReplayGain
pour calculer le replaygayn d'un fichier MP3 puis utiliser TagLibSharp
bibliothèque (avec les modifications non officielles du support open source replaygain) pour écrire le ID3v2
rejouez les balises de gain dans le fichier.
Eh bien, cela devrait être le pseudo-code pour calculer le gain de relecture d'un ensemble d'échantillons à l'aide de la bibliothèque NReplayGain, comme l'indique leur site Web : https://github.com/karamanolev/NReplayGain
Dim trackGain As New TrackGain(samplerate, samplesize)
For Each sampleSet As SampleSet In track
trackGain.AnalyzeSamples(sampleSet.leftSamples, sampleSet.rightSamples)
Next
Dim gain As Double = trackGain.GetGain()
Dim peak As Double = trackGain.GetPeak()
(...Mais si je dois être honnête, je ne sais pas exactement ce qu'est un SampleSet (toutes les images jointes ?))
avant d'essayer de calculer le ReplayGain de l'ensemble d'échantillons, j'ai besoin d'obtenir les données nécessaires que je dois transmettre au code ci-dessus, j'ai donc besoin d'obtenir le samplerate
, SampleSet
, leftSamples
et rightSamples
d'un fichier MP3.
J'ai besoin d'un exemple de code complet montrant comment récupérer ces données en utilisant NAudio
lib ou tout autre type de lib qui pourrait le faire.
La raison pour laquelle je demande un code complet est qu'avec moins je sais que je ne pourrais pas le faire moi-même, j'ai déjà touché un peu à la librairie NAudio pour d'autres choses et c'est extrêmement dur pour moi, il semble que la bibliothèque a été écrite uniquement pour les programmeurs Audio Master et les gourous de l'audio, qui n'ont rien de facile.
La solution
Je n'ai jamais entendu parler d'un "sampleset".Mais comme je peux le voir jusqu’à présent, un ensemble d’échantillons ne contient que des échantillons des canaux gauche et droit.Vous pourriez utiliser CSCore pour accéder à tous les échantillons d'un morceau de manière assez simple :
Option Strict On
Imports CSCore
Imports CSCore.Codecs
Module Test
Sub Main()
Dim source As IWaveSource = CodecFactory.Instance.GetCodec("C:\Temp\test.mp3")
Dim sampleSource As ISampleSource = source.ToSampleSource()
Dim sampleBuffer(source.WaveFormat.SampleRate * source.WaveFormat.Channels) As Single
Dim sampleRate As Integer = source.WaveFormat.SampleRate
Dim channelCount As Short = source.WaveFormat.Channels
Dim read As Integer
Dim leftSamples As New List(Of Single)
Dim rightSamples As New List(Of Single)
Do
'now iterate through the sampleBuffer
For i = 0 To read Step channelCount
If channelCount = 1 Then 'mono
leftSamples.Add(sampleBuffer(i))
ElseIf channelCount = 2 Then
leftSamples.Add(sampleBuffer(i))
rightSamples.Add(sampleBuffer(i + 1))
Else
Throw New NotSupportedException("3 or more channels are not supported.")
End If
Next
Loop While read > 0
'now you've got all samples in a range of -1 to 1
'do what ever you need to do with them
End Sub
End Module