Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 8 additions & 14 deletions app.go
Original file line number Diff line number Diff line change
Expand Up @@ -847,7 +847,6 @@ func (a *App) StandardizeAudioToWav(inputPath string, outputPath string, sourceC
// If another goroutine is already working on this, just wait for its result.
log.Printf("StandardizeAudioToWav: Another task is already handling %s. Waiting.", filepath.Base(outputPath))
err := <-actualTracker.(*ProgressTracker).Done
log.Printf("StandardizeAudioToWav: Wait finished for %s.", filepath.Base(outputPath))
return err
}

Expand Down Expand Up @@ -907,13 +906,13 @@ func (a *App) StandardizeAudioToWav(inputPath string, outputPath string, sourceC
streamFound := false
ffmpegStream := 0
remaining := sourceChannel.ChannelIndex // 0-based index from Python
streamIndexInAudioStreams := 0
//streamIndexInAudioStreams := 0

for i, aStream := range audioStreams {
if remaining < aStream.Channels {
ffmpegStream = len(videoStreams) + i // absolute stream index in ffmpeg
streamFound = true
streamIndexInAudioStreams = i // save the index for later
//streamIndexInAudioStreams = i // save the index for later
break
}
remaining -= aStream.Channels
Expand All @@ -926,23 +925,19 @@ func (a *App) StandardizeAudioToWav(inputPath string, outputPath string, sourceC
args := []string{"-y", "-i", inputPath}

if sourceChannel != nil {
aStream := audioStreams[streamIndexInAudioStreams]
log.Printf("Mixing all %d channels from stream %d of '%s'", aStream.Channels, ffmpegStream, filepath.Base(inputPath))
//aStream := audioStreams[streamIndexInAudioStreams]
log.Printf("Extracting channel %d from stream %d of '%s'",
sourceChannel.ChannelIndex, ffmpegStream, filepath.Base(inputPath))

panExpr := ""
for ch := 0; ch < aStream.Channels; ch++ {
if ch > 0 {
panExpr += "+"
}
panExpr += fmt.Sprintf("%g*c%d", 1.0/float64(aStream.Channels), ch)
}
panExpr := fmt.Sprintf("c0=c%d", sourceChannel.ChannelIndex)

afArg := fmt.Sprintf("pan=mono|c0=%s", panExpr)
afArg := fmt.Sprintf("pan=mono|%s", panExpr)
args = append(args,
"-map", fmt.Sprintf("0:%d", ffmpegStream),
"-af", afArg,
"-vn",
)

} else {
log.Printf("Standardizing '%s' to mono", filepath.Base(inputPath))
args = append(args,
Expand Down Expand Up @@ -1088,7 +1083,6 @@ func (a *App) ProcessProjectAudio(projectData ProjectDataPayload) error {
for _, item := range projectData.Timeline.AudioTrackItems {
// Case 1: This is a simple clip (not a compound clip).
if item.Type == "" {
// Use a guard clause to skip if there's no work to do.
if item.ProcessedFileName == nil || *item.ProcessedFileName == "" {
continue
}
Expand Down
70 changes: 35 additions & 35 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,58 +9,58 @@
"preview": "vite preview"
},
"dependencies": {
"@radix-ui/react-alert-dialog": "^1.1.14",
"@radix-ui/react-checkbox": "^1.3.2",
"@radix-ui/react-context-menu": "^2.2.15",
"@radix-ui/react-dialog": "^1.1.14",
"@radix-ui/react-dropdown-menu": "^2.1.15",
"@radix-ui/react-label": "^2.1.7",
"@radix-ui/react-progress": "^1.1.7",
"@radix-ui/react-scroll-area": "^1.2.9",
"@radix-ui/react-slider": "^1.3.5",
"@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-switch": "^1.2.5",
"@radix-ui/react-tooltip": "^1.2.7",
"@tailwindcss/vite": "^4.1.11",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-checkbox": "^1.3.3",
"@radix-ui/react-context-menu": "^2.2.16",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-label": "^2.1.8",
"@radix-ui/react-progress": "^1.1.8",
"@radix-ui/react-scroll-area": "^1.2.10",
"@radix-ui/react-slider": "^1.3.6",
"@radix-ui/react-slot": "^1.2.4",
"@radix-ui/react-switch": "^1.2.6",
"@radix-ui/react-tooltip": "^1.2.8",
"@tailwindcss/vite": "^4.1.17",
"@tanstack/react-virtual": "^3.13.12",
"@zag-js/react": "^1.21.0",
"@zag-js/slider": "^1.21.0",
"@zag-js/react": "^1.30.0",
"@zag-js/slider": "^1.30.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"fast-deep-equal": "^3.1.3",
"lucide-react": "^0.509.0",
"markdown-to-jsx": "^7.7.12",
"lucide-react": "^0.544.0",
"markdown-to-jsx": "^7.7.17",
"next-themes": "^0.4.6",
"path": "^0.12.7",
"react": "^19.1.1",
"react": "^19.2.0",
"react-compiler-runtime": "19.1.0-rc.2",
"react-dom": "^19.1.1",
"react-dom": "^19.2.0",
"react-scan": "^0.3.6",
"smpte-timecode": "^1.3.6",
"sonner": "^2.0.6",
"tailwind-merge": "^3.3.1",
"tailwindcss": "^4.1.11",
"sonner": "^2.0.7",
"tailwind-merge": "^3.4.0",
"tailwindcss": "^4.1.17",
"url": "^0.11.4",
"use-debounce": "^10.0.5",
"use-sync-external-store": "^1.5.0",
"use-debounce": "^10.0.6",
"use-sync-external-store": "^1.6.0",
"vaul": "^1.1.2",
"waveform-data": "^4.5.2",
"wavesurfer.js": "^7.10.1",
"zustand": "^5.0.7"
"wavesurfer.js": "^7.11.1",
"zustand": "^5.0.8"
},
"devDependencies": {
"@babel/preset-react": "^7.27.1",
"@babel/preset-typescript": "^7.27.1",
"@tailwindcss/typography": "^0.5.16",
"@types/react": "^19.1.9",
"@types/react-dom": "^19.1.7",
"@babel/preset-react": "^7.28.5",
"@babel/preset-typescript": "^7.28.5",
"@tailwindcss/typography": "^0.5.19",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
"@types/smpte-timecode": "^1.2.5",
"@vitejs/plugin-react": "^4.7.0",
"babel-plugin-react-compiler": "19.1.0-rc.2",
"eslint": "^9.32.0",
"eslint": "^9.39.1",
"eslint-plugin-react-hooks": "6.0.0-rc1",
"tw-animate-css": "^1.3.6",
"typescript": "^5.8.3",
"vite": "^6.3.5"
"tw-animate-css": "^1.4.0",
"typescript": "^5.9.3",
"vite": "^6.4.1"
}
}
2 changes: 1 addition & 1 deletion frontend/package.json.md5
Original file line number Diff line number Diff line change
@@ -1 +1 @@
b3e198cc1a81fd10ae62260a3230c1c0
3188cfb510fc1d67cc3879a78a47e173
Loading