谁能帮我。我使用语音合成器制作了一个文本到语音转换应用程序,它具有播放,暂停,恢复和停止,但您也可以更改语音,速率和音量,还可以另存为音频(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
。语音的音调会影响产生的数据量。我不确定音量是否以及如何影响文件大小。再次做实验!
我假设文件大小与采样率成比例增长;但是这取决于使用的压缩算法(这些算法取决于编解码器)。
您的问题没有确切的答案。找到正确的参数和公式涉及一些黑魔法。