how to directly copy memory data to SSI(ESAI) fifo //怎样播放自己分配的DMA内存里的数据(数据非由alsa传向底层,而是DMA直接从一块内存里面搬移)

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

how to directly copy memory data to SSI(ESAI) fifo //怎样播放自己分配的DMA内存里的数据(数据非由alsa传向底层,而是DMA直接从一块内存里面搬移)

how to directly copy memory data to SSI(ESAI) fifo //怎样播放自己分配的DMA内存里的数据(数据非由alsa传向底层,而是DMA直接从一块内存里面搬移)

通常的音乐播放是这样一个流程:
alsa将一段上层的应用空间和底层的物理空间通过mmap映射起来,然后DMA从被映射的物理空间往I2S的fifo传送数据。
现在有个客户想将FEC网络那边收到的数据中的audio数据分离出来,暂存到一段物理内存中,然后通过DMA传输到我们芯片的I2S fifo,从而节省掉数据在上层、底层之间来回调用的时间。
这就需要我们I2S这边支持通过DMA直接从一段物理内存拿数据。
为了较为方便的实现这一功能,通过对ALSA架构的分析,我保留了我们整个ASoC代码的架构,只是不让DMA从原来的mmap的地址拿数据,而是从我自己分配的DMA内存中拿数据。
258         uint8_t *wbuf;
259         uint8_t *index1;
261         wbuf = dma_alloc_coherent(NULL, 0x10000, &wpaddr, GFP_DMA);
265         for (i=0; i<0x10000; i++) {
269                         *(wbuf + i) = wav_data[i];
273         }
333                 iprtd->desc = chan->device->device_prep_dma_cyclic(
334                         chan, wpaddr,
335 //                      chan, dma_addr,
336                         iprtd->period_bytes * iprtd->periods,
337                         iprtd->period_bytes,
338                         substream->stream == SNDRV_PCM_STREAM_PLAYBACK     ?
339                         DMA_TO_DEVICE : DMA_FROM_DEVICE);
代码实现上实际上是比较简单的,可以套用以前做过的dma_m2m的部分代码。

现在我们要拿一些wav里面的audio数据。
linux
可以用16进制的方法读wav里面的数据:
hexdump -n 65700 -C audio44k16S.wav > wav_data_44100_s16_stereo.haudio44k16S.wav

里面的audio数据用16进制的形式保存到wav_data_44100_s16_stereo.h这个文件里。

然后我们要编辑这个头文件里的audio数据原数据是这种格式的
00000000  52 49 46 46 12 63 0c 00  57 41 56 45 66 6d 74 20  |RIFF.c..WAVEfmt |
00000010  12 00 00 00 01 00 02 00  44 ac 00 00 10 b1 02 00  |........D.......|
00000020  04 00 10 00 00 00 66 61  63 74 04 00 00 00 b5 18  |......fact......|
00000030  03 00 64 61 74 61 d4 62  0c 00 58 01 f0 00 98 01  |..data.b..X.....|
00000040  56 01 3d 01 1e 01 d0 00  ae 00 81 00 35 00 40 00  |V.=.........5.@.|
00000050  dd ff f7 ff 90 ff 9f ff  1d ff 54 ff bb fe 18 ff  |..........T.....|
00000060  61 fe 1e ff e7 fd 5e ff  e4 fd 23 00 39 fe ee 00  |a.....^...#.9...|

