sách gpt4 ai đã đi

Thay đổi tốc độ phát lại của bộ đệm trong C?

In lại 作者:行者123 更新时间:2023-12-04 09:15:49 29 4
mua khóa gpt4 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 的速度。

Cảm ơn trước nhé!

~萨伦戈

1 Câu trả lời

如果 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/

29 4 0
Bài viết được đề xuất: extjs4.1 - 根据 ExtJs 4.1 网格中的另一列对一列进行排序
Bài viết được đề xuất: r - 由 rmarkdown 生成的 pdf 文档中表格的标题
Bài viết được đề xuất: css - Bootstrap 继承
Bài viết được đề xuất: wpf - 增加StrokeThickness,但保持Path的尺寸
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com