Преобразованный файл .wav в код C, не выводящий звук в процессор ARM - PullRequest
0 голосов
/ 11 апреля 2019

В настоящее время я пишу проект с использованием процессора 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 Гц, моно и я экспортировал с этими параметрами.Image of my Audacity export parameters

Затем я использую WaveToCode, чтобы изменить его на C-код.Вот параметры, которые я использовал (смешал это с моно).

Image of my WaveToCode export parameters

Я также говорил с кем-то, и они сказали, что процессор ожидает 32-разрядных целочисленных выборок со знаком при частоте дискретизации 48 кГц и я не уверен, смог ли я правильно перейти на это.Надеюсь, это изменение помогло прояснить, что я пытаюсь сделать.Благодарю.

...