Time correction in WaveLab 11 broken?

Time correction in WaveLab 11 broken?

Somehow the time‑correction function no longer works. When I start the calculation, it stays at the old value.

But it should be 28 ms more.

More precisely: 1334 samples on 266,728,570.

After the calculation, nothing has changed. In WaveLab 9 it still worked reasonably well.

→ 1334 more

Background … recordings made with different devices whose crystal clocks unfortunately run at different speeds.

It would actually be very helpful if WaveLab offered workflow support for this kind of correction.

At the beginning and end of the recordings there is a click. That’s where you place markers.

One track is the reference track. All other tracks are manually aligned precisely to the beginning or end using these markers.

Then the missing markers will be added to the tracks whose length will be modified so that the program can calculate the time offset.

(A new marker type in an Audio Montage would be needed for this — a marker that is anchored to a specific track, but whose marker line still spans all tracks so you can compare them accurately.)

After that, a function like “Match Lengths” could be executed, and WaveLab would calculate everything automatically within the Audio Montage.

(Or alternatively in a dedicated batch process, where the markers have been set beforehand for each file.)

This is just an initial idea …

Up to now the workflow has been very cumbersome, and as of now it doesn’t work anymore.

1 Like

Tested again … no … it does not

work.

266728570 + 1333 = 266.729.903

If you’re revising the dialog anyway:

It would be extremely helpful… since the files are of different lengths and the markers are in the files.

“StartFile ----- MarkerStart ---- MarkerEnd —EndOfFile”

As a WaveLab user, however, you only set the markers for “MarkerStart ---- MarkerEnd” and can read this out precisely.

However, the files in the recording devices have different lengths. And in the dialog, you only ever refer to the file length.

You would have to calculate all of that yourself. But that’s what the computer is for. And no, I don’t want to cut the files. They have to stay as they are.

The program has all the information and could make it user-friendly, I think. So, enter the “target duration” between two specific markers. The program calculates the rest.

Would that be possible?

Time correction is working in WaveLab 12.0.51, FWIW.

I understand this is not significant to you but i don’t have 11 to try it out.

Thank you for responding!

Have put some hours in it and with the help of … have a solution with ffmpeg and ruberband … With WaveLab I only measure and put all aligned together again.

For Windows in the PowerShell-ISE and with the help of ffmpeg:

==============================================================================

Samplegenaue Driftkorrektur - MULTILINGUAL (Viele Sprachen)

==============================================================================

1. Pfade und Parameter definieren

$str_ffpath = ‘C:\Tools\ffmpeg-master-latest-win64-gpl-shared-2025-11-20\bin’
$str_input  = ‘I:\xxx\2025-10-31_01-Rechts.wav’

$B_ref_Abschnitt        = 240967923
$B_anzupassen_Abschnitt = 240966579

$str_ffmpeg  = Join-Path $str_ffpath ‘ffmpeg.exe’
$str_ffprobe = Join-Path $str_ffpath ‘ffprobe.exe’

2. Hilfsfunktion für Nutzerabfrage

function Get-UserDecision {
param([string]$str_path)
if (Test-Path $str_path) {
$str_filename = Split-Path $str_path -Leaf
$choices = [System.Management.Automation.Host.ChoiceDescription
] @(
New-Object System.Management.Automation.Host.ChoiceDescription ‘&Ja/Yes/Oui/Sì/Sí/Sim/Tak/Ano/Igen/Ja/Evet/Да/Так’, ‘Overwrite.’
New-Object System.Management.Automation.Host.ChoiceDescription ‘&Nein/No/Non/No/No/Não/Nie/Ne/Nem/Nee/Hayır/Нет/Ні’, ‘Skip.’
)
$decision = $Host.UI.PromptForChoice(‘File exists’, “Overwrite ‘$str_filename’?”, $choices, 1)
return ($decision -eq 0)
}
return $true
}

3. Informations-Display (Vergleich der Algorithmen - JETZT VOLLSTÄNDIG)

Clear-Host
Write-Host ‘====================================================================’ -ForegroundColor Cyan
Write-Host ’   ALGORITHM COMPARISON / GLOBAL SUPPORT’ -ForegroundColor Cyan
Write-Host ‘====================================================================’ -ForegroundColor Cyan
Write-Host ‘1. RUBBERBAND (Best Quality / Pitch maintained):’
Write-Host ’   DE: Beste Qualität. | EN: Best quality. | FR: Meilleure qualité.’
Write-Host ’   IT: Migliore qualità. | ES: Mejor calidad. | PT: Melhor qualidade.’
Write-Host ’   PL: Najlepsza jakość. | CZ: Nejlepší kvalita. | HU: Legjobb minőség.’
Write-Host ’   NL: Beste kwaliteit. | TR: En iyi kalite. | UA: Найкраща якість.’
Write-Host ’   RU: Лучшее качество. | JP: 最高音質。| ZH: 最佳音质。’
Write-Host ‘2. ATEMPO (Native FFmpeg Solution):’
Write-Host ’   DE: Native Lösung. | EN: Native solution. | FR: Solution native.’
Write-Host ’   IT: Soluzione nativa. | ES: Solución nativa. | PT: Solução nativa.’
Write-Host ’   PL: Rozwiązanie natywne. | CZ: Nativní řešení. | HU: Natív megoldás.’
Write-Host ’   NL: Native oplossing. | TR: Yerel çözüm. | UA: Нативне рішення.’
Write-Host ’   RU: Нативное решение. | JP: ネイティブ。| ZH: 原生方案。’
Write-Host ‘3. ASETRATE (Math-Perfect / Pitch changes):’
Write-Host ’   DE: Mathe-perfekt. | EN: Math-perfect. | FR: Mathématique parfait.’
Write-Host ’   IT: Matematica perfetta. | ES: Matemático perfecto. | PT: Matemática perfeita.’
Write-Host ’   PL: Matematycznie idealne. | CZ: Matematicky dokonalé. | HU: Matek-tökéletes.’
Write-Host ’   NL: Wiskundig perfect. | TR: Matematiksel mükemmel. | UA: Математично ідеально.’
Write-Host ’   RU: Идеально математически. | JP: 数学的に完璧。| ZH: 数学完美。’
Write-Host ‘====================================================================’ -ForegroundColor Cyan

