完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
有人能指点我使用DSPIC33 EP512MU810操作PCM音频的一些指导或软件吗?我想增加/减少PCM数据量,并且还把它与一些预先存储的短音频剪辑混合。dsPIC通过I2S从蓝牙模块(WT32i)接收PCM,然后我想在通过I2S将其发送到外部CODEC(TLV320AIC32)之前对其进行操作。m蓝牙模块是44.1kHz,16位立体声(目前我没有任何预先存储的音频剪辑)。dsPIC在乒乓模式下使用DMA从蓝牙模块接收PCM数据,所以我有两个缓冲区A和B。io从蓝牙模块传输到CODEC。我试图通过左/右移位(即,除法/乘以2)来操纵PCM音频,没有音量变化,只有某些casesadd/减法时的失真,没有音量变化的固定值,只有某些casesFor DarioG……这个帖子是相关的:www. McCHIP.COM/FUMMS/M931870.ASPX
|
|
相关推荐
19个回答
|
|
|
如果你的音频输出值多少,增加常数值只会带来失真。增加/减去常数值等于输出的直流偏移。它被任何合理的音频驱动级所阻塞。关于除法/乘法:乘法很容易导致失真(通过剪辑)。你可以尝试除以超过2的因子。2可能太少,无法用耳朵辨别。
|
|
|
|
|
|
丹克,这次节省了一些打字!至于音量,是的,除法应该工作。这将是很容易的2, 4, 8,所以…但是你应该尝试:它必须工作。接下来的方法是使用一个LUT(查找表),通过它来传递每个样本,所有的时间。这个LUT在每次更改卷时都是动态计算的,因此可以很容易地以0.1或对数或其他步骤重新创建。
|
|
|
|
|
|
在另一个注释中,我刚才意识到我的缓冲区(rxBufferA、rxBufferB、txBufferA和txBufferB)不能区分左通道和右通道。我指示数据是左通道还是右通道?如果我看到COPS引脚上的上升沿,我能启用DMA通道吗?因此缓冲器〔0〕和〔1〕将是左信道数据,缓冲器〔2〕和〔3〕将为右信道数据。COFS: _________________________________________ | | | | |_________________________________________| _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ SCK: | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_|||||||||||||lt_|lt_|lt_-------------左通道数据----------------------------------------------------->__和|gt_..--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<--txBufferA[1]->|<--txBufferA[2]->|<---txBufferA[3]--->| |<---rxBufferA[0]--->|<---rxBufferA[1]--->|<---rxBufferA[2]--->|<---rxBufferA[3]--->| |<----TimeSlot0----->|<----TimeSlot1----->|<----TimeSlot0----->|<----TimeSlot1----->| |<------------------------------1/Fs = 20.8 mICROSETH--------------------G.
|
|
|
|
|
|
我发现为什么移动会导致变形…这是因为音频数据类型是未签名的,而不是签名的!现在都工作了:)Dario(或其他人),你能解释一下如何使用LUT进行音量控制,例如它是如何工作的以及如何实现的吗?我以前使用过LUT,但不理解如何使用音量控制来控制音量控制以及如何/为什么要即时计算?
|
|
|
|
|
|
我尝试发布一些代码。这个函数创建了一个由256个条目组成的LUT,它把每个条目转换为另一个值,这个值从原始值的60%调整到100%:这个代码用于回放函数,将原始样本转换为“调整的”样本(在这个代码中,样本是c)。来自SPI EEprom)基本上,当您想要改变输出音量时(例如,在按钮按下时,手动地)更改LUT。而且它在播放中使用“现场”。当然,如果您正在播放大于8位的音频样本,您可能需要一个大的内存区域——或者使用一些技巧!
|
|
|
|
|
|
对于16位音频,LUT方法是不切实际的。对不起,达里奥!您肯定希望避免使用divide,因为这是v..(在dspic上为18个周期)。简单的移位可以,给出正确的日志配置文件,但是只给出15个步骤(-6dB/step)。-这给出了28个音量步骤(0=0dB,-3dB/步骤),非常接近理想的对数曲线,只需要额外的移位和添加。如果可以,最好在asm中这样做。我已经为pic32完成了,但是对于dspic还不够了解。如果您还没有设法使WT32i输出正确的格式,则需要将未签名的样本转换为已签名的样本。
|
|
|
|
|
|
是的,这太聪明了,谢谢!但是为什么你说LUT不适合16位样本呢?我们现在有512K/1MB的图片…除了一些分页问题之外,它们应该还可以……我还在考虑做一些“拆分”LUT,一个用于高8位,另一个用于低字节……
|
|
|
|
|
|
16位LUT是巨大的(128千字节),“分裂LUTS”至少“棘手”。老实说:我们在咆哮什么?他的DAC得到了一个单独的音量控制!而是“智能的”(没有音量跳跃-逐步增加到新的音量。好-如果通常说信号处理)。…
|
|
|
|
|
|
Timp=卷;//(7位音量,0到128)TEMP&GT;=7;采样=(短)温度;
|
|
|
|
|
|
不幸的是,这给出了一个线性音量控制,人类的听力在原木音阶上工作。这就是为什么许多音量控制在音域的前3/4没有做多少工作,在音域的后1/4的大跳跃中音量变化很快。这个错误是由许多应该更了解的人犯的。你微软。
|
|
|
|
|
|
好,然后缩放8位或更高?并使用128体积的LUT进行对数体积变化。
|
|
|
|
|
|
在他的其他线程中,OP正在讨论另一个流中的混合,所以我认为DAC路由是不允许的。
|
|
|
|
|
|
事实上,这并不是一个坏主意。稍微玩一下excel就可以得到64步音量控制的最佳效果。底部的步骤有点粗糙,但是应该在8以上。对于音量级别<63伪代码:-long temp=sample*VolumeLUT[.];sample=HIWORD(temp);对于音量级别==63,不要做任何事情。一个带符号的无符号到ACC,只需要从累加器中得到高16位。
|
|
|
|
|
|
在他的其他帖子中,OP正在谈论在另一个流中混合,所以DAC路线是不允许的。我将需要混合两个音频源,因此淡入一个源,同时消散另一个源,反之亦然。
|
|
|
|
|
|
一切美好
|
|
|
|
|
|
我有(最后!)设法在dsPIC上存储.aiff文件并使用DAC:)回放它,但是现在我有一个关于在dsPIC上存储.aifffiles的问题……首先我使用Audacity将.wav文件转换为原始的.aiff文件。然后我使用xxd.exe将.aiff file转换为c数组,包括在构建中。..aiff文件变为17338个带符号的char的数组大小,文件大小是~106KB。aiff文件是~20KB,所以我不确定为什么c数组这么大,谁能解释一下?在DSPIC上存储这些大数组的最好方法是什么?我有一个1Mbit的EEPROM(25LC1024)作为备份,但是到目前为止还没有实现,因为我希望dsPIC有足够的内存。为了让我的软件编译,我已经将代码、数据和标量内存模型配置为“大型”。我还启用了“允许数组大于32 K”。我将数组定义为:const签名char MySale[] = {…但是对于更大的数组,我会出现错误,比如....build/default/./_ext/1360937237/i2sDrv.o:Link Error:不能分配..data,size=176898字节,attributes=data Link Error:不能分配数据存储器[2]:***[dist/default/./DCII2S_Interface.X...错误255m.[1]:***[.build-conf]Error 2make:***[.build-impl]Error 2make:***[.build-impl]Error2我必须使用某种形式的属性将数组放入存储器的某个部分吗?我应该考虑使用1MBIT EEPROM吗?我需要大约15个短音频剪辑,44.1kHz 8位单声道,从15到1计数。
|
|
|
|
|
|
这个关于20KB文件变成100K数组的事情很奇怪…你能详细说明一下吗?至于分配大数组,您可以看看我的线程中的“扩展指针”,比如:http://www..hip.com/for./m880978.aspxand,至于使用外部EEprom,它可能更好,但是……你必须先把数据放在那里。
|
|
|
|
|
|
在Windows资源管理器中,原始音频文件大小(MySoal.AIFF)为17KB。当我使用命令行运行XXD.EXE…XXD - I MySoo.AIFF MySoal.C…输出文件(MySoal.c)的文件大小为106KB!我不明白为什么输出文件的大小要大得多。输出文件中数组的长度是17338(带符号的char)。我查看了您的线程Dario,这些“扩展指针”的具体细节在哪里?我已经下载了你的代码,但是看不到任何明显的东西。至于把数据放到EEPROM中,最好的方法是什么?我不认为ICD或真正的冰可以编程EEPROM吗?如果没有,有没有便宜的程序员可以买?
|
|
|
|
|
|
3)皮卡2不能确定其余部分。我通常使用带有USB的PIC,并准备一些主机软件,这些软件将数据发送到HID USB,然后发送到EEprom..1)好的,然后就可以了!如果你想一想,在C源中,一个字节就变成了一个字符串,比如“123”,所以4-5-6倍的增加是有意义的。但是闪存的足迹应该仍然是17KB…2)相关的部分在这里:但是实际上上面的是RAM大阵列。在你的情况下,你需要有可能的指针和类似的东西(用谷歌搜索这个论坛)
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1121浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 20:14 , Processed in 1.597424 second(s), Total 108, Slave 91 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1356