4FFXJSSGWKJL5DMY7PU4WOLZ3UXYN4WVEU7QCB2MR3WZYPEE4QRAC Lat float64 `json:"lat" jsonschema:"Latitude for night filtering (required with Night)"`Lng float64 `json:"lng" jsonschema:"Longitude for night filtering (required with Night)"`Timezone string `json:"timezone" jsonschema:"IANA timezone ID for filename timestamps (e.g. Pacific/Auckland). Required for non-AudioMoth recorders when using --night"`
Day bool `json:"day" jsonschema:"Only clip recordings made during solar day (requires Lat and Lng)"`Lat float64 `json:"lat" jsonschema:"Latitude for day/night filtering (required with Night or Day)"`Lng float64 `json:"lng" jsonschema:"Longitude for day/night filtering (required with Night or Day)"`Timezone string `json:"timezone" jsonschema:"IANA timezone ID for filename timestamps (e.g. Pacific/Auckland). Required for non-AudioMoth recorders when using --night or --day"`
clips, skipped, errs := processFile(dataPath, input.Output, input.Prefix, input.Filter, speciesName, callType, input.Certainty, imgSize, input.Color, input.WavOnly, input.Night, input.Lat, input.Lng, input.Timezone)
clips, skipped, errs := processFile(dataPath, input.Output, input.Prefix, input.Filter, speciesName, callType, input.Certainty, imgSize, input.Color, input.WavOnly, input.Night, input.Day, input.Lat, input.Lng, input.Timezone)
clips, skipped, errs := processFile(dataPath, input.Output, input.Prefix, input.Filter, speciesName, callType, input.Certainty, imgSize, input.Color, input.WavOnly, input.Night, input.Lat, input.Lng, input.Timezone)
clips, skipped, errs := processFile(dataPath, input.Output, input.Prefix, input.Filter, speciesName, callType, input.Certainty, imgSize, input.Color, input.WavOnly, input.Night, input.Day, input.Lat, input.Lng, input.Timezone)
// processFile processes a single .data file and returns generated clips, night-skipped count, and errorsfunc processFile(dataPath, outputDir, prefix, filter, speciesName, callType string, certainty, imgSize int, color, wavOnly, night bool, lat, lng float64, timezone string) ([]string, int, []string) {
// processFile processes a single .data file and returns generated clips, time-filter-skipped count, and errorsfunc processFile(dataPath, outputDir, prefix, filter, speciesName, callType string, certainty, imgSize int, color, wavOnly, night, day bool, lat, lng float64, timezone string) ([]string, int, []string) {
// Night filter: check WAV header only (cheaper than reading full audio).// Skip daytime recordings before paying the cost of ReadWAVSamples.if night {
// Day/night filter: check WAV header only (cheaper than reading full audio).// Skip recordings in the wrong time-of-day before paying the cost of ReadWAVSamples.if night || day {
fmt.Fprintf(os.Stderr, " --lat <float> Latitude in decimal degrees (required with --night)\n")fmt.Fprintf(os.Stderr, " --lng <float> Longitude in decimal degrees (required with --night)\n")
fmt.Fprintf(os.Stderr, " --day Only clip recordings made during solar day (requires --lat and --lng)\n")fmt.Fprintf(os.Stderr, " --lat <float> Latitude in decimal degrees (required with --night or --day)\n")fmt.Fprintf(os.Stderr, " --lng <float> Longitude in decimal degrees (required with --night or --day)\n")
if night && (!latSet || !lngSet) {fmt.Fprintf(os.Stderr, "Error: --night requires both --lat and --lng\n\n")
if night && day {fmt.Fprintf(os.Stderr, "Error: --night and --day are mutually exclusive\n\n")printClipUsage()os.Exit(1)}if (night || day) && (!latSet || !lngSet) {fmt.Fprintf(os.Stderr, "Error: --night/--day requires both --lat and --lng\n\n")