Discord.net/Discord.py записывает аудиопоток пользователя или всего каналаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Discord.net/Discord.py записывает аудиопоток пользователя или всего канала

Сообщение Anonymous »

В настоящее время я пытаюсь записать звук конкретного пользователя или, если это невозможно, всего канала.
Я начал с Discord.py, но безуспешно. В настоящее время бот присоединяется к каналу, когда подключается определенный пользователь, и должен начать запись. С помощью Python и C# я нашел старые сообщения и темы на GitHub, в которых предлагались решения моей проблемы, но эти решения, похоже, больше не работают. Discord удалил поддержку получения аудиопотоков?
Мне бы хотелось иметь эту функцию, но я не нашел столько информации. Воспроизведение звука в настоящее время осуществляется, по крайней мере, на Python без проблем.
Кодирование:

Код: Выделить всё

private Task OnVoiceStateUpdated(SocketUser? socketUser, SocketVoiceState before, SocketVoiceState after)
{
_ = Task.Run(async () =>
{
try
{
Logger.Output($"Starting to handle user movements", Logger.LogType.Default);
var currentChannel = after.VoiceChannel ?? before.VoiceChannel;
if (currentChannel == null) return;
var botUser = currentChannel.Guild.Users.FirstOrDefault(u => u.IsBot);

if (before.VoiceChannel == null && after.VoiceChannel != null) // If member joins a voice channel
{
var channel = after.VoiceChannel;

try
{
Logger.Output($"Connect bot to channel '{channel.Name}'", Logger.LogType.Default);
await Task.Delay(1000);
_audioClient = await channel.ConnectAsync();
_cts = new CancellationTokenSource();

if (socketUser is not SocketGuildUser socketGuildUser) return;
if (socketGuildUser.AudioStream is not InputStream inputStream) return;

_ = Task.Run(() =>
ProcessAudioAsync(inputStream)
);
}
catch (Exception e)
{
Logger.Output($"Failed to connect and start recording: {e}", Logger.LogType.Error);
}
}
}
catch (Exception e)
{
Logger.Output($"Handling user movements failed! {e.Message}", Logger.LogType.Error);
}
});
return Task.CompletedTask;
}

private async Task ProcessAudioAsync(InputStream inputStream)
{
// Create a new wave file writer to save the audio stream
string currentTime = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
string filename = Path.Combine(AudioRecordingsPath, $"output_{currentTime}.wav");

// Create the wave file writer to save the audio stream
_writer = new WaveFileWriter(filename, new WaveFormat(48000, 16, 2));

try
{
var buffer = new byte[81920]; // Buffer size can be adjusted as needed

while (!_cts.IsCancellationRequested)
{
var bytesRead = await inputStream.ReadAsync(buffer, 0, buffer.Length, _cts.Token);

// If bytesRead is zero, end of the stream has been reached
if (bytesRead == 0)
{
Task.Delay(1000).Wait();
continue;
}

// Write from buffer to wave file
await _writer.WriteAsync(buffer, 0, bytesRead);

// Flush the writer to ensure data is written to disk
await _writer.FlushAsync();
}
}
catch (OperationCanceledException e)
{
Logger.Output($"Audio processing was cancelled. {e.Message} {e.StackTrace}", Logger.LogType.Error);
}
catch (TimeoutException e)
{
Logger.Output($"Audio processing timed out. {e.Message} {e.StackTrace}", Logger.LogType.Error);
}
catch (InvalidOperationException e)
{
Logger.Output($"Audio processing failed due to stream issue. {e.Message} {e.StackTrace}",
Logger.LogType.Error);
}
catch (Exception e)
{
Logger.Output($"Audio processing failed. {e.Message} {e.StackTrace}", Logger.LogType.Error);
}
finally
{
await inputStream.FlushAsync();
}
}
Похоже, проблема в этой строке: «var bytesRead = await inputStream.ReadAsync(buffer, 0, buffer.Length, _cts.Token);» функция вызывается, но никогда не возвращается. Кажется, поток никогда не содержит никаких данных.
Есть ли возможное решение этой проблемы на C# или Python?
Большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/790 ... le-channel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Discord.net/Discord.py записывает аудиопоток пользователя или всего канала
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Discord.net/Discord.py записывает аудиопоток пользователя или всего канала
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Как декодировать аудиопоток с помощью веб-сокета торнадо?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Safari (IOS) не воспроизводит аудиопоток (html5)
    Anonymous » » в форуме IOS
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как получить идентификатор пользователя пользователя Discord с помощью discord.py
    Anonymous » » в форуме Python
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»