В настоящее время я пишу проект с использованием процессора ARM.Код написан на C, и я хочу воспроизвести звук.У меня есть этот бит кода здесь:
#include <stdbool.h>
void sound(int buffer[], int BUF_SIZE){
volatile int * audio_ptr = (int *) 0xFF203040; // audio port address
int fifospace;
int buffer_index = 0;
int left_buffer[BUF_SIZE];
int right_buffer[BUF_SIZE];
fifospace = *(audio_ptr + 1); // read the audio port fifospace register
if ( (fifospace & 0x000000FF) > 96) // check RARC, for > 75% full
{
/* store data until the audio-in FIFO is empty or the memory buffer is full */
while ( (fifospace & 0x000000FF) && (buffer_index < BUF_SIZE) )
{
*(audio_ptr + 2)= buffer[buffer_index]; //Leftdata
*(audio_ptr + 3) = buffer[buffer_index]; //Rightdata
++buffer_index;
fifospace = *(audio_ptr + 1); // read the audio port fifospace register
}
}
}
int main(void){
int die_buffer[26112] = {...};
int die_buf_size = 26112;
sound(die_buffer,die_buf_size);
}
Я использовал массив die_buffer
семплов, который работает и может выводить звук.Я попытался преобразовать свой собственный файл .wav
в код C с помощью программы под названием Wav2Code .Я загрузил свой .wav
файл (он воспроизводит ноту G) и выбрал 16 бит, 1 канал, микшировал в моно и сохранил его как код C.Я взял массив, который он вывел в виде:
#define NUM_ELEMENTS 48651
unsigned char data0[NUM_ELEMENTS] = {
128, 128, 128, 128, 128, 128, 128, 128, ...}
и установил его равным моему массиву die_buffer
.Однако когда я запустил код, звука не было.Пожалуйста помоги!Я понятия не имею, как преобразовать файл .wav
правильно в C, чтобы он мог работать с процессором.
Редактировать: Я получил свой файл .wav
, используя Audacity.Я записал звук и экспортировал его как .wav
и сохранил его как «подписанный 16-битный PCM» (поскольку сохранение его как 32-битного плавающего PCM не работало на WaveToCode).Я установил частоту проекта 48000 Гц, моно и я экспортировал с этими параметрами.
Затем я использую WaveToCode, чтобы изменить его на C-код.Вот параметры, которые я использовал (смешал это с моно).
Я также говорил с кем-то, и они сказали, что процессор ожидает 32-разрядных целочисленных выборок со знаком при частоте дискретизации 48 кГц и я не уверен, смог ли я правильно перейти на это.Надеюсь, это изменение помогло прояснить, что я пытаюсь сделать.Благодарю.