Использование библиотеки CSCore для получения данных и информации образца MP3-файла.

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

Вопрос

Я хотел бы воспользоваться библиотекой NReplayGain чтобы рассчитать повтор воспроизведения файла MP3, а затем использовать TagLibSharp библиотеку (с неофициальными модификациями поддержки replaygain с открытым исходным кодом) для написания ID3v2 теги replaygain в файл.

Что ж, это должен быть псевдокод для расчета коэффициента усиления набора сэмплов с использованием библиотеки NReplayGain, как указано на веб-сайте: 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()

(...Но если честно, я не знаю точно, что такое SampleSet (все кадры объединены?))

прежде чем пытаться вычислить ReplayGain набора образцов, мне нужно получить необходимые данные, которые мне нужно передать в приведенный выше код, поэтому мне нужно получить samplerate, SampleSet, leftSamples и rightSamples файла MP3.

Мне нужен полный пример кода того, как я могу получить эти данные, используя NAudio lib или любая другая библиотека, которая может это сделать.

Причина, по которой я прошу полный код, заключается в том, что, зная меньше, я не смог бы сделать это сам, раньше я немного коснулся библиотеки NAudio для других вещей, и для меня это чрезвычайно сложно, кажется, что Библиотека была написана специально для программистов Audio Master и аудио-гуру, которым не так-то просто.

Это было полезно?

Решение

Никогда не слышал о "наборе образцов".Но, насколько я понимаю, набор сэмплов содержит только сэмплы левого и правого канала.Вы могли бы использовать CSCore получить доступ ко всем семплам трека довольно простым способом:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top