r-更有效的声音文件子采样方式



如果已经被问到这个问题,请提前道歉,因为我是R的新手。

有没有什么方法可以让我的代码更有效地对声音文件进行二次采样?我有来自9个站点的148个小时的录音,每个站点我每5分钟对12个1分钟的片段进行二次采样。我现在做这件事的方式很有效,但非常耗时。有没有办法提高代码的效率?

###hour 3###
setwd("C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson")
hod3a<-readWave("20200820_020000.wav", from = 0, to = 1, units="minutes")
hod3b<-readWave("20200820_020000.wav", from = 5, to = 6, units="minutes")
hod3c<-readWave("20200820_020000.wav", from = 10, to = 11, units="minutes")
hod3d<-readWave("20200820_020000.wav", from = 15, to = 16, units="minutes")
hod3e<-readWave("20200820_020000.wav", from = 20, to = 21, units="minutes")
hod3f<-readWave("20200820_020000.wav", from = 25, to = 26, units="minutes")
hod3g<-readWave("20200820_020000.wav", from = 31, to = 32, units="minutes")
hod3h<-readWave("20200820_020000.wav", from = 35, to = 36, units="minutes")
hod3i<-readWave("20200820_020000.wav", from = 40, to = 41, units="minutes")
hod3j<-readWave("20200820_020000.wav", from = 45, to = 46, units="minutes")
hod3k<-readWave("20200820_020000.wav", from = 50, to = 51, units="minutes")
hod3l<-readWave("20200820_020000.wav", from = 55, to = 56, units="minutes")
setwd("C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (3)")
writeWave(hod3a, filename="hod3a.wav",extensible=FALSE)
writeWave(hod3b, filename="hod3b.wav",extensible=FALSE)
writeWave(hod3c, filename="hod3c.wav",extensible=FALSE)
writeWave(hod3d, filename="hod3d.wav",extensible=FALSE)
writeWave(hod3e, filename="hod3e.wav",extensible=FALSE)
writeWave(hod3f, filename="hod3f.wav",extensible=FALSE)
writeWave(hod3g, filename="hod3g.wav",extensible=FALSE)
writeWave(hod3h, filename="hod3h.wav",extensible=FALSE)
writeWave(hod3i, filename="hod3i.wav",extensible=FALSE)
writeWave(hod3j, filename="hod3j.wav",extensible=FALSE)
writeWave(hod3k, filename="hod3k.wav",extensible=FALSE)
writeWave(hod3l, filename="hod3l.wav",extensible=FALSE)
setwd("C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (3)")
multiple_sounds(directory = "C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (3)", resultfile = "ndsi_resultS2.csv", soundindex = "ndsi", no_cores = "-2")
multiple_sounds(directory = "C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (3)", resultfile = "adi_results.csv", soundindex = "acoustic_diversity", no_cores = "-2")
multiple_sounds(directory = "C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (3)", resultfile = "aei_results.csv", soundindex = "acoustic_evenness", no_cores = "-2")
multiple_sounds(directory = "C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (3)", resultfile = "aci_results.csv", soundindex = "acoustic_complexity", no_cores = "-2")
multiple_sounds(directory = "C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (3)", resultfile = "H_results.csv", soundindex = "H", no_cores = "-2")
###hour 4###
setwd("C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson")
hod4a<-readWave("20200820_030000.wav", from = 0, to = 1, units="minutes")
hod4b<-readWave("20200820_030000.wav", from = 5, to = 6, units="minutes")
hod4c<-readWave("20200820_030000.wav", from = 10, to = 11, units="minutes")
hod4d<-readWave("20200820_030000.wav", from = 15, to = 16, units="minutes")
hod4e<-readWave("20200820_030000.wav", from = 20, to = 21, units="minutes")
hod4f<-readWave("20200820_030000.wav", from = 25, to = 26, units="minutes")
hod4g<-readWave("20200820_030000.wav", from = 31, to = 32, units="minutes")
hod4h<-readWave("20200820_030000.wav", from = 35, to = 36, units="minutes")
hod4i<-readWave("20200820_030000.wav", from = 40, to = 41, units="minutes")
hod4j<-readWave("20200820_030000.wav", from = 45, to = 46, units="minutes")
hod4k<-readWave("20200820_030000.wav", from = 50, to = 51, units="minutes")
hod4l<-readWave("20200820_030000.wav", from = 55, to = 56, units="minutes")

setwd("C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (4)")
writeWave(hod4a, filename="hod4a.wav",extensible=FALSE)
writeWave(hod4b, filename="hod4b.wav",extensible=FALSE)
writeWave(hod4c, filename="hod4c.wav",extensible=FALSE)
writeWave(hod4d, filename="hod4d.wav",extensible=FALSE)
writeWave(hod4e, filename="hod4e.wav",extensible=FALSE)
writeWave(hod4f, filename="hod4f.wav",extensible=FALSE)
writeWave(hod4g, filename="hod4g.wav",extensible=FALSE)
writeWave(hod4h, filename="hod4h.wav",extensible=FALSE)
writeWave(hod4i, filename="hod4i.wav",extensible=FALSE)
writeWave(hod4j, filename="hod4j.wav",extensible=FALSE)
writeWave(hod4k, filename="hod4k.wav",extensible=FALSE)
writeWave(hod4k, filename="hod4l.wav",extensible=FALSE)
setwd("C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (4)")
multiple_sounds(directory = "C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (4)", resultfile = "ndsi_resultS2.csv", soundindex = "ndsi", no_cores = "-2")
multiple_sounds(directory = "C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (4)", resultfile = "adi_results.csv", soundindex = "acoustic_diversity", no_cores = "-2")
multiple_sounds(directory = "C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (4)", resultfile = "aei_results.csv", soundindex = "acoustic_evenness", no_cores = "-2")
multiple_sounds(directory = "C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (4)", resultfile = "aci_results.csv", soundindex = "acoustic_complexity", no_cores = "-2")
multiple_sounds(directory = "C:/Users/Cex/Desktop/R Studio/Audiomoth Files/Rural/Hodkinson/hour - Copy (4)", resultfile = "H_results.csv", soundindex = "H", no_cores = "-2")

我现在必须每小时检查一次代码,并手动更改小时数,这需要花费大量时间。我希望我已经正确地传达了这一点,任何帮助都将不胜感激。

我们可以创建两个seq事件,并用Map对其进行循环,用指定fromto为循环值的readWave读取数据,并将其存储在list

readLst <- Map(function(i, j) 
readWave("20200820_020000.wav", from = i, to = j,
units = "minutes"), seq(0, 55, by = 5), seq(1,  56, by = 5))

类似于写入文件

lapply(seq_along(readLst), function(i)
writeWave(readLst[[i]], 
filename= paste0("hod3" letters[i],  ".wav"), extensible=FALSE))

最新更新