The for() loop seems a tad slow, maybe someone else can pitch in with an optimization.
local rs = renoise.song()
local original = rs.selected_sample.sample_buffer
local my_range = original.selection_range
local num_frames = my_range[2] - my_range[1] + 1
local new_inst = rs:insert_instrument_at(#rs.instruments + 1)
new_inst.samples[1].name = "My Test"
new_inst.samples[1].sample_buffer:create_sample_data(
original.sample_rate, original.bit_depth, original.number_of_channels, num_frames
)
new_inst.samples[1].sample_buffer:prepare_sample_data_changes()
for channel = 1, original.number_of_channels do
for frame = my_range[1], my_range[2] do
local value = original:sample_data(channel, frame)
new_inst.samples[1].sample_buffer:set_sample_data(channel, frame - my_range[1] + 1, value)
end
end
new_inst.samples[1].sample_buffer:finalize_sample_data_changes()