Beispiel #1
0
class LilypondNotePlayer:

    def __init__(self, beatsPerMinute, beatUnit, tuningSystem, note, samplingRate = 44100):
        self.note = note
        self.volume = 1 # Full colume for starters
        self.samplingRate = samplingRate
        # How many samples will I have to play?
        self.totalSamples = int(beatUnit * samplingRate * 60 / (note.duration * beatsPerMinute))
        if self.note.times != None:
            self.totalSamples /= self.note.times
        if note.dots:
            self.totalSamples = int(self.totalSamples * ( 2.0 - pow(2, - note.dots)))
        self.wave = Wave(tuningSystem.getFrequency(note), samplingRate)
        self.counter = 0
        self.volumeRate = None
        self.tied = False
        
    def getNextValue(self):
        self.counter+=1

        # Do we have to lower the volume?
        if not self.tied and self.totalSamples - self.counter <= self.samplingRate * 0.05: # 5 hundredths of a second
            # Have to calculate a volume rate
            if self.totalSamples <= self.counter:
                self.volumeRate = 0
            else:
                self.volumeRate = math.exp(math.log(0.01) / (self.totalSamples - self.counter))
            sys.stderr.flush()
        if self.volumeRate != None:
            self.wave.setVolume(self.volume * self.volumeRate)

        return self.wave.getNextValue()
    
    def setTied(self, value):
        self.tied = value
    
    def isTied(self):
        return self.tied

    def isFinished(self):
        return self.counter >= self.totalSamples
    
    def setNewDuration(self, totalSamples):
        self.counter = 0
        self.totalSamples = totalSamples
    
    def getAngle(self):
        return self.wave.getAngle()
    
    def setAngle(self, angle):
        self.wave.setAngle(angle)
    
    def getFrequency(self):
        return self.wave.getFrequency()
Beispiel #2
0
class TrackPlayer:
    """
    Will play a note that's provided to it
    """

    def __init__(self, system, samplingRate = 44100):
        self.system = system
        self.wave = None
        self.samplingRate = samplingRate

        self.samplesToMute = None

    def play(self, musicalNote):
        if musicalNote == None:
            self.mute()
        else:
            self.wave = Wave(self.system.getFrequency(musicalNote), self.samplingRate)
            self.samplesToMute = None

    def mute(self, samplesToMute = None):
        if samplesToMute == None:
            # mute inmediately
            self.volume=0
            if self.wave != None:
                self.wave.setVolume(0)
        else:
            self.samplesToMute = samplesToMute
            # What is the rate for each volume decrease to apply?
            self.volume=1
            self.decrementRate = math.exp(math.log(0.01) / samplesToMute)

    def getNextValue(self):
        if self.wave == None:
            return 0
        if self.samplesToMute != None:
            self.samplesToMute -= 1
            # The volume?
            self.volume*=self.decrementRate
            self.wave.setVolume(self.volume)
        return self.wave.getNextValue()

    def getFrequency(self):
        if self.wave == None:
            return None
        else:
            return self.wave.getFrequency()
Beispiel #3
0
class TrackPlayer:
    """
    Will play a note that's provided to it
    """
    def __init__(self, system, samplingRate=44100):
        self.system = system
        self.wave = None
        self.samplingRate = samplingRate

        self.samplesToMute = None

    def play(self, musicalNote):
        if musicalNote == None:
            self.mute()
        else:
            self.wave = Wave(self.system.getFrequency(musicalNote),
                             self.samplingRate)
            self.samplesToMute = None

    def mute(self, samplesToMute=None):
        if samplesToMute == None:
            # mute inmediately
            self.volume = 0
            if self.wave != None:
                self.wave.setVolume(0)
        else:
            self.samplesToMute = samplesToMute
            # What is the rate for each volume decrease to apply?
            self.volume = 1
            self.decrementRate = math.exp(math.log(0.01) / samplesToMute)

    def getNextValue(self):
        if self.wave == None:
            return 0
        if self.samplesToMute != None:
            self.samplesToMute -= 1
            # The volume?
            self.volume *= self.decrementRate
            self.wave.setVolume(self.volume)
        return self.wave.getNextValue()

    def getFrequency(self):
        if self.wave == None:
            return None
        else:
            return self.wave.getFrequency()
Beispiel #4
0
        self.pcm = pcm
        self.data = data

    def run(self):
        self.pcm.write(self.data)

if __name__ == "__main__":
    import math
    import sys
    argc = len(sys.argv)
    leftChannel = None
    rightChannel = None
    if argc == 1:
        print "Have to provide either a single frequency to play or a frequency for each channel (left channel first)"
        sys.exit(1)
    elif argc == 2:
        # Provided a single frequency for both channels
        leftChannel = Wave(float(sys.argv[1]), 11025)
    else:
        leftChannel = Wave(float(sys.argv[1]), 11025)
        rightChannel = Wave(float(sys.argv[2]), 11025)
    
    player = WavePlayer(11025)
    while True:
        leftHeight = leftChannel.getNextValue()
        if rightChannel == None:
            rightHeight = leftHeight
        else:
            rightHeight = rightChannel.getNextValue()
        player.play(leftHeight, rightHeight)
