質問

図書館を利用したいのですが NReplayGain MP3 ファイルのリプレイゲインを計算してから使用します。 TagLibSharp ライブラリ (非公式のオープンソース リプレイゲイン サポートの修正を含む) を使用して、 ID3v2 ファイルにリプレイゲインタグを追加します。

これは、Web サイトに示されているように、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 プログラマと Audio の達人のためだけに書かれたもので、簡単なことは何もありません。

役に立ちましたか?

解決

「サンプルセット」について聞いたことはありません。しかし、これまで見てきたように、サンプルセットには左チャンネルと右チャンネルのサンプルが含まれているだけです。使用できます 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