如何在LibVLCSharp中控制音频音高偏移?

问题描述 投票:1回答:1

我目前正在使用c#开发一个karaoke系统,并使用LibVLCSharp。谁能帮我改变音频音高转换器吗?

\ 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的函数。

谢谢。

c# audio libvlc pitch-shifting libvlcsharp
1个回答
0
投票

下面是我的示例代码,以尝试VLC音调偏移。有人知道如何在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) ???
        }

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.