嵌入式开发者社区

标题: line_in例程中声音播放的问题 [打印本页]

作者: bigrao    时间: 2017-3-18 22:39
标题: line_in例程中声音播放的问题
如果没有理解错,在main函数里的while循环中的
memcpy((void *)txBufPtr[lastSentTxBuf],
                 (void *)rxBufPtr[lastFullRxBuf],
                AUDIO_BUF_SIZE);

这句话代表把接收到的数据复制给要发送的数组从而播放出来。
为什么当我定义一个中间数组tempBuf[AUDIO_BUF_SIZE];然后再进行复制

memcpy((void *)tempBuf, (void *)txBufPtr[lastSentTxBuf],AUDIO_BUF_SIZE);
memcpy( (void *)rxBufPtr[lastSentTxBuf],(void *)tempBuf,AUDIO_BUF_SIZE);


就播放不出声音来了呢?

作者: bigrao    时间: 2017-3-18 22:47
这样做的目的是想把接收的数据取出来,为下一步的数据处理做准备,但是为什么现在只是进行简单的复制,还没有处理就放不出声音来了?
作者: Lewis    时间: 2017-3-20 16:20
发送和接收buffer你设置反了
[attach]2090[/attach]
作者: bigrao    时间: 2017-3-20 22:41
Lewis 发表于 2017-3-20 16:20
发送和接收buffer你设置反了

好吧,看来犯了一个很低级的问题呀。然后还有一个问题想请教工程师,我没太看懂宏定义
#define AUDIO_BUF_SIZE       (NUM_SAMPLES_PER_AUDIO_BUF * BYTES_PER_SAMPLE * I2S_SLOTS)为什么一帧信号数组需要这么长,如果只是存储左右声道的数据,AUDIO_BUF_SIZE=NUM_SAMPLES_PER_AUDIO_BUF *I2S_SLOTS不就可以了吗?
根据这个宏定义,我应该如何分离出左右声道的数据呢?


作者: Lewis    时间: 2017-3-21 11:08
buf大小 = 每个buf存储采样点数 * 每个采样点字节数 * 声道数
左右声道是交替存储的
作者: bigrao    时间: 2017-3-21 11:32
Lewis 发表于 2017-3-21 11:08
buf大小 = 每个buf存储采样点数 * 每个采样点字节数 * 声道数
左右声道是交替存储的 ...

根据宏定义,目前每个采样点字节数=2,也就是int型的数据。至于分离左右声道,举一个例子,是不是
buf[0]=左声道的低八位数据;
buf[1]=左声道的高八位数据;
buf[2]=右声道的低八位数据;
buf[3]=右声道的高八位数据???
作者: Lewis    时间: 2017-3-27 14:44
对的,另外int是4个字节,short是两个字节




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4