{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c2843e05",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T01:39:49.220699Z",
     "start_time": "2023-10-13T01:39:49.218725Z"
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c8a532ac",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T01:39:52.483723Z",
     "start_time": "2023-10-13T01:39:49.446625Z"
    }
   },
   "outputs": [],
   "source": [
    "import tqdm\n",
    "import math\n",
    "import torch\n",
    "import random\n",
    "import funcy\n",
    "import copy\n",
    "import gc\n",
    "import re\n",
    "import json\n",
    "import tempfile\n",
    "import collections\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import fasttext\n",
    "from joblib import Parallel, delayed\n",
    "\n",
    "from suno_utils.audio import Audio\n",
    "from suno_utils.utils.display import capture_output\n",
    "from suno_utils.utils.text import write_jsonl, read_jsonl, write_json, read_json, normalize_whitespace\n",
    "from suno_utils.utils.s3 import read_from_s3, check_s3_file_exists, open_from_s3\n",
    "from suno_utils.utils.tokenizers import tokenize\n",
    "from suno_utils.harvest.youtube.constants.text_lang import BASE_TO_FASTTEXT_REMAP"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "1c8f9ac4",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T01:43:09.091471Z",
     "start_time": "2023-10-13T01:40:23.694587Z"
    }
   },
   "outputs": [],
   "source": [
    "genius_metas = read_from_s3(\"s3://suno-data/georg/tmp/genius_hq.jsonl\", read_f=read_jsonl)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e15088f9",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T01:59:29.795196Z",
     "start_time": "2023-10-13T01:59:29.790699Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1377329"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(genius_metas)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f605dd52",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T02:00:21.973591Z",
     "start_time": "2023-10-13T02:00:21.754659Z"
    }
   },
   "outputs": [],
   "source": [
    "selected_metas = [meta for meta in genius_metas if \"text_segments\" in meta]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "75461115",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T02:00:22.752383Z",
     "start_time": "2023-10-13T02:00:22.749806Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "685557"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(selected_metas)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "9fb05016",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T02:01:40.978450Z",
     "start_time": "2023-10-13T02:01:40.726185Z"
    }
   },
   "outputs": [],
   "source": [
    "further_selected_metas = [meta for meta in selected_metas if len(meta[\"text_segments\"]) >= 5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "781b555a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T02:01:41.834195Z",
     "start_time": "2023-10-13T02:01:41.831556Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4638"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(further_selected_metas)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "33880f25",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T02:03:17.377611Z",
     "start_time": "2023-10-13T02:03:17.371123Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "400.2786111111111"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum(meta[\"duration_s\"] for meta in further_selected_metas) / 3600"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "7ba7607e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T02:01:48.709555Z",
     "start_time": "2023-10-13T02:01:48.706329Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'id': '378930a5-0323-4b9a-9663-37a59819c49d',\n",
       " 'original_id': '10cc-yvonnes-the-one-lyrics',\n",
       " 'views': 19406,\n",
       " 'lang': 'en',\n",
       " 'text_segments': [{'text': '[Verse 1]\\nWhen I first saw Yvonne, volcanoes erupted\\nAnd her laughter flowed into my life\\nShe seemed so right, nothing wrong\\nEverything about her was so strong\\nSo I waited for the magic to start\\nSomebody touch me deep in my heart\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been dreaming on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"You\\'re wrong Yvonne\"\\n[Verse 2]\\nWhen I saw her again, I was caught in a landslide\\nBut I didn\\'t dare let it show\\nHer ruby lips were teasing me\\nBut jealousy would never let us be\\nSo I waited for the magic to start\\nBut I know it\\'s gonna tear us apart\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been dreaming on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"You\\'re wrong Yvonne\"\\n\\n[Bridge]\\nShe\\'ll never know how much I loved her\\nI never got to tell',\n",
       "   'private_text': '[Verse 1]\\nWhen I first saw Yvonne, volcanoes erupted\\nAnd her laughter flowed into my life\\nShe seemed so right, nothing wrong\\nEverything about her was so strong\\nSo I waited for the magic to start\\nSomebody touch me deep in my heart\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been dreaming on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"You\\'re wrong Yvonne\"\\n[Verse 2]\\nWhen I saw her again, I was caught in a landslide\\nBut I didn\\'t dare let it show\\nHer ruby lips were teasing me\\nBut jealousy would never let us be\\nSo I waited for the magic to start\\nBut I know it\\'s gonna tear us apart\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been dreaming on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"You\\'re wrong Yvonne\"\\n\\n[Bridge]\\nShe\\'ll never know how much I loved her\\nI never got to tell',\n",
       "   'start_s': 21.14,\n",
       "   'end_s': 138.67},\n",
       "  {'text': 'We never had the chance to say farewell',\n",
       "   'private_text': '\\nWe never had the chance to say farewell',\n",
       "   'start_s': 138.67,\n",
       "   'end_s': 146.81},\n",
       "  {'text': '[Verse 3]\\nWhen I last saw Yvonne\\nShe was covered in roses\\nBut the laughter had gone from her eyes\\nShe walked so tall, she looked so grand\\nEverything about her truly planned\\nBut what you get is not what you see\\n\"So long Yvonne, you\\'re not fooling me\"',\n",
       "   'private_text': '\\n\\n[Verse 3]\\nWhen I last saw Yvonne\\nShe was covered in roses\\nBut the laughter had gone from her eyes\\nShe walked so tall, she looked so grand\\nEverything about her truly planned\\nBut what you get is not what you see\\n\"So long Yvonne, you\\'re not fooling me\"',\n",
       "   'start_s': 168.82,\n",
       "   'end_s': 201.87},\n",
       "  {'text': '[Chorus]\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"So long Yvonne\"\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"So long Yvonne\"',\n",
       "   'private_text': '\\n\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"So long Yvonne\"\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"So long Yvonne\"',\n",
       "   'start_s': 201.87,\n",
       "   'end_s': 252.21},\n",
       "  {'text': '[Outro]\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"',\n",
       "   'private_text': '\\n\\n[Outro]\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"',\n",
       "   'start_s': 253.8,\n",
       "   'end_s': 267.21}],\n",
       " 'duration_s': 267,\n",
       " 'private_text': '[Verse 1]\\nWhen I first saw Yvonne, volcanoes erupted\\nAnd her laughter flowed into my life\\nShe seemed so right, nothing wrong\\nEverything about her was so strong\\nSo I waited for the magic to start\\nSomebody touch me deep in my heart\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been dreaming on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"You\\'re wrong Yvonne\"\\n[Verse 2]\\nWhen I saw her again, I was caught in a landslide\\nBut I didn\\'t dare let it show\\nHer ruby lips were teasing me\\nBut jealousy would never let us be\\nSo I waited for the magic to start\\nBut I know it\\'s gonna tear us apart\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been dreaming on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"You\\'re wrong Yvonne\"\\n\\n[Bridge]\\nShe\\'ll never know how much I loved her\\nI never got to tell\\nWe never had the chance to say farewell\\n\\n[Verse 3]\\nWhen I last saw Yvonne\\nShe was covered in roses\\nBut the laughter had gone from her eyes\\nShe walked so tall, she looked so grand\\nEverything about her truly planned\\nBut what you get is not what you see\\n\"So long Yvonne, you\\'re not fooling me\"\\n\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"So long Yvonne\"\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"So long Yvonne\"\\n\\n[Outro]\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"',\n",
       " 'text': '[Verse 1]\\nWhen I first saw Yvonne, volcanoes erupted\\nAnd her laughter flowed into my life\\nShe seemed so right, nothing wrong\\nEverything about her was so strong\\nSo I waited for the magic to start\\nSomebody touch me deep in my heart\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been dreaming on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"You\\'re wrong Yvonne\"\\n[Verse 2]\\nWhen I saw her again, I was caught in a landslide\\nBut I didn\\'t dare let it show\\nHer ruby lips were teasing me\\nBut jealousy would never let us be\\nSo I waited for the magic to start\\nBut I know it\\'s gonna tear us apart\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been dreaming on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"You\\'re wrong Yvonne\"\\n\\n[Bridge]\\nShe\\'ll never know how much I loved her\\nI never got to tell\\nWe never had the chance to say farewell\\n\\n[Verse 3]\\nWhen I last saw Yvonne\\nShe was covered in roses\\nBut the laughter had gone from her eyes\\nShe walked so tall, she looked so grand\\nEverything about her truly planned\\nBut what you get is not what you see\\n\"So long Yvonne, you\\'re not fooling me\"\\n\\n\\n[Chorus]\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"So long Yvonne\"\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"\\nAnd so I said, \"So long Yvonne\"\\n\\n[Outro]\\nYvonne\\'s the one I\\'ve been counting on\\nShe said, \"Hold on, you\\'re not the only one\"',\n",
       " 'tags': ['Cover', 'Singer-Songwriter', 'Pop'],\n",
       " 'private_tags': [\"10cc - Yvonne's the one (1995)\",\n",
       "  'Cover',\n",
       "  'Singer-Songwriter',\n",
       "  'Pop']}"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "further_selected_metas[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "f0af5c57",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T02:05:54.523095Z",
     "start_time": "2023-10-13T02:05:54.482180Z"
    }
   },
   "outputs": [],
   "source": [
    "test_a = Audio.from_file(\"/home/victor/glockenspiel/s3prl/data/LibriSpeech/train-clean-100/307/127539/307-127539-0001.flac\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "2c5000d8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T02:05:55.184176Z",
     "start_time": "2023-10-13T02:05:55.181660Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "16.0"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_a.duration_s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "8d3c6fbe",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T02:30:31.714909Z",
     "start_time": "2023-10-13T02:30:30.822345Z"
    }
   },
   "outputs": [],
   "source": [
    "test_txt = read_from_s3(\"s3://suno-data/datasets/MSP-Podcast/readme.txt\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "e9b398b3",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-10-13T02:30:49.084937Z",
     "start_time": "2023-10-13T02:30:49.083066Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "##################################################\n",
      "#                                                #\n",
      "#             MSP-PODCAST Database               #\n",
      "#          The University of Texas at Dallas     #\n",
      "#  Multimodal Signal Processing (MSP) Laboratory # \n",
      "#             Contact: Prof. Carlos Busso        # \n",
      "#              Release 1.10 (May 3, 2022)        #   \n",
      "#                                                #\n",
      "##################################################\n",
      "\n",
      "The corpus includes:\n",
      "\t- readme.txt (this file)\n",
      "\t- Speaker_ids.txt (speaker information)\n",
      "\t- Partition.txt (suggested partition for Train, Development, Test1 and Test2 sets)\n",
      "\t- Folder Audios (it contains the audio files of the corpus - 104,267 speaking turns, which is 166 hours and 9 mins)\n",
      "\t- Folder \"Labels/\" (emotional labels for the corpus)\n",
      "\t\t- labels.txt (raw file with emotional annotation information) \n",
      "\t\t- labels_consensus.csv (aggregated annotations in CSV format)\n",
      "\t\t- labels_detailed.csv (detailed individual annotations in CSV format)\n",
      "\t\t- labels_consensus.json (aggregated annotations in JSON format)\n",
      "\t\t- labels_detailed.json (detailed individual annotations in JSON format)\n",
      "\t- Folder Transcripts (it contains human labeled audio transcripts of the corpus - 104,267 speaking turns have been transcribed)\n",
      "    - Folder ForceAligned (it contains force alignment results based on the manual transcripts of the corpus - 104,267 speaking turns have been aligned)\n",
      "\n",
      " \n",
      "************************************\n",
      "    Partition \n",
      "************************************\n",
      "\n",
      "The proposed partition attempts to create speaker independent datasets for Train, Development, Test1 and Test2 sets.\n",
      "\n",
      "- Test set 1: We use segments from 60 speakers (30 female, 30 male) - 16,903 segments\n",
      "- Test set 2: We randomly select 13,289 segments from 100 podcasts. Segments from these podcasts are not included in any other partition. \n",
      "- Development set: We use segments from 45 speakers (23 female, 22 male) - 10,999 segments\n",
      "- Train set: We use the remaining speech samples - 63,076 segments\n",
      "\n",
      "************************************\n",
      "    Emotional Labels \n",
      "************************************\n",
      "\n",
      "The emotional labels are in the folder \"Labels\". The main file is labels.txt, which contains all the emotional evaluations collected for this set. The format of this file is explained below. In addition, we include the emotional labels and meta-information in CSV and JSON format:\n",
      "\n",
      "CSV format: \t[labels_consensus.csv, \tlabels_detailed.csv]\n",
      "JSON format: \t[labels_consensus.json, labels_detailed.json]\n",
      "\n",
      "labels_consensus => include: emotion labels after aggregating the annotations (primary emotion, secondary emotions, emotional attributes), gender, speaker and split set information.\n",
      "labels_detailed => individual annotation provided by each worker to each sentence \n",
      "\n",
      "\n",
      "The database label file (labels.txt) is organized as follows:\n",
      "\n",
      "The annotations of each audio file are shown together with an empty line separating the annotations of different files. This is an example of one file:\n",
      "\n",
      "MSP-PODCAST_0001_0139.wav; N; A:2.400000; V:4.000000; D:2.800000;\n",
      "WORKER00000001; Other-confused; Concerned,Confused; A:3.000000; V:3.000000; D:4.000000;\n",
      "WORKER00000018; Neutral; Neutral; A:1.000000; V:4.000000; D:2.000000;\n",
      "WORKER00000021; Neutral; Neutral; A:3.000000; V:4.000000; D:2.000000;\n",
      "WORKER00000028; Neutral; Neutral; A:2.000000; V:4.000000; D:3.000000;\n",
      "WORKER00000044; Surprise; Neutral,Surprise; A:3.000000; V:5.000000; D:3.000000;\n",
      "\n",
      "[next file] ...\n",
      "\n",
      "Explanation about the annotation:\n",
      "We are collecting three set of information:\n",
      "\n",
      "1-) Arousal, valence and dominance\n",
      "\t- we use Self-Assessment Manikin (SAM) where rankings go from 1 to 7\n",
      "\t- valence (1-very negative; 7-very positive)\n",
      "\t- arousal (1-very calm; 7-very active)\n",
      "\t- dominance (1-very weak; 7-very strong)\n",
      "\n",
      "2-) primary emotions (categorical)\n",
      "\t- only one option is allowed\n",
      "\t- you can say \"other\" and define your own emotional class\n",
      "\n",
      "Primary emotions and the consensus emotion code:\n",
      "Angry\t\t(A)\n",
      "Sad\t\t(S)\n",
      "Happy\t\t(H)\n",
      "Surprise\t(U)\n",
      "Fear\t\t(F)\n",
      "Disgust\t\t(D)\n",
      "Contempt\t(C)\n",
      "Neutral\t\t(N)\n",
      "Other\t\t(O)\n",
      "No agreement    (X)\t//when there is no plurality voting winner between the above emotions\n",
      "\n",
      "\n",
      "3-) secondary emotions\n",
      "\t- you can select as many emotional classes as you want\n",
      "\t- you can also select \"other\" and specify the emotional class\n",
      "\n",
      "Secondary emotions:\n",
      "\n",
      "Angry\n",
      "Sad\n",
      "Happy\n",
      "Amused\n",
      "Neutral\n",
      "Frustrated\n",
      "Depressed\n",
      "Surprise\n",
      "Concerned\n",
      "Disgust\n",
      "Disappointed\n",
      "Excited\n",
      "Confused\n",
      "Annoyed\n",
      "Fear\n",
      "Contempt\n",
      "Other\n",
      "\n",
      "Few explanations about this format:\n",
      "1)- the first line brings a summary of the sentence. First, it provides the name of the segment (in this case MSP-PODCAST_0001_0139.wav). Then it provides the consensus (plurality vote) of primary emotion (in this case \"N\" for Neutral since 3 our of 5 people selected this option). Then, it provides the average values for A: activation (2.4), V:valence (4.0) and D:dominance (2.8)\n",
      "\n",
      "2)- The next lines provide individual evaluations from evaluators\n",
      "\ta) first, it is the ID that we assigned to workers (e.g., WORKER00000001 for the first evaluator).\n",
      "\tb) Then, it lists the primary emotion ('Other-confused'). They can choose from Angry, Sad, Happy, Surprise, Fear, Disgust, Contempt, Neutral and Other. In the first case they chose Other, and then they suggested the label \"confused\"\n",
      "\tc) Then, it lists the secondary emotion ('Concerned,Confused'). They can choose from the following list: Angry, Sad, Happy, Amused, Neutral, Frustrated, Depressed, Surprise, Concerned, Disgust, Disappointed, Excited, Confused, Annoyed, Fear, Contempt, Other. A key difference here is that they can choose multiple options as oppose to primary emotions where they can only select one. \n",
      "\td) The values for arousal, valence and dominance (A:3.000000; V:3.000000; D:4.000000;)\n",
      "\n",
      "************************************\n",
      "    Speaker Information\n",
      "************************************\n",
      "\n",
      "We have manually annotated the speaker identity of 82,594 sentences corresponding to 1,432 speakers. The file Speaker_ids.txt provides the details. It also provides the gender of the speakers. \n",
      "\n",
      "************************************\n",
      "  Transcripts and ForceAligned\n",
      "************************************\n",
      "\n",
      "We have transcribed the corpus for a total of 104,267 speaking turns. We provide human transcriptions in the zip file 'Transcripts.zip' and the corresponding forced alignment results in 'ForceAligned.zip'. The transcriptions are labeled by REV.com (https://www.rev.com), we use Montreal-Forced-Aligner (MFA, https://montreal-forced-aligner.readthedocs.io/en/latest/) to obtain the force alignment results. The pretrained acoustic model for forced alignment was based on the LibriSpeech dataset.\n",
      "\n",
      "- The provided file format in the 'Transcripts.zip' is plain text (e.g., MSP-PODCAST_0001_0143.txt)\n",
      "- The provided file format in the 'ForceAligned.zip' is TextGrid format (e.g., MSP-PODCAST_0001_0143.TextGrid), users can directly load the file via Praat (https://www.fon.hum.uva.nl/praat/)\n",
      "\n",
      "************************************\n",
      "    Description of the database\n",
      "************************************\n",
      "\n",
      "For further information on the corpus, please read:\n",
      "\n",
      "Reza Lotfian and Carlos Busso, \"Building naturalistic emotionally balanced speech corpus by retrieving emotional speech from existing podcast recordings,\" IEEE Transactions on Affective Computing, vol. 10, no. 4, pp. 471-483, October-December 2019.\n",
      "\n",
      "************************************\n",
      "    Contact Information\n",
      "************************************\n",
      "\n",
      "If you have any feedback or question, please contact Prof. Carlos Busso (busso@utdallas.edu)\n",
      "\n",
      "Prof. Carlos Busso\n",
      "Professor \n",
      "The University of Texas at Dallas \n",
      "Erik Jonsson School of Engineering and Computer Science\n",
      "Department of Electrical and Computer Engineering, \n",
      "800 West Campbell Road, ECSN \n",
      "Richardson, TX  75080-3021 \n",
      "busso@utdallas.edu\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(test_txt)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "75388b8a",
   "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.10.12"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
