use*_*114 9 c# asp.net audio naudio
嗨,我试图在内存流中将文本转换为语音(wav)将其转换为mp3,然后在用户页面上播放.所以我需要帮助下一步做什么?
这是我的asmx代码:
[WebMethod]
public byte[] StartSpeak(string Word)
{
MemoryStream ms = new MemoryStream();
using (System.Speech.Synthesis.SpeechSynthesizer synhesizer = new System.Speech.Synthesis.SpeechSynthesizer())
{
synhesizer.SelectVoiceByHints(System.Speech.Synthesis.VoiceGender.NotSet, System.Speech.Synthesis.VoiceAge.NotSet, 0, new System.Globalization.CultureInfo("en-US"));
synhesizer.SetOutputToWaveStream(ms);
synhesizer.Speak(Word);
}
return ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
Wjd*_*is5 45
只想用NAudio.Lame发布我的例子:
的NuGet:
Install-Package NAudio.Lame
Run Code Online (Sandbox Code Playgroud)
代码片段:我的显然返回一个字节[] - 我有一个单独的保存到磁盘方法b/c我认为它使单元测试更容易.
public static byte[] ConvertWavToMp3(byte[] wavFile)
{
using(var retMs = new MemoryStream())
using (var ms = new MemoryStream(wavFile))
using(var rdr = new WaveFileReader(ms))
using (var wtr = new LameMP3FileWriter(retMs, rdr.WaveFormat, 128))
{
rdr.CopyTo(wtr);
return retMs.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
Cor*_*rey 11
你需要一个MP3压缩库.我通过Yeti Lame包装使用Lame.您可以在此处找到代码和示例项目.
让这个工作的步骤:
将以下文件复制MP3Compressor到项目中:
在项目属性Lame_enc.dll中将Copy to Output属性设置为Copy if newer或Copy always.
编辑Lame.cs并替换以下所有实例:
[DllImport("Lame_enc.dll")]
Run Code Online (Sandbox Code Playgroud)
有:
[DllImport("Lame_enc.dll", CallingConvention = CallingConvention.Cdecl)]`
Run Code Online (Sandbox Code Playgroud)将以下代码添加到项目中:
public static Byte[] WavToMP3(byte[] wavFile)
{
using (MemoryStream source = new MemoryStream(wavFile))
using (NAudio.Wave.WaveFileReader rdr = new NAudio.Wave.WaveFileReader(source))
{
WaveLib.WaveFormat fmt = new WaveLib.WaveFormat(rdr.WaveFormat.SampleRate, rdr.WaveFormat.BitsPerSample, rdr.WaveFormat.Channels);
// convert to MP3 at 96kbit/sec...
Yeti.Lame.BE_CONFIG conf = new Yeti.Lame.BE_CONFIG(fmt, 96);
// Allocate a 1-second buffer
int blen = rdr.WaveFormat.AverageBytesPerSecond;
byte[] buffer = new byte[blen];
// Do conversion
using (MemoryStream output = new MemoryStream())
{
Yeti.MMedia.Mp3.Mp3Writer mp3 = new Yeti.MMedia.Mp3.Mp3Writer(output, fmt, conf);
int readCount;
while ((readCount = rdr.Read(buffer, 0, blen)) > 0)
mp3.Write(buffer, 0, readCount);
mp3.Close();
return output.ToArray();
}
}
}
Run Code Online (Sandbox Code Playgroud)添加System.Windows.Forms对项目的引用(如果它不存在),或者编辑AudioWriter.cs并WriterConfig.cs删除引用.这两个都有一个using System.Windows.Forms;你可以删除,并WriterConfig.cs有一个ConfigControl需要删除/注释掉的声明.
完成所有这些后,您应该有一个功能性的内存中波形文件到MP3转换器,您可以使用它将您获得的WAV文件SpeechSynthesizer转换为MP3.
| 归档时间: |
|
| 查看次数: |
26582 次 |
| 最近记录: |