Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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,
         )
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
 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()
Ejemplo n.º 5
0
 def stop(self):
     solfege_c_midi.sndctl_seq_reset()
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 def stop(self):
     solfege_c_midi.sndctl_seq_reset()
Ejemplo n.º 8
0
 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