Utilisation de la bibliothèque CSCore pour obtenir un exemple de données et d'informations sur un fichier MP3

StackOverflow https://stackoverflow.com//questions/20019890

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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top