Frage

Ich möchte die Bibliothek nutzen NReplayGain um die Wiedergabedauer einer MP3-Datei zu berechnen und dann zu verwenden TagLibSharp bibliothek (mit den nicht offiziellen OpenSource replaygain Support-Modifikationen) zum Schreiben der ID3v2 wiederhole Tags in die Datei.

Nun, dies sollte der Pseudocode sein, um den Wiederholungsgewinn eines Samplesets mithilfe der NReplayGain-Bibliothek zu berechnen, wie auf der Website angegeben: 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()

(...Aber wenn ich ehrlich sein muss, weiß ich nicht genau, was ein SampleSet ist (alle Frames verbunden?))

bevor ich versuche, den Wiederholungsgewinn des Samplesets zu berechnen, muss ich die erforderlichen Daten abrufen, die ich an den obigen Code übergeben muss, damit ich die samplerate, SampleSet, leftSamples und rightSamples einer MP3-Datei.

Ich benötige ein vollständiges Codebeispiel dafür, wie ich diese Daten mit abrufen kann NAudio lib oder jede andere Art von lib, die es tun könnte.

Der Grund, warum ich nach einem vollständigen Code frage, ist, dass ich mit weniger weiß, dass ich es nicht alleine schaffen könnte, ich habe die NAudio-Bibliothek ein wenig für andere Dinge berührt und es ist extrem schwer für mich, es scheint, dass die Bibliothek nur für Audio-Master-Programmierer und Audio-Gurus geschrieben wurde, die es nicht leicht haben.

War es hilfreich?

Lösung

Noch nie von einem "Sampleset" gehört.Aber wie ich bisher sehen kann, enthält ein Sampleset nur Samples des linken und rechten Kanals.Sie könnten verwenden CSCore ganz einfach auf alle Samples eines Tracks zugreifen:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top