okay, once again. Response box is completely unrelated to any talking.
actor.Talk is a function which takes some parameters. For now you supplied first parameter, which means that it gets the string.
actor.Talk("Hello"); is identical to
var a = "Hello";
actor.Talk(a);
or to
var Responses;
Responses[0] = "Hello";
Selected = 0;
actor.Talk(Responses[Selected]);
See, I didn't even mentioned any response box at all.
It's still on the variable basis. The only thing which response box does to you is, that it returns a number which indicates the selected option. So although you supply the string for showing it in the response box, you never get it back. That's why you have to implement array to store this information so you can then use it for actor to actually speak that line.
For this we have an array Responses which contains those lines, which you supply again outside of the response dialog.
So no. ResponseBox doesn't care about voiceovers but it also doesn't care about text lines. Maybe you got confused by the variable name Responses, but you can use other name as well as it's only variable.
While single variable contain one piece of information eg. var a="Hello"; array variable contains ... array of informations:
var a;
a[0] = "Hello";
a[1] = "Derman";
Arrays always start from 0 so first item is on a[0];
you can index them directly Game.Msg(a[0]); or indirectly through variable:
var f = 0;
Game.Msg(a[f]);
which is the same thing.
If you need to *pair* text lines with voiceovers without supplying the string.tab file, you have to create another array, which would contain the voiceover filenames. You have to pair them
through the array index:
Responses[0] = "Hello";
Voiceovers[0] = "path to hello ogg file";
so when your response box returns number 0, you point to the right pair - Responses[0], Voiceovers[0]
Hope that cleared it up a bit.