将.vox文件转换为wav文件 [英] Convert .vox files to ,wav files

查看:135
本文介绍了将.vox文件转换为wav文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,



我想知道是否有任何将vox文件转换为wav的代码。



我目前正在使用下面的代码但转换后的文件似乎已损坏,因为它只会播放失真。



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.

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

推荐答案

请参阅以下链接



NAudio



Alvas Audio:.Net开发人员的C#音频库。


非常感谢你。但是文件仍然以这种方式扭曲。认为记录方式有问题
thank you so much. but the files still play distorted with this way as well. think theres something wrong with the way its being recorded


如何使用Vox2Wav方法 [ ^ ]



How to use Vox2Wav method[^]

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


这篇关于将.vox文件转换为wav文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