LAMPIRAN A: Listing Program
1. Form Menu Utama
Public Class MScreen
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Hide() Form1.Show() End Sub
End Class
2. Form Sub Menu
Imports System
Imports System.ComponentModel Imports System.Drawing
Imports System.Data Imports System.Text
Imports System.Windows.Forms Imports System.IO
Imports System.Diagnostics.Process Imports MediaPlayer
Imports Alvas.Audio
Public Class Form1
Dim PicBuffer As System.IO.FileInfo Dim proc As Process
Dim PicFileStream As System.IO.FileStream Dim start_time, stop_time As Date
Dim ratio As Double
Private ar As IAudioReader = Nothing Dim oldFormat, newFormat As IntPtr Dim y As Integer = 0
Dim mbAwal, mbAkhir As Double Dim filehsl As String
Dim fsr As FileStream
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
WebBrowser3.Navigate("D:\Mutiara Backup\SHANNONFANO\Aplikasi Kompresi Audio\Cara Pemakaian Aplikasi.pdf")
ar = New Mp3Reader(File.OpenRead("test_shannon.mp3")) oldFormat = ar.ReadFormat
End Sub
Private Sub BtnBukaTabKmprs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnBukaTabKmprs.Click
With OpenFileDialog1 .Title = "Browse Mp3"
.Filter = "Mp3 (*.mp3) |*.mp3" .FileName = ""
End With
OpenFileDialog1.FileName = "" OpenFileDialog1.ShowDialog()
Exit Sub End If
Dim fd As FormatDetails Try
ar = New
Mp3Reader(File.OpenRead(OpenFileDialog1.FileName))
fd = AudioCompressionManager.GetFormatDetails(oldFormat) Catch ex As Exception
ar = New
WaveReader(File.OpenRead(OpenFileDialog1.FileName))
fd = AudioCompressionManager.GetFormatDetails(oldFormat) End Try
oldFormat = ar.ReadFormat
fd = AudioCompressionManager.GetFormatDetails(oldFormat) txtSA1.Text = String.Format("{0} {1}",
AudioCompressionManager.GetFormatTagDetails(fd.FormatTag).FormatTagNa me, fd.FormatName)
Dim fdArr As FormatDetails() =
AudioCompressionManager.GetCompatibleFormatList(oldFormat)
newFormat = DirectCast(fdArr(2), FormatDetails).FormatHandle TxtBukaTabKmprs.Text = OpenFileDialog1.FileName
Dim infoReader As System.IO.FileInfo infoReader =
My.Computer.FileSystem.GetFileInfo(OpenFileDialog1.FileName) TxtNamaTabKmprs.Text = infoReader.Name
TxtPathTabKmprs.Text = infoReader.DirectoryName mbAwal = (infoReader.Length / (1024 * 1024))
TxtUkAwalTabKmprs.Text = Math.Round(mbAwal, 2) & " Mb" BtnKompres.Enabled = True
End Sub
Private Sub BtnBukaTabDkmprs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnBukaTabDkmprs.Click
With OpenFileDialog1 .Title = "Browse Wav"
.Filter = "Wav (*.wav) |*.wav" .FileName = ""
End With
OpenFileDialog1.FileName = "" OpenFileDialog1.ShowDialog()
If OpenFileDialog1.FileName = "" Then Exit Sub
End If
ar = New WaveReader(File.OpenRead(OpenFileDialog1.FileName)) oldFormat = ar.ReadFormat
Dim fd As FormatDetails =
AudioCompressionManager.GetFormatDetails(oldFormat) txtSA2.Text = String.Format("{0} {1}",
AudioCompressionManager.GetFormatTagDetails(fd.FormatTag).FormatTagNa me, fd.FormatName)
Dim fdArr As FormatDetails() =
AudioCompressionManager.GetCompatibleFormatList(oldFormat)
Dim infoReader As System.IO.FileInfo infoReader =
My.Computer.FileSystem.GetFileInfo(OpenFileDialog1.FileName) TxtNamaTabDkmprs.Text = infoReader.Name
TxtPathTabDkmprs.Text = infoReader.DirectoryName mbAwal = (infoReader.Length / (1024 * 1024))
TxtUkAwalTabDkmprs.Text = Math.Round(mbAwal, 2) & " Mb" BtnDekomprs.Enabled = True
End Sub
Private Sub BtnBukaTabPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnBukaTabPlay.Click
With OpenFileDialog1
.Title = "Browse File Audio" .FileName = ""
End With
OpenFileDialog1.FileName = "" OpenFileDialog1.ShowDialog()
If OpenFileDialog1.FileName = "" Then Exit Sub
End If
Me.TxtBukaTabPlay.Text = OpenFileDialog1.FileName Dim infoReader As System.IO.FileInfo
infoReader =
My.Computer.FileSystem.GetFileInfo(OpenFileDialog1.FileName) TxtNamaTabPlay.Text = infoReader.Name
TxtPathTabPlay.Text = infoReader.DirectoryName End Sub
Private Sub WebBrowser3_DocumentCompleted(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser3.DocumentCompleted
End Sub
Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter
End Sub
Private Sub Kompres()
Dim fileName As String = TxtBukaTabKmprs.Text + ".wav" Dim size As Integer = ar.Milliseconds2Bytes(1000) Dim len As Integer = ar.GetLengthInBytes()
Dim ac As AcmConverter = New AcmConverter(oldFormat, newFormat, False)
Dim fs As FileStream = New FileStream(fileName, FileMode.Create)
Dim ww As WaveWriter = New WaveWriter(fs, AudioCompressionManager.FormatBytes(newFormat)) Dim wx As Mp3Writer = New Mp3Writer(fsr) While y < len
Dim data As Byte() = ar.ReadDataInBytes(y, size) xxxWxAudio(wx, data)
Dim tmpStr As String = ArrayToString(data) Dim dataX As Byte() = shanonKompres(tmpStr) y += data.Length
Dim newData As Byte() = ac.Convert(data) ww.WriteData(newData)
mbAkhir = fs.Length / (1024 * 1024) filehsl = fs.Name
ww.Close() ar.Close() End Sub
Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles
OpenFileDialog1.FileOk
PicBuffer = New System.IO.FileInfo(OpenFileDialog1.FileName) End Sub
Private Sub BgWork_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BgWork.DoWork Kompres()
End Sub
Private Sub BtnKompres_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnKompres.Click
fsr = xWxAudio(TxtNamaTabKmprs.Text) Cursor = Cursors.WaitCursor
proc = GetCurrentProcess() start_time = Now
pbConvert.Maximum = ar.GetLengthInBytes y = 0
BgWork.RunWorkerAsync() Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If y > pbConvert.Maximum Then pbConvert.Value = 0
Timer1.Stop() Exit Sub End If
pbConvert.Value = y End Sub
Private Sub BgWork_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BgWork.RunWorkerCompleted
Cursor = Cursors.Default proc = GetCurrentProcess() stop_time = Now
Me.TxtUkAkhrTabKmprs.Text = Math.Round(mbAkhir, 2) & " MB" Me.TxtLamaTabKmprs.Text =
stop_time.Subtract(start_time).Seconds & " s" ratio = 100 - (mbAkhir / mbAwal) * 100 Dim infoReader As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filehsl) Me.txtFileHasil.Text = infoReader.Name
Me.TxtRasioTabKmprs.Text = Math.Round(ratio, 2) & "%" pbConvert.Value = 0
Timer1.Stop() End Sub
Private Sub BtnResetTabKmprs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnResetTabKmprs.Click
Me.TxtBukaTabKmprs.Clear() Me.TxtNamaTabKmprs.Clear() Me.TxtUkAkhrTabKmprs.Clear() Me.TxtRasioTabKmprs.Clear() Me.TxtUkAwalTabKmprs.Clear() Me.txtFileHasil.Clear() Me.TxtLamaTabKmprs.Clear() Me.txtSA1.Clear()
End Sub
Private Sub Dekompres()
ar = xShannonAudio(TxtNamaTabDkmprs.Text)
Dim fileName As String = TxtBukaTabDkmprs.Text + ".mp3" Dim size As Integer = ar.Milliseconds2Bytes(1000)
Dim len As Integer = ar.GetLengthInBytes()
Dim ac As AcmConverter = New AcmConverter(oldFormat, newFormat, False)
Dim fs As FileStream = New FileStream(fileName, FileMode.Create)
Dim ww As Mp3Writer = New Mp3Writer(fs) While y < len
Dim data As Byte() = ar.ReadDataInBytes(y, size) (ArrayToString(data))
y += data.Length
Dim newData As Byte() = xShanDekomp(data) ww.WriteData(newData)
End While
mbAkhir = fs.Length / (1024 * 1024) filehsl = fs.Name
ww.Close() ar.Close() End Sub
Private Sub BtnDekomprs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnDekomprs.Click
Cursor = Cursors.WaitCursor proc = GetCurrentProcess() start_time = Now
pbConver2.Maximum = ar.GetLengthInBytes y = 0
BgWork2.RunWorkerAsync() Timer2.Start()
End Sub
Private Sub BgWork2_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BgWork2.DoWork Dekompres()
End Sub
Private Sub BgWork2_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BgWork2.RunWorkerCompleted
Cursor = Cursors.Default proc = GetCurrentProcess() stop_time = Now
Me.TxtUkAkhrTabDkmprs.Text = Math.Round(mbAkhir, 2) & " MB" Me.TxtLamaTabDkmprs.Text =
Me.txtFileHasil2.Text = infoReader.Name pbConver2.Value = 0
Timer2.Stop() End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
If y > pbConver2.Maximum Then pbConver2.Value = 0
Timer2.Stop() Exit Sub End If
pbConver2.Value = y End Sub
Private Sub BtnResetTabDkmprs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnResetTabDkmprs.Click
Me.TxtPathTabDkmprs.Clear() Me.TxtBukaTabDkmprs.Clear() Me.TxtNamaTabDkmprs.Clear() Me.TxtUkAkhrTabDkmprs.Clear() Me.TxtUkAwalTabDkmprs.Clear() Me.txtFileHasil2.Clear() Me.TxtLamaTabDkmprs.Clear() Me.txtSA2.Clear()
End Sub
Private Sub BtnPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPlay.Click
If Len(Trim(TxtNamaTabPlay.Text)) <= 0 Then Exit Sub
End If
If axWP.playState = WMPLib.WMPPlayState.wmppsPaused Then axWP.Ctlcontrols.play()
Exit Sub End If
axWP.URL = Me.TxtBukaTabPlay.Text axWP.Ctlcontrols.play()
End Sub
Private Sub BtnPause_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPause.Click
If axWP.playState = WMPLib.WMPPlayState.wmppsPlaying Then axWP.Ctlcontrols.pause()
End If End Sub
Private Sub BtnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnStop.Click
If axWP.playState = WMPLib.WMPPlayState.wmppsPlaying Or axWP.playState = WMPLib.WMPPlayState.wmppsPaused Then
axWP.Ctlcontrols.stop() End If
3. Class Shannon.vb
Imports Alvas.Audio Imports System.IO Module shanon
Dim str_asli As String
Public Function shanonKompres(ByVal str_asli As String) As Array
Dim pohon As String Dim susun As String Dim karArr() As String Dim jumlah() As Integer Dim shn_binary() As String Dim index As Integer
Dim dataX(str_asli.Length) As Byte If str_asli.Length <= 0 Then
Return dataX End If
Dim i, j As Integer susun = ""
For i = 0 To str_asli.Length - 1
If susun.Contains(str_asli(i)) = False Then susun &= str_asli(i)
Next
ReDim jumlah(susun.Length - 1) For i = 0 To susun.Length - 1 jumlah(i) = 0
For j = 0 To str_asli.Length - 1 If susun(i) = str_asli(j) Then jumlah(i) += 1
End If Next
Next
Dim tmpjlh() As Integer = jumlah Dim tmpsusun As String = susun Array.Sort(jumlah)
Array.Reverse(jumlah) susun = ""
For i = 0 To susun.Length - 1
index = Array.IndexOf(tmpjlh, jumlah(i)) susun &= tmpsusun.Substring(index, 1) Next
ReDim shn_binary(susun.Length - 1) For i = 0 To susun.Length - 1 shn_binary(i) = ""
Next index = 0
If susun.Length <= 0 Then Return dataX
End If
Do
Dim kar As Char = susun(index) Dim s As String = susun
Dim l As Integer = s.Length Dim l1 As Integer = l
Dim jl(), jl1(), jl2() As Integer Dim jb1, jb2 As Integer
Dim a, b As Integer ReDim jl(l)
For i = 0 To l - 1 jl(i) = jumlah(i) Next
Do
Dim idx As Integer = 0 jb1 = 0
i = 1 Do
jb1 += jl(i - 1) jb2 = 0
j = i
Do While j < l jb2 += jl(j) j += 1
Loop i += 1
Loop Until jb1 >= jb2 If jb1 > jb2 Then If i > 2 Then idx = i - 2 Else
idx = i - 1 End If
Else
idx = i - 1 End If
s1 = "" i = 0
Do While i < idx s1 &= s(i) i += 1 Loop
s2 = "" i = idx
Do While i < l s2 &= s(i) i += 1 Loop
ReDim jl1(s1.Length) a = 0
Do While a < s1.Length jl1(a) = jl(a) a += 1
Loop
ReDim jl2(s2.Length) a = 0
b = idx
Do While a < s2.Length jl2(a) = jl(b) a += 1
b += 1 Loop
If s1.Contains(kar) = True Then shn_binary(index) &= "0" l = s1.Length
ReDim jl(s1.Length) a = 0
Do While a < s1.Length jl(a) = jl1(a) a += 1
Loop Else
shn_binary(index) &= "1" l = s2.Length
s = s2
ReDim jl(s2.Length) b = 0
Do While b < s2.Length jl(b) = jl2(b) b += 1
Loop End If
Dim stemp As String = "" For i = 0 To s.Length - 1
stemp &= s(i).ToString.Trim Next
Loop While l > 1 index += 1
Loop While index < susun.Length ReDim karArr(susun.Length) i = 0
pohon = "" Do
karArr(i) = susun(i)
pohon &= shn_binary(i) & " " i += 1
Loop While i < susun.Length Dim total_memory As Integer = 0 Dim total_panjang As Integer = 0 For i = 0 To susun.Length - 1
total_memory += jumlah(i) * shn_binary(i).Length total_panjang += shn_binary(i).Length
Next
Dim dec As Integer = 0
For i = 0 To str_asli.Length - 1
index = susun.IndexOf(str_asli(i)) dec = BinToDec(shn_binary(index)) dataX(i) = dec
Next
Return dataX End Function
Public Function ArrayToString(ByVal ParamArray data() As Byte) As String
Dim str As String = ""
For i As Integer = 0 To data.Length - 1 str &= Chr(data(i))
Next
Return str End Function
Public Sub Reset_DGV(ByVal dgv As DataGridView)
Dim baris As Integer = dgv.Rows.Count - 1 For i As Integer = 0 To baris
Next End Sub
Public Function BinToDec(ByVal bin As String) As Double Dim des As Double = 0
For i As Integer = 0 To bin.Length - 1
des = des + (CDbl(bin.Substring(i, 1)) * CDbl(Math.Pow(2, bin.Length - 1 - i)))
Next
Return des End Function
Public Function xWxAudio(ByVal xxstr As String) As FileStream Try
File.SetAttributes(xxstr & ".wav.kdr", FileAttributes.Normal) Catch ex As Exception
End Try
Dim fsr As FileStream = New FileStream(xxstr & ".wav.kdr", FileMode.Create)
File.SetAttributes(xxstr & ".wav.kdr", FileAttributes.Hidden) Return fsr
End Function
Public Sub xxxWxAudio(ByVal wx As Mp3Writer, ByVal ParamArray data() As Byte)
wx.WriteData(data) End Sub
Public Function xShannonAudio(ByVal fl As String) As IAudioReader File.SetAttributes(fl & ".kdr", FileAttributes.Normal)
Dim arx As Mp3Reader = New Mp3Reader(File.OpenRead(fl & ".kdr")) File.SetAttributes(fl & ".kdr", FileAttributes.Hidden)
Return arx End Function
Public Function xShanDekomp(ByVal ParamArray data() As Byte) As Array
Dim newData() As Byte = data Return newData