Пример #1
0
        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)));
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
        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));
            }
        }
Пример #4
0
    /// <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);
        }
    }
Пример #5
0
        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();
        }
Пример #6
0
        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)));
            }
        }
Пример #7
0
 /// <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));
 }
Пример #8
0
 /// <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));
 }
Пример #9
0
 /// <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));
 }
Пример #10
0
 /// <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));
 }
Пример #11
0
 /// <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));
 }