C# 将MP3流到Discord.net 2.0-音频速度非常快(花栗鼠)。思想?

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文件时,我实际上将使用谷歌云文本语音引擎来生成我将要发送的流——但我想让它首先与一个已知的文件一起工作 我对开发并不陌生,但我对任何类型的音频都不熟悉。我了解音频是如何工作的——在这种情况下,问题应该与比特率有关,但情况似乎并非如此,因为

我正在使用一个在线示例的mashup,通过discord.net2.0(c#)将MP3文件中的音频发送到discord频道

它花了很长时间才得到任何音频发送。。。现在,我至少已经开始工作了,音频速度非常快,就像花栗鼠一样快

作为背景,当我在这里使用一个静态mp3文件时,我实际上将使用谷歌云文本语音引擎来生成我将要发送的流——但我想让它首先与一个已知的文件一起工作

我对开发并不陌生,但我对任何类型的音频都不熟悉。我了解音频是如何工作的——在这种情况下,问题应该与比特率有关,但情况似乎并非如此,因为我手动将流的比特率设置为文件的比特率(我尝试将其更改为无效)

此外,我对您将在下面的代码中看到的while循环感到非常困惑。我从来没有用过像那样的while循环。。。虽然它看起来确实有效,但我一辈子都不知道为什么,因为条件中的变量似乎没有改变。我觉得我错过了一些非常简单的东西,只是似乎无法理解。非常感谢您的帮助

我在网上找到了几乎所有与此相关的代码块,也尝试了我自己代码的多次迭代。没有一个是成功的

'''

''' 上面的代码是流式代码的“螺母和螺栓”。与之相关的还有很多,但主要是渠道/公会管理和清理、命令处理等

这段代码据称是由另一个stackoverflow帖子使用的,但我怀疑它是针对discord.net 1.0的,这可能是我遇到问题的原因

这段代码确实播放了该文件,但速度太快,令人费解。该文件包含大约4秒的音频,但播放时间仅为几分之一秒。游戏结束后,它再也不会退出while循环,这至少对我来说是有意义的。也就是说,如果没有while,或者修改while来尝试检测流何时完成,那么所有这些都失败了。这是我能播放任何音频的唯一方法

预期结果是音频以正确的比特率播放,然后按预期退出并刷新


任何朝正确方向的踢腿都将不胜感激

您是否确保正确加载了所有库?这是discord机器人中音频问题的常见原因

这是我发布的另一个问题的答案


这些是我从官方Discord API协会得到的一些东西

Windows 64位:
Windows 32位:
适用于Windows的FFmpeg:

其他操作系统:

  • GNU/Linux:

  • OSX:

  • FreeBSD:

D.NET用户注意:在使用之前,您需要将libopus.dll重命名为opus.dll,否则音频客户端仍会抱怨缺少库


您是否确保已正确加载所有库?这是discord机器人中音频问题的常见原因

这是我发布的另一个问题的答案


这些是我从官方Discord API协会得到的一些东西

Windows 64位:
Windows 32位:
适用于Windows的FFmpeg:

其他操作系统:

  • GNU/Linux:

  • OSX:

  • FreeBSD:

D.NET用户注意:在使用之前,您需要将libopus.dll重命名为opus.dll,否则音频客户端仍会抱怨缺少库


您是否检查了正在发送的音频的比特率?
这是我在创建流时遇到的问题。我发送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");