服务器端mp3音高/音调变化

问题描述 投票:0回答:1

我正在制作一个用于虚拟卡拉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#。

c# asp.net vb.net signalr mp3
1个回答
0
投票
我想通了!!!我最终使用了在NuGet中找到的NAudio库。这是其背后的代码。

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秒的时间进行转换,但这是在需要之前完成的。
© www.soinside.com 2019 - 2024. All rights reserved.