• Tidak ada hasil yang ditemukan

2. Form Sub Menu - Implementasi Algoritma Shannon-Fano Pada Kompresi Audio

N/A
N/A
Protected

Academic year: 2019

Membagikan "2. Form Sub Menu - Implementasi Algoritma Shannon-Fano Pada Kompresi Audio"

Copied!
10
0
0

Teks penuh

(1)

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()

(2)

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)

(3)

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)

(4)

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

(5)

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 =

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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

Referensi

Dokumen terkait

Dalam penelitian dengan judul “Sistem Informasi Akademik pada MA Islamiyah Attanwir Bojonegoro Berbasis Web dengan menggunakan CodeIgniter ” dijelaskan

Menindaklanjuti Surat Edaran dari Sekretariat Daerah Kota Yogyakarta Tanggal 26 Maret 2018 Nomor : 027/968/SE/2018 tentang Usulan RKMBD Pemerintah Kota Yogyakarta Tahun

Seperti hal yang dilakukan PT.Nissan melakukan rebranding terhadap brand Datsun yang sebuah brand telah lama mati untuk dimunculkan kembali di pasar otomotif Indonesia

Kriteria proses meliputi; (1) Bekerja sama dengan klien dalam pelaksanaan tindakan keperawatan, (2) Kolaborasi dengan profesi lain untuk meningkatkan status kesehatan klien,

Berdasarkan ataa data-data yang dldapat»ternyata dari penderlta ureml yang dlperlksa semuanya (100$) me- nunjukkan gangguan toleransi glukosa* Juga tidak ada hu bungan antara

Tujuan yang hendak dicapai dalam penelitian ini adalah untuk mengetahui bagaimana peran guru PAI di SMK N 1 Salatiga dalam membina kecerdasan spiritual serta

Pra Rencana Pabrik Natrium Sulfat dari Garam (NaCl) dan Asam Sulfat dengan Proses Garam – Asam Sulfat

Diharapkan nantinya dengan adanya sistem ini akan dapat membantu job seekers dalam mencari lowongan pekerjaan, peneliti memberikan solusi dengan membuat