Imports System.IO
Imports Alvas.Audio
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MixMany("c:\audio\files\")
End Sub
Private Shared Sub Debug(ByVal name As String, ByVal wf As WaveFormat)
Dim format As String = "Variable: [{0}], FormatTag: {1}, Channels: {2}, SamplesPerSec: {3}, BitsPerSample: {4}, BlockAlign: {5}, AvgBytesPerSec: {6}"
Console.WriteLine(format, name, wf.wFormatTag, wf.nChannels, wf.nSamplesPerSec, wf.wBitsPerSample, wf.nBlockAlign, wf.nAvgBytesPerSec)
End Sub
Private Shared Sub MixMany(ByVal dir As String)
Dim format1 As IntPtr
Dim data1 As Byte()
ReadData(dir + "The Friendship Song.mp3", format1, data1)
Dim format2 As IntPtr
Dim data2 As Byte()
ReadData(dir + "Kailin 1.mp3", format2, data2)
Dim wf1 As WaveFormat = AudioCompressionManager.GetWaveFormat(format1)
Debug("wf1", wf1)
Dim wf2 As WaveFormat = AudioCompressionManager.GetWaveFormat(format2)
Debug("wf1", wf2)
If Not wf1.Equals(wf2) Then
data2 = AudioCompressionManager.Convert(format2, format1, data2, False)
End If
Dim data As Byte() = AudioCompressionManager.MixMany(format1, data1, data2, wf1.nSamplesPerSec * 27.1, wf1.nSamplesPerSec * 83.28)
Dim formatMp3 As IntPtr = AudioCompressionManager.GetCompatibleFormat(format1, AudioCompressionManager.MpegLayer3FormatTag)
Debug("wfMp3", AudioCompressionManager.GetWaveFormat(formatMp3))
Dim dataMp3 As Byte() = AudioCompressionManager.Convert(format1, formatMp3, data, False)
Dim mw As New Mp3Writer(File.Create(dir + "Test002.mp3"))
mw.WriteData(dataMp3)
mw.Close()
MsgBox("Done!")
End Sub
Private Shared Sub ReadData(ByVal fileName As String, ByRef format1 As IntPtr, ByRef data1 As Byte())
Dim dr1 As New Mp3Reader(File.OpenRead(fileName))
format1 = dr1.ReadFormat()
data1 = dr1.ReadData()
dr1.Close()
Dim format1Pcm As IntPtr = AudioCompressionManager.GetCompatibleFormat(format1, AudioCompressionManager.PcmFormatTag)
Dim data1Pcm() As Byte = AudioCompressionManager.Convert(format1, format1Pcm, data1, False)
format1 = format1Pcm
data1 = data1Pcm
End Sub
End Class