4. Metadaten-Analyse

Write-Host ‘Analyse…’
$sr = [int](& $str_ffprobe -v error -select_streams a:0 -show_entries stream=sample_rate -of csv=p=0 $str_input)

BERECHNUNG: Da B_anzupassen < B_ref, muss Faktor < 1 sein, um zu dehnen.

$double_faktor = [double]($B_anzupassen_Abschnitt / $B_ref_Abschnitt)
$str_faktor = $double_faktor.ToString(‘0.####################’, [System.Globalization.CultureInfo]::InvariantCulture)
$str_rate_neu = ([double]($sr * $double_faktor)).ToString(‘0.######’, [System.Globalization.CultureInfo]::InvariantCulture)

$str_dir  = Split-Path $str_input
$str_base = [System.IO.Path]::GetFileNameWithoutExtension($str_input)
$str_ext  = [System.IO.Path]::GetExtension($str_input)

$filterList = & $str_ffmpeg -filters 2>&1
$hasRubberband = $filterList -match ‘rubberband’

Write-Host “Samplerate: $sr Hz”
Write-Host “Stretch-Faktor: $str_faktor”

5. Verarbeitung

$methods = @(‘rubberband’, ‘atempo’, ‘asetrate’)

foreach ($str_method in $methods) {
if ($str_method -eq ‘rubberband’ -and -not $hasRubberband) {
continue
}

switch ($str_method) {
    'rubberband' { $str_filter = "rubberband=tempo=${str_faktor}:pitch=1" }
    'atempo'     { $str_filter = "atempo=${str_faktor}" }
    'asetrate'   { $str_filter = "asetrate=r=${str_rate_neu},aresample=osr=${sr}:precision=28" }
}

# Dateiname mit dem ursprünglichen präzisen Faktor
$str_output = Join-Path $str_dir ($str_base + '_' + $str_faktor + '_' + $str_method + $str_ext)

Write-Host ''
Write-Host "Method: $str_method" -ForegroundColor White
if (Get-UserDecision $str_output) {
    Write-Host 'Processing...' -NoNewline
    $args_ffmpeg = @('-y', '-v', 'error', '-i', $str_input, '-filter:a', $str_filter, '-acodec', 'pcm_f32le', $str_output)
    & $str_ffmpeg @args_ffmpeg
    
    if ($LASTEXITCODE -eq 0) {
        Write-Host ' SUCCESS / УСПІХ / SUKCES / BAŞARILI / 成功' -ForegroundColor Green
    } else {
        Write-Host ' ERROR / ПОМИЛКА / BŁĄD / HATA / エラー' -ForegroundColor Red
    }
}

}

6. Abschluss-Statistik

$double_diff_ms = [Math]::Abs(($B_ref_Abschnitt / $sr) - ($B_anzupassen_Abschnitt / $sr)) * 1000
$str_diff = $double_diff_ms.ToString(‘0.###’)

Write-Host ‘’
Write-Host ‘===================================================’ -ForegroundColor Cyan
Write-Host ’   STATISTICS / STATYSTYKA / ISTATISTIK / СТАТИСТИКА’ -ForegroundColor Cyan
Write-Host ‘===================================================’ -ForegroundColor Cyan
Write-Host “DE: Anpassung um $str_diff ms.”
Write-Host “EN: Adjusted by $str_diff ms.”
Write-Host “PL: Korekta o $str_diff ms.”
Write-Host “UA: Коригування на $str_diff мс.”
Write-Host “TR: $str_diff ms ayarlandı.”
Write-Host “NL: Aanpassing met $str_diff ms.”
Write-Host ‘===================================================’ -ForegroundColor Cyan
Write-Host ‘’
Write-Host ‘Done! / Gotowe! / Kész! / Klaar! / Bitti! / Готово!’

What would help if one can copy with Strg + C the red marked sampleValue. But I get other values and have to type every number by myself. (I try to set the focus in the red marked field and press CTRL + C and copy the result in the editor-window … the result is in the edit window picture.)

This is for the variables:
$B_ref_Abschnitt = 240967923
$B_anzupassen_Abschnitt = 240966579

And in Nuendo … as an unexperienced user myself in Cubase and Nuendo … I had no idea what to do and how to handle the situation. … and was overwhelmed and afraid of pressing the wrong things.

When you do such a little time stretching, you have of course to select time accuracy and not pitch accuracy. I don’t read German well, but according to your picture, it seems that you did not select the correct option.

Yes… but I want both — time and pitch correction at the highest quality. With the script, there is now a way to achieve this, so I do have a working solution using the Rubber Band algorithm.

I’ve read that WaveLab 9 used different algorithms, and that they were quietly replaced in later versions. But why were they changed?

Best regards, and thank you for replying.

If there is an option, it’s because you can’t have both at the same time. An audio algorithm always has to make some compromise. Especially one which is complex as time correction is.