Skip to content

Commit

Permalink
Merge pull request #91 from shazamio/dev-sq
Browse files Browse the repository at this point in the history
Dev sq
  • Loading branch information
dotX12 authored Feb 23, 2024
2 parents 17627a8 + c72e814 commit 3c50f4a
Show file tree
Hide file tree
Showing 26 changed files with 1,503 additions and 226 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/pytest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ jobs:
- name: Install ffmpeg
id: setup-ffmpeg
uses: FedericoCarboni/setup-ffmpeg@v1
- name: Install libasound2-dev
run: sudo apt-get install -y libasound2-dev build-essential libudev-dev

- name: Install dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
Expand All @@ -61,4 +63,4 @@ jobs:
- name: Run tests
run: |
source .venv/bin/activate
pytest tests/
poetry run pytest
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ loop.run_until_complete(main())

<details>
<summary>
<i>🔝🎶🌏🎸 Top tracks in word by genre</i>
<i>🔝🎶🌏🎸 Top tracks in world by genre</i>
</summary>

Get world tracks by certain genre<br>
Expand All @@ -347,7 +347,7 @@ loop.run_until_complete(main())

<details>
<summary>
<i>🔝🎶🌏Top tracks in word</i>
<i>🔝🎶🌏Top tracks in world</i>
</summary>

Get the best tracks from all over the world<br>
Expand Down
16 changes: 16 additions & 0 deletions examples/artist_albums.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import asyncio
from shazamio import Shazam, Serialize


async def main():
shazam = Shazam()
artist_id = 1202214602
albums = await shazam.artist_albums(artist_id=artist_id)
serialized = Serialize.artist_albums(data=albums)

for i in serialized.data:
print(f"{i.attributes.name} - {i.attributes.track_count} {i.attributes.release_date}")


loop = asyncio.get_event_loop_policy().get_event_loop()
loop.run_until_complete(main())
28 changes: 24 additions & 4 deletions examples/recognize_song.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,34 @@
import asyncio
import logging

from shazamio import Shazam, Serialize

logger = logging.getLogger(__name__)
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s - %(name)s - [%(filename)s:%(lineno)d - %(funcName)s()] - %(levelname)s - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)


async def main():
shazam = Shazam()
out = await shazam.recognize_song("data/dora.ogg")
print(out)

serialized = Serialize.full_track(out)
print(serialized)
# pass path (deprecated)
old_version = await shazam.recognize_song(data="data/dora.ogg") # deprecated
serialized_old = Serialize.full_track(old_version)
print(serialized_old)

# pass path
new_version_path = await shazam.recognize("data/dora.ogg")
serialized_new_path = Serialize.full_track(new_version_path)
print(serialized_new_path)

# pass bytes
with open("data/dora.ogg", "rb") as file:
new_version_path = await shazam.recognize(file.read())
serialized_new_path = Serialize.full_track(new_version_path)
print(serialized_new_path)


loop = asyncio.get_event_loop_policy().get_event_loop()
Expand Down
2 changes: 2 additions & 0 deletions examples/song_listening_counter.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ async def main():
track_id = 559284007
count = await shazam.listening_counter(track_id=track_id)
print(count)
count_many = await shazam.listening_counter_many(track_ids=[559284007, 684678069])
print(count_many)


loop = asyncio.get_event_loop_policy().get_event_loop()
Expand Down
777 changes: 672 additions & 105 deletions poetry.lock

Large diffs are not rendered by default.

9 changes: 7 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,14 @@ pytest = "^7.2.0"
pytest-asyncio = "^0.20.3"
anyio = "^3.6.2"
pydantic = "^1.10.2"
shazamio-core = "^1.0.7"
aiohttp-retry = "^2.8.3"

[tool.poetry.group.dev.dependencies]
black = {version = "^24.2.0", allow-prereleases = true}

[build-system]
requires = ["poetry-core>=1.0.0", "wheel>=0.36,<1.0", "poetry>=1.1,<2", "virtualenv==20.0.33"]
requires = ["poetry-core>=1.0.0", "wheel>=0.36,<1.0"]
build-backend = "poetry.core.masonry.api"


Expand All @@ -37,4 +42,4 @@ filterwarnings = ["ignore::DeprecationWarning"]


[tool.black]
line-length = 100
line-length = 100
4 changes: 2 additions & 2 deletions shazamio/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from .serializers import Serialize
from .api import Shazam
from .converter import Geo
from .converter import GeoService
from .enums import GenreMusic

__all__ = ("Serialize", "Shazam", "Geo", "GenreMusic")
__all__ = ("Serialize", "Shazam", "GeoService", "GenreMusic")
15 changes: 4 additions & 11 deletions shazamio/algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,6 @@ def get_next_signature(self) -> Optional[DecodedMessage]:
)
self.samples_processed += 128

returned_signature = self.next_signature

self.next_signature = DecodedMessage()
self.next_signature.sample_rate_hz = 16000
self.next_signature.number_samples = 0
self.next_signature.frequency_band_to_sound_peaks = {}

self.ring_buffer_of_samples: RingBuffer[int] = RingBuffer(buffer_size=2048, default_value=0)
self.fft_outputs: RingBuffer[List[float]] = RingBuffer(
buffer_size=256, default_value=[0.0 * 1025]
Expand All @@ -115,7 +108,7 @@ def get_next_signature(self) -> Optional[DecodedMessage]:
buffer_size=256, default_value=[0] * 1025
)

return returned_signature
return self.next_signature

def process_input(self, s16le_mono_samples: List[int]):
self.next_signature.number_samples += len(s16le_mono_samples)
Expand All @@ -125,9 +118,9 @@ def process_input(self, s16le_mono_samples: List[int]):

def do_fft(self, batch_of_128_s16le_mono_samples):
type_ring = self.ring_buffer_of_samples.position + len(batch_of_128_s16le_mono_samples)
self.ring_buffer_of_samples[
self.ring_buffer_of_samples.position : type_ring
] = batch_of_128_s16le_mono_samples
self.ring_buffer_of_samples[self.ring_buffer_of_samples.position : type_ring] = (
batch_of_128_s16le_mono_samples
)
self.ring_buffer_of_samples.position += len(batch_of_128_s16le_mono_samples)
self.ring_buffer_of_samples.position %= 2048
self.ring_buffer_of_samples.num_written += len(batch_of_128_s16le_mono_samples)
Expand Down
Loading

0 comments on commit 3c50f4a

Please sign in to comment.