Domanda

Vorrei utilizzare la biblioteca NReplayGain per calcolare la replaygayn di un file MP3 e quindi utilizzare la libreria TagLibSharp (con le modifiche del supporto non ufficiale di OpenSource ReplayGain) per scrivere i tag ID3v2 ReplayGain nel file.

Bene, questo dovrebbe essere il pseudo-codice per calcolare il replaygain di un campionet utilizzando NREPLAYGAIN Lib come indica il sito 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()
.

(... ma se devo essere onesto, non so esattamente cosa è un campionet (tutti i fotogrammi uniti?))

Prima di provare a calcolare il replayGain del SampleSet ho bisogno di ottenere i dati necessari che ho bisogno di passare al codice sopra, quindi ho bisogno di ottenere il samplerate, SampleSet, leftSamples e rightSamples di un file MP3.

Ho bisogno di un esempio di codice completo di come posso recuperare tali dati utilizzando NAudio Lib o qualsiasi altro tipo di lib che potrebbe farlo.

Il motivo per cui sto chiedendo un codice completo è perché con meno so che non potevo farlo da solo, ho toccato prima della Biblioteca Naudio per altre cose ed è estremamente difficile per me, Sembra che il libert sia stato scritto solo per i programmatori master audio e i Guru audio, non avere alcuna facile.

È stato utile?

Soluzione

mai sentito parlare di un "sampleset".Ma come posso vedere finora, un campionet contiene solo campioni del canale sinistro e destro. Puoi usare cscore per accedere a tutti i campioni di una traccia in modo abbastanza semplice:

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top