0

ライブラリを使用しNReplayGainて MP3 ファイルの replaygayn を計算し、TagLibSharpライブラリ (非公式のオープンソースの replaygain サポートの変更を含む) を使用してID3v2replaygain タグをファイルに書き込みたいと考えています。

さて、これは、ウェブサイトが示すように、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 を計算する前に、上記のコードに渡すために必要なデータを取得する必要があるため、MP3 ファイルのsamplerateSampleSetleftSamplesおよびを取得する必要があります。rightSamples

NAudiolibまたはそれを実行できる他の種類のlibを使用してこれらのデータを取得する方法の完全なコード例が必要です。

私が完全なコードを要求している理由は、私が自分でそれを行うことができなかったことがあまりわかっていないためです.NAudioライブラリの前に他のことを少し触れましたが、私にとっては非常に難しいようです.このライブラリは、Audio Master プログラマーや Audio Guru 向けに作成されたもので、簡単なことは何もありません。

4

2 に答える 2

5

「サンプルセット」について聞いたことがない。しかし、これまで見てきたように、サンプルセットには左右のチャンネルのサンプルが含まれているだけです。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
于 2013-11-19T11:50:33.340 に答える