基于音乐的LRC的启示,在音乐播放的同时,自动显示字幕,但LRC文件大都是人工编辑播放时刻,如果能根据音乐波形自动确定文字显示时刻,可减少许多人工编辑工作。
由于从音乐中提取人声,算法太复杂,这里只对纯语音内容如何实现给一些基本思路。
一、准备工作
1、纯语音文件及对应的文字内容
2、将文字内容按音节(即每一停顿)为一行分割
二、读取语音频谱,对频谱进行分析
1、利用Bass.Net加载语音文件
WavID= Bass.BASS_StreamCreateFile(WavFile, 0, 0, BASSFlag.BASS_DEFAULT)
2、绘出语音频谱到PictureBox上
WF = New Un4seen.Bass.Misc.WaveForm(WavFile New Un4seen.Bass.Misc.WAVEFORMPROC(AddressOf MyWaveFormCallback), Me)
WF.ColorLeft = Color.Red
WF.ColorLeftEnvelope = Color.Blue
WF.RenderStart(True, BASSFlag.BASS_DEFAULT)
While Not WF.IsRendered
Application.DoEvents()
End While
Private Sub MyWaveFormCallback(ByVal framesDone As Integer, ByVal framesTotal As Integer, ByVal elapsedTime As TimeSpan, ByVal finished As Boolean)
PictureBox1.Image = WF.CreateBitmap(PictureBox1.Width, PictureBox1, -1, -1, False)
End Sub
3、从PictureBox上获取波形振幅,通过振幅判断语音开始与结束,并自动为文字内容添加显示时刻