public WaveStream AudioFromYT(EditNull n, IMessage m, string YouTubeVideoURL) { if (m.Author.Id != Program.Master.Id) { throw new Exception("u r not allowed"); } MemoryStream mem = new MemoryStream(); using Process P = MultiMediaHelper.GetAudioStreamFromYouTubeVideo(YouTubeVideoURL, "mp3"); P.StandardOutput.BaseStream.CopyTo(mem); return(WaveFormatConversionStream.CreatePcmStream(new StreamMediaFoundationReader(mem))); }
public override async void Execute(IMessage message) { if (!message.Content.Contains(" ")) { DiscordNETWrapper.SendEmbed(HelpMenu, message.Channel).Wait(); return; } SocketGuild g = Program.GetGuildFromChannel(message.Channel); ISocketAudioChannel channel = g.VoiceChannels.FirstOrDefault(x => x.Users.Select(y => y.Id).Contains(message.Author.Id)); string videoURL = message.Content.Split(' ')[1]; if (!videoURL.StartsWith("https://www.youtube.com/watch?")) { DiscordNETWrapper.SendText("That doesn't look like a youtube video link :thinking:", message.Channel).Wait(); return; } if (channel != null) { try { channel.DisconnectAsync().Wait(); } catch { } IAudioClient client = await channel.ConnectAsync(); using (Process P = MultiMediaHelper.GetAudioStreamFromYouTubeVideo(videoURL, "mp3")) using (MemoryStream mem = new MemoryStream()) { while (true) { Task.Delay(1001).Wait(); if (string.IsNullOrWhiteSpace(P.StandardError.ReadLine())) { break; } } P.StandardOutput.BaseStream.CopyTo(mem); using (WaveStream naudioStream = WaveFormatConversionStream.CreatePcmStream(new StreamMediaFoundationReader(mem))) MultiMediaHelper.SendAudioAsync(client, naudioStream).Wait(); } try { channel.DisconnectAsync().Wait(); } catch { } } else { DiscordNETWrapper.SendText("You are not in an AudioChannel on this server!", message.Channel).Wait(); return; } }
public Gif ConvertToGif(Video video, IMessage m) { lock (workspaceLock) { string outPath = $"Commands{s}Edit{s}Workspace{s}output.gif"; string args = $"-t 5 -y -i {video.filePath} -vf \"fps = 10, scale = 420:-1:" + $"flags = lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" -loop 0 {outPath}"; Process runner = Process.Start("ffmpeg", args); runner.WaitForExit(); File.Delete(video.filePath); Image i = Image.FromFile(outPath); return(MultiMediaHelper.ImageToGif(i)); } }
/// <summary> /// 上传多媒体文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnUpload_Click(object sender, EventArgs e) { string userName = lbPublicAccount.SelectedValue; MultiMediaTypeEnum type = (MultiMediaTypeEnum)Enum.Parse(typeof(MultiMediaTypeEnum), lbMultiMediaType.SelectedValue); string filename = fileUpload.FileName; byte[] bytes = fileUpload.FileBytes; ErrorMessage errorMessage; MultiMediaUploadResult result = MultiMediaHelper.Upload(userName, type, filename, bytes, out errorMessage); if (errorMessage.IsSuccess && result != null) { hlShowMultiMedia.NavigateUrl = MultiMediaHelper.GetDownloadUrl(AccessToken.Get(userName).access_token, result.MediaId); ltrMessage.Text = "上传多媒体文件成功。"; } else { hlShowMultiMedia.NavigateUrl = string.Format("javascript:alert('上传多媒体文件失败。\r\n{0}');", errorMessage); ltrMessage.Text = string.Format("上传多媒体文件失败。\r\n{0}", errorMessage); } }
public void PlayAudio(WaveStream w, IMessage m) { SocketGuild g = Program.GetGuildFromChannel(m.Channel); ISocketAudioChannel channel = g.VoiceChannels.FirstOrDefault(x => x.Users.Select(y => y.Id).Contains(m.Author.Id)); if (channel != null) { try { channel.DisconnectAsync().Wait(); } catch { } IAudioClient client = channel.ConnectAsync().Result; using (WaveStream naudioStream = WaveFormatConversionStream.CreatePcmStream(w)) MultiMediaHelper.SendAudioAsync(client, naudioStream).Wait(); try { channel.DisconnectAsync().Wait(); } catch { } } else { DiscordNETWrapper.SendText("You are not in an AudioChannel on this server!", m.Channel).Wait(); } w.Dispose(); }
public WaveStream AudioFromVoice(EditNull n, IMessage m, ulong userID = 0, int RecordingTimeInSeconds = 5) { string filePath = $"Commands{Path.DirectorySeparatorChar}Edit{Path.DirectorySeparatorChar}audioFromVoice.bin"; int recordingTime = RecordingTimeInSeconds; MemoryStream memOut = new MemoryStream(); if (recordingTime > 10) { throw new Exception("Thats too long UwU"); } using (MemoryStream mem = new MemoryStream()) { SocketGuild g = Program.GetGuildFromChannel(m.Channel); ISocketAudioChannel channel = g.VoiceChannels.FirstOrDefault(x => x.Users.Select(y => y.Id).Contains(m.Author.Id)); if (channel == null) { throw new Exception("You are not in an AudioChannel on this server!"); } try { channel.DisconnectAsync().Wait(); } catch { } bool doneListening = false; new Action(async() => { try { Thread.CurrentThread.Name = "F**k"; IAudioClient client = await channel.ConnectAsync(); using (WaveStream naudioStream = WaveFormatConversionStream.CreatePcmStream( new StreamMediaFoundationReader( new FileStream($"Commands{Path.DirectorySeparatorChar}Edit{Path.DirectorySeparatorChar}StartListeningSoundEffect.mp3", FileMode.Open)))) await MultiMediaHelper.SendAudioAsync(client, naudioStream); var u = (SocketGuildUser)(await channel.GetUsersAsync().FlattenAsync()).FirstOrDefault(x => userID == 0 ? !x.IsBot : !x.IsBot && x.Id == userID); if (u == null) { throw new Exception("I cant find that user!"); } var streamMeUpScotty = (InputStream)u.AudioStream; var buffer = new byte[4096]; DateTime startListeningTime = DateTime.Now; while (await streamMeUpScotty.ReadAsync(buffer, 0, buffer.Length) > 0 && (DateTime.Now - startListeningTime).TotalSeconds < recordingTime) { mem.Write(buffer, 0, buffer.Length); } try { channel.DisconnectAsync().Wait(); } catch { } mem.Position = 0; using (FileStream f = new FileStream(filePath, FileMode.Create, FileAccess.Write)) mem.CopyTo(f); using (Process P = MultiMediaHelper.CreateFfmpegOut(filePath)) P.StandardOutput.BaseStream.CopyTo(memOut); File.Delete(filePath); } catch { } finally { try { channel.DisconnectAsync().Wait(); } catch { } doneListening = true; } }).Invoke(); while (!doneListening) { Thread.Sleep(100); } memOut.Position = 0; return(WaveFormatConversionStream.CreatePcmStream(new StreamMediaFoundationReader(memOut))); } }
/// <summary> /// 下载临时素材(多媒体文件) /// </summary> /// <param name="userName">公众号</param> /// <param name="mediaId">媒体ID</param> /// <param name="data">返回下载是否成功</param> /// <returns>返回多媒体文件数据;如果下载失败,返回null。</returns> public static byte[] Download(string userName, string mediaId, out ErrorMessage errorMessage) { return(MultiMediaHelper.Download(userName, mediaId, out errorMessage)); }
/// <summary> /// 获取下载临时素材(媒体文件,不包括视频)的链接 /// </summary> /// <param name="token">许可令牌</param> /// <param name="mediaId">媒体id</param> /// <returns>返回下载多媒体文件的链接</returns> public static string GetDownloadUrlOfTemporary(string token, string mediaId) { return(MultiMediaHelper.GetDownloadUrl(token, mediaId)); }
/// <summary> /// 新增临时素材(图文消息) /// </summary> /// <param name="userName">公众号</param> /// <param name="articles">图文消息</param> /// <param name="errorMessage">返回上传是否成功</param> /// <returns>返回上传图文消息的结果;如果上传失败,返回null。</returns> public static MultiMediaUploadResult AddTemporary(string userName, IEnumerable <MultiMediaArticle> articles, out ErrorMessage errorMessage) { return(MultiMediaHelper.Upload(userName, articles, out errorMessage)); }
/// <summary> /// 新增临时素材(多媒体文件) /// </summary> /// <param name="userName">公众号</param> /// <param name="type">媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)</param> /// <param name="fileName">文件名(不包含路径)</param> /// <param name="data">数据</param> /// <param name="errorMessage">返回上传是否成功</param> /// <returns>返回上传多媒体文件的结果;如果上传失败,返回null。</returns> public static MultiMediaUploadResult AddTemporary(string userName, MultiMediaTypeEnum type, string fileName, byte[] data, out ErrorMessage errorMessage) { return(MultiMediaHelper.Upload(userName, type, fileName, data, out errorMessage)); }
/// <summary> /// 新增临时素材(多媒体文件) /// </summary> /// <param name="userName">公众号</param> /// <param name="type">媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)</param> /// <param name="pathName">包含路径的文件名</param> /// <param name="errorMessage">返回上传是否成功</param> /// <returns>返回多媒体上传结果;如果上传失败,返回null。</returns> public static MultiMediaUploadResult AddTemporary(string userName, MultiMediaTypeEnum type, string pathName, out ErrorMessage errorMessage) { return(MultiMediaHelper.Upload(userName, type, pathName, out errorMessage)); }