Source code for zounds.datasets.phatdrumloops

from zounds.soundfile import AudioMetaData
import requests
import re
import urllib.parse


[docs]class PhatDrumLoops(object): """ Produces an iterable of :class:`zounds.soundfile.AudioMetaData` instances for every drum break from http://phatdrumloops.com/beats.php Args: attrs (dict): Extra properties to add to the :class:`AudioMetaData` Examples >>> from zounds import PhatDrumLoops >>> pdl = PhatDrumLoops() >>> iter(pdl).next() {'description': None, 'tags': None, 'uri': <Request [GET]>, 'channels': None, 'licensing': None, 'samplerate': None} See Also: :class:`InternetArchive` :class:`FreeSoundSearch` :class:`zounds.soundfile.AudioMetaData` """ def __init__(self, **attrs): super(PhatDrumLoops, self).__init__() self.attrs = attrs self.attrs.update(web_url='http://www.phatdrumloops.com/beats.php') def __iter__(self): resp = requests.get('http://phatdrumloops.com/beats.php') pattern = re.compile('href="(?P<uri>/audio/wav/[^\.]+\.wav)"') for m in pattern.finditer(resp.content): url = urllib.parse.urljoin('http://phatdrumloops.com', m.groupdict()['uri']) request = requests.Request( method='GET', url=url, headers={'Range': 'bytes=0-'}) yield AudioMetaData(uri=request, **self.attrs)