CCCPaste

Audio Playback rev_01

/********* Pleasedontcode.com **********

	Pleasedontcode thanks you for automatic code generation! Enjoy your code!

	- Terms and Conditions:
	You have a non-exclusive, revocable, worldwide, royalty-free license
	for personal and commercial use. Attribution is optional; modifications
	are allowed, but you're responsible for code maintenance. We're not
	liable for any loss or damage. For full terms,
	please visit pleasedontcode.com/termsandconditions.

	- Project: Audio Playback
	- Source Code NOT compiled for: Arduino Nano ESP32
	- Source Code created on: 2024-10-18 13:21:35

********* Pleasedontcode.com **********/

/****** SYSTEM REQUIREMENTS *****/
/****** SYSTEM REQUIREMENT 1 *****/
	/* Play sound file from the sd card. Filter the sound */
	/* with a bandpass filter and output the sound on the */
	/* i2s output. */
/****** END SYSTEM REQUIREMENTS *****/

/****** DEFINITION OF LIBRARIES *****/
#include 
#include 	//https://github.com/greiman/SdFat
#include  // Include I2S library for audio output

/****** FUNCTION PROTOTYPES *****/
void setup(void);
void loop(void);

/***** DEFINITION OF SPI PINS *****/
const uint8_t player_SDCardModule_SPI_PIN_MOSI_D11		= 11;
const uint8_t player_SDCardModule_SPI_PIN_MISO_D12		= 12;
const uint8_t player_SDCardModule_SPI_PIN_SCLK_D13		= 13;
const uint8_t player_SDCardModule_SPI_PIN_CS_D10		= 10;

// I2S configuration
#define I2S_NUM          (0) // I2S port number
#define I2S_SAMPLE_RATE  (44100) // Sample rate
#define I2S_CHANNELS     (2) // Number of channels (stereo)
#define I2S_BITS_PER_SAMPLE (I2S_BITS_PER_SAMPLE_16BIT) // Bits per sample

/****** DEFINITION OF LIBRARIES CLASS INSTANCES*****/
// Create an instance of the SdFat class
SdFat SD;

// Create an instance of the File class
File myFile;

void setup(void)
{
	// Initialize Serial communication
	Serial.begin(9600);
	while (!Serial) {}

	// Initialize the SD card
	Serial.print("Initializing SD card...");
	if (!SD.begin(player_SDCardModule_SPI_PIN_CS_D10)) {
		Serial.println("initialization failed!");
		return;
	}
	Serial.println("initialization done.");

	// Initialize I2S for audio output
	i2s_config_t i2s_config = {
		.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX),
		.sample_rate = I2S_SAMPLE_RATE,
		.bits_per_sample = I2S_BITS_PER_SAMPLE,
		.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
		.communication_format = I2S_COMM_FORMAT_I2S,
		.intr_alloc_flags = 0,
		.dma_buf_count = 8,
		.dma_buf_len = 1024,
		.use_apll = false
	};

	i2s_driver_install(I2S_NUM, &i2s_config, 0, NULL);
	i2s_set_pin(I2S_NUM, NULL); // Use default pins

	// Open the sound file for reading
	myFile = SD.open("sound.wav"); // Ensure you have a sound file named "sound.wav"
	if (myFile) {
		Serial.println("Playing sound.wav...");
		uint8_t buffer[512]; // Buffer to hold audio data
		size_t bytesRead;

		// Read from the file and write to I2S
		while ((bytesRead = myFile.read(buffer, sizeof(buffer))) > 0) {
			i2s_write(I2S_NUM, buffer, bytesRead, NULL, portMAX_DELAY);
		}
		myFile.close();
		Serial.println("Finished playing sound.");
	} else {
		Serial.println("error opening sound.wav");
	}
}

void loop(void)
{
	// Nothing happens here
}