C# 将MP3流到Discord.net 2.0-音频速度非常快(花栗鼠)。思想?
我正在使用一个在线示例的mashup,通过discord.net2.0(c#)将MP3文件中的音频发送到discord频道 它花了很长时间才得到任何音频发送。。。现在,我至少已经开始工作了,音频速度非常快,就像花栗鼠一样快 作为背景,当我在这里使用一个静态mp3文件时,我实际上将使用谷歌云文本语音引擎来生成我将要发送的流——但我想让它首先与一个已知的文件一起工作 我对开发并不陌生,但我对任何类型的音频都不熟悉。我了解音频是如何工作的——在这种情况下,问题应该与比特率有关,但情况似乎并非如此,因为我手动将流的比特率设置为文件的比特率(我尝试将其更改为无效) 此外,我对您将在下面的代码中看到的while循环感到非常困惑。我从来没有用过像那样的while循环。。。虽然它看起来确实有效,但我一辈子都不知道为什么,因为条件中的变量似乎没有改变。我觉得我错过了一些非常简单的东西,只是似乎无法理解。非常感谢您的帮助 我在网上找到了几乎所有与此相关的代码块,也尝试了我自己代码的多次迭代。没有一个是成功的 ''' ''' 上面的代码是流式代码的“螺母和螺栓”。与之相关的还有很多,但主要是渠道/公会管理和清理、命令处理等 这段代码据称是由另一个stackoverflow帖子使用的,但我怀疑它是针对discord.net 1.0的,这可能是我遇到问题的原因 这段代码确实播放了该文件,但速度太快,令人费解。该文件包含大约4秒的音频,但播放时间仅为几分之一秒。游戏结束后,它再也不会退出while循环,这至少对我来说是有意义的。也就是说,如果没有while,或者修改while来尝试检测流何时完成,那么所有这些都失败了。这是我能播放任何音频的唯一方法 预期结果是音频以正确的比特率播放,然后按预期退出并刷新C# 将MP3流到Discord.net 2.0-音频速度非常快(花栗鼠)。思想?,c#,naudio,discord.net,system.io.file,C#,Naudio,Discord.net,System.io.file,我正在使用一个在线示例的mashup,通过discord.net2.0(c#)将MP3文件中的音频发送到discord频道 它花了很长时间才得到任何音频发送。。。现在,我至少已经开始工作了,音频速度非常快,就像花栗鼠一样快 作为背景,当我在这里使用一个静态mp3文件时,我实际上将使用谷歌云文本语音引擎来生成我将要发送的流——但我想让它首先与一个已知的文件一起工作 我对开发并不陌生,但我对任何类型的音频都不熟悉。我了解音频是如何工作的——在这种情况下,问题应该与比特率有关,但情况似乎并非如此,因为
任何朝正确方向的踢腿都将不胜感激 您是否确保正确加载了所有库?这是discord机器人中音频问题的常见原因 这是我发布的另一个问题的答案
这些是我从官方Discord API协会得到的一些东西 Windows 64位:
Windows 32位:
适用于Windows的FFmpeg: 其他操作系统:
- GNU/Linux:
- OSX:
- FreeBSD:
您是否确保已正确加载所有库?这是discord机器人中音频问题的常见原因 这是我发布的另一个问题的答案
这些是我从官方Discord API协会得到的一些东西 Windows 64位:
Windows 32位:
适用于Windows的FFmpeg: 其他操作系统:
- GNU/Linux:
- OSX:
- FreeBSD:
您是否检查了正在发送的音频的比特率?
这是我在创建流时遇到的问题。我发送wav数据的速度太快,产生了花栗鼠的声音。您必须确保从音频文件读取的数据与发送到Discord AudioStream的数据完全相同。您是否检查了发送的音频的比特率? 这是我在创建流时遇到的问题。我发送wav数据的速度太快,产生了花栗鼠的声音。您必须确保从音频文件读取的数据与发送到Discord AudioStream的数据完全相同
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");