我们要把它转换成符合我们要求的这种形式
,0x63 ,0xf0 ,0x0f ,0xf0 ,0x7f ,0xf1 ,0x21 ,0xf1  ,0x89 ,0xf3 ,0xef ,0xf2 ,0x9d ,0xf5 ,0x8c ,0xf4
,0x5f ,0xf7 ,0xd3 ,0xf5 ,0x8c ,0xf8 ,0x08 ,0xf7  ,0x4c ,0xf9 ,0x01 ,0xf8 ,0x74 ,0xf9 ,0x2e ,0xf8
,0x1c ,0xf9 ,0x15 ,0xf8 ,0x09 ,0xf9 ,0x82 ,0xf7  ,0x45 ,0xf9 ,0xd1 ,0xf6 ,0x0b ,0xf9 ,0x1e ,0xf6
,0xce ,0xf8 ,0xbe ,0xf5 ,0xd7 ,0xf8 ,0x9a ,0xf5  ,0xa8 ,0xf9 ,0xc7 ,0xf5 ,0xe0 ,0xfa ,0x3e ,0xf6
,0x25 ,0xfc ,0x44 ,0xf7 ,0x44 ,0xfd ,0xa2 ,0xf8  ,0x9a ,0xfe ,0xea ,0xf9 ,0x25 ,0x00 ,0x94 ,0xfb
,0x16 ,0x02 ,0xec ,0xfc ,0xcb ,0x03 ,0xfe ,0xfd  ,0xef ,0x04 ,0xa5 ,0xfe ,0x45 ,0x05 ,0x0b ,0xff
,0x3b ,0x05 ,0x24 ,0xff ,0x34 ,0x05 ,0x94 ,0xff  ,0x06 ,0x05 ,0x13 ,0x00 ,0x6c ,0x04 ,0x82 ,0x00

这里有一个比较好的方法

可以通过VIM

垂直编辑的方法较为轻松的实现。

vim垂直编辑:
ctrl+v 然后上下左右移动选中,D删除选中的。
ctrl+v 选中, shift+i 可以在选中的地方加入想插入的字符。
将编辑过的数据放到uint8_t wav_data[],赋值给wbuf,wbuf对应的物理地址
wpaddr中的数据,就是上面wav中的audio数据。

wbuf = dma_alloc_coherent(NULL, 0x10000, &wpaddr, GFP_DMA);中的0x10000=1024*64是我们分配的dma内纯的大小,我们sdma是根据以下大小传输数据的:
iprtd->period_bytes = 21844, iprtd->periods = 3
//21844*3=65532= 0xfffc
这样实际上DMA是不停的刷我们分配的内存里的数据,因为我们没有更新DMA内存里的数据,所以听到的是不断重复播放的声音片段。
刚开始时,我听这个片段,发现片段之间有较为明显的pop音,这是由于我截取的是一首音乐开始的部分,包含了wav包头数据,这不是音乐数据,将这个去除就可以了。

