Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/data/data/com.termux/files/usr/bin/bash
- # === Config ===
- API_KEY="YOUR_API_KEY_HERE"
- # Folders
- BASE_DIR="$HOME/.shortcuts/song_recognizer"
- RECORDINGS_DIR="$BASE_DIR/recordings"
- mkdir -p "$RECORDINGS_DIR"
- # Files
- TEMP_FILE="$RECORDINGS_DIR/recording_tmp.wav"
- FINAL_FILE="$RECORDINGS_DIR/record.wav"
- HQ_FILE="$RECORDINGS_DIR/record_high.wav"
- LOG_FILE="$BASE_DIR/song_log.txt"
- RESPONSE_FILE="$BASE_DIR/response.json"
- REQUIRED_JSON_FILE="/sdcard/required-res.json"
- HISTORY_JSON_FILE="/sdcard/song_history.json"
- # === Record Audio ===
- termux-microphone-record -l 15 -f "$TEMP_FILE"
- sleep 15
- termux-microphone-record -q
- # === Convert Audio to High Quality ===
- ffmpeg -y -i "$TEMP_FILE" -ar 44100 -ac 2 -sample_fmt s16 "$HQ_FILE"
- # Finalize file
- mv -f "$HQ_FILE" "$FINAL_FILE"
- rm -f "$TEMP_FILE"
- # === Send to Shazam API ===
- response=$(curl -s --request POST \
- --url 'https://shazam-song-recognition-api.p.rapidapi.com/recognize/file' \
- --header "X-RapidAPI-Key: $API_KEY" \
- --header 'X-RapidAPI-Host: shazam-song-recognition-api.p.rapidapi.com' \
- --header 'Content-Type: multipart/form-data' \
- --form "upload=@$FINAL_FILE")
- # Save raw API response
- echo "$response" > "$RESPONSE_FILE"
- # === Extract Info ===
- title=$(echo "$response" | jq -r '.track.title // "Unknown Title"')
- artist=$(echo "$response" | jq -r '.track.subtitle // "Unknown Artist"')
- album=$(echo "$response" | jq -r '.track.sections[]? | select(.type == "SONG") | .metadata[]? | select(.title == "Album") | .text' | head -n1)
- album=${album:-"Unknown Album"}
- timestamp=$(date '+%Y-%m-%d %H:%M:%S')
- # Build YouTube Music URL
- escaped_query=$(echo "$title $artist" | jq -sRr @uri)
- ytm_url="https://music.youtube.com/search?q=${escaped_query}"
- # === Output to Terminal ===
- echo "$title - $artist ($album)"
- echo "$ytm_url"
- # === Save Required JSON ===
- jq -n \
- --arg title "$title" \
- --arg artist "$artist" \
- --arg album "$album" \
- --arg timestamp "$timestamp" \
- --arg youtube_music_url "$ytm_url" \
- '{
- title: $title,
- artist: $artist,
- album: $album,
- timestamp: $timestamp,
- youtube_music_url: $youtube_music_url
- }' > "$REQUIRED_JSON_FILE"
- # === Append to Text Log ===
- {
- echo "# [$timestamp] $title - $artist (Album: $album)"
- echo "# $ytm_url"
- echo "#"
- } >> "$LOG_FILE"
- # === Update History JSON ===
- if [ ! -f "$HISTORY_JSON_FILE" ]; then
- echo '[]' > "$HISTORY_JSON_FILE"
- fi
- tmpfile=$(mktemp)
- jq --arg title "$title" \
- --arg artist "$artist" \
- --arg album "$album" \
- --arg timestamp "$timestamp" \
- --arg youtube_music_url "$ytm_url" \
- '. += [{
- "title": $title,
- "artist": $artist,
- "album": $album,
- "timestamp": $timestamp,
- "youtube_music_url": $youtube_music_url
- }]' "$HISTORY_JSON_FILE" > "$tmpfile" && mv "$tmpfile" "$HISTORY_JSON_FILE"
- # === Send Notification ===
- termux-notification \
- --title "Now Playing" \
- --content "$title - $artist [$album]" \
- --priority high \
- --button1 "Open YouTube" \
- --button1-action "am start -a android.intent.action.VIEW -d \"$ytm_url\""
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement