{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","source":["#Pandya\n","#May 2024\n","# Taking a wav file and convert it to csv file\n","\n","# Step 1: Install necessary libraries\n","from google.colab import drive\n","drive.mount('/content/drive')\n","\n","!pip install scipy simplification\n","\n","# Step 2: Import necessary libraries\n","import numpy as np\n","import scipy.io.wavfile as wavfile\n","import csv\n","from simplification.cutil import simplify_coords_vw\n","\n","# Step 3: Function to read WAV file and extract audio data\n","def read_wav(file_path):\n","    sample_rate, data = wavfile.read(file_path)\n","    if data.ndim > 1:  # Stereo to mono\n","        data = np.mean(data, axis=1)\n","    return sample_rate, data\n","\n","# Step 4: Function to downsample the data\n","def downsample_data(data, num_points=1000):\n","    factor = len(data) // num_points\n","    downsampled_data = data[::factor]\n","    return downsampled_data\n","\n","# Step 5: Function to simplify the data using Ramer-Douglas-Peucker algorithm\n","def simplify_data(data, num_points=40):\n","    coords = np.column_stack((np.arange(len(data)), data))\n","    tolerance = 1.0\n","    simplified_coords = simplify_coords_vw(coords, tolerance)\n","    while len(simplified_coords) > num_points:\n","        tolerance += 0.1\n","        simplified_coords = simplify_coords_vw(coords, tolerance)\n","    return simplified_coords\n","\n","# Step 6: Function to save simplified data to CSV\n","def save_to_csv(coords, output_path):\n","    with open(output_path, 'w', newline='') as csvfile:\n","        writer = csv.writer(csvfile)\n","        writer.writerow(['Index', 'Value'])\n","        writer.writerows(coords)\n","\n","# Step 7: Main function to perform the entire process\n","def wav_to_csv(wav_path, csv_path, downsample_points=1000, num_points=40):\n","    sample_rate, data = read_wav(wav_path)\n","    downsampled_data = downsample_data(data, downsample_points)\n","    simplified_coords = simplify_data(downsampled_data, num_points)\n","    save_to_csv(simplified_coords, csv_path)\n","    print(f\"Simplified data saved to {csv_path}\")\n","\n","# Example usage\n","wav_path = '/content/drive/MyDrive/Colab Notebooks/Finger Data/FYPR80BPM_Maneth_Skyelar.wav'  # Update with your WAV file path\n","csv_path = '/content/drive/MyDrive/Colab Notebooks/Finger Data/FYPR80BPM_Maneth_Skyelar_40Points.csv'\n","wav_to_csv(wav_path, csv_path)\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"yc_WOFjkVKK2","executionInfo":{"status":"ok","timestamp":1715745931183,"user_tz":300,"elapsed":116069,"user":{"displayName":"Namrata Pandya","userId":"18225567327100899870"}},"outputId":"39eb28aa-b3f2-4533-8c77-ce4b8f0418ae"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n","Requirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (1.11.4)\n","Requirement already satisfied: simplification in /usr/local/lib/python3.10/dist-packages (0.7.10)\n","Requirement already satisfied: numpy<1.28.0,>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from scipy) (1.25.2)\n","Simplified data saved to /content/drive/MyDrive/Colab Notebooks/Finger Data/FYPR80BPM_Maneth_Skyelar_40Points.csv\n"]}]}]}