Source code for spotify.audio

from __future__ import unicode_literals

import collections

from spotify import utils


__all__ = ['AudioBufferStats', 'AudioFormat', 'Bitrate', 'SampleType']


[docs]class AudioBufferStats( collections.namedtuple('AudioBufferStats', ['samples', 'stutter']) ): """Stats about the application's audio buffers.""" pass
[docs]@utils.make_enum('SP_BITRATE_', 'BITRATE_') class Bitrate(utils.IntEnum): pass
[docs]@utils.make_enum('SP_SAMPLETYPE_') class SampleType(utils.IntEnum): pass
[docs]class AudioFormat(object): """A Spotify audio format object. You'll never need to create an instance of this class yourself, but you'll get :class:`AudioFormat` objects as the ``audio_format`` argument to the :attr:`~spotify.SessionCallbacks.music_delivery` callback. """ def __init__(self, sp_audioformat): self._sp_audioformat = sp_audioformat @property def sample_type(self): """The :class:`SampleType`, currently always :attr:`SampleType.INT16_NATIVE_ENDIAN`.""" return SampleType(self._sp_audioformat.sample_type) @property def sample_rate(self): """The sample rate, typically 44100 Hz.""" return self._sp_audioformat.sample_rate @property def channels(self): """The number of audio channels, typically 2.""" return self._sp_audioformat.channels
[docs] def frame_size(self): """The byte size of a single frame of this format.""" if self.sample_type == SampleType.INT16_NATIVE_ENDIAN: return 2 * self.channels else: raise ValueError('Unknown sample type: %d', self.sample_type)