如何在 vb.net 中创建文件之前预测文件大小



谁能帮我。我使用语音合成器制作了一个文本到语音转换应用程序,它具有播放,暂停,恢复和停止,但您也可以更改语音,速率和音量,还可以另存为音频(mp3,wav)。

但问题是:在创建文件之前如何显示音频文件的文件大小,具体取决于

我的 Form1 代码是:

Imports System.Speech.Synthesis
Imports System.IO
Public Class Form1
Dim speech As New SpeechSynthesizer
Private Sub ControlBtn_Click(sender As System.Object, e As System.EventArgs) Handles ControlBtn.Click
    Form2.ShowDialog()
End Sub
Private Sub speakCompleted(ByVal sender As Object, ByVal e As SpeakCompletedEventArgs)
    Dim cancelled = e.Cancelled
    PlayBtn.Enabled = True
    PauseBtn.Enabled = False
    ResumeBtn.Enabled = False
    StopBtn.Enabled = False
End Sub
Private Sub PlayBtn_Click(sender As System.Object, e As System.EventArgs) Handles PlayBtn.Click
    speech.SelectVoice(Form2.ComboBox1.Text)
    speech.Rate = Form2.RateTB.Value
    speech.Volume = Form2.VolumeTB.Value
    speech.SpeakAsync(RichTextBox1.Text)
    PlayBtn.Enabled = False
    ResumeBtn.Enabled = False
    PauseBtn.Enabled = True
    StopBtn.Enabled = True
    AddHandler speech.SpeakCompleted, AddressOf speakCompleted
End Sub
Private Sub StopBtn_Click(sender As System.Object, e As System.EventArgs) Handles StopBtn.Click
    speech.SpeakAsyncCancelAll()
    StopBtn.Enabled = False
    PauseBtn.Enabled = False
    ResumeBtn.Enabled = False
    PlayBtn.Enabled = True
End Sub
Private Sub ResumeBtn_Click(sender As System.Object, e As System.EventArgs) Handles ResumeBtn.Click
    speech.Resume()
    PlayBtn.Enabled = False
    ResumeBtn.Enabled = False
    PauseBtn.Enabled = True
    StopBtn.Enabled = True
End Sub
Private Sub PauseBtn_Click(sender As System.Object, e As System.EventArgs) Handles PauseBtn.Click
    speech.Pause()
    PauseBtn.Enabled = False
    PlayBtn.Enabled = False
    StopBtn.Enabled = True
    ResumeBtn.Enabled = True
End Sub
Private Sub SaveAsAudioBtn_Click(sender As System.Object, e As System.EventArgs) Handles SaveAsAudioBtn.Click
    Dim mes As New MsgBoxResult
    mes = MsgBox("Voice: " & Form2.ComboBox1.Text & vbNewLine & "Rate: " & Form2.RateTB.Value & vbNewLine & "Volume: " & Form2.VolumeTB.Value & vbNewLine & vbNewLine & "Your file size has been estimated at." & vbNewLine & vbNewLine & "Do you want to proceed?", MsgBoxStyle.YesNo, "Save as Audio")
    If mes = MsgBoxResult.Yes Then
        SaveFileDialog1.Filter = "MPEG-2 Audio Layer III (*.mp3)|*.mp3|WAVeform audio format (*.wav)|*.wav"
        SaveFileDialog1.Title = "Save as Audio file"
        SaveFileDialog1.RestoreDirectory = True
        If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            Dim fs As New FileStream(SaveFileDialog1.FileName, FileMode.Create, FileAccess.Write)
            speech.SelectVoice(Form2.ComboBox1.Text)
            speech.Rate = Form2.RateTB.Value
            speech.Volume = Form2.VolumeTB.Value
            speech.SetOutputToWaveStream(fs)
            speech.Speak(RichTextBox1.Text)
            fs.Close()
        End If
    ElseIf mes = MsgBoxResult.No Then
    End If
End Sub
End Class

Form2 的代码是:

Imports System.Speech.Synthesis
Imports System.Collections.ObjectModel
Public Class Form2
Dim speech As New SpeechSynthesizer
Private Sub Form2_Load(sender As System.Object, e As System.EventArgs)  Handles MyBase.Load
    Dim objvoices As ReadOnlyCollection(Of InstalledVoice) = Speech.GetInstalledVoices(Globalization.CultureInfo.CurrentCulture)
    Dim objvoiceInformation As VoiceInfo = objvoices(0).VoiceInfo
    For Each tmpvoice As InstalledVoice In objvoices
        objvoiceInformation = tmpvoice.VoiceInfo
        ComboBox1.Items.Add(objvoiceInformation.Name.ToString)
    Next
End Sub
End Class

如果你能给我它的代码,那就太好了。

一些数学加上一些实验应该会有所帮助

expected size = sample rate * average bytes per sample * recording time

您必须进行实验才能弄清楚不同格式和可能不同的声音产生的average bytes per sample。语音的音调会影响产生的数据量。我不确定音量是否以及如何影响文件大小。再次做实验!

我假设文件大小与采样率成比例增长;但是这取决于使用的压缩算法(这些算法取决于编解码器)。

您的问题没有确切的答案。找到正确的参数和公式涉及一些黑魔法。

最新更新