我有一个(语音邮件)
.gsm
文件,我需要在浏览器中播放。 Html5
不支持 .gsm
文件。我怎样才能播放它以便用户可以听到他的语音邮件?
我以前从特定提供商处获取的
.gsm
文件,我使用以下代码即时转换:
Imports NAudio.Wave
Function ConvertGsm610ToPcm(inputBytes As Byte()) As Byte()
Using gsmStream As New MemoryStream(inputBytes)
Using gsmReader As New WaveFileReader(gsmStream)
If gsmReader.WaveFormat.Encoding = WaveFormatEncoding.Gsm610 Then
Using pcmStream As New MemoryStream()
Using pcmWriter As New WaveFileWriter(pcmStream, New WaveFormat(8000, 16, 1))
Dim gsmFormat As New Gsm610WaveFormat()
Dim gsmToPcmStream As New WaveFormatConversionStream(pcmWriter.WaveFormat, gsmReader)
gsmToPcmStream.CopyTo(pcmWriter)
Return pcmStream.ToArray()
End Using
End Using
Else
Return inputBytes
End If
End Using
End Using
End Function
这段代码运行良好。但现在我正在与另一个提供商合作,当我尝试使用前一个功能时,我得到:
不是 WAVE 文件 - 没有 RIFF 标头
我尝试了许多不同的波形等变体,但无法获得工作文件。 chrome
audio
播放器中的播放按钮未打开,或者我听到 3 秒的静态噪音,或 31 秒的冒泡声。示例文件本身为 31 秒。
双击我电脑上的文件效果很好。使用 VLC 播放器播放。
以下是 VLC 播放器显示的文件详细信息:
编解码器:GSM 音频(GSM)
类型:音频
频道:单声道
采样率:8000 Hz
每个样本位数:16
请指教
预先感谢
Imports NAudio.Wave
Imports System.IO
Function ConvertGsm610ToPcm(inputBytes As Byte()) As Byte()
Using gsmStream As New MemoryStream(inputBytes)
Using gsmReader As New WaveFileReader(gsmStream)
If gsmReader.WaveFormat.Encoding = WaveFormatEncoding.Gsm610 Then
Using pcmStream As New MemoryStream()
Dim gsmToPcmStream As New WaveFormatConversionStream(New WaveFormat(8000, 16, 1), gsmReader)
gsmToPcmStream.CopyTo(pcmStream)
Return pcmStream.ToArray()
End Using
Else
Return inputBytes ' Return original bytes if not GSM610 (optional)
End If
End Using
End Using
End Function
在 HTML 文件中
<audio controls>
<source src="data:audio/wav;base64,<!-- Base64 encoded PCM data -->" type="audio/wav">
</audio>
<script>
window.onload = function() {
var audioElement = document.querySelector('audio');
var pcmData = "<%= Convert.ToBase64String(pcmData) %>";
audioElement.src = "data:audio/wav;base64," + pcmData;
};
</script>
确切地说,您应该将 GSM 音频转换为 PCM 音频才能播放 html 中的 gsm 文件。 我希望这段代码能帮助您解决问题。