|
【RT-Thread】mkromfs.py将音频文件制作成C语言数组的虚拟文件( O# a0 |& c8 E! D
; T; M+ W* u3 o! P7 q
最近笔者在应用中科蓝讯AB32VG1开要播放音频文件, 看例程有音频已转换C数组数据, 但教程没讲方法,只是说:% @8 i7 P$ k1 Q( B
首先需要下载 romfs.c(本文件包含了两个音频文件用于demo播放) 替换 applications 下原有的 romfs.c - }$ Y. h0 m: y+ Y/ H
, W( ^% \7 _9 M3 F4 g3 m/ X
问原厂(中科蓝讯)技术支持, 也没得到确定答案, 在网上找了很久, 没找上方法, 听原厂支持用mkromfs可以转, romfs.c 注释:& H+ d: b$ V! h* Z6 c! Y7 N
- /* Generated by mkromfs. Edit with caution. */
复制代码 也是说音频文件数据是用mkromfs生成, 那坚信是用mkromfs生成音频文件数据。3 Y) x+ `' W3 R/ F, l( X2 F. s: Q3 [" T
4 ]* Y% f) |. J5 n9 i9 T5 L. N: n
( ]1 S& Z5 p3 ^ c j
在网上找了很久,没这个工具下载。 差点就自己用C写一个工具了,以后会这么做的。
" ~# B* w! s7 k% E. m4 w _! u) z2 c9 E4 y7 ~
, \5 O& o) m0 k) Z9 U% A“众里寻他千百度 蓦然回首 那人却在灯火阑珊处”' Q+ B# q% R; R0 H& H0 n+ w# [
' d5 A# y+ t+ e
“得来全不费工夫”' n6 P; I+ ?8 A# F( |
9 U: s! l! ^' B% J在每个rt-thread工程目录都有rt-thread\tools\mkromfs.py (这个tools目录下,也没有很多python脚本工具, 没用到,还不清楚它们的用法, 以后, 需要什么工具,先在这里找找。。。。。
1 _& }5 h8 h$ Y% f0 P( X# w' ^- M3 c* K7 @
$ p y+ z0 V( r3 v3 i$ Z
5 Y+ B. ~* [$ U _/ I看看是怎么用的吧,首先,得有python环境,还有以前用过python, RT-Thread studio 配置及编译工具都要用python, 之前没安装python 也没关系,找到RT-Thread studio安装目录下, 也有python, 把python设置环境变量量, 相信搞开发的,这个都 会了, 不再赘述。, X' L, H4 G ?/ P/ k9 D
3 P9 H8 a8 ?- I& j- a" e
- .\platform\env_released\env\tools\Python27
复制代码 3 E: h( I \( S( r, X; ~) h$ ^
3 C, ^1 G3 U/ q; N; g6 A2 v题外话:RT-Thread studio用的是Python2.7版本,应该升级一下了2 J3 J! _& @9 P' p2 L3 A0 y' X8 \* X
+ P9 d0 [8 v; h. j看看这个mkromfs.py用法吧
; @: N4 X# k, C# h3 n- c
, c+ M$ a" J7 K) _3 t* b$ l0 ~在RTT工程目录都有rt-thread\tools\目录下,按住shift键,在空白处鼠标右击->在此处打开命令窗口: L3 [4 O5 l; q2 }' ~( E; d
4 u/ k) w( K4 U' _5 Q可快速,打开命令窗口定位到此目录
6 Q+ b: c, I( O; p" N! I3 v7 [+ Z4 D ?# W* |
输入命令:3 i o; r5 `& K( u) N
2 c+ m- ]) Q# _8 l$ D3 k1 O* [第一次,使用命令, 不明白怎么用, 都可以这样的方法, 查看帮助,现用法介绍如下:0 o$ {+ P3 H0 r) c/ d+ w# R
- usage: mkromfs.py [-h] [--dump] [--binary] [--addr ADDR] rootdir [output]
$ t0 j' P% O5 s1 o) ^, T
. N" r) j% u5 @4 z- positional arguments:' n% G; K9 ~- _5 ~6 s; r t' C
- rootdir the path to rootfs
' Q ^. ^6 ^6 l/ o( k* s" Z - output output file name) ?1 {6 @5 O! l" v
1 m" m) J$ ^1 j! ?/ K9 ]* }8 J- optional arguments:4 g; I) T) d, k( ?4 M
- -h, --help show this help message and exit
3 X( ?/ ]3 L& f, o+ @ - --dump dump the fs hierarchy; ]: k; J2 Z7 }0 J/ S; [
- --binary output binary file' Z0 H* }$ m. P2 r6 j
- --addr ADDR set the base address of the binary file, default to 0.
复制代码
% K5 j& z9 ]' p+ N& w: h0 |
( q* ?) A$ K4 @6 V9 B7 o/ G5 C4 L9 C7 u6 \7 N7 l. o( B4 i1 e2 p: Q
大概明白用法了
3 K: [$ s t y( W/ s( e
# p, T4 q* w+ W5 w然后新建的一个目录 ! ^4 H9 w" w! ~6 N6 b6 M6 r5 M/ J- U
( U) W( Y8 X3 a3 {$ c6 i, f2 T* L3 R8 B" a* A" k! B4 C e
5 q, e9 Q0 h& |+ A2 h在wav目录下, 放入要转的wav格式的音频文件。6 U2 V; {. M |) y
* q1 h6 ?0 B; ?8 d x
再说说wav处理吧, 根据原厂(中科蓝讯)技术支持的说法, 采样率要求48KHz, 编码格式 16bits PCM
+ V+ j- N4 b. O& Q/ h4 h
$ S* U2 M }0 Y- P" v' @
/ @6 ]0 E) ^5 d! h9 P, f! N% w F把采样率不是48KHz,转成采样率48KHz# k' P* J2 G( ]' H5 q- A1 O0 j) b7 `
- g/ y! F/ ]. B; m8 _0 g1 H7 r! j6 P% d) o Z: \1 L
然后,导出wav文件,选择编码格式 16bits PCM
& w& y; H. f+ d- Q% Z& ^- a6 W) I) B' P0 `$ w. b W
4 U4 t+ a& x1 m' k. `; x
K! h. h; Z- p- V/ E Z3 `
生成romfs.c, 输入命令:& W( C: C' U, F/ Y
- python mkromfs.py wav romfs.c
复制代码
( f1 @* q5 x% ~0 X4 ~1 a# h把之前rt-thread工程里romfs.c替换掉, 重新编译。0 G' {8 @$ Q. `( P9 R
' R4 a1 g- a# t% f6 P# p Z烧录开发板, 能播放了, 但声音变了。. z- }6 j& j- D
|2 {- b# ]: k( I遗留疑难问题: e. W; u' u2 S4 a+ U+ ?4 A, }
声音为什么会变了呢? 采样率话, 已经转换了.# V- n" ]0 Y( Q* c9 n
3 _6 l1 y m5 O/ Z
" x) c( X4 Z( o7 x) ~% E$ n# o( {* ~: w
! j/ I# d2 g. w0 L t- e
1 _; u! X: S, A |
|