R, 141 bytes
function(x)intToUtf8(matrix(match(el(strsplit(gsub("D","",x),"B"))[-1],paste0(rep(c("",y<-c("I","A","O")),e=4),c(y,"U")))-1,,2,T)%*%16^(1:0))
Using some modular magic is likely to be shorter, but I'm pretty happy with this as a naive first pass.