Click here to Skip to main content
15,889,281 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi there,

I would like to know if there is any code out there that converts a vox file to wav.

I am currently using the code below but after converting the file seems to be corrupt as it only plays with distortion.

VB
Module moduleVOX2WAV

    Dim WaveHeader() As Int32 = New Int32() {&H46464952, &HFFFFFFDB, &H45564157, &H20746D66, 16, &H10001, 6000, 12000, &H100002, &H61746164, -1}
    Dim IndexShift() As Int16 = New Int16() {-1, -1, -1, -1, 2, 4, 6, 8}
    Dim StepSize() As Int16 = New Int16() {16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794}
    Dim Nibble2Bit(,) As Int16 = New Int16(,) {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1}, {0, 1, 0, 0}, {0, 1, 0, 1}, {0, 1, 1, 0}, {0, 1, 1, 1}, {1, 0, 0, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}, {1, 0, 1, 1}, {1, 1, 0, 0}, {1, 1, 0, 1}, {1, 1, 1, 0}, {1, 1, 1, 1}}
    Dim SignTable() As Int16 = New Int16() {1, -1}
    Dim StepSizeIndex As Int16 = 0
    Dim Signal As Int16 = -2
    Dim AvgBuffer() As Int16 = New Int16() {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
    Dim AvgIndex As Int16 = 0
    Dim Total As Int32 = 0
    Dim Length As Int32
    Dim Offset As Int32
    Dim nibble As Int16
    Dim ReadBuffer(4096) As Byte
    Dim WriteBuffer(8192) As Int16

    Public Sub Convert(ByVal srcVOXFile As String, ByVal destWAVFile As String)
        Dim strm As New IO.FileStream(srcVOXFile, IO.FileMode.Open, IO.FileAccess.Read)
        FileOpen(2, destWAVFile, OpenMode.Binary, OpenAccess.Write, OpenShare.LockWrite)
        FilePut(2, WaveHeader)
        Length = 4096
        While Length = 4096
            Length = strm.Read(ReadBuffer, 0, 4096)
            For Offset = 0 To Length - 1
                nibble = 0
                Signal += Decode(ReadBuffer(Offset) \ 16)
                If (Signal > 2047 Or Signal < -2047) Then Truncate()
                WriteBuffer(2 * Offset) = Signal
                nibble = 1
                Signal += Decode(ReadBuffer(Offset) Mod 16)
                If (Signal > 2047 Or Signal < -2047) Then Truncate()
                WriteBuffer(2 * Offset + 1) = Signal
            Next
            FilePut(2, WriteBuffer)
            Total += Length
        End While
        strm.Close() : strm = Nothing
        Total = 4 * Total
        Length = Total + 36
        FilePut(2, Length, 4 + 1)
        FilePut(2, Total, 40 + 1)
        FileClose(2)
    End Sub

    Public Function Decode(ByVal i As Byte) As Int16
        Dim diff As Int16
        Dim value As Int32
        value = 2 * Total + 2 * Offset + nibble
        diff = SignTable(Nibble2Bit(i, 0)) * (StepSize(StepSizeIndex) * Nibble2Bit(i, 1) + (StepSize(StepSizeIndex) / 2) * Nibble2Bit(i, 2) + (StepSize(StepSizeIndex) / 4) * Nibble2Bit(i, 3) + (StepSize(StepSizeIndex) / 8))
        StepSizeIndex = StepSizeIndex + IndexShift(i Mod 8)
        If StepSizeIndex < 0 Then StepSizeIndex = 0
        If StepSizeIndex > 48 Then
            StepSizeIndex = 48
        End If
        Return diff
    End Function

    Public Sub Truncate()
        Dim value As Int32
        value = 2 * Total + 2 * Offset + nibble
        If Signal > 2047 Then Signal = 2047
        If Signal < -2047 Then Signal = -2047
    End Sub





End Module


thanks
Posted
Updated 7-Aug-16 20:12pm

 
Share this answer
 
v2
How to use Vox2Wav method[^]

C#
string voxFile = "in.vox";
int samplesPerSec = 8000;
string wavFile = "out.wav";
BinaryReader br = new BinaryReader(File.OpenRead(voxFile));
IntPtr format = AudioCompressionManager.GetPcmFormat(1, 16, samplesPerSec);
WaveWriter ww = new WaveWriter(File.Create(wavFile), AudioCompressionManager.FormatBytes(format));
Vox.Vox2Wav(br, ww);
br.Close();
ww.Close();
 
Share this answer
 
I'm not a programmer and know nothing about codes. I find this forum by accident and want to share my experience. I'm using a vox converter named Faasoft Video Converter and works well. Maybe you can get what you want throuth it.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900