已经完成了fatfs+DMA的方式通过I2S播放flash中的wav文件了
接的高音喇叭
目前想问下 如何调整音量?
音频是44.1khz 16bit
之前了解到是振幅决定音量,所以我尝试在f_read到数据后将16bit数据都乘以了一个系数(范围0-1)来控制音量,但是发现播放不对。
请问我这个方式是哪里有问题么?
[C] 纯文本查看 复制代码
[color=#cccccc][backcolor=#1f1f1f][font=Consolas,][color=#6a9955]// Callback function, transfers PCM samples to the audio buffer[/color]
[color=#4ec9b0]uint32_t[/color][color=#cccccc] [/color][color=#dcdcaa]wavFillBuffer[/color][color=#cccccc]([/color][color=#4ec9b0]audio_t[/color][color=#cccccc] [/color][color=#d4d4d4]*[/color][color=#9cdcfe]dest[/color][color=#cccccc], [/color][color=#4ec9b0]uint32_t[/color][color=#cccccc] [/color][color=#9cdcfe]samples[/color][color=#cccccc])[/color]
[color=#cccccc]{[/color]
[color=#cccccc] [/color][color=#4ec9b0]UINT[/color][color=#cccccc] [/color][color=#9cdcfe]count[/color][color=#cccccc];[/color]
[color=#cccccc] [/color][color=#c586c0]if[/color][color=#cccccc] ([/color][color=#dcdcaa]f_read[/color][color=#cccccc]([/color][color=#9cdcfe]systemStatus[/color][color=#cccccc].[/color][color=#9cdcfe]file[/color][color=#cccccc], ([/color][color=#4ec9b0]uint8_t[/color][color=#cccccc] [/color][color=#d4d4d4]*[/color][color=#cccccc])[/color][color=#9cdcfe]dest[/color][color=#cccccc], [/color][color=#9cdcfe]samples[/color][color=#cccccc] [/color][color=#d4d4d4]*[/color][color=#cccccc] ([/color][color=#569cd6]sizeof[/color][color=#cccccc]([/color][color=#4ec9b0]audio_t[/color][color=#cccccc])), [/color][color=#d4d4d4]&[/color][color=#9cdcfe]count[/color][color=#cccccc]) [/color][color=#d4d4d4]!=[/color][color=#cccccc] [/color][color=#4fc1ff]FR_OK[/color][color=#cccccc])[/color]
[color=#cccccc] {[/color]
[color=#cccccc] [/color][color=#c586c0]return[/color][color=#cccccc] [/color][color=#b5cea8]0[/color][color=#cccccc];[/color]
[color=#cccccc] }[/color]
[color=#cccccc] [/color][color=#9cdcfe]count[/color][color=#cccccc] [/color][color=#d4d4d4]/=[/color][color=#cccccc] ([/color][color=#569cd6]sizeof[/color][color=#cccccc]([/color][color=#4ec9b0]audio_t[/color][color=#cccccc]));[/color]
[color=#cccccc]
[/color]
[color=#cccccc] // 这部分是新加的 [/color][color=#4ec9b0]audio_t[/color][color=#cccccc]是int16_t,测试系数固定0.5[/color]
[color=#cccccc] [/color][color=#c586c0]for[/color][color=#cccccc] ([/color][color=#4ec9b0]uint32_t[/color][color=#cccccc] [/color][color=#9cdcfe]i[/color][color=#cccccc] [/color][color=#d4d4d4]=[/color][color=#cccccc] [/color][color=#b5cea8]0[/color][color=#cccccc]; [/color][color=#9cdcfe]i[/color][color=#cccccc] [/color][color=#d4d4d4]<[/color][color=#cccccc] [/color][color=#9cdcfe]count[/color][color=#cccccc]; [/color][color=#9cdcfe]i[/color][color=#d4d4d4]++[/color][color=#cccccc])[/color]
[color=#cccccc] {[/color]
[color=#cccccc] [/color][color=#9cdcfe]dest[/color][color=#cccccc][[/color][color=#9cdcfe]i[/color][color=#cccccc]] [/color][color=#d4d4d4]=[/color][color=#cccccc] ([/color][color=#4ec9b0]audio_t[/color][color=#cccccc])([/color][color=#9cdcfe]dest[/color][color=#cccccc][[/color][color=#9cdcfe]i[/color][color=#cccccc]] [/color][color=#d4d4d4]*[/color][color=#cccccc] [/color][color=#b5cea8]0.5[/color][color=#cccccc]);[/color]
[color=#cccccc] }[/color]
[color=#cccccc]
[/color]
[color=#cccccc] [/color][color=#c586c0]if[/color][color=#cccccc] ([/color][color=#569cd6]sizeof[/color][color=#cccccc]([/color][color=#4ec9b0]audio_t[/color][color=#cccccc]) [/color][color=#d4d4d4]==[/color][color=#cccccc] [/color][color=#b5cea8]4[/color][color=#cccccc])[/color]
[color=#cccccc] {[/color]
[color=#cccccc] [/color][color=#c586c0]for[/color][color=#cccccc] ([/color][color=#4ec9b0]uint32_t[/color][color=#cccccc] [/color][color=#9cdcfe]i[/color][color=#cccccc] [/color][color=#d4d4d4]=[/color][color=#cccccc] [/color][color=#b5cea8]0[/color][color=#cccccc]; [/color][color=#9cdcfe]i[/color][color=#cccccc] [/color][color=#d4d4d4]<[/color][color=#cccccc] [/color][color=#9cdcfe]count[/color][color=#cccccc]; [/color][color=#9cdcfe]i[/color][color=#d4d4d4]++[/color][color=#cccccc])[/color]
[color=#cccccc] [/color][color=#9cdcfe]dest[/color][color=#cccccc][[/color][color=#9cdcfe]i[/color][color=#cccccc]] [/color][color=#d4d4d4]=[/color][color=#cccccc] ([/color][color=#9cdcfe]dest[/color][color=#cccccc][[/color][color=#9cdcfe]i[/color][color=#cccccc]] [/color][color=#d4d4d4]<<[/color][color=#cccccc] [/color][color=#b5cea8]16[/color][color=#cccccc]) [/color][color=#d4d4d4]|[/color][color=#cccccc] ([/color][color=#9cdcfe]dest[/color][color=#cccccc][[/color][color=#9cdcfe]i[/color][color=#cccccc]] [/color][color=#d4d4d4]>>[/color][color=#cccccc] [/color][color=#b5cea8]16[/color][color=#cccccc]);[/color][color=#6a9955] // Fix for DMA order in 32-bit audio[/color]
[color=#cccccc] }[/color]
[color=#cccccc] [/color][color=#c586c0]return[/color][color=#cccccc] [/color][color=#9cdcfe]count[/color][color=#cccccc];[/color][color=#6a9955] // count is bytes, samples are 32 bit[/color]
[color=#cccccc]}[/color]
[/font][/backcolor][/color]
|