Создание списка Python в R через сетку

1

Я хотел бы разбить волновой файл с помощью Python через reticulate в R, пример сценария извлечен из Python, Как разбить файл .wav на несколько файлов .wav

 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 

Может кто-нибудь просветить меня о том, как написать [t1:t2] на R?

  • 0
    «Я сделал так же, используя R»: пожалуйста, поделитесь всем кодом, который вы использовали.
  • 0
    конечно @nicola
Теги:
reticulate

1 ответ

3
Лучший ответ

Оператор подмножества 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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню