我正在制作一个用于虚拟卡拉OK的卡拉OK网站。我已经拥有您能想到的所有功能。没有密钥更改功能。我在前端使用Html / Javascript / Jquery,在后端使用asp.net。有谁知道在服务器端进行音调更改的任何方法吗?
对于不认识的人,卡拉OK歌曲包含2个压缩文件。您有用于图形的CDG文件和用于音频的MP3文件。为了节省空间,我确实将歌曲压缩。二重奏的CDG部分(通常与mp3大小大致相同)可压缩至原始大小的近10%,因此仅以这种方式存储它们才有意义。
现在,当用户选择要播放的歌曲时,服务器会将文件解压缩到一个临时文件夹中。他们在此文件夹中闲逛,直到Dj将歌曲标记为已唱歌。那时它将从temp文件夹中删除文件。
话虽这么说,我认为最好有一个[[ASP.Net服务器端解决方案,因为signalR集线器可以在站点继续运行而无需通知的情况下处理音调变化。
我还阅读了有关通过拉伸或压缩音频文件的长度来改变音高的信息。在这种情况下将无法使用,并且会使歌词与歌曲不匹配。提前感谢!
-Guy Cothal(kara.guycothal.com)
P.S。我目前正在寻找纯粹的服务器端解决方案。必须使用VB或C#。
Public Shared Function pitchChange(sFileIn As String, sFileOut As String, iPitch As Integer) As Boolean
Dim semitone = Math.Pow(2, (iPitch / 1) / 12)
Try
Using reader = New MediaFoundationReader(sFileIn)
Dim pitch = New SmbPitchShiftingSampleProvider(reader.ToSampleProvider())
Using device = New WaveOutEvent()
pitch.PitchFactor = CSng(semitone)
MediaFoundationEncoder.EncodeToMp3(pitch.ToWaveProvider(), sFileOut, 48000)
End Using
End Using
Return True
Catch exception As Exception
Throw exception
Return False
End Try
End Function
我在任一方向上测试了12个步骤。大约需要20到25秒的时间进行转换,但这是在需要之前完成的。