Beispiel #5
0
    def __init__(self, pcm, data):
        Thread.__init__(self)
        self.pcm = pcm
        self.data = data

    def run(self):
        self.pcm.write(self.data)

if __name__ == "__main__":
    import math
    import sys
    argc = len(sys.argv)
    channel = None
    frequencies = list()
    if argc == 1:
        print "Have to provide frequencies to play during a second each"
        sys.exit(1)
    for i in range(1, argc):
        frequencies.append(float(sys.argv[i]))
    
    player = WavePlayer(11025)
    channel = Wave(frequencies[0], 11025)
    for i in frequencies:
        sys.stderr.write("Playing frequency " + str(i) + "\n")
        sys.stderr.flush()
        channel.setFrequency(i)
        for j in range(0, 11025):
            height = channel.getNextValue()
            player.play(height)
Beispiel #6
0
class LilypondNotePlayer:
    def __init__(self,
                 beatsPerMinute,
                 beatUnit,
                 tuningSystem,
                 note,
                 samplingRate=44100):
        self.note = note
        self.volume = 1  # Full colume for starters
        self.samplingRate = samplingRate
        # How many samples will I have to play?
        self.totalSamples = int(beatUnit * samplingRate * 60 /
                                (note.duration * beatsPerMinute))
        if self.note.times != None:
            self.totalSamples /= self.note.times
        if note.dots:
            self.totalSamples = int(self.totalSamples *
                                    (2.0 - pow(2, -note.dots)))
        self.wave = Wave(tuningSystem.getFrequency(note), samplingRate)
        self.counter = 0
        self.volumeRate = None
        self.tied = False

    def getNextValue(self):
        self.counter += 1

        # Do we have to lower the volume?
        if not self.tied and self.totalSamples - self.counter <= self.samplingRate * 0.05:  # 5 hundredths of a second
            # Have to calculate a volume rate
            if self.totalSamples <= self.counter:
                self.volumeRate = 0
            else:
                self.volumeRate = math.exp(
                    math.log(0.01) / (self.totalSamples - self.counter))
            sys.stderr.flush()
        if self.volumeRate != None:
            self.wave.setVolume(self.volume * self.volumeRate)

        return self.wave.getNextValue()

    def setTied(self, value):
        self.tied = value

    def isTied(self):
        return self.tied

    def isFinished(self):
        return self.counter >= self.totalSamples

    def setNewDuration(self, totalSamples):
        self.counter = 0
        self.totalSamples = totalSamples

    def getAngle(self):
        return self.wave.getAngle()

    def setAngle(self, angle):
        self.wave.setAngle(angle)

    def getFrequency(self):
        return self.wave.getFrequency()
Beispiel #7
0
    def __init__(self, pcm, data):
        Thread.__init__(self)
        self.pcm = pcm
        self.data = data

    def run(self):
        self.pcm.write(self.data)


if __name__ == "__main__":
    import math
    import sys
    argc = len(sys.argv)
    channel = None
    frequencies = list()
    if argc == 1:
        print "Have to provide frequencies to play during a second each"
        sys.exit(1)
    for i in range(1, argc):
        frequencies.append(float(sys.argv[i]))

    player = WavePlayer(11025)
    channel = Wave(frequencies[0], 11025)
    for i in frequencies:
        sys.stderr.write("Playing frequency " + str(i) + "\n")
        sys.stderr.flush()
        channel.setFrequency(i)
        for j in range(0, 11025):
            height = channel.getNextValue()
            player.play(height)
Beispiel #8
0
        self.data = data

    def run(self):
        self.pcm.write(self.data)


if __name__ == "__main__":
    import math
    import sys
    argc = len(sys.argv)
    leftChannel = None
    rightChannel = None
    if argc == 1:
        print "Have to provide either a single frequency to play or a frequency for each channel (left channel first)"
        sys.exit(1)
    elif argc == 2:
        # Provided a single frequency for both channels
        leftChannel = Wave(float(sys.argv[1]), 11025)
    else:
        leftChannel = Wave(float(sys.argv[1]), 11025)
        rightChannel = Wave(float(sys.argv[2]), 11025)

    player = WavePlayer(11025)
    while True:
        leftHeight = leftChannel.getNextValue()
        if rightChannel == None:
            rightHeight = leftHeight
        else:
            rightHeight = rightChannel.getNextValue()
        player.play(leftHeight, rightHeight)