src/emu/sound/cdda.c
| r9157 | r9158 | |
| 290 | 290 | get_audio_data(info, bufL, bufR, remaining); |
| 291 | 291 | } |
| 292 | 292 | |
| 293 | /*------------------------------------------------- |
| 294 | cdda_set_volume - sets CD-DA volume level |
| 295 | for both speakers, used for fade in/out effects |
| 296 | -------------------------------------------------*/ |
| 293 | 297 | |
| 298 | void cdda_set_volume(running_device *device,int volume) |
| 299 | { |
| 300 | cdda_info *cdda = get_safe_token(device); |
| 294 | 301 | |
| 302 | stream_set_output_gain(cdda->stream,0,volume / 100.0); |
| 303 | stream_set_output_gain(cdda->stream,1,volume / 100.0); |
| 304 | } |
| 305 | |
| 295 | 306 | /************************************************************************** |
| 296 | 307 | * Generic get_info |
| 297 | 308 | **************************************************************************/ |
src/mess/machine/pce.c
| r9157 | r9158 | |
| 151 | 151 | const cdrom_toc* toc; |
| 152 | 152 | emu_timer *data_timer; |
| 153 | 153 | emu_timer *adpcm_dma_timer; |
| 154 | |
| 155 | emu_timer *cdda_fadeout_timer; |
| 156 | double cdda_volume; |
| 157 | // emu_timer *cdda_fadeout_timer; |
| 154 | 158 | } pce_cd; |
| 155 | 159 | |
| 156 | 160 | /* MSM5205 ADPCM decoder definition */ |
| r9157 | r9158 | |
| 176 | 180 | static void pce_cd_init( running_machine *machine ); |
| 177 | 181 | static void pce_cd_set_irq_line( running_machine *machine, int num, int state ); |
| 178 | 182 | static TIMER_CALLBACK( pce_cd_adpcm_dma_timer_callback ); |
| 183 | static TIMER_CALLBACK( pce_cd_cdda_fadeout_callback ); |
| 179 | 184 | |
| 180 | 185 | |
| 181 | 186 | static WRITE8_HANDLER( pce_sf2_banking_w ) |
| r9157 | r9158 | |
| 1239 | 1244 | timer_adjust_oneshot(pce_cd.data_timer, attotime_never, 0); |
| 1240 | 1245 | pce_cd.adpcm_dma_timer = timer_alloc(machine, pce_cd_adpcm_dma_timer_callback , NULL); |
| 1241 | 1246 | timer_adjust_oneshot(pce_cd.adpcm_dma_timer, attotime_never, 0); |
| 1247 | pce_cd.cdda_fadeout_timer = timer_alloc(machine, pce_cd_cdda_fadeout_callback , NULL); |
| 1248 | timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, attotime_never, 0); |
| 1242 | 1249 | } |
| 1243 | 1250 | |
| 1244 | 1251 | WRITE8_HANDLER( pce_cd_bram_w ) |
| r9157 | r9158 | |
| 1263 | 1270 | } |
| 1264 | 1271 | } |
| 1265 | 1272 | |
| 1273 | static TIMER_CALLBACK( pce_cd_cdda_fadeout_callback ) |
| 1274 | { |
| 1275 | pce_cd.cdda_volume-= 1.0; //TODO: step here could be wrong |
| 1276 | cdda_set_volume(machine->device("cdda"), pce_cd.cdda_volume); |
| 1277 | |
| 1278 | if(pce_cd.cdda_volume <= 0) |
| 1279 | timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, attotime_never, NULL); |
| 1280 | else |
| 1281 | timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, ATTOTIME_IN_USEC(param), param); |
| 1282 | } |
| 1283 | |
| 1266 | 1284 | WRITE8_HANDLER( pce_cd_intf_w ) |
| 1267 | 1285 | { |
| 1268 | 1286 | pce_cd_update(space->machine); |
| r9157 | r9158 | |
| 1383 | 1401 | msm5205_change_clock_w(space->machine->device("msm5205"), (PCE_CD_CLOCK / 6) / pce_cd.adpcm_clock_divider); |
| 1384 | 1402 | break; |
| 1385 | 1403 | case 0x0F: /* ADPCM and CD audio fade timer */ |
| 1404 | printf("%02x FADE\n",data); |
| 1405 | |
| 1406 | if(data == 0x0c) //CD-DA short step (2500 msecs) fade out |
| 1407 | { |
| 1408 | pce_cd.cdda_volume = 100.0; |
| 1409 | timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, ATTOTIME_IN_USEC(2500), 2500); |
| 1410 | } |
| 1411 | |
| 1412 | if(data == 0x00) //CD-DA fade in (TODO) |
| 1413 | { |
| 1414 | pce_cd.cdda_volume = 100.0; |
| 1415 | cdda_set_volume(space->machine->device("cdda"), 100.0); |
| 1416 | } |
| 1386 | 1417 | break; |
| 1387 | 1418 | default: |
| 1388 | 1419 | return; |
| 1389 | 1420 | } |
| 1390 | | pce_cd.regs[offset] = data; |
| 1421 | pce_cd.regs[offset & 0xf] = data; |
| 1391 | 1422 | pce_cd_update(space->machine); |
| 1392 | 1423 | } |
| 1393 | 1424 | |