OpenTTD Source 20260206-master-g4d4e37dbf1
win32_m.cpp File Reference

Music playback for Windows. More...

#include "../stdafx.h"
#include "../string_func.h"
#include "win32_m.h"
#include <windows.h>
#include <mmsystem.h>
#include "../os/windows/win32.h"
#include "../debug.h"
#include "midifile.hpp"
#include "midi.h"
#include "../base_media_base.h"
#include "../base_media_music.h"
#include <mutex>
#include "../safeguards.h"

Go to the source code of this file.

Data Structures

struct  PlaybackSegment

Functions

static uint8_t ScaleVolume (uint8_t original, uint8_t scale)
void CALLBACK MidiOutProc (HMIDIOUT hmo, UINT wMsg, DWORD_PTR, DWORD_PTR dwParam1, DWORD_PTR)
static void TransmitChannelMsg (uint8_t status, uint8_t p1, uint8_t p2=0)
static void TransmitSysex (const uint8_t *&msg_start, size_t &remaining)
static void TransmitStandardSysex (MidiSysexMessage msg)
void CALLBACK TimerCallback (UINT uTimerID, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR)
 Realtime MIDI playback service routine.

Variables

struct { 
   UINT   time_period 
 obtained timer precision value More...
   HMIDIOUT   midi_out 
 handle to open midiOut More...
   UINT   timer_id 
 ID of active multimedia timer. More...
   std::mutex   lock 
 synchronization for playback status fields More...
   bool   playing 
 flag indicating that playback is active More...
   int   do_start 
 flag for starting playback of next_file at next opportunity More...
   bool   do_stop 
 flag for stopping playback at next opportunity More...
   uint8_t   current_volume 
 current effective volume setting More...
   uint8_t   new_volume 
 volume setting to change to More...
   MidiFile   current_file 
 file currently being played from More...
   PlaybackSegment   current_segment 
 segment info for current playback More...
   DWORD   playback_start_time 
 timestamp current file began playback More...
   size_t   current_block 
 next block index to send More...
   MidiFile   next_file 
 upcoming file to play More...
   PlaybackSegment   next_segment 
 segment info for upcoming file More...
   std::array< uint8_t, 16 >   channel_volumes 
 last seen volume controller values in raw data More...
_midi
static FMusicDriver_Win32 iFMusicDriver_Win32

Detailed Description

Music playback for Windows.

Definition in file win32_m.cpp.

Function Documentation

◆ MidiOutProc()

void CALLBACK MidiOutProc ( HMIDIOUT hmo,
UINT wMsg,
DWORD_PTR ,
DWORD_PTR dwParam1,
DWORD_PTR  )

Definition at line 62 of file win32_m.cpp.

◆ ScaleVolume()

uint8_t ScaleVolume ( uint8_t original,
uint8_t scale )
static

Definition at line 56 of file win32_m.cpp.

◆ TimerCallback()

void CALLBACK TimerCallback ( UINT uTimerID,
UINT ,
DWORD_PTR ,
DWORD_PTR ,
DWORD_PTR  )

Realtime MIDI playback service routine.

This is called by the multimedia timer.

Definition at line 109 of file win32_m.cpp.

References _midi, MidiFile::DataBlock::data, Debug, MidiFile::DataBlock::realtime, ResetGM, RolandSetReverb, and MidiFile::DataBlock::ticktime.

Referenced by MusicDriver_Win32::PlaySong().

◆ TransmitChannelMsg()

void TransmitChannelMsg ( uint8_t status,
uint8_t p1,
uint8_t p2 = 0 )
static

Definition at line 71 of file win32_m.cpp.

◆ TransmitStandardSysex()

void TransmitStandardSysex ( MidiSysexMessage msg)
static

Definition at line 98 of file win32_m.cpp.

◆ TransmitSysex()

void TransmitSysex ( const uint8_t *& msg_start,
size_t & remaining )
static

Definition at line 76 of file win32_m.cpp.

Variable Documentation

◆ channel_volumes

std::array<uint8_t, 16> channel_volumes

last seen volume controller values in raw data

Definition at line 50 of file win32_m.cpp.

◆ current_block

size_t current_block

next block index to send

Definition at line 46 of file win32_m.cpp.

◆ current_file

MidiFile current_file

file currently being played from

Definition at line 43 of file win32_m.cpp.

◆ current_segment

PlaybackSegment current_segment

segment info for current playback

Definition at line 44 of file win32_m.cpp.

◆ current_volume

uint8_t current_volume

current effective volume setting

Definition at line 40 of file win32_m.cpp.

◆ do_start

int do_start

flag for starting playback of next_file at next opportunity

Definition at line 38 of file win32_m.cpp.

◆ do_stop

bool do_stop

flag for stopping playback at next opportunity

Definition at line 39 of file win32_m.cpp.

◆ iFMusicDriver_Win32

FMusicDriver_Win32 iFMusicDriver_Win32
static

Definition at line 53 of file win32_m.cpp.

◆ lock

◆ midi_out

HMIDIOUT midi_out

handle to open midiOut

Definition at line 33 of file win32_m.cpp.

◆ new_volume

uint8_t new_volume

volume setting to change to

Definition at line 41 of file win32_m.cpp.

◆ next_file

MidiFile next_file

upcoming file to play

Definition at line 47 of file win32_m.cpp.

◆ next_segment

PlaybackSegment next_segment

segment info for upcoming file

Definition at line 48 of file win32_m.cpp.

◆ playback_start_time

DWORD playback_start_time

timestamp current file began playback

Definition at line 45 of file win32_m.cpp.

◆ playing

bool playing

flag indicating that playback is active

Definition at line 37 of file win32_m.cpp.

◆ time_period

UINT time_period

obtained timer precision value

Definition at line 32 of file win32_m.cpp.

◆ timer_id

UINT timer_id

ID of active multimedia timer.

Definition at line 34 of file win32_m.cpp.