We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[Freesound] Downloads are broken
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting a broken site
- [X] I've verified that I'm running yt-dlp version **2023.01.06** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [ ] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

_No response_

### Provide a description that is worded well enough to be understood

Freesound.org downloads are broken due to how the preview URLs sometimes appear in the HTML: `<meta property="og:audio" content="https://freesound.orghttps://cdn.freesound.org/..." />`

I have made a fix for this and will be opening a PR shortly.

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
yt-dlp -vU https://www.freesound.org/people/miklovan/sounds/194503/
[debug] Command-line config: ['-vU', 'https://www.freesound.org/people/miklovan/sounds/194503/']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2023.01.06 [6becd25] (pip)
[debug] Python 3.10.2 (CPython AMD64 64bit) - Windows-10-10.0.19044-SP0 (OpenSSL 1.1.1m  14 Dec 2021)
[debug] exe versions: ffmpeg git-2019-11-13-a7245ad, ffprobe 5.1.2-full_build-www.gyan.dev
[debug] Optional libraries: Cryptodome-3.12.0, brotli-1.0.9, certifi-2021.10.08, mutagen-1.45.1, sqlite3-2.6.0, websockets-10.1
[debug] Proxy map: {}
[debug] Loaded 1760 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2023.01.06, Current version: 2023.01.06
yt-dlp is up to date (2023.01.06)
[Freesound] Extracting URL: https://www.freesound.org/people/miklovan/sounds/194503/
[Freesound] 194503: Downloading webpage
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, filesize, fs_approx, tbr, vbr, abr, asr, proto, vext, aext, hasaud, source, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] 194503: Downloading 1 format(s): 1
[debug] Invoking http downloader on "https://freesound.orghttps://cdn.freesound.org/previews/194/194503_224081-hq.mp3"
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (1/10)...
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (2/10)...
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (3/10)...
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (4/10)...
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (5/10)...
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (6/10)...
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (7/10)...
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (8/10)...
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (9/10)...
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (10/10)...
[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Giving up after 10 retries
  File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Program Files\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Program Files\Python310\Scripts\yt-dlp.exe\__main__.py", line 7, in <module>
    sys.exit(main())
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\__init__.py", line 970, in main
    _exit(*variadic(_real_main(argv)))
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\__init__.py", line 960, in _real_main
    return ydl.download(all_urls)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 3358, in download
    self.__download_wrapper(self.extract_info)(
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 3333, in wrapper
    res = func(*args, **kwargs)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 1491, in extract_info
    return self.__extract_info(url, self.get_info_extractor(key), download, extra_info, process)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 1502, in wrapper
    return func(self, *args, **kwargs)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 1599, in __extract_info
    return self.process_ie_result(ie_result, download, extra_info)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 1658, in process_ie_result
    ie_result = self.process_video_result(ie_result, download=download)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 2772, in process_video_result
    self.process_info(new_info)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 3236, in process_info
    success, real_download = self.dl(temp_filename, info_dict)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 2959, in dl
    return fd.download(name, new_info, subtitle)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\downloader\common.py", line 444, in download
    ret = self.real_download(filename, info_dict)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\downloader\http.py", line 369, in real_download
    for retry in RetryManager(self.params.get('retries'), self.report_retry):
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\utils.py", line 6023, in __iter__
    self.error_callback(self.error, self.attempt, self.retries)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\downloader\common.py", line 389, in report_retry
    RetryManager.report_retry(
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\utils.py", line 6030, in report_retry
    return error(f'{e}. Giving up after {count - 1} retries') if count > 1 else error(str(e))
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\downloader\common.py", line 392, in <lambda>
    error=IDENTITY if not fatal else lambda e: self.report_error(f'\r[download] Got error: {e}'),
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 1012, in report_error
    self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)} {message}', *args, **kwargs)
  File "C:\Program Files\Python310\lib\site-packages\yt_dlp\YoutubeDL.py", line 941, in trouble
    tb_data = traceback.format_list(traceback.extract_stack())
```


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `yt_dlp/extractor/freesound.py`
Content:
```
1 import re
2 
3 from .common import InfoExtractor
4 from ..utils import (
5     float_or_none,
6     get_element_by_class,
7     get_element_by_id,
8     unified_strdate,
9 )
10 
11 
12 class FreesoundIE(InfoExtractor):
13     _VALID_URL = r'https?://(?:www\.)?freesound\.org/people/[^/]+/sounds/(?P<id>[^/]+)'
14     _TEST = {
15         'url': 'http://www.freesound.org/people/miklovan/sounds/194503/',
16         'md5': '12280ceb42c81f19a515c745eae07650',
17         'info_dict': {
18             'id': '194503',
19             'ext': 'mp3',
20             'title': 'gulls in the city.wav',
21             'description': 'the sounds of seagulls in the city',
22             'duration': 130.233,
23             'uploader': 'miklovan',
24             'upload_date': '20130715',
25             'tags': list,
26         }
27     }
28 
29     def _real_extract(self, url):
30         audio_id = self._match_id(url)
31 
32         webpage = self._download_webpage(url, audio_id)
33 
34         audio_url = self._og_search_property('audio', webpage, 'song url')
35         title = self._og_search_property('audio:title', webpage, 'song title')
36 
37         description = self._html_search_regex(
38             r'(?s)id=["\']sound_description["\'][^>]*>(.+?)</div>',
39             webpage, 'description', fatal=False)
40 
41         duration = float_or_none(
42             get_element_by_class('duration', webpage), scale=1000)
43 
44         upload_date = unified_strdate(get_element_by_id('sound_date', webpage))
45         uploader = self._og_search_property(
46             'audio:artist', webpage, 'uploader', fatal=False)
47 
48         channels = self._html_search_regex(
49             r'Channels</dt><dd>(.+?)</dd>', webpage,
50             'channels info', fatal=False)
51 
52         tags_str = get_element_by_class('tags', webpage)
53         tags = re.findall(r'<a[^>]+>([^<]+)', tags_str) if tags_str else None
54 
55         audio_urls = [audio_url]
56 
57         LQ_FORMAT = '-lq.mp3'
58         if LQ_FORMAT in audio_url:
59             audio_urls.append(audio_url.replace(LQ_FORMAT, '-hq.mp3'))
60 
61         formats = [{
62             'url': format_url,
63             'format_note': channels,
64             'quality': quality,
65         } for quality, format_url in enumerate(audio_urls)]
66 
67         return {
68             'id': audio_id,
69             'title': title,
70             'description': description,
71             'duration': duration,
72             'uploader': uploader,
73             'upload_date': upload_date,
74             'tags': tags,
75             'formats': formats,
76         }
77
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/yt_dlp/extractor/freesound.py b/yt_dlp/extractor/freesound.py
--- a/yt_dlp/extractor/freesound.py
+++ b/yt_dlp/extractor/freesound.py
@@ -52,6 +52,7 @@
         tags_str = get_element_by_class('tags', webpage)
         tags = re.findall(r'<a[^>]+>([^<]+)', tags_str) if tags_str else None
 
+        audio_url = re.sub(r'^https?://freesound\.org(https?://)', r'\1', audio_url)
         audio_urls = [audio_url]
 
         LQ_FORMAT = '-lq.mp3'

{"golden_diff": "diff --git a/yt_dlp/extractor/freesound.py b/yt_dlp/extractor/freesound.py\n--- a/yt_dlp/extractor/freesound.py\n+++ b/yt_dlp/extractor/freesound.py\n@@ -52,6 +52,7 @@\n         tags_str = get_element_by_class('tags', webpage)\n         tags = re.findall(r'<a[^>]+>([^<]+)', tags_str) if tags_str else None\n \n+        audio_url = re.sub(r'^https?://freesound\\.org(https?://)', r'\\1', audio_url)\n         audio_urls = [audio_url]\n \n         LQ_FORMAT = '-lq.mp3'\n", "issue": "[Freesound] Downloads are broken\n### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE\n\n- [X] I understand that I will be **blocked** if I remove or skip any mandatory\\* field\n\n### Checklist\n\n- [X] I'm reporting a broken site\n- [X] I've verified that I'm running yt-dlp version **2023.01.06** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)\n- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details\n- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)\n- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates\n- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)\n- [ ] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required\n\n### Region\n\n_No response_\n\n### Provide a description that is worded well enough to be understood\n\nFreesound.org downloads are broken due to how the preview URLs sometimes appear in the HTML: `<meta property=\"og:audio\" content=\"https://freesound.orghttps://cdn.freesound.org/...\" />`\r\n\r\nI have made a fix for this and will be opening a PR shortly.\n\n### Provide verbose output that clearly demonstrates the problem\n\n- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)\n- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below\n\n### Complete Verbose Output\n\n```shell\nyt-dlp -vU https://www.freesound.org/people/miklovan/sounds/194503/\r\n[debug] Command-line config: ['-vU', 'https://www.freesound.org/people/miklovan/sounds/194503/']\r\n[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8\r\n[debug] yt-dlp version 2023.01.06 [6becd25] (pip)\r\n[debug] Python 3.10.2 (CPython AMD64 64bit) - Windows-10-10.0.19044-SP0 (OpenSSL 1.1.1m  14 Dec 2021)\r\n[debug] exe versions: ffmpeg git-2019-11-13-a7245ad, ffprobe 5.1.2-full_build-www.gyan.dev\r\n[debug] Optional libraries: Cryptodome-3.12.0, brotli-1.0.9, certifi-2021.10.08, mutagen-1.45.1, sqlite3-2.6.0, websockets-10.1\r\n[debug] Proxy map: {}\r\n[debug] Loaded 1760 extractors\r\n[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest\r\nLatest version: 2023.01.06, Current version: 2023.01.06\r\nyt-dlp is up to date (2023.01.06)\r\n[Freesound] Extracting URL: https://www.freesound.org/people/miklovan/sounds/194503/\r\n[Freesound] 194503: Downloading webpage\r\n[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, filesize, fs_approx, tbr, vbr, abr, asr, proto, vext, aext, hasaud, source, id\r\n[debug] Default format spec: bestvideo*+bestaudio/best\r\n[info] 194503: Downloading 1 format(s): 1\r\n[debug] Invoking http downloader on \"https://freesound.orghttps://cdn.freesound.org/previews/194/194503_224081-hq.mp3\"\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (1/10)...\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (2/10)...\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (3/10)...\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (4/10)...\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (5/10)...\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (6/10)...\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (7/10)...\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (8/10)...\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (9/10)...\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Retrying (10/10)...\r\n[download] Got error: <urlopen error [Errno 11001] getaddrinfo failed>. Giving up after 10 retries\r\n  File \"C:\\Program Files\\Python310\\lib\\runpy.py\", line 196, in _run_module_as_main\r\n    return _run_code(code, main_globals, None,\r\n  File \"C:\\Program Files\\Python310\\lib\\runpy.py\", line 86, in _run_code\r\n    exec(code, run_globals)\r\n  File \"C:\\Program Files\\Python310\\Scripts\\yt-dlp.exe\\__main__.py\", line 7, in <module>\r\n    sys.exit(main())\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\__init__.py\", line 970, in main\r\n    _exit(*variadic(_real_main(argv)))\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\__init__.py\", line 960, in _real_main\r\n    return ydl.download(all_urls)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 3358, in download\r\n    self.__download_wrapper(self.extract_info)(\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 3333, in wrapper\r\n    res = func(*args, **kwargs)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 1491, in extract_info\r\n    return self.__extract_info(url, self.get_info_extractor(key), download, extra_info, process)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 1502, in wrapper\r\n    return func(self, *args, **kwargs)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 1599, in __extract_info\r\n    return self.process_ie_result(ie_result, download, extra_info)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 1658, in process_ie_result\r\n    ie_result = self.process_video_result(ie_result, download=download)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 2772, in process_video_result\r\n    self.process_info(new_info)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 3236, in process_info\r\n    success, real_download = self.dl(temp_filename, info_dict)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 2959, in dl\r\n    return fd.download(name, new_info, subtitle)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\downloader\\common.py\", line 444, in download\r\n    ret = self.real_download(filename, info_dict)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\downloader\\http.py\", line 369, in real_download\r\n    for retry in RetryManager(self.params.get('retries'), self.report_retry):\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\utils.py\", line 6023, in __iter__\r\n    self.error_callback(self.error, self.attempt, self.retries)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\downloader\\common.py\", line 389, in report_retry\r\n    RetryManager.report_retry(\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\utils.py\", line 6030, in report_retry\r\n    return error(f'{e}. Giving up after {count - 1} retries') if count > 1 else error(str(e))\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\downloader\\common.py\", line 392, in <lambda>\r\n    error=IDENTITY if not fatal else lambda e: self.report_error(f'\\r[download] Got error: {e}'),\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 1012, in report_error\r\n    self.trouble(f'{self._format_err(\"ERROR:\", self.Styles.ERROR)} {message}', *args, **kwargs)\r\n  File \"C:\\Program Files\\Python310\\lib\\site-packages\\yt_dlp\\YoutubeDL.py\", line 941, in trouble\r\n    tb_data = traceback.format_list(traceback.extract_stack())\n```\n\n", "before_files": [{"content": "import re\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n    float_or_none,\n    get_element_by_class,\n    get_element_by_id,\n    unified_strdate,\n)\n\n\nclass FreesoundIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:www\\.)?freesound\\.org/people/[^/]+/sounds/(?P<id>[^/]+)'\n    _TEST = {\n        'url': 'http://www.freesound.org/people/miklovan/sounds/194503/',\n        'md5': '12280ceb42c81f19a515c745eae07650',\n        'info_dict': {\n            'id': '194503',\n            'ext': 'mp3',\n            'title': 'gulls in the city.wav',\n            'description': 'the sounds of seagulls in the city',\n            'duration': 130.233,\n            'uploader': 'miklovan',\n            'upload_date': '20130715',\n            'tags': list,\n        }\n    }\n\n    def _real_extract(self, url):\n        audio_id = self._match_id(url)\n\n        webpage = self._download_webpage(url, audio_id)\n\n        audio_url = self._og_search_property('audio', webpage, 'song url')\n        title = self._og_search_property('audio:title', webpage, 'song title')\n\n        description = self._html_search_regex(\n            r'(?s)id=[\"\\']sound_description[\"\\'][^>]*>(.+?)</div>',\n            webpage, 'description', fatal=False)\n\n        duration = float_or_none(\n            get_element_by_class('duration', webpage), scale=1000)\n\n        upload_date = unified_strdate(get_element_by_id('sound_date', webpage))\n        uploader = self._og_search_property(\n            'audio:artist', webpage, 'uploader', fatal=False)\n\n        channels = self._html_search_regex(\n            r'Channels</dt><dd>(.+?)</dd>', webpage,\n            'channels info', fatal=False)\n\n        tags_str = get_element_by_class('tags', webpage)\n        tags = re.findall(r'<a[^>]+>([^<]+)', tags_str) if tags_str else None\n\n        audio_urls = [audio_url]\n\n        LQ_FORMAT = '-lq.mp3'\n        if LQ_FORMAT in audio_url:\n            audio_urls.append(audio_url.replace(LQ_FORMAT, '-hq.mp3'))\n\n        formats = [{\n            'url': format_url,\n            'format_note': channels,\n            'quality': quality,\n        } for quality, format_url in enumerate(audio_urls)]\n\n        return {\n            'id': audio_id,\n            'title': title,\n            'description': description,\n            'duration': duration,\n            'uploader': uploader,\n            'upload_date': upload_date,\n            'tags': tags,\n            'formats': formats,\n        }\n", "path": "yt_dlp/extractor/freesound.py"}], "after_files": [{"content": "import re\n\nfrom .common import InfoExtractor\nfrom ..utils import (\n    float_or_none,\n    get_element_by_class,\n    get_element_by_id,\n    unified_strdate,\n)\n\n\nclass FreesoundIE(InfoExtractor):\n    _VALID_URL = r'https?://(?:www\\.)?freesound\\.org/people/[^/]+/sounds/(?P<id>[^/]+)'\n    _TEST = {\n        'url': 'http://www.freesound.org/people/miklovan/sounds/194503/',\n        'md5': '12280ceb42c81f19a515c745eae07650',\n        'info_dict': {\n            'id': '194503',\n            'ext': 'mp3',\n            'title': 'gulls in the city.wav',\n            'description': 'the sounds of seagulls in the city',\n            'duration': 130.233,\n            'uploader': 'miklovan',\n            'upload_date': '20130715',\n            'tags': list,\n        }\n    }\n\n    def _real_extract(self, url):\n        audio_id = self._match_id(url)\n\n        webpage = self._download_webpage(url, audio_id)\n\n        audio_url = self._og_search_property('audio', webpage, 'song url')\n        title = self._og_search_property('audio:title', webpage, 'song title')\n\n        description = self._html_search_regex(\n            r'(?s)id=[\"\\']sound_description[\"\\'][^>]*>(.+?)</div>',\n            webpage, 'description', fatal=False)\n\n        duration = float_or_none(\n            get_element_by_class('duration', webpage), scale=1000)\n\n        upload_date = unified_strdate(get_element_by_id('sound_date', webpage))\n        uploader = self._og_search_property(\n            'audio:artist', webpage, 'uploader', fatal=False)\n\n        channels = self._html_search_regex(\n            r'Channels</dt><dd>(.+?)</dd>', webpage,\n            'channels info', fatal=False)\n\n        tags_str = get_element_by_class('tags', webpage)\n        tags = re.findall(r'<a[^>]+>([^<]+)', tags_str) if tags_str else None\n\n        audio_url = re.sub(r'^https?://freesound\\.org(https?://)', r'\\1', audio_url)\n        audio_urls = [audio_url]\n\n        LQ_FORMAT = '-lq.mp3'\n        if LQ_FORMAT in audio_url:\n            audio_urls.append(audio_url.replace(LQ_FORMAT, '-hq.mp3'))\n\n        formats = [{\n            'url': format_url,\n            'format_note': channels,\n            'quality': quality,\n        } for quality, format_url in enumerate(audio_urls)]\n\n        return {\n            'id': audio_id,\n            'title': title,\n            'description': description,\n            'duration': duration,\n            'uploader': uploader,\n            'upload_date': upload_date,\n            'tags': tags,\n            'formats': formats,\n        }\n", "path": "yt_dlp/extractor/freesound.py"}]}