CSCore lib를 사용하여 MP3 파일 샘플 데이터 및 정보 가져오기
문제
도서관을 이용하고 싶습니다. 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