gpt4 book ai didi

.net - Azure 文本到语音将 SpeakTextAsync 转换为有效的 NAudio 波流

转载 作者:行者123 更新时间:2023-12-03 05:36:11 28 4
gpt4 key购买 nike

我正在尝试使用 Azure 文本到语音服务 (Microsoft.CognitiveServices.Speech) 将文本转换为音频,然后使用 NAudio 将音频转换为另一种格式。

我已经使用 mp3 文件让 NAudio 部分正常工作。但我无法从 SpeakTextAsync 获得任何可与 NAudio 配合使用的输出。

这是我尝试使用 NAudio 播放文件的代码(作为临时测试),但这不会播放任何有效的内容。

var waveStream = new RawSourceWaveStream(azureStream, new WaveFormat());
using (var waveOut = new WaveOutEvent())
{
waveOut.Init(waveStream);
Log.Logger.Debug("Playing sounds...");
waveOut.Play();
while (waveOut.PlaybackState == PlaybackState.Playing)
{
Thread.Sleep(1000);
}
}

我发现的 2 个可能的输出是,但我可能遗漏了一些重要的东西:

选项 1(音频数据流):

using var synthesizer = new SpeechSynthesizer(_config, null);
using var result = await synthesizer.SpeakTextAsync(text);
switch (result.Reason)
{
case ResultReason.SynthesizingAudioCompleted:
Console.WriteLine($"Speech synthesized to speaker for text [{text}]");
return AudioDataStream.FromResult(result);
case ResultReason.Canceled:
{
var cancellation = SpeechSynthesisCancellationDetails.FromResult(result);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails=[{cancellation.ErrorDetails}]");
Console.WriteLine($"CANCELED: Did you update the subscription info?");
}
return null;
}
default:
return null;
}

选项 2(PullAudioOutputStream):

PullAudioOutputStream stream = new PullAudioOutputStream();
AudioConfig config = AudioConfig.FromStreamOutput(stream);

using var synthesizer = new SpeechSynthesizer(_config, null);
using var result = await synthesizer.SpeakTextAsync(text);
switch (result.Reason)
{
case ResultReason.SynthesizingAudioCompleted:
Console.WriteLine($"Speech synthesized to speaker for text [{text}]");
return stream;
case ResultReason.Canceled:
{
var cancellation = SpeechSynthesisCancellationDetails.FromResult(result);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails=[{cancellation.ErrorDetails}]");
Console.WriteLine($"CANCELED: Did you update the subscription info?");
}
return null;
}
default:
return null;
}

那么如何将文本转换为有效的 NAudio 格式的语音?

最佳答案

凯文,

为什么需要 NAudio?如果仅用于播放,则没有必要,以下行大声播放文本:

await synthesizer.SpeakTextAsync(text);

出于任何其他原因,如果您需要使用 NAudio 进行语音合成的结果。

if (result.Reason == ResultReason.SynthesizingAudioCompleted)
{
using var stream = new MemoryStream(result.AudioData);
using var reader = new WaveFileReader(stream);
using var player = new WaveOutEvent();

player.Init(reader);
player.Play();

while (player.PlaybackState == PlaybackState.Playing)
{

Thread.Sleep(500);
}
}

关于.net - Azure 文本到语音将 SpeakTextAsync 转换为有效的 NAudio 波流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62377569/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com