def open_device(self): # the app will crash if I rmmod awe_awe solfege_c_midi.cvar.seqfd = os.open(self.m_device, os.O_WRONLY, 0) if not solfege_c_midi.sndctl_seq_reset(): # we cannot use self.close() because that function will try # to call sndctl_seq_reset() os.close(solfege_c_midi.cvar.seqfd) solfege_c_midi.cvar.seqfd = -1 raise SyscallException( "While trying to open the device %s\nioctl(seqfd, SNDCTL_SEQ_RESET) failed" % self.m_device, solfege_c_midi.cvar.errno) i = solfege_c_midi.sndctl_seq_nrsynths() if i == -1: self.close() raise SyscallException( "While trying to open the device %s\nioctl(seqfd, SNDCTL_SEQ_NRSYNTHS, &n) failed" % self.m_device, solfege_c_midi.cvar.errno) if self.m_devnum >= i: if i == 0: self.close() raise SeqNoSynthsException(self.m_device) else: self.m_devnum = i - 1 self.m_num_voices = solfege_c_midi.get_synth_nr_voices(self.m_devnum) if self.m_num_voices == -1: self.close() raise SyscallException( "While trying to open the device %s\nioctl(seqfd, SNDCTL_SYNTH_INFO, &si) failed" % self.m_device, solfege_c_midi.cvar.errno)
def open_device(self): # the app will crash if I rmmod awe_awe solfege_c_midi.cvar.seqfd = os.open(self.m_device, os.O_WRONLY, 0) if not solfege_c_midi.sndctl_seq_reset(): # we cannot use self.close() because that function will try # to call sndctl_seq_reset() os.close(solfege_c_midi.cvar.seqfd) solfege_c_midi.cvar.seqfd = -1 raise SyscallException( "While trying to open the device %s\nioctl(seqfd, SNDCTL_SEQ_RESET) failed" % self.m_device, solfege_c_midi.cvar.errno, ) i = solfege_c_midi.sndctl_seq_nrsynths() if i == -1: self.close() raise SyscallException( "While trying to open the device %s\nioctl(seqfd, SNDCTL_SEQ_NRSYNTHS, &n) failed" % self.m_device, solfege_c_midi.cvar.errno, ) if self.m_devnum >= i: if i == 0: self.close() raise SeqNoSynthsException(self.m_device) else: self.m_devnum = i - 1 self.m_num_voices = solfege_c_midi.get_synth_nr_voices(self.m_devnum) if self.m_num_voices == -1: self.close() raise SyscallException( "While trying to open the device %s\nioctl(seqfd, SNDCTL_SYNTH_INFO, &si) failed" % self.m_device, solfege_c_midi.cvar.errno, )
def play_midieventstream(self, midieventstream): solfege_c_midi.sndctl_seq_reset() self.reset() solfege_c_midi.seq_start_timer() for e in midieventstream: if e[0] == midieventstream.TEMPO: self.__tempo = (e[1], e[2]) elif e[0] == midieventstream.NOTE_ON: channel, note, vel = e[1:4] voice = self.alloc_voice(channel, note) if voice is not None: # FIXME ugly hack for percussion. This will break if # we play polyphonic music with very many voices if channel == 9: # voice == 31: voice = 9 solfege_c_midi.seq_start_note(self.m_devnum, voice, note, vel) elif e[0] == midieventstream.NOTE_OFF: channel, note, vel = e[1:4] voice = self.free_voice(channel, note) if voice is not None: # FIXME, see 10 lines up if channel == 9: # voice == 31: voice = 9 solfege_c_midi.seq_stop_note(self.m_devnum, voice, note, vel) elif e[0] == midieventstream.NOTELEN_TIME: # 96 is a const, also used in soundcard.initialize that # I don't understand. solfege_c_midi.seq_delta_time( int( int(96 * e[1]) * 60.0 * self.__tempo[1] / self.__tempo[0])) elif e[0] == midieventstream.SET_PATCH: self.set_patch(e[1], e[2]) elif e[0] == midieventstream.BENDER: logging.debug("FIXME: DevSequencerSynth.BENDER") #solfege_d_midi.seq_bender(self.m_devnum, e[1], e[2]) elif e[0] == midieventstream.VOLUME: logging.debug( "oss_sequencer: seq_set_volume for /dev/sequencer not tested, so it is commented out." ) #m.seq_set_volume(self.m_devnum, e[1], e[2]) else: raise Exception("oss_sequencer: play track error") solfege_c_midi.seqbuf_dump()
def play_midieventstream(self, midieventstream): solfege_c_midi.sndctl_seq_reset() self.reset() solfege_c_midi.seq_start_timer() for e in midieventstream: if e[0] == midieventstream.TEMPO: self.__tempo = (e[1], e[2]) elif e[0] == midieventstream.NOTE_ON: channel, note, vel = e[1:4] voice = self.alloc_voice(channel, note) if voice is not None: # FIXME ugly hack for percussion. This will break if # we play polyphonic music with very many voices if channel == 9: # voice == 31: voice = 9 solfege_c_midi.seq_start_note(self.m_devnum, voice, note, vel) elif e[0] == midieventstream.NOTE_OFF: channel, note, vel = e[1:4] voice = self.free_voice(channel, note) if voice is not None: # FIXME, see 10 lines up if channel == 9: # voice == 31: voice = 9 solfege_c_midi.seq_stop_note(self.m_devnum, voice, note, vel) elif e[0] == midieventstream.NOTELEN_TIME: # 96 is a const, also used in soundcard.initialize that # I don't understand. solfege_c_midi.seq_delta_time(int(int(96 * e[1]) * 60.0 * self.__tempo[1] / self.__tempo[0])) elif e[0] == midieventstream.SET_PATCH: self.set_patch(e[1], e[2]) elif e[0] == midieventstream.BENDER: logging.debug("FIXME: DevSequencerSynth.BENDER") #solfege_d_midi.seq_bender(self.m_devnum, e[1], e[2]) elif e[0] == midieventstream.VOLUME: logging.debug("oss_sequencer: seq_set_volume for /dev/sequencer not tested, so it is commented out.") #m.seq_set_volume(self.m_devnum, e[1], e[2]) else: raise Exception("oss_sequencer: play track error") solfege_c_midi.seqbuf_dump()
def stop(self): solfege_c_midi.sndctl_seq_reset()
def close(self): if solfege_c_midi.cvar.seqfd != -1: solfege_c_midi.sndctl_seq_reset() os.close(solfege_c_midi.cvar.seqfd) solfege_c_midi.cvar.seqfd = -1
def stop(self): solfege_c_midi.sndctl_seq_reset()
def close(self): if solfege_c_midi.cvar.seqfd != -1: solfege_c_midi.sndctl_seq_reset() os.close(solfege_c_midi.cvar.seqfd) solfege_c_midi.cvar.seqfd = -1