我目前正在使用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,单声道,并使用这些参数导出。
然后,我使用WaveToCode将其更改为C代码。这是我使用的参数(将其混合成单声道)。
我还与某人交谈,他们说处理器期望以48kHz采样率的 32位有符号整数采样,而且我不确定是否能够正确转换为该采样率。希望此编辑有助于阐明我要执行的操作。谢谢。