gpt4 book ai didi

c# - 我如何演奏萨克斯管?

转载 作者:行者123 更新时间:2023-11-30 16:52:28 24 4
gpt4 key购买 nike

如下所述,算法的结果是 here


我有一组笔记:{ 60, 63, 67, 70, 73, 77, 73, 70, 67, 63 } 和一个 NOTE_LENGTH 变量

我首先将第一个信号发送到带有标准 MIDI 次中音萨克斯管的 MidiOutput 设备。

当最后一个音符播放 NOTE_LENGTH 毫秒的 2/3 时,我发送下一个音符。当一个音符播放 NOTE_LENGTH 时,我会停止它。

音符以 Midi NoteOn 开始,以 Midi NoteOff 停止


在生成的音频中很容易找到音符的开始位置。它不流畅,而真正的萨克斯管是。如何实现平稳过渡,如 this video ?我不是音乐家,所以我不知道技术上的区别是什么。


更新

源代码,C# + NAudio.dll 1.3.8.0(注意,在以后的dll版本中可能无法运行)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using NAudio.Midi;

namespace Sax
{
class Program
{
static void Main(string[] args)
{
MidiOut midi_out = new MidiOut(0);
midi_out.Volume = 65535;
midi_out.Send(MidiMessage.ChangePatch(67, 0).RawData);
midi_out.Send(MidiMessage.ChangePatch(67, 1).RawData);
int iteration = 0;
int[] notes = new int[] { 60, 63, 67, 70, 73, 77, 73, 70, 67, 63 };
//int[] notes = new int[] { 60, 61, 62, 63, 64, 65, 64, 63, 62, 61 };
const int NOTE_LENGTH = 729;
while (true)
{
midi_out.Send(MidiMessage.StartNote(notes[iteration % notes.Length], 127, iteration % 2).RawData);
Thread.Sleep(1 * NOTE_LENGTH / 3);
if (iteration != 0)
midi_out.Send(MidiMessage.StopNote(notes[(iteration - 1) % notes.Length], 127, (iteration - 1) % 2).RawData);
Thread.Sleep(1 * NOTE_LENGTH / 3);
midi_out.Send(MidiMessage.StartNote(notes[(iteration + 1) % notes.Length], 127, (iteration + 1) % 2).RawData);
Thread.Sleep(NOTE_LENGTH / 3);
midi_out.Send(MidiMessage.StopNote(notes[iteration % notes.Length], 127, iteration % 2).RawData);
Thread.Sleep(NOTE_LENGTH/3);
++iteration;
}
}
}
}

最佳答案

使用 midi 弯音。参见 this SO answer有关一些示例的说明。

为了获得正确的效果,您可能需要在第一个音符结束之前快速弯音,弯音在第二个音符音高处结束,与第二个音符开始时完全相同。

您可能还想研究弯音插值以获得最真实的声音,即,而不是线性音高弯音,您可能会通过慢进快出类型的插值(或副-反之亦然)。我不确定 NAudio 是否支持插值,或者您是否必须自己实现。

关于c# - 我如何演奏萨克斯管?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32548644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com