通过网状在 R 中创建 python 列表
Creating python list in R via reticulate
我想在 R 中通过 reticulate
使用 python 拆分一个 wave 文件,示例脚本是从
中提取的
from pydub import AudioSegment
t1 = t1 * 1000 #Works in milliseconds
t2 = t2 * 1000
newAudio = AudioSegment.from_wav("oldSong.wav")
newAudio = newAudio[t1:t2]
newAudio.export('newSong.wav', format="wav")
我使用 R 做了类似的事情,如下所示:
library(dplyr)
library(tidyr)
library(reticulate)
use_python('/usr/bin/python3',required = TRUE)
py_config()
pydub.py <- import('pydub')
time.start <- as.numeric(data.df.st02[loop,'time_start'])*1000
time.end <- as.numeric(data.df.st02[loop,'time_end'])*1000
new.audio <- pydub.py$AudioSegment$from_wav('142533.wav')
但返回以下错误:
> new.audio[1:2]
Error in py_call_impl(callable, dots$args, dots$keywords) :
TypeError: can only concatenate list (not "int") to list
任何人都可以告诉我如何在 R 中编写 [t1:t2]
吗?
python 子集运算符是 __getitem__
方法的包装,:
是创建 slice
对象的包装。您必须导入 builtins
模块。试试这个:
require(reticulate)
use_python('/usr/bin/python3',required = TRUE)
pydub.py <- import('pydub', convert=FALSE)
pybuiltins <- import_builtins(convert=FALSE)
new.audio <- pydub.py$AudioSegment$from_wav('142533.wav')
#important: time.start and time.end must be integer
time.start <- as.integer(1*1000)
time.end <- as.integer(2*1000)
#create a slice object
sl<-pybuiltins$slice(time.start,time.end)
new.audio_split<-new.audio$`__getitem__`(sl)
new.audio_split
#<pydub.audio_segment.AudioSegment>
我想在 R 中通过 reticulate
使用 python 拆分一个 wave 文件,示例脚本是从
from pydub import AudioSegment
t1 = t1 * 1000 #Works in milliseconds
t2 = t2 * 1000
newAudio = AudioSegment.from_wav("oldSong.wav")
newAudio = newAudio[t1:t2]
newAudio.export('newSong.wav', format="wav")
我使用 R 做了类似的事情,如下所示:
library(dplyr)
library(tidyr)
library(reticulate)
use_python('/usr/bin/python3',required = TRUE)
py_config()
pydub.py <- import('pydub')
time.start <- as.numeric(data.df.st02[loop,'time_start'])*1000
time.end <- as.numeric(data.df.st02[loop,'time_end'])*1000
new.audio <- pydub.py$AudioSegment$from_wav('142533.wav')
但返回以下错误:
> new.audio[1:2]
Error in py_call_impl(callable, dots$args, dots$keywords) :
TypeError: can only concatenate list (not "int") to list
任何人都可以告诉我如何在 R 中编写 [t1:t2]
吗?
python 子集运算符是 __getitem__
方法的包装,:
是创建 slice
对象的包装。您必须导入 builtins
模块。试试这个:
require(reticulate)
use_python('/usr/bin/python3',required = TRUE)
pydub.py <- import('pydub', convert=FALSE)
pybuiltins <- import_builtins(convert=FALSE)
new.audio <- pydub.py$AudioSegment$from_wav('142533.wav')
#important: time.start and time.end must be integer
time.start <- as.integer(1*1000)
time.end <- as.integer(2*1000)
#create a slice object
sl<-pybuiltins$slice(time.start,time.end)
new.audio_split<-new.audio$`__getitem__`(sl)
new.audio_split
#<pydub.audio_segment.AudioSegment>