谁能帮我。我使用SpeechSynthesizer制作了一个“文本转语音”应用程序,它具有“播放”,“暂停”,“恢复”和“停止”功能,但是您也可以更改声音,速率和音量,还可以另存为音频(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。声音的音调会影响产生的数据量。我不确定卷是否以及如何影响文件大小。再次进行实验!

我认为文件大小与采样率成正比。但是,这取决于所使用的压缩算法(并且取决于codecs)。

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

07-24 09:47
查看更多