gpt4 book ai didi

更改 C 中缓冲区的播放速率?

转载 作者:行者123 更新时间:2023-12-04 09:15:49 28 4
gpt4 key购买 nike

我正在使用 Altera DE2 FPGA 开发板并尝试使用 SD 卡端口和音频线路输出。我正在使用 VHDL 和 C 进行编程,但由于缺乏经验/知识,我在 C 部分遇到了困难。

目前,我可以从 SD 卡向 Line Out 播放 .wav 文件。我通过读取和发送 SD 卡数据 > FIFO > 音频编解码器 > 线路输出来做到这一点。忽略所有其他细节,代码只是:

UINT16 Tmp1=0;
...
Tmp1=(Buffer[i+1]<<8)|Buffer[i]; //loads the data from the SD card to Tmp1
//change the buffer rate?
IOWR(AUDIO_BASE, 0, Tmp1); //sends Tmp1 data to Line Out

如果我要打印 Tmp1,它基本上是正弦波上的点。我现在想做的是通过改变播放速率来调整声音的播放方式(理想情况下我想将声音向上或向下播放一个 Octave 音阶,这只是频率的两倍或一半)。任何人都可以在本节中提供一些关于我如何做到这一点的建议吗:

//change the buffer rate?

是否可以在 C 中在那部分中编写几行代码来获得我要查找的内容? IE。更改我从 Tmp1 缓冲区读取到 AUDIO_BASE 的速度。

提前致谢!

~萨伦戈

最佳答案

如果 IOWR 界面没有提供这样的选项,那么您将不得不自己做:您必须重新采样声音。理论可以在这里找到 1 这里 2 这里 3 和这里 4 .

按倍数提高频率很容易:只需丢弃一些样本,例如,只需从缓冲区中每隔一个样本丢弃一次,即可将频率降低 2 倍,这样它的大小就会减半。

降低频率更难,因为您需要您没有的信息:样本之间的样本。您可以从简单的线性插值开始,如果您认为它听起来不够好,您可以将其更改为更高级的东西。例如,您可以通过在两个具有平均值的样本之间插入一个样本来将频率减半。如果你的波形看起来像这样:5 9 7 3 你会得到 5 7 9 8 7 5 3

关于更改 C 中缓冲区的播放速率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15034237/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com