{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "99398cc7-e36a-494c-88f9-b26874ff0294", "metadata": {}, "outputs": [], "source": [ "import aiohttp\n", "import json" ] }, { "cell_type": "code", "execution_count": 2, "id": "28c3e49b-1133-4a18-ab70-fd321b4d2734", "metadata": {}, "outputs": [], "source": [ "SUNO_API_KEY= '347da228e2d6ea273ef0558795a75892'\n", "SUNO_BASE_URL=\"https://api.sunoapi.org\"\n", "SUNO_TIMESTAPM_ROUTE = \"/api/v1/generate/get-timestamped-lyrics\"\n", "SUNO_DETAIL_ROUTE = \"/api/v1/generate/record-info\"\n", "suno_task_id = \"46bc90e6a2f9e9af58d7017e23f2115e\"\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "fe09b1d5-7198-4c40-9667-d7d0885c62a3", "metadata": {}, "outputs": [], "source": [ "headers = {\n", " \"Authorization\": f\"Bearer {SUNO_API_KEY}\",\n", " \"Content-Type\": \"application/json\",\n", "}" ] }, { "cell_type": "code", "execution_count": 4, "id": "81bacedc-e488-4d04-84b1-8e8a06a64565", "metadata": {}, "outputs": [], "source": [ "async def get_suno_audio_id_from_task_id(suno_task_id): # expire if db save audio id\n", " url = f\"{SUNO_BASE_URL}{SUNO_DETAIL_ROUTE}\"\n", " headers = {\"Authorization\": f\"Bearer {SUNO_API_KEY}\"}\n", " async with aiohttp.ClientSession() as session:\n", " async with session.get(url, headers=headers, params={\"taskId\" : suno_task_id}) as response:\n", " detail = await response.json()\n", " result = detail['data']['response']['sunoData'][0]['id']\n", " return result " ] }, { "cell_type": "code", "execution_count": 5, "id": "26346a13-0663-489f-98d0-69743dd8553f", "metadata": {}, "outputs": [], "source": [ "async def get_suno_timestamp(suno_task_id, suno_audio_id): # expire if db save audio id\n", " url = f\"{SUNO_BASE_URL}{SUNO_TIMESTAPM_ROUTE}\"\n", " headers = {\"Authorization\": f\"Bearer {SUNO_API_KEY}\"}\n", " payload = {\n", " \"task_id\" : suno_task_id,\n", " \"audio_id\" : suno_audio_id\n", " }\n", " async with aiohttp.ClientSession() as session:\n", " async with session.post(url, headers=headers, data=json.dumps(payload)) as response:\n", " result = await response.json()\n", " return result" ] }, { "cell_type": "code", "execution_count": 6, "id": "78db0f6b-a54c-4415-9e82-972b00fefefb", "metadata": {}, "outputs": [], "source": [ "data = await get_suno_timestamp(suno_task_id, await get_suno_audio_id_from_task_id(suno_task_id))" ] }, { "cell_type": "code", "execution_count": 7, "id": "44d8da8e-5a67-4125-809f-bbdb1efba55f", "metadata": {}, "outputs": [], "source": [ "gt_lyric = \"\"\"\n", "---\n", "스테이,머뭄의 추억을 담아 \n", "군산에서의 여행을 떠나보세 \n", "인스타 감성 가득한 사진같은 하루, \n", "힐링의 시간, 감성 숙소에서의 휴식\n", "\n", "은파호수공원의 자연 속, \n", "시간이 멈춘 듯한 절골길을 걸어봐요 \n", "Instagram vibes, 그림 같은 힐링 장소, \n", "잊지 못할 여행 스토리 만들어지네\n", "\n", "넷이서 웃고 떠들던 그 날의 사진 속, \n", "그 순간 훌쩍 떠나볼까요, 새로운 길로 \n", "스테이,머뭄이 준비한 특별한 여행지 \n", "몸과 마음이 따뜻해지는 그런 곳이에요 \n", "---\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 8, "id": "e4e9ba7d-964f-4f29-95f3-0f8514fad7ee", "metadata": {}, "outputs": [], "source": [ "lyric_line_list = gt_lyric.split(\"\\n\")\n", "lyric_line_list = [lyric_line.strip(',. ') for lyric_line in lyric_line_list if lyric_line and lyric_line != \"---\"]" ] }, { "cell_type": "code", "execution_count": 9, "id": "84a64cd5-7374-4c33-8634-6ac6ed0de425", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['스테이,머뭄의 추억을 담아',\n", " '군산에서의 여행을 떠나보세',\n", " '인스타 감성 가득한 사진같은 하루',\n", " '힐링의 시간, 감성 숙소에서의 휴식',\n", " '은파호수공원의 자연 속',\n", " '시간이 멈춘 듯한 절골길을 걸어봐요',\n", " 'Instagram vibes, 그림 같은 힐링 장소',\n", " '잊지 못할 여행 스토리 만들어지네',\n", " '넷이서 웃고 떠들던 그 날의 사진 속',\n", " '그 순간 훌쩍 떠나볼까요, 새로운 길로',\n", " '스테이,머뭄이 준비한 특별한 여행지',\n", " '몸과 마음이 따뜻해지는 그런 곳이에요']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lyric_line_list" ] }, { "cell_type": "code", "execution_count": 10, "id": "d1157cf8-03b8-47b1-a6de-02d833b9d7df", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'code': 200,\n", " 'msg': 'success',\n", " 'data': {'alignedWords': [{'word': '[Song ',\n", " 'success': True,\n", " 'startS': 0.79787,\n", " 'endS': 0.80365,\n", " 'palign': 0},\n", " {'word': 'Duration: ',\n", " 'success': True,\n", " 'startS': 0.80481,\n", " 'endS': 0.81522,\n", " 'palign': 0},\n", " {'word': 'Exactly 1 ',\n", " 'success': True,\n", " 'startS': 0.81637,\n", " 'endS': 0.82678,\n", " 'palign': 0},\n", " {'word': 'minute - ',\n", " 'success': True,\n", " 'startS': 0.82794,\n", " 'endS': 0.83719,\n", " 'palign': 0},\n", " {'word': 'Must ',\n", " 'success': True,\n", " 'startS': 0.83834,\n", " 'endS': 0.84297,\n", " 'palign': 0},\n", " {'word': 'be ',\n", " 'success': True,\n", " 'startS': 0.84413,\n", " 'endS': 0.84644,\n", " 'palign': 0},\n", " {'word': 'precisely 60 ',\n", " 'success': True,\n", " 'startS': 0.84759,\n", " 'endS': 0.86147,\n", " 'palign': 0},\n", " {'word': 'seconds]\\n---\\n',\n", " 'success': True,\n", " 'startS': 0.86263,\n", " 'endS': 0.8765,\n", " 'palign': 0},\n", " {'word': '스테이,',\n", " 'success': True,\n", " 'startS': 0.87766,\n", " 'endS': 1.99468,\n", " 'palign': 0},\n", " {'word': '머뭄의 ',\n", " 'success': True,\n", " 'startS': 2.15426,\n", " 'endS': 3.03191,\n", " 'palign': 0},\n", " {'word': '추억을 ',\n", " 'success': True,\n", " 'startS': 3.19149,\n", " 'endS': 3.98936,\n", " 'palign': 0},\n", " {'word': '담아 \\n',\n", " 'success': True,\n", " 'startS': 4.14894,\n", " 'endS': 5.23936,\n", " 'palign': 0},\n", " {'word': '군산에서의 ',\n", " 'success': True,\n", " 'startS': 5.34574,\n", " 'endS': 6.38298,\n", " 'palign': 0},\n", " {'word': '여행을 ',\n", " 'success': True,\n", " 'startS': 6.54255,\n", " 'endS': 7.10106,\n", " 'palign': 0},\n", " {'word': '떠나보세 \\n',\n", " 'success': True,\n", " 'startS': 7.22074,\n", " 'endS': 9.17553,\n", " 'palign': 0},\n", " {'word': '인스타 ',\n", " 'success': True,\n", " 'startS': 9.25532,\n", " 'endS': 9.73404,\n", " 'palign': 0},\n", " {'word': '감성 ',\n", " 'success': True,\n", " 'startS': 9.89362,\n", " 'endS': 10.21277,\n", " 'palign': 0},\n", " {'word': '가득한 ',\n", " 'success': True,\n", " 'startS': 10.37234,\n", " 'endS': 10.77128,\n", " 'palign': 0},\n", " {'word': '사진같은 ',\n", " 'success': True,\n", " 'startS': 10.93085,\n", " 'endS': 11.80851,\n", " 'palign': 0},\n", " {'word': '하루, \\n',\n", " 'success': True,\n", " 'startS': 11.96809,\n", " 'endS': 12.70612,\n", " 'palign': 0},\n", " {'word': '힐링의 ',\n", " 'success': True,\n", " 'startS': 12.76596,\n", " 'endS': 13.48404,\n", " 'palign': 0},\n", " {'word': '시간, ',\n", " 'success': True,\n", " 'startS': 13.60372,\n", " 'endS': 14.24202,\n", " 'palign': 0},\n", " {'word': '감성 ',\n", " 'success': True,\n", " 'startS': 14.3617,\n", " 'endS': 14.76064,\n", " 'palign': 0},\n", " {'word': '숙소에서의 ',\n", " 'success': True,\n", " 'startS': 14.92021,\n", " 'endS': 15.87766,\n", " 'palign': 0},\n", " {'word': '휴식\\n\\n',\n", " 'success': True,\n", " 'startS': 16.03723,\n", " 'endS': 17.91223,\n", " 'palign': 0},\n", " {'word': '은파호수공원의 ',\n", " 'success': True,\n", " 'startS': 18.03191,\n", " 'endS': 19.14894,\n", " 'palign': 0},\n", " {'word': '자연 ',\n", " 'success': True,\n", " 'startS': 19.30851,\n", " 'endS': 19.78723,\n", " 'palign': 0},\n", " {'word': '속, \\n',\n", " 'success': True,\n", " 'startS': 19.94681,\n", " 'endS': 20.76064,\n", " 'palign': 0},\n", " {'word': '시간이 ',\n", " 'success': True,\n", " 'startS': 20.79255,\n", " 'endS': 20.98404,\n", " 'palign': 0},\n", " {'word': '멈춘 ',\n", " 'success': True,\n", " 'startS': 21.14362,\n", " 'endS': 21.54255,\n", " 'palign': 0},\n", " {'word': '듯한 ',\n", " 'success': True,\n", " 'startS': 21.70213,\n", " 'endS': 22.42021,\n", " 'palign': 0},\n", " {'word': '절골길을 ',\n", " 'success': True,\n", " 'startS': 22.57979,\n", " 'endS': 23.29787,\n", " 'palign': 0},\n", " {'word': '걸어봐요 \\n',\n", " 'success': True,\n", " 'startS': 23.45745,\n", " 'endS': 26.6707,\n", " 'palign': 0},\n", " {'word': 'Instagram ',\n", " 'success': True,\n", " 'startS': 26.72147,\n", " 'endS': 27.12766,\n", " 'palign': 0},\n", " {'word': 'vibes, ',\n", " 'success': True,\n", " 'startS': 27.22739,\n", " 'endS': 27.96543,\n", " 'palign': 0},\n", " {'word': '그림 ',\n", " 'success': True,\n", " 'startS': 28.00532,\n", " 'endS': 28.16489,\n", " 'palign': 0},\n", " {'word': '같은 ',\n", " 'success': True,\n", " 'startS': 28.32447,\n", " 'endS': 28.48404,\n", " 'palign': 0},\n", " {'word': '힐링 ',\n", " 'success': True,\n", " 'startS': 28.64362,\n", " 'endS': 28.88298,\n", " 'palign': 0},\n", " {'word': '장소, \\n',\n", " 'success': True,\n", " 'startS': 29.04255,\n", " 'endS': 29.6609,\n", " 'palign': 0},\n", " {'word': '잊지 ',\n", " 'success': True,\n", " 'startS': 29.68085,\n", " 'endS': 29.84043,\n", " 'palign': 0},\n", " {'word': '못할 ',\n", " 'success': True,\n", " 'startS': 30.0,\n", " 'endS': 30.23936,\n", " 'palign': 0},\n", " {'word': '여행 ',\n", " 'success': True,\n", " 'startS': 30.39894,\n", " 'endS': 30.55851,\n", " 'palign': 0},\n", " {'word': '스토리 ',\n", " 'success': True,\n", " 'startS': 30.6383,\n", " 'endS': 30.95745,\n", " 'palign': 0},\n", " {'word': '만들어지네\\n\\n',\n", " 'success': True,\n", " 'startS': 31.11702,\n", " 'endS': 33.39096,\n", " 'palign': 0},\n", " {'word': '넷이서 ',\n", " 'success': True,\n", " 'startS': 33.51064,\n", " 'endS': 34.94681,\n", " 'palign': 0},\n", " {'word': '웃고 ',\n", " 'success': True,\n", " 'startS': 35.10638,\n", " 'endS': 36.38298,\n", " 'palign': 0},\n", " {'word': '떠들던 ',\n", " 'success': True,\n", " 'startS': 36.54255,\n", " 'endS': 37.02128,\n", " 'palign': 0},\n", " {'word': '그 ',\n", " 'success': True,\n", " 'startS': 37.18085,\n", " 'endS': 37.18085,\n", " 'palign': 0},\n", " {'word': '날의 ',\n", " 'success': True,\n", " 'startS': 37.34043,\n", " 'endS': 37.65957,\n", " 'palign': 0},\n", " {'word': '사진 ',\n", " 'success': True,\n", " 'startS': 37.81915,\n", " 'endS': 38.29787,\n", " 'palign': 0},\n", " {'word': '속, \\n',\n", " 'success': True,\n", " 'startS': 38.45745,\n", " 'endS': 38.93617,\n", " 'palign': 0},\n", " {'word': '그 ',\n", " 'success': True,\n", " 'startS': 39.01596,\n", " 'endS': 39.01596,\n", " 'palign': 0},\n", " {'word': '순간 ',\n", " 'success': True,\n", " 'startS': 39.17553,\n", " 'endS': 39.73404,\n", " 'palign': 0},\n", " {'word': '훌쩍 ',\n", " 'success': True,\n", " 'startS': 39.89362,\n", " 'endS': 40.37234,\n", " 'palign': 0},\n", " {'word': '떠나볼까요, ',\n", " 'success': True,\n", " 'startS': 40.49202,\n", " 'endS': 41.48936,\n", " 'palign': 0},\n", " {'word': '새로운 ',\n", " 'success': True,\n", " 'startS': 41.56915,\n", " 'endS': 41.8883,\n", " 'palign': 0},\n", " {'word': '길로 \\n',\n", " 'success': True,\n", " 'startS': 42.04787,\n", " 'endS': 43.61702,\n", " 'palign': 0},\n", " {'word': '스테이,',\n", " 'success': True,\n", " 'startS': 43.7234,\n", " 'endS': 45.23936,\n", " 'palign': 0},\n", " {'word': '머뭄이 ',\n", " 'success': True,\n", " 'startS': 45.31915,\n", " 'endS': 46.03723,\n", " 'palign': 0},\n", " {'word': '준비한 ',\n", " 'success': True,\n", " 'startS': 46.15691,\n", " 'endS': 46.35638,\n", " 'palign': 0},\n", " {'word': '특별한 ',\n", " 'success': True,\n", " 'startS': 46.51596,\n", " 'endS': 47.39362,\n", " 'palign': 0},\n", " {'word': '여행지 \\n',\n", " 'success': True,\n", " 'startS': 47.55319,\n", " 'endS': 48.45745,\n", " 'palign': 0},\n", " {'word': '몸과 ',\n", " 'success': True,\n", " 'startS': 48.51064,\n", " 'endS': 48.75,\n", " 'palign': 0},\n", " {'word': '마음이 ',\n", " 'success': True,\n", " 'startS': 48.86968,\n", " 'endS': 49.3883,\n", " 'palign': 0},\n", " {'word': '따뜻해지는 ',\n", " 'success': True,\n", " 'startS': 49.54787,\n", " 'endS': 50.74468,\n", " 'palign': 0},\n", " {'word': '그런 ',\n", " 'success': True,\n", " 'startS': 50.90426,\n", " 'endS': 51.14362,\n", " 'palign': 0},\n", " {'word': '곳이에요 \\n---\\n\\n',\n", " 'success': True,\n", " 'startS': 51.30319,\n", " 'endS': 52.42021,\n", " 'palign': 0}],\n", " 'waveformData': [0.0024,\n", " 0.00145,\n", " 0.00026,\n", " 0.05008,\n", " 0.08668,\n", " 0.14601,\n", " 0.08767,\n", " 0.00433,\n", " 0.00227,\n", " 0.08147,\n", " 0.15985,\n", " 0.13624,\n", " 0.12829,\n", " 0.08064,\n", " 0.05752,\n", " 0.12311,\n", " 0.12957,\n", " 0.14846,\n", " 0.11844,\n", " 0.10117,\n", " 0.13034,\n", " 0.11055,\n", " 0.07709,\n", " 0.05685,\n", " 0.02501,\n", " 0.14656,\n", " 0.10793,\n", " 0.16057,\n", " 0.13941,\n", " 0.12291,\n", " 0.1357,\n", " 0.11927,\n", " 0.14904,\n", " 0.10628,\n", " 0.06977,\n", " 0.15169,\n", " 0.16483,\n", " 0.17301,\n", " 0.15712,\n", " 0.16704,\n", " 0.13966,\n", " 0.14572,\n", " 0.05095,\n", " 0.04091,\n", " 0.03502,\n", " 0.12531,\n", " 0.09904,\n", " 0.15637,\n", " 0.13587,\n", " 0.11911,\n", " 0.12038,\n", " 0.12722,\n", " 0.10296,\n", " 0.10861,\n", " 0.10846,\n", " 0.14517,\n", " 0.14039,\n", " 0.12067,\n", " 0.11819,\n", " 0.10695,\n", " 0.12087,\n", " 0.07742,\n", " 0.02993,\n", " 0.15023,\n", " 0.11843,\n", " 0.1133,\n", " 0.13363,\n", " 0.08305,\n", " 0.05272,\n", " 0.04856,\n", " 0.12271,\n", " 0.13456,\n", " 0.1017,\n", " 0.05826,\n", " 0.06904,\n", " 0.11278,\n", " 0.17128,\n", " 0.11561,\n", " 0.12541,\n", " 0.07905,\n", " 0.09782,\n", " 0.07438,\n", " 0.03867,\n", " 0.03002,\n", " 0.03009,\n", " 0.03212,\n", " 0.03605,\n", " 0.03236,\n", " 0.03423,\n", " 0.10645,\n", " 0.15616,\n", " 0.15665,\n", " 0.19944,\n", " 0.18949,\n", " 0.16836,\n", " 0.35886,\n", " 0.2726,\n", " 0.22786,\n", " 0.15631,\n", " 0.13722,\n", " 0.15044,\n", " 0.09713,\n", " 0.13903,\n", " 0.1424,\n", " 0.21145,\n", " 0.31825,\n", " 0.26534,\n", " 0.18763,\n", " 0.16866,\n", " 0.09073,\n", " 0.16109,\n", " 0.09477,\n", " 0.19386,\n", " 0.1828,\n", " 0.22564,\n", " 0.29365,\n", " 0.29561,\n", " 0.21323,\n", " 0.08006,\n", " 0.13708,\n", " 0.17323,\n", " 0.14241,\n", " 0.05998,\n", " 0.0332,\n", " 0.18112,\n", " 0.25064,\n", " 0.32029,\n", " 0.18728,\n", " 0.07016,\n", " 0.07271,\n", " 0.14213,\n", " 0.18954,\n", " 0.14502,\n", " 0.24928,\n", " 0.14018,\n", " 0.18588,\n", " 0.3885,\n", " 0.22415,\n", " 0.0822,\n", " 0.11881,\n", " 0.14206,\n", " 0.18143,\n", " 0.13677,\n", " 0.13571,\n", " 0.14057,\n", " 0.12687,\n", " 0.39083,\n", " 0.21553,\n", " 0.10091,\n", " 0.12723,\n", " 0.10899,\n", " 0.2095,\n", " 0.12927,\n", " 0.235,\n", " 0.17007,\n", " 0.17536,\n", " 0.37607,\n", " 0.20952,\n", " 0.13125,\n", " 0.07863,\n", " 0.14181,\n", " 0.20156,\n", " 0.11611,\n", " 0.03968,\n", " 0.11121,\n", " 0.17693,\n", " 0.36549,\n", " 0.21739,\n", " 0.22707,\n", " 0.19729,\n", " 0.18738,\n", " 0.23218,\n", " 0.2207,\n", " 0.23844,\n", " 0.23672,\n", " 0.25431,\n", " 0.18791,\n", " 0.20719,\n", " 0.19892,\n", " 0.17839,\n", " 0.1102,\n", " 0.10608,\n", " 0.14977,\n", " 0.20302,\n", " 0.154,\n", " 0.17731,\n", " 0.1662,\n", " 0.17365,\n", " 0.12506,\n", " 0.14131,\n", " 0.13431,\n", " 0.12933,\n", " 0.18372,\n", " 0.15119,\n", " 0.13249,\n", " 0.1538,\n", " 0.15832,\n", " 0.22099,\n", " 0.12311,\n", " 0.15133,\n", " 0.14606,\n", " 0.09548,\n", " 0.16636,\n", " 0.12795,\n", " 0.10843,\n", " 0.14071,\n", " 0.09755,\n", " 0.19762,\n", " 0.18621,\n", " 0.1541,\n", " 0.1645,\n", " 0.20159,\n", " 0.18791,\n", " 0.25831,\n", " 0.20984,\n", " 0.20549,\n", " 0.27064,\n", " 0.34967,\n", " 0.26562,\n", " 0.22725,\n", " 0.19375,\n", " 0.21994,\n", " 0.22239,\n", " 0.22568,\n", " 0.26186,\n", " 0.24915,\n", " 0.26614,\n", " 0.37754,\n", " 0.25693,\n", " 0.27504,\n", " 0.2631,\n", " 0.21398,\n", " 0.22903,\n", " 0.12057,\n", " 0.18403,\n", " 0.23384,\n", " 0.24452,\n", " 0.36614,\n", " 0.26112,\n", " 0.22958,\n", " 0.21953,\n", " 0.22764,\n", " 0.22412,\n", " 0.20514,\n", " 0.25245,\n", " 0.22405,\n", " 0.18552,\n", " 0.37504,\n", " 0.22006,\n", " 0.20789,\n", " 0.19554,\n", " 0.19651,\n", " 0.21981,\n", " 0.15264,\n", " 0.28411,\n", " 0.19417,\n", " 0.11382,\n", " 0.16134,\n", " 0.17663,\n", " 0.07858,\n", " 0.02706,\n", " 0.02184,\n", " 0.08633,\n", " 0.04758,\n", " 0.07086,\n", " 0.07412,\n", " 0.07322,\n", " 0.07777,\n", " 0.07332,\n", " 0.04565,\n", " 0.06082,\n", " 0.05819,\n", " 0.08265,\n", " 0.0666,\n", " 0.06084,\n", " 0.05344,\n", " 0.05126,\n", " 0.05003,\n", " 0.05129,\n", " 0.04853,\n", " 0.04825,\n", " 0.04505,\n", " 0.0591,\n", " 0.08663,\n", " 0.04147,\n", " 0.03333,\n", " 0.02818,\n", " 0.02059,\n", " 0.02719,\n", " 0.02584,\n", " 0.02731,\n", " 0.03603,\n", " 0.04302,\n", " 0.04595,\n", " 0.04307,\n", " 0.05182,\n", " 0.07637,\n", " 0.10123],\n", " 'hootCer': 0.41935483870967744,\n", " 'isStreamed': False}}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "code", "execution_count": null, "id": "17ca1a6e-c3a8-4683-958b-14bb3a46e63a", "metadata": {}, "outputs": [], "source": [ "matching = " ] }, { "cell_type": "code", "execution_count": 12, "id": "7dd7bda1-e2ff-4987-88f6-5656ebc8d224", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'word': '[Song ',\n", " 'success': True,\n", " 'startS': 0.79787,\n", " 'endS': 0.80365,\n", " 'palign': 0},\n", " {'word': 'Duration: ',\n", " 'success': True,\n", " 'startS': 0.80481,\n", " 'endS': 0.81522,\n", " 'palign': 0},\n", " {'word': 'Exactly 1 ',\n", " 'success': True,\n", " 'startS': 0.81637,\n", " 'endS': 0.82678,\n", " 'palign': 0},\n", " {'word': 'minute - ',\n", " 'success': True,\n", " 'startS': 0.82794,\n", " 'endS': 0.83719,\n", " 'palign': 0},\n", " {'word': 'Must ',\n", " 'success': True,\n", " 'startS': 0.83834,\n", " 'endS': 0.84297,\n", " 'palign': 0},\n", " {'word': 'be ',\n", " 'success': True,\n", " 'startS': 0.84413,\n", " 'endS': 0.84644,\n", " 'palign': 0},\n", " {'word': 'precisely 60 ',\n", " 'success': True,\n", " 'startS': 0.84759,\n", " 'endS': 0.86147,\n", " 'palign': 0},\n", " {'word': 'seconds]\\n---\\n',\n", " 'success': True,\n", " 'startS': 0.86263,\n", " 'endS': 0.8765,\n", " 'palign': 0},\n", " {'word': '스테이,',\n", " 'success': True,\n", " 'startS': 0.87766,\n", " 'endS': 1.99468,\n", " 'palign': 0},\n", " {'word': '머뭄의 ',\n", " 'success': True,\n", " 'startS': 2.15426,\n", " 'endS': 3.03191,\n", " 'palign': 0},\n", " {'word': '추억을 ',\n", " 'success': True,\n", " 'startS': 3.19149,\n", " 'endS': 3.98936,\n", " 'palign': 0},\n", " {'word': '담아 \\n',\n", " 'success': True,\n", " 'startS': 4.14894,\n", " 'endS': 5.23936,\n", " 'palign': 0},\n", " {'word': '군산에서의 ',\n", " 'success': True,\n", " 'startS': 5.34574,\n", " 'endS': 6.38298,\n", " 'palign': 0},\n", " {'word': '여행을 ',\n", " 'success': True,\n", " 'startS': 6.54255,\n", " 'endS': 7.10106,\n", " 'palign': 0},\n", " {'word': '떠나보세 \\n',\n", " 'success': True,\n", " 'startS': 7.22074,\n", " 'endS': 9.17553,\n", " 'palign': 0},\n", " {'word': '인스타 ',\n", " 'success': True,\n", " 'startS': 9.25532,\n", " 'endS': 9.73404,\n", " 'palign': 0},\n", " {'word': '감성 ',\n", " 'success': True,\n", " 'startS': 9.89362,\n", " 'endS': 10.21277,\n", " 'palign': 0},\n", " {'word': '가득한 ',\n", " 'success': True,\n", " 'startS': 10.37234,\n", " 'endS': 10.77128,\n", " 'palign': 0},\n", " {'word': '사진같은 ',\n", " 'success': True,\n", " 'startS': 10.93085,\n", " 'endS': 11.80851,\n", " 'palign': 0},\n", " {'word': '하루, \\n',\n", " 'success': True,\n", " 'startS': 11.96809,\n", " 'endS': 12.70612,\n", " 'palign': 0},\n", " {'word': '힐링의 ',\n", " 'success': True,\n", " 'startS': 12.76596,\n", " 'endS': 13.48404,\n", " 'palign': 0},\n", " {'word': '시간, ',\n", " 'success': True,\n", " 'startS': 13.60372,\n", " 'endS': 14.24202,\n", " 'palign': 0},\n", " {'word': '감성 ',\n", " 'success': True,\n", " 'startS': 14.3617,\n", " 'endS': 14.76064,\n", " 'palign': 0},\n", " {'word': '숙소에서의 ',\n", " 'success': True,\n", " 'startS': 14.92021,\n", " 'endS': 15.87766,\n", " 'palign': 0},\n", " {'word': '휴식\\n\\n',\n", " 'success': True,\n", " 'startS': 16.03723,\n", " 'endS': 17.91223,\n", " 'palign': 0},\n", " {'word': '은파호수공원의 ',\n", " 'success': True,\n", " 'startS': 18.03191,\n", " 'endS': 19.14894,\n", " 'palign': 0},\n", " {'word': '자연 ',\n", " 'success': True,\n", " 'startS': 19.30851,\n", " 'endS': 19.78723,\n", " 'palign': 0},\n", " {'word': '속, \\n',\n", " 'success': True,\n", " 'startS': 19.94681,\n", " 'endS': 20.76064,\n", " 'palign': 0},\n", " {'word': '시간이 ',\n", " 'success': True,\n", " 'startS': 20.79255,\n", " 'endS': 20.98404,\n", " 'palign': 0},\n", " {'word': '멈춘 ',\n", " 'success': True,\n", " 'startS': 21.14362,\n", " 'endS': 21.54255,\n", " 'palign': 0},\n", " {'word': '듯한 ',\n", " 'success': True,\n", " 'startS': 21.70213,\n", " 'endS': 22.42021,\n", " 'palign': 0},\n", " {'word': '절골길을 ',\n", " 'success': True,\n", " 'startS': 22.57979,\n", " 'endS': 23.29787,\n", " 'palign': 0},\n", " {'word': '걸어봐요 \\n',\n", " 'success': True,\n", " 'startS': 23.45745,\n", " 'endS': 26.6707,\n", " 'palign': 0},\n", " {'word': 'Instagram ',\n", " 'success': True,\n", " 'startS': 26.72147,\n", " 'endS': 27.12766,\n", " 'palign': 0},\n", " {'word': 'vibes, ',\n", " 'success': True,\n", " 'startS': 27.22739,\n", " 'endS': 27.96543,\n", " 'palign': 0},\n", " {'word': '그림 ',\n", " 'success': True,\n", " 'startS': 28.00532,\n", " 'endS': 28.16489,\n", " 'palign': 0},\n", " {'word': '같은 ',\n", " 'success': True,\n", " 'startS': 28.32447,\n", " 'endS': 28.48404,\n", " 'palign': 0},\n", " {'word': '힐링 ',\n", " 'success': True,\n", " 'startS': 28.64362,\n", " 'endS': 28.88298,\n", " 'palign': 0},\n", " {'word': '장소, \\n',\n", " 'success': True,\n", " 'startS': 29.04255,\n", " 'endS': 29.6609,\n", " 'palign': 0},\n", " {'word': '잊지 ',\n", " 'success': True,\n", " 'startS': 29.68085,\n", " 'endS': 29.84043,\n", " 'palign': 0},\n", " {'word': '못할 ',\n", " 'success': True,\n", " 'startS': 30.0,\n", " 'endS': 30.23936,\n", " 'palign': 0},\n", " {'word': '여행 ',\n", " 'success': True,\n", " 'startS': 30.39894,\n", " 'endS': 30.55851,\n", " 'palign': 0},\n", " {'word': '스토리 ',\n", " 'success': True,\n", " 'startS': 30.6383,\n", " 'endS': 30.95745,\n", " 'palign': 0},\n", " {'word': '만들어지네\\n\\n',\n", " 'success': True,\n", " 'startS': 31.11702,\n", " 'endS': 33.39096,\n", " 'palign': 0},\n", " {'word': '넷이서 ',\n", " 'success': True,\n", " 'startS': 33.51064,\n", " 'endS': 34.94681,\n", " 'palign': 0},\n", " {'word': '웃고 ',\n", " 'success': True,\n", " 'startS': 35.10638,\n", " 'endS': 36.38298,\n", " 'palign': 0},\n", " {'word': '떠들던 ',\n", " 'success': True,\n", " 'startS': 36.54255,\n", " 'endS': 37.02128,\n", " 'palign': 0},\n", " {'word': '그 ',\n", " 'success': True,\n", " 'startS': 37.18085,\n", " 'endS': 37.18085,\n", " 'palign': 0},\n", " {'word': '날의 ',\n", " 'success': True,\n", " 'startS': 37.34043,\n", " 'endS': 37.65957,\n", " 'palign': 0},\n", " {'word': '사진 ',\n", " 'success': True,\n", " 'startS': 37.81915,\n", " 'endS': 38.29787,\n", " 'palign': 0},\n", " {'word': '속, \\n',\n", " 'success': True,\n", " 'startS': 38.45745,\n", " 'endS': 38.93617,\n", " 'palign': 0},\n", " {'word': '그 ',\n", " 'success': True,\n", " 'startS': 39.01596,\n", " 'endS': 39.01596,\n", " 'palign': 0},\n", " {'word': '순간 ',\n", " 'success': True,\n", " 'startS': 39.17553,\n", " 'endS': 39.73404,\n", " 'palign': 0},\n", " {'word': '훌쩍 ',\n", " 'success': True,\n", " 'startS': 39.89362,\n", " 'endS': 40.37234,\n", " 'palign': 0},\n", " {'word': '떠나볼까요, ',\n", " 'success': True,\n", " 'startS': 40.49202,\n", " 'endS': 41.48936,\n", " 'palign': 0},\n", " {'word': '새로운 ',\n", " 'success': True,\n", " 'startS': 41.56915,\n", " 'endS': 41.8883,\n", " 'palign': 0},\n", " {'word': '길로 \\n',\n", " 'success': True,\n", " 'startS': 42.04787,\n", " 'endS': 43.61702,\n", " 'palign': 0},\n", " {'word': '스테이,',\n", " 'success': True,\n", " 'startS': 43.7234,\n", " 'endS': 45.23936,\n", " 'palign': 0},\n", " {'word': '머뭄이 ',\n", " 'success': True,\n", " 'startS': 45.31915,\n", " 'endS': 46.03723,\n", " 'palign': 0},\n", " {'word': '준비한 ',\n", " 'success': True,\n", " 'startS': 46.15691,\n", " 'endS': 46.35638,\n", " 'palign': 0},\n", " {'word': '특별한 ',\n", " 'success': True,\n", " 'startS': 46.51596,\n", " 'endS': 47.39362,\n", " 'palign': 0},\n", " {'word': '여행지 \\n',\n", " 'success': True,\n", " 'startS': 47.55319,\n", " 'endS': 48.45745,\n", " 'palign': 0},\n", " {'word': '몸과 ',\n", " 'success': True,\n", " 'startS': 48.51064,\n", " 'endS': 48.75,\n", " 'palign': 0},\n", " {'word': '마음이 ',\n", " 'success': True,\n", " 'startS': 48.86968,\n", " 'endS': 49.3883,\n", " 'palign': 0},\n", " {'word': '따뜻해지는 ',\n", " 'success': True,\n", " 'startS': 49.54787,\n", " 'endS': 50.74468,\n", " 'palign': 0},\n", " {'word': '그런 ',\n", " 'success': True,\n", " 'startS': 50.90426,\n", " 'endS': 51.14362,\n", " 'palign': 0},\n", " {'word': '곳이에요 \\n---\\n\\n',\n", " 'success': True,\n", " 'startS': 51.30319,\n", " 'endS': 52.42021,\n", " 'palign': 0}]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [] }, { "cell_type": "code", "execution_count": 11, "id": "a8df83b4-99ef-4751-8c98-e5423c5c2494", "metadata": {}, "outputs": [], "source": [ "aligned_words = data['data']['alignedWords']" ] }, { "cell_type": "code", "execution_count": 36, "id": "c1a1b2be-0796-4e40-b8bf-cd7c08e81e3e", "metadata": {}, "outputs": [ { "ename": "_IncompleteInputError", "evalue": "incomplete input (2013651467.py, line 9)", "output_type": "error", "traceback": [ " \u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[36]\u001b[39m\u001b[32m, line 9\u001b[39m\n\u001b[31m \u001b[39m\n ^\n\u001b[31m_IncompleteInputError\u001b[39m\u001b[31m:\u001b[39m incomplete input\n" ] } ], "source": [ "alignment_lyric = {}\n", "lyric_index = 0 \n", "word_index = 0\n", "\n", "word_start_flag = False\n", "\n", "while (lyric_index < len(lyric_line_list) and word_index < len(aligned_words)):\n", " current_lyric_block = lyric_line_list[lyric_index]\n", " current_word = aligned_words[word_index]\n", " if not word_start_flag:\n", " if \"---\" in current_word:\n", " word_start_flag = True\n", " try:\n", " aligned_words[word_index + 1].strip(\"\\n\") in current_lyric_block\n", " except:\n", " print(\"matching failed\")\n", " break;\n", "\n", " \n", " \n", " \n", "for aligned_word in aligned_words:\n", " if not aligned_word['succsess']:\n", " continue\n", " if aligned_word['word'] in lyric_line_list[lyric_index]:\n", " if lyric_index in alignment_lyric:\n", " raise Exception\n", " else:\n", " \n", " \n", " \n", " " ] }, { "cell_type": "code", "execution_count": null, "id": "c59c4eb1-d916-4d3a-8d02-a212b45f20ba", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.8" } }, "nbformat": 4, "nbformat_minor": 5 }