From bd4ea5265f17d81aef9b5fbca3b196ec96ad1108 Mon Sep 17 00:00:00 2001 From: qo-op Date: Thu, 4 Mar 2021 01:46:46 +0100 Subject: [PATCH] new mp3 in astroport with mazash recognize/fingerprint --- zen/new_mp3_in_astroport.sh | 142 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100755 zen/new_mp3_in_astroport.sh diff --git a/zen/new_mp3_in_astroport.sh b/zen/new_mp3_in_astroport.sh new file mode 100755 index 000000000..7b1867d89 --- /dev/null +++ b/zen/new_mp3_in_astroport.sh @@ -0,0 +1,142 @@ +#!/bin/bash +######################################################################## +# Author: Fred (support@qo-op.com) +# Version: 0.3 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +######################################################################## +# COPY ~/astroport/mp3/artist/song files to IPFS +######## #### ### ## # +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +ME="${0##*/}" +YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1); +IPFSNODEID=$(ipfs id -f='\n') +G1PUB=$(cat ~/.zen/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) +# GET XZUID +[[ -f ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.gchange_title ]] && XZUID=$(cat ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.gchange_title) || XZUID=$(cat /etc/hostname) +######################################################################## +path="$1" +# Add trailing / if needed +length=${#path} +last_char=${path:length-1:1} +[[ $last_char != "/" ]] && path="$path/"; : + +file="$2" + +echo "~/.zen/astrXbian/zen/new_mp3_in_astroport.sh PATH/ \"$path\" FILE \"$file\"" +[[ ! -f "${path}${file}" ]] && echo "Fichier introuvable ... EXIT" && exit 1 + +YTEMP="/tmp/$(date -u +%s%N | cut -b1-13)" +mkdir -p ${YTEMP} + +YID=$(echo "${file}" | cut -d "_" -f 1) +YNAME=$(echo "${file}" | cut -d "_" -f 2-) +TITLE="${YNAME%.*}" +FILE_EXT="${file##*.}" +[[ "$FILE_EXT" != "mp3" ]] && echo "Extension inconnue. Seul le format mp3 est accepté ... EXIT" && exit 1 + +[[ ! $(echo "$path" | cut -d '/' -f 4 | grep 'astroport') ]] && echo "Les fichiers sont à placer dans ~/astroport/mp3/ MERCI" && exit 1 +CAT=$(echo "$path" | cut -d '/' -f 5 ) # mp3 +ARTIST=$(echo "$path" | cut -d '/' -f 6 ) # artist || YID +ALBUM=$(echo "$path" | cut -d '/' -f 7 ) # album || _o-o_ || EMPTY +[[ "$ALBUM" == "" ]] && echo "ARTIST = YID = $ARTIST" + +CAT=$(echo "$CAT" | awk '{ print tolower($0) }') + +######################################################################## +######################################################################## +# MOVE SECTION in new_mp3_in_astroport.sh +DURATION=$(mp3info -p "%S" "${path}${file}") +float=$(echo "$DURATION/1.618" | bc -l) && GOLDENTIME=${float%.*} + +## EXTRACT 5 seconds from GOLDENTIME +ffmpeg -loglevel quiet -ss $GOLDENTIME -t 5 -i "${path}${file}" /tmp/5s_${YID}.mp3 + +## TRY TO RECOGNIZE WITH mazash +## CHECK if 8600 port is active +## ipfs p2p forward /x/oasis-mazash /ip4/127.0.0.1/tcp/8600 /p2p/12D3KooWBYme2BsNUrtx4mEdNX6Yioa9AV7opWzQp6nrPs6ZKabN +SAMPLEID=$(ipfs add -q /tmp/5s_${YID}.mp3) +RECOG=$(curl -sX POST "http://localhost:8600/api/v1/mazash/recognize" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"cid\":\"${SAMPLEID}\",\"extension\":\".mp3\"}") +CONFIANCE=$(echo $RECOG | jq .results[].input_confidence | tail -n 1) +MAZASHID=$(echo $RECOG | jq .results[].file_sha1 | tail -n 1) +IPNSID=$(echo $RECOG | jq .results[].song_name | tail -n 1) + +echo "$CONFIANCE MATCHING $MAZASHID ($IPNSID)" + +## NEEDED TO CREATE IPNS KEY +INDEXPREFIX="MP3_" +REFERENCE="${YID}" + +######################################################################## +######################################################################## +######################################################################## + +echo "-----------------------------------------------------------------" + +IPFSREPFILEID=$(ipfs add -wq "${path}${file}" | tail -n 1) +[[ $IPFSREPFILEID == "" ]] && echo "ipfs add ERROR" && exit 1 +echo "-----------------------------------------------------------------" +echo "IPFS: $file : ipfs ls /ipfs/$IPFSREPFILEID" +echo "-----------------------------------------------------------------" + +URLENCODE_FILE_NAME=$(echo ${file} | jq -Rr @uri) + +######################################################################## +## CREATE NEW ipns KEY : ${INDEXPREFIX}${REFERENCE} +######################################################################## +######################################################################## +[[ ! -d ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB} ]] && mkdir -p ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB} && KEY=$(ipfs key gen "${INDEXPREFIX}${REFERENCE}") && KEYFILE=$(ls -t ~/.ipfs/keystore/ | head -n 1) +## INIT ipns +if [[ $KEY ]]; then + # memorize IPNS key filename for easiest exchange + echo "$KEYFILE" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.key.keystore_filename + # Publishing IPNS key + echo "$KEY" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.link + # .zen could contain ZEN for economic value + touch ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.zen + ################ ENCRYPT keystore/$KEYFILE + $MY_PATH/tools/natools.py encrypt -p $G1PUB -i ~/.ipfs/keystore/$KEYFILE -o ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.key.natools.encrypt +else + KEY=$(cat ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.link) + KEYFILE=$(cat ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.key.keystore_filename) +fi + +# CLEAR ipfs link (then encrypted to manage exchange regulation) +echo "/ipfs/$IPFSREPFILEID/${file}" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipfs.filelink +################ ENCRYPT .ipfs.filelink +$MY_PATH/tools/natools.py encrypt -p $G1PUB -i ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipfs.filelink -o ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipfs.filelink.natools.encrypt +rm ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipfs.filelink + +echo "${file}" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipfs.filename +echo "${TITLE}" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.title +echo "$(date -u +%s%N | cut -b1-13)" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.timestamp + +# IPNS index.html Redirect to ipfs streaming link (could be contract or anything else !!) +echo "" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/index.html + +IPNSLINK=$(ipfs key list -l | grep ${INDEXPREFIX}${REFERENCE} | cut -d ' ' -f 1) +echo " +

ASTROPORT/MP3

+Pour écouter ${TITLE}, connectons nos stations et devenons amis...

+Installez astrXbian" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/index.html + +NEWIPFS=$(ipfs add -rHq ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/ | tail -n 1 ) +IPNS=$(ipfs name publish --quieter --key="${INDEXPREFIX}${REFERENCE}" $NEWIPFS) +######################################################################## + +## CHECK CONFIANCE and decide to fingerprint +if (( $(echo "$CONFIANCE < 0.9" | bc -l) )); then + # USE IPNS KEY for "song_name" + NEWCOG=$(curl -X POST "http://localhost:8600/api/v1/mazash/fingerprint" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"cid\":\"${SAMPLEID}\",\"extension\":\".mp3\",\"song\":\"${IPNS}\"}") + echo "NEWCOG" | jq +fi + +######################################################################## +# REFRESH IPNS SELF PUBLISH +######################################################################## +~/.zen/astrXbian/zen/ipns_self_publish.sh +######################################################################## + +rm -Rf ${YTEMP} + +exit 0