Я пишу Discord Bot в VS2017, используя оболочку Discord.Net.Я получил все для работы (разбор / отправка текстовых команд, объединение голосовых каналов), кроме основной цели: использование потока вывода звука TTS в голосовом канале.
По сути, я использую SpeechSynthesizer для создания MemoryStreamи напиши это боту Discord.Проблема в том, что нет звука.Совсем.Я следил за несколькими другими ответами, а также за документацией на сайте Discord.Net и, похоже, не могу найти способ заставить это работать.Потоковое аудио через url / file хорошо документировано, но не так.
var ffmpeg = CreateProcess("");
var output = ffmpeg.StandardOutput.BaseStream;
IAudioClient client;
ConnectedChannels.TryGetValue(guild.Id, out client);
var discord = client.CreatePCMStream(AudioApplication.Mixed);
await output.CopyToAsync(discord);
await discord.FlushAsync();
Выше был пример, который я использовал, который получен из файла через ffmpeg.Я вижу, что это просто копирование через поток, поэтому я попытался выполнить следующие действия в различных методах:
IAudioClient client;
ConnectedChannels.TryGetValue(guild.Id, out client);
var discord = client.CreatePCMStream(AudioApplication.Mixed);
var synth = new SpeechSynthesizer();
var stream = new MemoryStream();
var synthFormat = new SpeechAudioFormatInfo(
EncodingFormat.Pcm,
8000,
16,
1,
16000,
2,
null);
synth.SetOutputToAudioStream(stream, synthFormat);
synth.Speak("this is a test");
await stream.CopyToAsync(discord);
await discord.FlushAsync();
Я попытался изменить свойства SpeechAudioFormatInfo, изменив вывод в SpeechSynthesizer, полностью удаливАсинхронные вызовы, почти все, что я мог придумать без результата.
Я понимаю, что могу просто вывести звук на фиктивное аудиоустройство и получить другую учетную запись / бота, но это не было цельюэтого упражнения.Я также понимаю, что мог бы просто записать вывод в файл и просто передать его, но это увеличило бы время обработки.Эти инструкции TTS невелики, никогда не превышают 5 слов и должны быть достаточно быстрыми, поскольку они должны быть «выносками».
Наконец, я не смог точно найти способ сделать этоработать с ffmpeg либо.Все, что я прочитал, указывает на необходимость физического источника, а не только потока памяти.
Итак, я в конце.Любая помощь будет оценена.