View Issue Details

IDProjectCategoryView StatusLast Update
0009288ardourbugspublic2023-04-01 15:22
Reporterjoachim Assigned Tox42  
Status resolvedResolutionfixed 
PlatformArchOSLinuxOS Version(any)
Product Version7.3 
Summary0009288: Pitch bend automation curves outputs incorrect values.
DescriptionHi! I'm new here :-)

I've been making electronic music with synthesizers since 1997.
I've been using Linux as a server platform for many years and I've fallen in love with the four essential freedoms of libre software. Inspired by the work of unfa and his community, I decided to go all in on using FOSS for all my computing needs, including music production.
It is my understanding that MIDI editing is something Ardour can improve on.

I was making Cardinal patches for a MIDI file exported from a Propellerheads Reason project I started a few years ago with the intent of re-creating and finishing the entire project from scratch based on that MIDI file exclusively with libre software. The exported MIDI file has a few lead melody tracks with Pitch Bend automation and I noticed the lead voices sounded detuned whenever a change in pitch bend was played back from the automation lane.

As a sanity check, I set up a simple session with Pitch Bend automation, using two instances of Cardinal and two instances Surge XT set up to generate a simple sawtooth tone at 261,53 Hz. The sawtooth waveform is chosen because it's rich harmonic content makes it very easy to hear any relative offsets and changes in pitch. I set up identical conditions in Cardinal and Surge XT to have two references to compare against incase one of them was behaving differently.

In this test-session, attached below, I learned two things:

1. The Pitch Bend output values does not correspond to the values in the automation curve after they deviate from the default value of 8192. A pitch bend value of zero in the automation lane outputs a value of 273, and the maximum value of 16383 in the automation lane outputs a value of 16110.
When a pitch bend automation control point is to 8192 after a change in value, the actual output value is offset, depending on the previous direction of change. A volt meter fed by the V/Oct output on the Host MIDI module in Cardinal confirmes this.

2. The fader for the Pitch bend updates according to the automation curve on playback for Surge XT, but it remains static for Cardinal.
Steps To ReproduceTLDR; Have a look at the attached Ardour session archive. There are comments written in each track that provide additional details on what's happening.

The following steps assumes you already have Cardinal and Surge XT installed and available and ready to go in Ardour's plugin manager.

1.1. Invoke the "Add Track/Bus/VCA" dialog box in Ardour.
1.2. Select MIDI Track as the type, and in the Configuration section, set the number of tracks to "2" and select Cardinal as the instrument.
1.3. Name one track as "Reference" and the other track as "Pitch Bend"
1.4. Open up the GUI for the Cardinal instance in the "Pitch Bend" track.
1.5. Right Click any empty space in Cardinal to bring up the module browser.
1.6. Select "Amalganated Harmonics" in the "Brand" drop-down list and "Visual" in the tags drop-down list and click and hold the left mouse button to select and place the "Polyprobe" module. Release the mouse button somewhere that makes it easy to see the module without having to scroll the viewport for convenience. I suggest you place it to the left of the "Host MIDI" module.
1.7. Right-click the "Host MIDI" module and set the Pitch bend range to "12".
1.8. Right-click the "V/Oct" output port on the right hand side (white background) to create a new patch cable. Choose any color you want, it does not bear any significance in this case. Left-click and drag a new cable to the "A" or "B" input of the Polyprobe module. The Polyprobe module should now read 0,000000 volts.
1.9. Shift your focus over to the "VCO"-module and left-click and drag the patch cable connected to the "SINE"-output over to the "SAW"-output.
1.10. Go to the "ADSR"-module and set "SUS" to 100% and, optionally, set "ATK" and "RES" to taste, or just leave them at their default values if you don't care.
1.11. In the "Host Audio" module and right-click the large knob over the "Level"-label and type in "-12" and hit Enter to set it to -12 dB.

2.1 Now, open the GUI for the "Reference"-instance of Cardinal.
2.2 Remove the patch cable going between the "V/Oct" output on the Host MIDI module and the "V/Oct" input on the VCO module by left clicking and dragging the cable away from one of the patch points. When you release the mouse button away enough from the chosen patch point, the cable will dissapear.
2.3 Go to the "ADSR" module and set "SUS" to 100% and, optionally, change "ATK" and "REL" to taste, or leave them at their default values if you don't care to do so.
2.4 Set the "Level" knob on the Host Audio module to -12 dB, in the same way you did in the "Pitch Bend" instance.
2.5 You can now close the window for this "Reference"-instance of Cardinal.

3.1 Create two MIDI regions, one for each track, make them about 4 bars long.
3.2 Paint a long C#4 note in both regions, make sure the two notes in each of the MIDI regions overlap so that you'll hear both the reference and pitch bend instances of Cardinal play simultaneously.
3.3 Add automation points for the pitch bend of the "Pitch Bend" Cardinal instance.
3.4 Hit play to hear why I'm reporting this as a severe bug.
3.5 (Optional) Change the tempo if desired.
3.6 (Bonus) Open and read the session metadata and the track comments for a bit more information.

In summary, the expected behaviour is:
1. Notes should continue playing while editing automation points.
2. When the Pitch Bend curve is returned to a value of 8192, pitch should also return to a zero offset of the note.
3. The value range of the pitch bend output should extend all the way from 0 to 16383, in accordance with the automation curve values.

But, the actual behaviour is:
1. A note off event is triggered whenever changes to the automation curve is done during playback, which is annoying when doing automation edits on longer notes.
2. Actual Pitch Bend output values does not correspond to the values in the automation curve. A pitch bend value of 0 in the automation lane outputs a value of 273, and the maximum value of 16383 in the automation curve outputs a value of 16110.
3. When the pitch bend automation curve is set to return to 8192, the actual output value is offset, depending on the direction of change for the automation curve.
4. The automation level fader does not update when controlling a Cardinal Synth (tested with LV2 and VST3)
Additional InformationI compiled Ardour from git and ended up with rev 7.3-143-gc771eccd0e to see if this bug has been adressed already, but I saw the same behaviour there as in the current "Nerve Net" (rev 7.3) release

I have not yet checked if this automation curve behaviour is the same for other types of control messages. Incorrect pitch bend behaviour is the most noticable and critical issue for me.

I chose to use the LV2 versions of Cardinal and Surge XT because of the relativly simple nature of this test scenario. I saw no need to test with the VST3 versions as there is only one channel of output needed per track to hear what's going on.
Tagsautomation, connect, MIDI control



2023-03-25 20:14



2023-04-01 15:22

administrator   ~0027524

Fixed in 7.3-170-g4ba1ccc09b

Issue History

Date Modified Username Field Change
2023-03-25 20:14 joachim New Issue
2023-03-25 20:14 joachim Tag Attached: automation
2023-03-25 20:14 joachim Tag Attached: MIDI control
2023-03-25 20:14 joachim File Added: MIDI Pitch Bend automation bug_2023-03-25_205625.ardour-session-archive
2023-03-31 22:17 joachim Tag Attached: connect
2023-04-01 10:44 joachim Tag Detached: connect
2023-04-01 10:44 joachim Tag Attached: connect
2023-04-01 15:22 x42 Assigned To => x42
2023-04-01 15:22 x42 Status new => resolved
2023-04-01 15:22 x42 Resolution open => fixed
2023-04-01 15:22 x42 Note Added: 0027524