문제

도서관을 이용하고 싶습니다. NReplayGain MP3 파일의 replaygayn을 계산한 다음 사용하려면 TagLibSharp 라이브러리(비공식 오픈소스 replaygain 지원 수정 포함)를 작성합니다. ID3v2 replaygain 태그를 파일에 추가합니다.

음, 이것은 웹사이트에서 표시하는 대로 NReplayGain lib를 사용하여 샘플 세트의 리플레이게인을 계산하는 의사 코드여야 합니다. 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 또는 이를 수행할 수 있는 다른 종류의 lib입니다.

제가 전체 코드를 요청하는 이유는 적은 양으로는 혼자서는 할 수 없다는 것을 알기 때문이고, NAudio 라이브러리 이전에 다른 것들을 조금 건드렸는데 저에게는 너무 힘든 것 같습니다. 라이브러리는 Audio Master 프로그래머와 오디오 전문가를 위해 작성되었지만 결코 쉬운 일이 아닙니다.

도움이 되었습니까?

해결책

"샘플세트"에 대해 들어본 적이 없습니다.하지만 지금까지 볼 수 있듯이 샘플세트에는 왼쪽 및 오른쪽 채널의 샘플만 포함되어 있습니다.당신은 사용할 수 있습니다 CS코어 매우 쉬운 방법으로 트랙의 모든 샘플에 액세스하려면:

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