已将.wav文件转换为C代码,但未在ARM处理器中输出声音

时间:2019-04-10 23:47:29

标签: c assembly audio arm

我目前正在使用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数组,该数组可以工作并且可以输出声音。我尝试使用名为Wav2Code的程序将自己的.wav文件转换为C代码。我上传了.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,以便它可以与处理器一起使用。

编辑:我使用Audacity获得了.wav文件。我录制了声音,然后将其导出为.wav并将其保存为“带符号的16位PCM”(因为将其保存为32位浮点PCM在WaveToCode上不起作用)。我将项目速率设置为48000Hz,单声道,并使用这些参数导出。 Image of my Audacity export parameters

然后,我使用WaveToCode将其更改为C代码。这是我使用的参数(将其混合成单声道)。

Image of my WaveToCode export parameters

我还与某人交谈,他们说处理器期望以48kHz采样率的 32位有符号整数采样,而且我不确定是否能够正确转换为该采样率。希望此编辑有助于阐明我要执行的操作。谢谢。

0 个答案:

没有答案