Not an R-user, so I checked code and played a little bit. The error, you mention, occurs if lts cannot generate time vector (or frequency vector). As you were using AudioMoth naming convention, I suggest to test audiomoth time extraction by print(audiomoth(dir(dir, pattern="[wav]$|[WAV]$"))) if this returns NaN NaN then something in the filename is not correct (not obvious to me from your post) but maybe an additional character? If the times are decoded correctly, then the frequency axis is not generated properly. The code for this generation is freq <- seq(0, f/2-f/wl, length=wl/2)/1000 So, this could mean that sampling frequency f is bad or too low. You should check sampling frequency independently, or specify in lts call. I know you say 48000 Hz, but maybe you typed 48 and thought input is in kHz. Edit: In case of NaN NaN response, you could check what went wrong with decoding the time stamp. I did it by extacted the decoding code from seewave into local script and added some print statement in the function audiomoth <- function(x, # a character vector, not a Wave object tz = "" # a character vector defining a time zone specification, see as.POSIXct(), argument 'tz' ) { ## INPUT if (!is.character(x)) stop("'x' should be of mode character.") ## PREPARE RESULTS options(stringsAsFactors = FALSE) res <- data.frame(year = numeric(0), month = numeric(0), day = numeric(0), hour = numeric(0), min = numeric(0), sec = numeric(0), time = numeric(0)) N <- length(x) ## number of file names ## LOOP for (i in 1:N) { tmp <- x[i] n <- nchar(tmp) ## check if .WAV or .wav file extension <- substr(tmp, start = n-3, stop = n) if(extension != ".wav" & extension != ".WAV"){warning(paste("File '", tmp, "' is not a '.wav' file", sep=""))} else{ if(nchar(tmp)==12) ## hexadecimal format { hex <- unlist(strsplit(tmp, extension)) num <- strtoi(hex, base = 16) time <- as.POSIXct(num, tz=tz, origin = "1970-01-01") ## POSIXct as in songmeter() year <- as.numeric(format(time, "%Y")) month <- as.numeric(format(time, "%m")) day <- as.numeric(format(time, "%d")) hour <- as.numeric(format(time, "%H")) min <- as.numeric(format(time, "%M")) sec <- as.numeric(format(time, "%S")) } else if(nchar(tmp)==19) ## YYYYMMDD_HHMMSS.wav format { print(tmp) year <- substr(tmp, start = 1, stop = 4) month <- substr(tmp, start = 5, stop = 6) day <- substr(tmp, start = 7, stop = 8) hour <- substr(tmp, start = 10, stop = 11) min <- substr(tmp, start = 12, stop = 13) sec <- substr(tmp, start = 14, stop = 15) time <- strptime(paste(year,month,day,hour,min,sec), "%Y%m%d%H%M%S") } res <- rbind(res, data.frame(year, month, day, hour, min, sec, time)) } } return(res) options(stringsAsFactors = TRUE) } You see what lts passes to the decoding routine. Maybe your 'debugging' printout gives an indication. It could be that some (sub) directory remaining, etc.