Как управлять тональным сдвигом звука в LibVLCSharp? - PullRequest
1 голос
/ 27 февраля 2020

В настоящее время я разрабатываю караоке-систему с c# и использую LibVLCSharp. Может кто-нибудь, пожалуйста, помогите мне, как изменить аудио Pitch Shift с ним?

В каталоге \ libvlc \ win-x86 \ plugins \ audio_filter есть модуль libscaletempo_plugin и libscaletempo_pitch_plugin. Как я могу применить модули звукового фильтра в LibVLCSharp?

Попробовал следующее, но это не работает.

Core.Initialize();
LibVLC libVlc = new LibVLC();
mp1 = new MediaPlayer(libVlc);
mp1.Hwnd = pictureBox1.Handle;
Media media = new Media(libVlc, @"c:\testsong.mp4", FromType.FromPath);
media.AddOption("--audio-filter=scaletempo_pitch");
media.AddOption("--pitch-shift=5");
mp1.Play(media);

и попробовал это, это не работает.

...
...
media.AddOption(":audio-filter=scaletempo_pitch");
media.AddOption(":pitch-shift=5");
mp1.Play(media);

и пробовал, тоже не работает.

Core.Initialize();
string[] options = { "--audio-filter=scaletempo_pitch", "--pitch-shift=5" };
LibVLC libVlc = new LibVLC(options);
mp1 = new MediaPlayer(libVlc);
mp1.Hwnd = pictureBox1.Handle;
Media media = new Media(libVlc, @"c:\testsong.mp4", FromType.FromPath);
mp1.Play(media);

Я искал, но не могу найти решение применить аудиофильтр со смещением высоты тона. Что мне нужно, так это функция, которую можно вызывать для передачи значения смещения высоты звука от -12 до 12, когда воспроизводится медиа.

Заранее спасибо.

1 Ответ

0 голосов
/ 12 марта 2020

Ниже приведен мой пример кода, чтобы попробовать сдвиг высоты тона VL C. Кто-нибудь знает, как использовать PlayCallback() функцию в SetAudioCallbacks? Любой образец или ссылка для C#?

using LibVLCSharp.Shared;
using LibVLCSharp.Shared.Structures;
using static LibVLCSharp.Shared.MediaPlayer;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {

        private MediaPlayer mp1;
        private LibVLC libVlc;
        private string filePath = @"C:\Users\user\Desktop\testsong.mp4";

        public Form1()
        {
            if (!DesignMode) Core.Initialize();
            InitializeComponent();
        }

        private void TrackVolume_Scroll(object sender, EventArgs e)
        {
            mp1.Volume = trackVolume.Value;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string[] options = { "--audio-filter=scaletempo_pitch" };
            libVlc = new LibVLC(options);
            mp1 = new MediaPlayer(libVlc);
            mp1.SetAudioCallbacks(playCallBack, null, null, null, null);
            mp1.Hwnd = pictureBox1.Handle;
        }

        private void BtnPlay_Click(object sender, EventArgs e)
        {
            Media media = new Media(libVlc, filePath, FromType.FromPath);
            mp1.Play(media);
            mp1.Volume = trackVolume.Value;
        }


        private void playCallBack(IntPtr data, IntPtr samples, uint count, long pts)
        {
            // anyone know how to code in playCallBack to control scaletempo_pitch (-12.0 to 12.0) ???
        }

    }
}
...