Tags (4)
%3CLINGO-SUB%20id%3D%22lingo-sub-1119945%22%20slang%3D%22zh-CN%22%20mode%3D%22CREATE%22%3Ehow%20to%20directly%20copy%20memory%20data%20to%20SSI(ESAI)%20fifo%20%2F%2FHow%20to%20play%20the%20data%20in%20the%20DMA%20memory%20allocated%20by%20yourself%20(the%20data%20is%20not%20transferred%20from%20alsa%20to%20the%20bottom%20layer%2C%20but%20DMA%20is%20directly%20moved%20from%20a%20piece%20of%20memory)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1119945%22%20slang%3D%22zh-CN%22%20mode%3D%22CREATE%22%3E%26lt%3Bmeta%20http-equiv%3D%22Content-Type%22%20content%3D%22text%2Fhtml%3B%20charset%3Dutf-8%22%20%2F%26gt%3B%0A%3CP%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3EThe%20usual%20music%20playback%20process%20is%20as%20follows%3A%3CBR%20%2F%3E%20ALSA%20maps%20an%20upper-level%20application%20space%20and%20an%20underlying%20physical%20space%20through%20mmap%2C%20and%20then%20uses%20DMA%20to%20transfer%20data%20from%20the%20mapped%20physical%20space%20to%20the%20I2S%20fifo.%3CBR%20%2F%3E%20Now%20a%20customer%20wants%20to%20separate%20the%20audio%20data%20from%20the%20data%20received%20from%20the%20FEC%20network%2C%20temporarily%20store%20it%20in%20a%20physical%20memory%2C%20and%20then%20transfer%20it%20to%20the%20I2S%20fifo%20of%20our%20chip%20through%20DMA%2C%20thus%20saving%20the%20time%20of%20calling%20data%20back%20and%20forth%20between%20the%20upper%20and%20bottom%20layers.%3CBR%20%2F%3E%20This%20requires%20our%20I2S%20to%3CBR%20%2F%3E%20support%20getting%20data%20directly%20from%20a%20physical%20memory%20through%20DMA.%20In%20order%20to%20implement%20this%20function%20more%20conveniently%2C%20through%20the%20analysis%20of%20the%20ALSA%20architecture%2C%20I%20retained%20the%20architecture%20of%20our%20entire%20ASoC%20code%2C%20but%20did%20not%20let%20DMA%20get%20data%20from%20the%20original%20mmap%20address%2C%20but%20got%20data%20from%20the%20DMA%20memory%20allocated%20by%20myself.%3CBR%20%2F%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-size%3A%2012pt%3B%22%3E%20258%20uint8_t%20*wbuf%3B%3CBR%20%2F%3E%20259%20uint8_t%20*index1%3B%3CBR%20%2F%3E%20261%20wbuf%20%3D%20dma_alloc_coherent(NULL%2C%200x10000%2C%20%26amp%3B%3CSTRONG%20style%3D%22color%3A%20red%3B%22%3E%20wpaddr%3C%2FSTRONG%3E%20%2C%20GFP_DMA)%3B%3CBR%20%2F%3E%20265%20for%20(i%3D0%3B%20i%26lt%3B0x10000%3B%20i%2B%2B)%20%7B%3CBR%20%2F%3E%20269%20*(wbuf%20%2B%20i)%20%3D%20wav_data%5Bi%5D%3B%3CBR%20%2F%3E%20273%20%7D%3CBR%20%2F%3E%20333%20iprtd-%26gt%3Bdesc%20%3D%20chan-%26gt%3Bdevice-%26gt%3Bdevice_prep_dma_cyclic(%3CBR%20%2F%3E%20334%20chan%2C%3CSTRONG%20style%3D%22color%3A%20red%3B%22%3E%20wpaddr%3C%2FSTRONG%3E%20%2C%3CBR%20%2F%3E%20335%20%2F%2F%20chan%2C%20dma_addr%2C%3CBR%20%2F%3E%20336%20iprtd-%26gt%3Bperiod_bytes%20*%20iprtd-%26gt%3Bperiods%2C%3CBR%20%2F%3E%20337%20iprtd-%26gt%3Bperiod_bytes%2C%3CBR%20%2F%3E%20338%20substream-%26gt%3Bstream%20%3D%3D%20SNDRV_PCM_STREAM_PLAYBACK%20%3F%3CBR%20%2F%3E%20339%20DMA_TO_DEVICE%20%3A%20DMA_FROM_DEVICE)%3B%20In%20terms%3CBR%20%2F%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20of%20code%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20implementation%2C%20it%20is%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20actually%20quite%20simple%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20%2C%20and%20some%20of%20the%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20dma_m2m%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20code%20that%20has%20been%20done%20before%20can%20be%20applied.%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3C%2FSPAN%3E%20%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3ENow%20we%20need%20to%20get%20some%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20audio%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20data%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20from%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20wav%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CBR%20%2F%3E%20.%20Linux%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20can%20use%20the%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20hexadecimal%20method%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20to%20read%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3Ethe%20data%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20in%20wav%3A%3CBR%20%2F%3E%20hexdump%20-n%2065700%20-C%20audio44k16S.wav%20%26gt%3B%20wav_data_44100_s16_stereo.h%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20will%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20audio44k16S.wav%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3EThe%20audio%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20data%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20is%20saved%20in%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20hexadecimal%20format%20in%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20the%20file%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20wav_data_44100_s16_stereo.h%20.%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3EThen%20we%20need%20to%20edit%20the%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20audio%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20data%20in%20this%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20header%20file.%20The%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20original%20data%20is%20in%20this%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%20format%3A%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CBR%20%2F%3E%2000000000%2052%2049%2046%2046%2012%2063%200c%2000%2057%2041%2056%2045%2066%206d%2074%2020%20%7CRIFF.c..WAVEfmt%20%7C%3CBR%20%2F%3E%2000000010%2012%2000%2000%2000%2001%2000%2002%2000%2044%20ac%2000%2000%2010%20b1%2002%2000%20%7C.....D.......%7C%3CBR%20%2F%3E%2000000020%2004%2000%2010%2000%2000%2000%2066%2061%2063%2074%2004%2000%2000%2000%20b5%2018%20%7C......fact......%7C%3CBR%20%2F%3E%2000000030%2003%2000%2064%2061%2074%2061%20d4%2062%200c%2000%2058%2001%20f0%2000%2098%2001%20%7C..data.b..X.....%7C%3CBR%20%2F%3E%2000000040%2056%2001%203d%2001%201e%2001%20d0%2000%20ae%2000%2081%2000%2035%2000%2040%2000%20%7CV.%3D.........5.%40.%7C%3CBR%20%2F%3E%2000000050%20dd%20ff%20f7%20ff%2090%20ff%209f%20ff%201d%20ff%2054%20ff%20bb%20fe%2018%20ff%20%7C..........T....%7C%3CBR%20%2F%3E%2000000060%2061%20fe%201e%20ff%20e7%20fd%205e%20ff%20e4%20fd%2023%2000%2039%20fe%20ee%2000%20%7Ca.....%5E...%23.9...%7C%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%E6%88%91%E4%BB%AC%E8%A6%81%E6%8A%8A%E5%AE%83%E8%BD%AC%E6%8D%A2%E6%88%90%E7%AC%A6%E5%90%88%E6%88%91%E4%BB%AC%E8%A6%81%E6%B1%82%E7%9A%84%E8%BF%99%E7%A7%8D%E5%BD%A2%E5%BC%8F%3C%2FSPAN%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%EF%BC%9A%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CBR%20%2F%3E%20%2C0x63%20%2C0xf0%20%2C0x0f%20%2C0xf0%20%2C0x7f%20%2C0xf1%20%2C0x21%20%2C0xf1%26nbsp%3B%20%2C0x89%20%2C0xf3%20%2C0xef%20%2C0xf2%20%2C0x9d%20%2C0xf5%20%2C0x8c%20%2C0xf4%3CBR%20%2F%3E%20%2C0x5f%20%2C0xf7%20%2C0xd3%20%2C0xf5%20%2C0x8c%20%2C0xf8%20%2C0x08%20%2C0xf7%26nbsp%3B%20%2C0x4c%20%2C0xf9%20%2C0x01%20%2C0xf8%20%2C0x74%20%2C0xf9%20%2C0x2e%20%2C0xf8%3CBR%20%2F%3E%2C0x1c%20%2C0xf9%20%2C0x15%20%2C0xf8%20%2C0x09%20%2C0xf9%20%2C0x82%20%2C0xf7%26nbsp%3B%20%2C0x45%20%2C0xf9%20%2C0xd1%20%2C0xf6%20%2C0x0b%20%2C0xf9%20%2C0x1e%20%2C0xf6%3CBR%20%2F%3E%20%2C0xce%20%2C0xf8%20%2C0xbe%20%2C0xf5%20%2C0xd7%20%2C0xf8%20%2C0x9a%20%2C0xf5%26nbsp%3B%20%2C0xa8%20%2C0xf9%20%2C0xc7%20%2C0xf5%20%2C0xe0%20%2C0xfa%20%2C0x3e%20%2C0xf6%3CBR%20%2F%3E%20%2C0x25%20%2C0xfc%20%2C0x44%20%2C0xf7%20%2C0x44%20%2C0xfd%20%2C0xa2%20%2C0xf8%26nbsp%3B%20%2C0x9a%20%2C0xfe%20%2C0xea%20%2C0xf9%20%2C0x25%20%2C0x00%20%2C0x94%20%2C0xfb%3CBR%20%2F%3E%20%2C0x16%20%2C0x02%20%2C0xec%20%2C0xfc%20%2C0xcb%20%2C0x03%20%2C0xfe%20%2C0xfd%26nbsp%3B%20%2C0xef%20%2C0x04%20%2C0xa5%20%2C0xfe%20%2C0x45%20%2C0x05%20%2C0x0b%20%2C0xff%3CBR%20%2F%3E%2C0x3b%20%2C0x05%20%2C0x24%20%2C0xff%20%2C0x34%20%2C0x05%20%2C0x94%20%2C0xff%26nbsp%3B%20%2C0x06%20%2C0x05%20%2C0x13%20%2C0x00%20%2C0x6c%20%2C0x04%20%2C0x82%20%2C0x00%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3C%2FSPAN%3E%20%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3EHere%20is%20a%20better%20method%3C%2FSPAN%3E%20%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E.%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3EVim%3C%2FSPAN%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%E2%80%8B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3EThe%20vertical%20editing%20method%20is%20easier%20to%20implement.%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3Evim%20vertical%20editing%3A%3CBR%20%2F%3E%20ctrl%2Bv%20then%20move%20the%20selection%20up%2C%20down%2C%20left%2C%20and%20right%2C%20and%20D%20to%20delete%20the%20selection.%3CBR%20%2F%3E%20Press%20ctrl%2Bv%20to%20select%2C%20and%20shift%2Bi%20to%20add%20the%20characters%20you%20want%20to%20insert%20to%20the%20selected%20location.%3CBR%20%2F%3E%20Put%20the%20edited%20data%20into%20uint8_t%20wav_data%5B%5D%20and%20assign%20it%20to%20wbuf.%20The%20data%20in%20the%20physical%20address%3C%2FSPAN%3E%20%3CSPAN%20lang%3D%22EN%22%20style%3D%22color%3A%20red%3B%20font-size%3A%2012pt%3B%22%3Ewpadd%3C%2FSPAN%3E%20%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20color%3A%20red%3B%20font-size%3A%2012pt%3B%22%3Er%3C%2FSPAN%3E%20corresponding%20to%20wbuf%20%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3Eis%20the%20audio%20data%20in%20the%20wav%20above.%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CSPAN%20lang%3D%22EN%22%20style%3D%22font-size%3A%2012pt%3B%22%3Ewbuf%20%3D%20dma_alloc_coherent(NULL%2C%200x10000%2C%20%26amp%3B%20%3CSPAN%20style%3D%22color%3A%20red%3B%22%3Ewpaddr%3C%2FSPAN%3E%20%2C%20GFP_DMA)%3B%3C%2FSPAN%3E%20%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E0x10000%3D1024*64%20is%20the%20pure%20size%20of%20the%20dma%20we%20allocated.%20Our%20sdma%20transfers%20data%20according%20to%20the%20following%20size%3A%3CBR%20%2F%3E%20iprtd-%26gt%3Bperiod_bytes%20%3D%2021844%2C%20iprtd-%26gt%3Bperiods%20%3D%203%3C%2FSPAN%3E%20%3CSPAN%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%2F%2F21844*3%3D65532%3D%200xfffc%3C%2FSPAN%3E%20%3CSPAN%20lang%3D%22ZH-CN%22%20style%3D%22font-family%3A%20%E5%AE%8B%E4%BD%93%3B%20font-size%3A%2012pt%3B%22%3E%3CBR%20%2F%3EIn%20this%20way%2C%20DMA%20is%20actually%20constantly%20refreshing%20the%20data%20in%20the%20memory%20we%20allocated.%20Because%20we%20did%20not%20update%20the%20data%20in%20the%20DMA%20memory%2C%20what%20we%20heard%20was%20a%20sound%20clip%20that%20was%20played%20repeatedly.%3CBR%20%2F%3E%20At%20the%20beginning%2C%20when%20I%20listened%20to%20this%20clip%2C%20I%20found%20that%20there%20was%20a%20more%20obvious%20pop%20sound%20between%20the%20clips.%20This%20is%20because%20I%20intercepted%20the%20beginning%20part%20of%20a%20song%2C%20which%20contains%20wav%20packet%20header%20data.%20This%20is%20not%20music%20data%2C%20so%20I%20just%20need%20to%20remove%20it.%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E
No ratings
Version history
Last update:
‎12-07-2014 10:59 PM
Updated by: