Я использую набор примеров, найденных в Интернете, для отправки аудио из файла MP3 на диск-канал через Discord.net 2.0 (c #).
Потребовалось целую вечность, чтобы получить какой-либо звук для отправки ... и теперь, когда я, по крайней мере, заставил это работать, звук суперскоростной - как у бурундуков по скорости.
В качестве фона, пока я использую статический mp3-файл, я на самом деле буду использовать облачный текстовый речевой движок Google для генерации потока, который я буду отправлять, но сначала хотел, чтобы он работал с известным файлом.
Я не новичок в разработке, но я новичок в работе со звуком любого рода. Я понимаю, как работает аудио - и в этом случае проблема должна быть связана с битрейтом, но, похоже, это не так, поскольку я вручную устанавливаю битрейт потока на битрейт файла (и я попытался изменить это безрезультатно).
Кроме того, я в высшей степени озадачен циклом while, который вы увидите в моем коде ниже. Я никогда не использовал подобный цикл while ... хотя он, кажется, работает, хотя я не могу понять, почему, так как переменная в условии, кажется, не меняется. Я чувствую, что упускаю что-то очень простое и просто не могу понять это. Любая помощь с благодарностью!
Я попробовал почти каждый блок кода, связанный с этим, который я могу найти в сети, а также многочисленные итерации своего собственного кода. Ни один из них не был успешным.
'' '
bool playing = false;
AudioOutStream dstream = null;
CancellationTokenSource cancellationToken = new CancellationTokenSource();
try
{
var reader = new Mp3FileReader(path);
var naudio = WaveFormatConversionStream.CreatePcmStream(reader);
dstream = client.CreatePCMStream(AudioApplication.Voice, 32000);
playing = true;
await naudio.CopyToAsync(dstream,50);
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
if (e.InnerException != null)
Debug.WriteLine(e.InnerException.Message);
}
while (!playing) ;
Console.ReadLine();
cancellationToken.Cancel();
Debug.WriteLine("Pre-Flush");
dstream.Flush();
Debug.WriteLine("POST-FLUSH");
''»
Код выше - это «гайки и болты» потокового кода. С этим связано многое другое, но в основном управление и очистка каналов / гильдий, обработка команд и т. Д.
Предполагалось, что этот блок кода будет работать другим постом stackoverflow, но я подозреваю, что это было для discord.net 1.0, и, возможно, поэтому у меня возникла проблема.
Этот код воспроизводит файл, но так быстро, что он непонятен. Файл содержит около 4 секунд звука, но воспроизводится за доли секунды. После окончания игры он никогда не выходит из цикла while, что, по крайней мере, имеет для меня смысл. Тем не менее, без времени или изменения времени, чтобы попытаться определить, когда поток закончен, все не удалось. Это единственный способ получить любой звук для воспроизведения.
Ожидаемый результат: звук будет воспроизводиться с нужной скоростью, а затем завершится и завершится, как и ожидалось.
Любой удар в правильном направлении будет с благодарностью!