谁能帮我。我使用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)。
您的问题没有确切答案。寻找正确的参数和公式涉及一些黑魔法。