This shows you the differences between two versions of the page.
pm:prj2023:avaduva:arduino-ipod [2023/05/26 20:13] cosmin.petolea |
pm:prj2023:avaduva:arduino-ipod [2023/05/27 15:27] (current) cosmin.petolea |
||
---|---|---|---|
Line 114: | Line 114: | ||
* Audio Frequency = 16000 Hz | * Audio Frequency = 16000 Hz | ||
* Audio Channels = Mono | * Audio Channels = Mono | ||
+ | |||
+ | Pentru a seta acest format audio în mod automat melodiilor, am creat un script de Python care primește folder-ul de melodii în orice format (mp3, flac etc.) și le setează ca mai sus. | ||
+ | === Script Python WAV === | ||
+ | <code python> | ||
+ | from pydub import AudioSegment | ||
+ | import os | ||
+ | |||
+ | path = input("Path: ") | ||
+ | if not os.path.exists("wav_out"): | ||
+ | os.mkdir("wav_out") | ||
+ | |||
+ | def convert_audio(file): | ||
+ | audio = AudioSegment.from_file(os.path.join(path, file)) | ||
+ | |||
+ | # Set channels to mono | ||
+ | audio = audio.set_channels(1) | ||
+ | |||
+ | # Set frame_rate (frequency) to 16000 | ||
+ | audio = audio.set_frame_rate(16000) | ||
+ | |||
+ | # Set sample_width (bit resolution) to 8 | ||
+ | audio = audio.set_sample_width(1) # 1 byte = 8 bit | ||
+ | |||
+ | # Save the result | ||
+ | audio.export(os.path.join("wav_out", os.path.splitext(file)[0] + ".wav"), format="wav") | ||
+ | |||
+ | if __name__ == '__main__': | ||
+ | files = [filename for filename in os.listdir(path) if | ||
+ | os.path.isfile(os.path.join(path, filename))] | ||
+ | for file in files: | ||
+ | convert_audio(file) | ||
+ | </code> | ||
Pentru a pune fișierele pe SD, ele trebuiesc formatate astfel încât să poată fi interpretate de codul arduino. Pentru a facilita acest lucru, am creat un script de Python care primește path-ul către un director, extrage toate fișierele WAV și creează un nou folder în acel director care conține versiunea formatată a fișierelor, pregătită pentru copiere pe SD. | Pentru a pune fișierele pe SD, ele trebuiesc formatate astfel încât să poată fi interpretate de codul arduino. Pentru a facilita acest lucru, am creat un script de Python care primește path-ul către un director, extrage toate fișierele WAV și creează un nou folder în acel director care conține versiunea formatată a fișierelor, pregătită pentru copiere pe SD. | ||
- | === Script Python === | + | === Script Python Formatare === |
<code python> | <code python> | ||
import re | import re | ||
Line 155: | Line 187: | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | Demo: https://drive.google.com/file/d/1WAYAqx93Ky4MkJhvtuAF9bdixta-ynb7/view?usp=sharing | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
Line 164: | Line 198: | ||
* Memoria unui Arduino este extrem de limitată față de un PC sau chiar și un Android. Am fost foarte suprins să văd un vector de string-uri ocupând întreaga memorie, și a fost o experiență nouă și educativă să vin cu un sistem care să nu aibă codul de Arduino ca bottleneck pentru numărul maxim de melodii acceptate. | * Memoria unui Arduino este extrem de limitată față de un PC sau chiar și un Android. Am fost foarte suprins să văd un vector de string-uri ocupând întreaga memorie, și a fost o experiență nouă și educativă să vin cu un sistem care să nu aibă codul de Arduino ca bottleneck pentru numărul maxim de melodii acceptate. | ||
* Logica Butoanelor a fost mai complicată decât mă așteptam. Eu le estimam dificultatea de implementare ca și componente separate însă nu mă gândisem la combinația lor, care s-a dovedit a fi un challenge mult mai mare. | * Logica Butoanelor a fost mai complicată decât mă așteptam. Eu le estimam dificultatea de implementare ca și componente separate însă nu mă gândisem la combinația lor, care s-a dovedit a fi un challenge mult mai mare. | ||
+ | Experiențele preferate: | ||
+ | * A fost ceva foarte util și nou să învăț să lucrez cu librării în afara celei standard de Arduino, în mod particular TMRpcm. | ||
+ | * Dezvoltarea sistemului de next_index și a scriptului de Python a fost un challenge foarte satisfăcător, atât ca design, cât și ca logică algoritmică. | ||
+ | * Testarea finală în care am văzut toata munca de circuit și coding funcționând exact așa cum ar trebui mi-a oferit foarte multă satisfacție. Încă folosesc proiectul pe post de music player în loc de Spotify doar pentru că știu că este music player-ul "meu", făcut de mine. | ||
===== Download ===== | ===== Download ===== | ||
+ | |||
+ | {{:pm:prj2023:avaduva:petolea_cosmin_335cb.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
+ | 07.05.2023 - Adăugare documentație\\ | ||
+ | 19.05.2023 - Completat hardware\\ | ||
+ | 25.05.2023 - Completat Software\\ | ||
+ | 27.05.2023 - Finalizat Documentație\\ | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | * https://www.instructables.com/Audio-Player-Using-Arduino-With-Micro-SD-Card/ | ||
+ | * https://ocw.cs.pub.ro/courses/pm | ||
+ | * https://reference.arduino.cc/reference/en/libraries/sd/ | ||
+ | * https://reference.arduino.cc/reference/en/libraries/tmrpcm/ | ||
+ | * https://reference.arduino.cc/reference/en/libraries/liquidcrystal-i2c/ | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |