It's from vōcem /'woːkem/, which gives proto-Romance /'ßokʲɛ/. /o/ before a palatalised consonant evolves into /oj/ (It's often described as the palatal ejecting a yod to the preceding syllable, in the process closing it and stopping an /ew/ diphthong from forming, compare the unpalatalised vœu, from votum). This gives Old French /voɪ̯t͡s/ "voiz", which was borrowed in English as voice after the deaffrication of t͡s.
The same phenomenon produced paix from pacem (/paɪ̯t͡s/ in OF), (il) nuit from nocet (/nyɪ̯t/ in OF), (il) gît from jacet (/d͡ʒit/ from an earlier */d͡ʒjɛjt/), loi from legem (/leɪ̯/ in early OF) and so on.
EDIT: for similar -ōce-/-uce- outcomes: crucem -> croix, nucem -> noix, mūcēre > moisir (after shortening of the pretonic long u)